Как программно создать документ "Требование-накладная" и заполнить счета учета?

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

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

Разберем по шагам два подхода: прямое присвоение значений (которое часто используют новички) и использование типовых механизмов конфигурации (рекомендуемый "best practice").

Способ 1. Прямое (жесткое) заполнение реквизитов документа

Посмотрим на пример, в котором документ создается и заполняется полностью вручную. В данном случае мы напрямую указываем счета бухгалтерского и налогового учета, а также ищем статьи затрат по наименованию.


ДокументТребование = Документы.ТребованиеНакладная.СоздатьДокумент();
ДокументТребование.Дата = ТекущаяДата();
ДокументТребование.Организация = Организация;
ДокументТребование.Подразделение = Подразделение;
ДокументТребование.Склад = Склад;
ДокументТребование.ОтражатьВБухгалтерскомУчете = Истина;
ДокументТребование.ОтражатьВНалоговомУчете = Истина;

Для Каждого Строка Из РезультатТовары Цикл
    НоваяСтрока = ДокументТребование.Материалы.Добавить();
    НоваяСтрока.Номенклатура = Строка.Номенклатура;
    НоваяСтрока.Количество = Строка.Количество;
    
    // Прямое указание счетов (не рекомендуется!)
    НоваяСтрока.Счет = ПланыСчетов.Хозрасчетный.Товары; 
    НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеОблагаемаяЕНВД;
    
    // Поиск по наименованию - ненадежный метод
    НоваяСтрока.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Счет 29 Столовая");
    НоваяСтрока.НоменклатурнаяГруппа = Строка.НоменклатурнаяГруппа;
КонецЦикла;

ДокументТребование.Записать(РежимЗаписиДокумента.Проведение);

Проанализируем ситуацию: почему этот код, несмотря на его работоспособность в старых базах, является плохим решением? Жесткая привязка к счетам учета приведет к тому, что при изменении учетной политики или плана счетов ваша обработка перестанет работать правильно. Кроме того, поиск по наименованию (например, НайтиПоНаименованию) крайне опасен: если пользователь случайно изменит название статьи затрат, код перестанет находить нужный элемент.

Способ 2. Использование типовых механизмов (Рекомендуемый подход)

Выясним причину, по которой разработчики типовых конфигураций (на базе БСП) используют регистры сведений. Счета учета должны подтягиваться из регистра СчетаУчетаНоменклатуры, чтобы зависеть от пользовательских настроек, а не от кода. Разберем, как вызвать типовую процедуру заполнения.

Для автозаполнения счетов в документе (после добавления строк с номенклатурой) следует вызывать экспортные процедуры общих модулей. Посмотрим на пример вызова:


// Создаем документ и заполняем шапку
ДокументОбъект = Документы.ТребованиеНакладная.СоздатьДокумент();
// ... заполнение реквизитов шапки и табличной части номенклатурой ...

// Вызов типового механизма заполнения счетов
СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаВТабличнойЧасти(ДокументОбъект, "Материалы", Истина);

Эта процедура сама проверит настройки для каждой номенклатурной позиции и проставит нужные бухгалтерские счета в строках.

Особенности работы в современных конфигурациях (1С:Бухгалтерия 3.0, ERP, КА 2)

Современные версии программ 1С претерпели значительные изменения. Рассмотрим подробнее, что нужно учитывать при написании кода сегодня:

  1. Изменение имени документа: Начиная с релиза Бухгалтерии 3.0.90, документ переименован в Расход материалов (Требования-накладные). У него появился реквизит ВидОперации (например, ИспользованиеМатериалов), который обязательно нужно заполнять перед записью.
  2. Расположение счетов затрат: Теперь счета затрат и аналитику можно указывать как в шапке документа, так и в табличной части. Для этого используется реквизит-флаг СчетаЗатратВТабличнойЧасти. Если он установлен в Ложь, заполнять аналитику в строках не нужно.
  3. Отказ от реквизитов налогового учета: Реквизиты СчетНУ и СчетЗатратНУ удалены из табличных частей. Налоговый учет ведется на едином плане счетов вместе с бухгалтерским.
  4. Работа с Субконто: Обратите внимание, что жесткие реквизиты НоменклатурнаяГруппа и СтатьяЗатрат в табличных частях часто заменяются универсальными Субконто1, Субконто2 и Субконто3.

Посмотрим на пример правильного заполнения аналитики через субконто:


НоваяСтрока = ДокументОбъект.Материалы.Добавить();
НоваяСтрока.Номенклатура = НайденнаяНоменклатура;
НоваяСтрока.Количество = 10;

// Если счет затрат заполняется в табличной части
НоваяСтрока.СчетЗатрат = ПланыСчетов.Хозрасчетный.ОсновноеПроизводство; // 20.01

// Заполнение аналитики зависит от настроек самого счета 20.01
НоваяСтрока.Субконто1 = СсылкаНаНоменклатурнуюГруппу;
НоваяСтрока.Субконто2 = СсылкаНаСтатьюЗатрат;

Используйте предопределенные элементы или уникальные идентификаторы для поиска элементов справочников, обращайтесь к типовым общим модулям для установки счетов, и ваши алгоритмы будут надежными и устойчивыми к обновлениям конфигурации 1С.

← На главную