Как реализовать заполнение третьего субконто «Продукция» в документе «Требование-накладная»

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При ведении детального производственного учета в «1С:Бухгалтерия 8.3» (БП 3.0) часто возникает задача списания материалов не просто на номенклатурную группу, а на конкретную единицу продукции. Стандартный документ ТребованиеНакладная (в новых версиях — «Расход материалов») по умолчанию не предусматривает заполнение третьего субконто на счете 20.01. Разберем подробно, как доработать конфигурацию, чтобы реквизит «Продукция» из табличной части документа корректно попадал в проводки.

Предварительная настройка Плана счетов и метаданных

Прежде чем приступать к программному коду, необходимо подготовить структуру данных. Проанализируем состояние Плана счетов Хозрасчетный. По умолчанию на счете 20.01 «Основное производство» открыто два субконто: «Номенклатурные группы» и «Статьи затрат».

  1. Перейдем в План счетов и добавим для счета 20.01 третье субконто с типом СправочникСсылка.Номенклатура.
  2. В дереве конфигурации найдем документ ТребованиеНакладная. В табличную часть Материалы добавим новый реквизит Продукция с типом СправочникСсылка.Номенклатура.
  3. Выведем данный реквизит на форму документа. Обратите внимание, что в типовом решении поле должно отображаться только тогда, когда включен признак СчетаУчетаЗатратВТаблице.

Шаг 1: Модификация временной таблицы материалов

В конфигурации «1С:Бухгалтерия 3.0» формирование проводок происходит через пакетные запросы в модуле менеджера. Первая проблема, с которой сталкиваются разработчики — ошибка «Поле не найдено ТаблицаМатериалы.Продукция». Это происходит потому, что данные сначала помещаются во временную таблицу, и если мы не добавим туда наше поле, оно не будет доступно для формирования движений.

Рассмотрим функцию ТекстЗапросаТаблицыДокумента в модуле менеджера документа. Нам необходимо включить наш новый реквизит в текст запроса, который формирует временную таблицу ТаблицаМатериалы:


Функция ТекстЗапросаТаблицыДокумента(НомераТаблиц, ПараметрыПроведения, Реквизиты)
    // ... существующий код формирования текста запроса ...
    ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
    | ТаблицаМатериалы.Ссылка КАК Ссылка,
    | ТаблицаМатериалы.НомерСтроки КАК НомерСтроки,
    | // ... другие поля ...
    | ТаблицаМатериалы.Себестоимость КАК Себестоимость,
    | ТаблицаМатериалы.Продукция КАК Продукция // Добавляем наше поле
    |ПОМЕСТИТЬ ТаблицаМатериалы
    |ИЗ
    | Документ.ТребованиеНакладная.Материалы КАК ТаблицаМатериалы
    |ГДЕ
    | ТаблицаМатериалы.Ссылка = &Ссылка";
    // ...
КонецФункции

Шаг 2: Настройка заполнения Субконто3 в движениях

После того как данные попали во временную таблицу, их нужно передать в структуру проводок. За это отвечает функция ТекстЗапросаСписаниеМатериалов. Проанализируем ситуацию: нам нужно подменить стандартное значение НЕОПРЕДЕЛЕНО на значение из нашей колонки Продукция.

В тексте запроса найдем блок, отвечающий за формирование КорСубконто3. Нам нужно изменить логику выбора значения в зависимости от флага СчетаУчетаЗатратВТаблице:


| ВЫБОР
|   КОГДА Реквизиты.СчетаУчетаЗатратВТаблице
|       ТОГДА ТаблицаМатериалы.Продукция
|   ИНАЧЕ Реквизиты.Субконто3
| КОНЕЦ КАК КорСубконто3,

Важный момент: Просто передать значение в субконто недостаточно. Платформе необходимо четко указать тип этого субконто, иначе значение может не записаться в регистр бухгалтерии. Для этого в том же запросе найдем поле ВидКорСубконто3 и приведем его к следующему виду:


| ВЫБОР
|   КОГДА Реквизиты.СчетаУчетаЗатратВТаблице
|       ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
|   ИНАЧЕ 3 // Стандартный индекс вида субконто из реквизитов шапки
| КОНЕЦ КАК ВидКорСубконто3,

Здесь мы явно указываем, что если счета затрат указаны в таблице, то видом третьего субконто будет являться «Номенклатура».

Шаг 3: Проверка и отладка

После внесения изменений выполним проведение документа и проверим результат. Проанализируем проводки (кнопка Дт/Кт):

Методологические риски и рекомендации

Реализуя подобную доработку, важно понимать последствия для стандартных механизмов закрытия месяца. Рассмотрим основные нюансы:

  1. Расчет себестоимости: Типовая обработка «Закрытие месяца» в БП 3.0 настроена на распределение затрат в разрезе «Подразделение» и «Номенклатурная группа». Появление третьего субконто «Номенклатура» может не учитываться при автоматическом расчете фактической себестоимости продукции, если не доработать алгоритмы закрытия счетов 20, 23 и 25.
  2. Использование расширений: Вместо прямого изменения кода конфигурации настоятельно рекомендуем использовать расширения. Вы можете перехватить тексты запросов в модуле менеджера с помощью аннотации &После или &Вместо. Это позволит беспрепятственно обновлять программу в будущем.
  3. Налоговый учет: Не забудьте проверить, как данные ложатся на счета налогового учета. Если на соответствующих счетах НУ также добавлено субконто, запрос необходимо дополнить аналогичными полями для ресурсов (НУ).
  4. Альтернатива: Часто бизнес-требование «видеть списание на продукцию» можно закрыть без программирования, используя документ Отчет производства за смену. На вкладке «Материалы» этого документа можно указать конкретную продукцию, что автоматически свяжет затраты с выпуском в рамках типовой методологии 1С.

Таким образом, мы разобрали технический путь реализации задачи. Помните, что внесение изменений в механизмы проведения — это ответственный шаг, требующий обязательного тестирования на копии базы данных.

← На главную