Большинство значений субконто при формировании проводок заполняются значениями элементов справочников (контрагентов, материалов и т. д.) Обычно значения элементов справочников выбираются при вводе документа, однако в некоторых случаях возникает необходимость использовать в алгоритмах формирования проводок конкретные элементы справочников, то есть элементы, имеющие определенный код.
В качестве примера рассмотрим алгоритм формирования проводок документом "Списание материалов", создание которого приводится в книге "Введение в конфигурирование 1С Бухгалтерии 7.7"
В этом документе, оформляющем отпуск материалов для вспомогательного производства, формируются проводки по счету 23, на котором ведется аналитический учет в разрезе затрат вспомогательного производства Список затрат вспомогательного производства представляет собой справочник "Затраты"
Приведем фрагмент алгоритма проведения:
Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция.Дебет.Затраты=Затраты; Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество;
В выделенной шрифтом строке алгоритма субконто дебета формируемой проводки заполняется значением реквизита "Затраты" документа "Списание материалов"
Однако может возникнуть ситуация, когда в алгоритме потребуется вместо значения реквизита документа использовать значение заданного элемента справочника. Например, пусть вместо реквизита "Затраты" документа мы всегда будем использовать элемент справочника "Затраты" с кодом "2" То есть в справочнике "Затраты" мы должны найти элемент с кодом "2", получить его значение и присвоить это значение субконто дебета формируемой проводки.
При решении поставленной задачи мы рассмотрим отдельные приемы работы со справочниками, которые используются в алгоритмах документов, а также отчетов и обработок
Для выполнения действий со справочником нам потребуется специальная переменная, мы создадим ее с помощью функции "СоздатьОбъект"
Эта строка должна располагаться выше строк формирования проводок:
Спр=СоздатьОбъект("Справочник.Затраты"); Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция.Дебет.Затраты=Затраты; Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество; Операция.Сумма=Сумма;
Создав объект, имеющий тип обрабатываемого справочника, мы можем приступить к поиску требуемого элемента справочника
Для позиционирования в справочнике по заданному коду предназначен метод "НайтиПоКоду" Методу "НайтиПоКоду" достаточно указать единственный параметр - код элемента справочника Тогда, чтобы получить элемент справочника "Затраты", имеющий код "2", нужно выполнить следующие действия:
Спр=СоздатьОбъект("Справочник.Затраты"); Спр.НайтиПоКоду("2"); Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция.Дебет.Затраты=Затраты; Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество; Операция.Сумма=Сумма;
Метод "НайтиПоКоду" осуществляет только поиск объекта с указанным кодом. Для получения значения найденного элемента справочника после метода "НайтиПоКоду" обязательно нужно вызвать метод "ТекущийЭлемент".
Полученное значение справочника мы присваиваем субконто дебета проводки
Спр=СоздатьОбъект("Справочник.Затраты"); Спр.НайтиПоКоду("2"); Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция. Дебет.Затраты=Спр.ТекуицшЭлеиент(); Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество; Операция.Сумма=Сумма;
Итак, мы показали, как значению субконто проводки присвоить значение элемента справочника с заданным кодом.
Однако хотелось бы также обратить ваше внимание на то, что не всегда в обрабатываемом справочнике может оказаться элемент с указанным кодом, в этом случае при формировании значения субконто проводки может возникнуть ошибка. Покажем, как эту ситуацию следует корректно обработать.
Метод "НайтиПоКоду" в случае успешного поиска возвращает значение "1", а в случае неудачного поиска - "0". После вызова этого метода мы проверим результат поиска, и будем формировать проводки, только если элемент найден. Если же элемент с указанным кодом отсутствует, будем выводить на экран сообщение о том, что элемент не найден:
Спр=СоздатьОбъект("Справочник.Затраты"); Если Спр.НайтиПоКоду("2")=1 Тогда Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция.Дебет.Затраты=Спр.ТекущийЭлемент(); Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество; Операция.Сумма=Сумма; Иначе Сообщить("Искомый элемент не найден!"); КонецЕсли;
Начать дискуссию