Как программно заполнить счета БУ и НУ в документах 1С?

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

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


Часть 1. Программное заполнение счетов учета в 1С:УПП 1.3 (Обычные формы)

В конфигурациях на обычных формах, таких как УПП 1.3 или Комплексная автоматизация 1.1, интерактивные функции часто «зашиты» в общие модули управления формами. Попытка вызвать метод СчетаУчетаВДокументах.ИнтерактивноПерезаполнитьСчетаУчета() при фоновом или программном создании документов вызовет модальный диалог или приведет к ошибке выполнения на сервере.

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

Использование метода объекта документа

У большинства документов поступления и реализации в УПП 1.3 в модуле объекта определена экспортная процедура ЗаполнитьСчетаУчетаВТабЧасти(). Она предназначена как раз для неинтерактивного заполнения аналитики. Разберем по шагам пример ее использования при создании документа «Поступление товаров и услуг»:


// Создаем новый документ программно
ДокПоступления = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ДокПоступления.Дата = ТекущаяДата();
ДокПоступления.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701020304");
ДокПоступления.Контрагент = Справочники.Контрагенты.НайтиПоКоду("00001");
ДокПоступления.ДоговорКонтрагента = ДокПоступления.Контрагент.ОсновнойДоговорКонтрагента;

// Устанавливаем флаги отражения в учете (это критически важно для заполнения счетов БУ и НУ!)
ДокПоступления.ОтражатьВБухгалтерскомУчете = Истина;
ДокПоступления.ОтражатьВНалоговомУчете = Истина;

// Заполняем табличную часть (для примера добавим одну строку)
НоваяСтрока = ДокПоступления.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00005");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 100;
НоваяСтрока.Сумма = 1000;

// Вызываем заполнение счетов БУ и НУ для табличной части "Товары"
// Параметры: ТабличнаяЧасть, ИмяТабличнойЧасти, ЗаполнятьБУ, ЗаполнятьНУ
ДокПоступления.ЗаполнитьСчетаУчетаВТабЧасти(ДокПоступления.Товары, "Товары", Истина, Истина);

// Если в документе есть услуги, заполняем их аналогично:
Если ДокПоступления.Услуги.Количество() > 0 Тогда
    ДокПоступления.ЗаполнитьСчетаУчетаВТабЧасти(ДокПоступления.Услуги, "Услуги", Истина, Истина);
КонецЕсли;

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

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

Почему не стоит переопределять типовые общие модули УПП

Некоторые разработчики пытаются решить проблему «в лоб» — путем добавления собственного параметра (например, ИспользуетсяОбработка) в типовую функцию общего модуля СчетаУчетаВДокументах.ИнтерактивноПерезаполнитьСчетаУчета(). Мы настоятельно не рекомендуем использовать данный подход. Изменение сигнатур типовых экспортных методов усложняет последующее обновление конфигурации 1С и может привести к непредсказуемым ошибкам при обновлении на новые релизы.

Вместо этого всегда используйте локальные методы объектов документов или создавайте собственные неинтерактивные общие модули-обертки.


Часть 2. Программное заполнение счетов учета в 1С:Бухгалтерия предприятия 3.0

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

Сценарий А. Заполнение перед записью через ДополнительныеСвойства

Наиболее изящный и лаконичный способ инициализации счетов в БП 3.0 заключается в передаче специального флага в свойствах объекта. Платформа 1С при записи документа перехватит этот флаг и заполнит все счета учета автоматически на основании настроек регистра сведений «Счета учета номенклатуры».

Давайте проанализируем пример кода:


// Получаем или создаем объект документа
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();

// Передаем команду на автозаполнение счетов перед записью
ДокументОбъект.ДополнительныеСвойства.Вставить("ЗаполнитьСчетаУчетаПередЗаписью", Истина);

// Вызываем типовой метод заполнения и записываем документ
СчетаУчетаВДокументах.ЗаполнитьПередЗаписью(ДокументОбъект, РежимЗаписиДокумента.Запись);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

Этот метод хорош тем, что он автоматически анализирует всю структуру документа и заполняет счета как в шапке, так и во всех имеющихся табличных частях.

Сценарий Б. Прямое заполнение табличной части

Если вам требуется обновить счета только в определенной табличной части (например, при программном изменении состава номенклатуры внешней обработкой), используйте метод общего модуля:


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

Важное предупреждение: Обратите внимание, что в самых свежих версиях конфигурации 1С:Бухгалтерия метод ЗаполнитьСчетаУчетаВТабличнойЧасти может быть объявлен устаревшим. В таком случае рекомендуется использовать более универсальный метод:


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

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


Часть 3. Почему счета остаются пустыми? Разбор скрытых ошибок аналитики

Часто программисты сталкиваются с ситуацией: код вызова заполнения счетов отрабатывает без ошибок, но колонки счетов учета в табличной части (БУ/НУ) все равно остаются незаполненными. Выясним основные причины этой проблемы. Если вы выполняете доработку алгоритмов проведения или перенос данных, выявление возможных расхождений в учете автоматизирует сравнение бухгалтерских и налоговых проводок между информационными базами.

  1. Не заполнено «Подразделение организации». При заполнении счетов затрат (например, для услуг или материалов) алгоритмы 1С обращаются к регистру сведений настроек счетов. Если в шапке документа или в строке табличной части не заполнено подразделение, система не сможет определить правила отнесения затрат и оставит счета пустыми.
  2. Отсутствуют записи в регистрах сведений правил счетов учета. Автозаполнение счетов опирается на данные регистров сведений:
    • СчетаУчетаНоменклатуры — для товаров, материалов и услуг.
    • СчетаУчетаРасчетовСКонтрагентами — для расчетов с покупателями и поставщиками.
    Если для конкретного вида номенклатуры, склада или договора контрагента не заданы счета по умолчанию, система не сможет их подставить программно. Убедитесь, что в базе настроены общие правила «для всех» номенклатурных групп и организаций.
  3. Неверный порядок заполнения реквизитов в коде. Алгоритм заполнения счетов всегда должен вызываться ПОСЛЕ того, как заполнены ключевые аналитики документа. Сначала заполняйте Организация, Склад, ДоговорКонтрагента, Подразделение и Номенклатура, и только в самом конце вызывайте методы заполнения счетов учета.

Различие подходов в 1С:ERP и 1С:Комплексная автоматизация 2.5

Если перед вами встанет задача заполнения счетов учета в более современных ERP-решениях, важно понимать принципиальное архитектурное отличие. В документах систем 1С:ERP и 1С:КА счета БУ и НУ физически отсутствуют в реквизитах документов. Вы не найдете там колонок «Счет учета». При переходе на новую систему управления предприятием настроить эти механизмы и сохранить историю учета можно с помощью переноса данных из 1С:УПП 1.3 в 1С:ERP 2, автоматически переносящего документы и начальные остатки.

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

← На главную