Как программно сформировать налоговые проводки для документа «Операция» в 1С?

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

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

Способ 1. Заполнение через программный вызов формы документа

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

Рассмотрим пример кода, который выполняет эту задачу:


Процедура ЗаполнитьНалоговыйНаборЗаписей(ссДок)
    П = Новый Структура("Ключ", ссДок);
    фрмДок = ПолучитьФорму("Документ.ОперацияБух.ФормаОбъекта", П);
    фрмДок.НалоговыйНаборЗаписей.Очистить();
    фрмДок.БУЗаполнитьНУНаСервере();
    фрмДок.Записать();
КонецПроцедуры

Разберем по шагам, как работает приведенный алгоритм:

  1. Создаем структуру параметров с ключом Ключ, передавая ссылку на документ ссДок.
  2. Методом ПолучитьФорму инициализируем форму объекта Документ.ОперацияБух.ФормаОбъекта.
  3. Очищаем элемент формы НалоговыйНаборЗаписей.
  4. Вызываем экспортную процедуру формы БУЗаполнитьНУНаСервере, которая сопоставляет бухгалтерские счета с налоговыми и генерирует проводки.
  5. Вызываем метод Записать для сохранения изменений в документе и движениях регистров.

Важные ограничения использования метода формы

Посмотрим на особенности применения первого способа. Хотя этот вариант прост в реализации, он имеет существенные ограничения:

  1. Невозможность работы в фоновом контексте: Вызов метода ПолучитьФорму недоступен в регламентных и фоновых заданиях, а также в Web- и HTTP-сервисах, так как там отсутствует клиентский интерфейс.
  2. Нагрузка на производительность: Инициализация интерфейсных данных формы при массовой (потоковой) обработке документов потребляет значительный объем ресурсов сервера приложений. Это снижает скорость выполнения операции на больших массивах данных.

Способ 2. Чисто программное формирование движений без обращения к форме

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

Для прямого формирования налоговых проводок выполним следующие шаги:

  1. Получение правил сопоставления: В типовых решениях автозаполнение налогового учета базируется на данных регистра сведений Соответствие счетов БУ и НУ. Выполняем запрос к этому регистру для получения соответствий для каждого бухгалтерского счета из документа.
  2. Работа с движениями: Обращаемся напрямую к коллекции Движения объекта документа или создаем набор записей соответствующего регистра бухгалтерии налогового учета с отбором по регистратору.
  3. Заполнение видов учета: Для корректного формирования налоговой отчетности (например, декларации по налогу на прибыль или формы 100.00) критически важно заполнять виды учета: НУ (налоговый учет), ПР (постоянные разницы) и ВР (временные разницы).
  4. Контроль способа заполнения: При прямой записи необходимо отслеживать реквизит документа СпособЗаполнения (устанавливая, например, значение «Вручную»), чтобы исключить случайное перезаписывание данных при повторном проведении документа пользователями.

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

← На главную