Получение элемента справочника по коду

Большинство значений субконто при формировании проводок заполняются значениями элементов справочников (контрагентов, материалов и т. д.) Обычно значения элементов справочников выбираются при вводе документа, однако в некоторых случаях возникает необходимость использовать в алгоритмах формирования проводок конкретные элементы справочников, то есть элементы, имеющие определенный код.

Большинство значений субконто при формировании проводок заполняются значениями элементов справочников (контрагентов, материалов и т. д.) Обычно значения элементов справочников выбираются при вводе документа, однако в некоторых случаях возникает необходимость использовать в алгоритмах формирования проводок конкретные элементы справочников, то есть элементы, имеющие определенный код.

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

Начать дискуссию