Большинство значений субконто при формировании проводок заполняютсязначениями элементов справочников (контрагентов, материалов и т. д.)Обычно значения элементов справочников выбираются при вводе документа,однако в некоторых случаях возникает необходимость использовать валгоритмах формирования проводок конкретные элементы справочников, тоесть элементы, имеющие определенный код.
В качестве примера рассмотрим алгоритм формирования проводокдокументом "Списание материалов", создание которого приводится в книге"Введение в конфигурирование 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");Операция.Кредит.Материалы=Материалы;Операция.Кредит.МестаХранения=МестаХранения;Операция.Количество=Количество;Операция.Сумма=Сумма;ИначеСообщить("Искомый элемент не найден!");КонецЕсли;