При ведении детального производственного учета в «1С:Бухгалтерия 8.3» (БП 3.0) часто возникает задача списания материалов не просто на номенклатурную группу, а на конкретную единицу продукции. Стандартный документ ТребованиеНакладная (в новых версиях — «Расход материалов») по умолчанию не предусматривает заполнение третьего субконто на счете 20.01. Разберем подробно, как доработать конфигурацию, чтобы реквизит «Продукция» из табличной части документа корректно попадал в проводки.
Прежде чем приступать к программному коду, необходимо подготовить структуру данных. Проанализируем состояние Плана счетов Хозрасчетный. По умолчанию на счете 20.01 «Основное производство» открыто два субконто: «Номенклатурные группы» и «Статьи затрат».
СправочникСсылка.Номенклатура.ТребованиеНакладная. В табличную часть Материалы добавим новый реквизит Продукция с типом СправочникСсылка.Номенклатура.СчетаУчетаЗатратВТаблице.В конфигурации «1С:Бухгалтерия 3.0» формирование проводок происходит через пакетные запросы в модуле менеджера. Первая проблема, с которой сталкиваются разработчики — ошибка «Поле не найдено ТаблицаМатериалы.Продукция». Это происходит потому, что данные сначала помещаются во временную таблицу, и если мы не добавим туда наше поле, оно не будет доступно для формирования движений.
Рассмотрим функцию ТекстЗапросаТаблицыДокумента в модуле менеджера документа. Нам необходимо включить наш новый реквизит в текст запроса, который формирует временную таблицу ТаблицаМатериалы:
Функция ТекстЗапросаТаблицыДокумента(НомераТаблиц, ПараметрыПроведения, Реквизиты)
// ... существующий код формирования текста запроса ...
ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
| ТаблицаМатериалы.Ссылка КАК Ссылка,
| ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
| // ... другие поля ...
| ТаблицаМатериалы.Себестоимость КАК Себестоимость,
| ТаблицаМатериалы.Продукция КАК Продукция // Добавляем наше поле
|ПОМЕСТИТЬ ТаблицаМатериалы
|ИЗ
| Документ.ТребованиеНакладная.Материалы КАК ТаблицаМатериалы
|ГДЕ
| ТаблицаМатериалы.Ссылка = &Ссылка";
// ...
КонецФункции
После того как данные попали во временную таблицу, их нужно передать в структуру проводок. За это отвечает функция ТекстЗапросаСписаниеМатериалов. Проанализируем ситуацию: нам нужно подменить стандартное значение НЕОПРЕДЕЛЕНО на значение из нашей колонки Продукция.
В тексте запроса найдем блок, отвечающий за формирование КорСубконто3. Нам нужно изменить логику выбора значения в зависимости от флага СчетаУчетаЗатратВТаблице:
| ВЫБОР
| КОГДА Реквизиты.СчетаУчетаЗатратВТаблице
| ТОГДА ТаблицаМатериалы.Продукция
| ИНАЧЕ Реквизиты.Субконто3
| КОНЕЦ КАК КорСубконто3,
Важный момент: Просто передать значение в субконто недостаточно. Платформе необходимо четко указать тип этого субконто, иначе значение может не записаться в регистр бухгалтерии. Для этого в том же запросе найдем поле ВидКорСубконто3 и приведем его к следующему виду:
| ВЫБОР
| КОГДА Реквизиты.СчетаУчетаЗатратВТаблице
| ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
| ИНАЧЕ 3 // Стандартный индекс вида субконто из реквизитов шапки
| КОНЕЦ КАК ВидКорСубконто3,
Здесь мы явно указываем, что если счета затрат указаны в таблице, то видом третьего субконто будет являться «Номенклатура».
После внесения изменений выполним проведение документа и проверим результат. Проанализируем проводки (кнопка Дт/Кт):
ПодготовитьПараметрыПроведения и убедиться, что структура ПараметрыПроведения содержит данные из нашей новой колонки.Реализуя подобную доработку, важно понимать последствия для стандартных механизмов закрытия месяца. Рассмотрим основные нюансы:
&После или &Вместо. Это позволит беспрепятственно обновлять программу в будущем.(НУ).Отчет производства за смену. На вкладке «Материалы» этого документа можно указать конкретную продукцию, что автоматически свяжет затраты с выпуском в рамках типовой методологии 1С.Таким образом, мы разобрали технический путь реализации задачи. Помните, что внесение изменений в механизмы проведения — это ответственный шаг, требующий обязательного тестирования на копии базы данных.