Почему не заполняются счета учета при обмене документами по правилам и как это исправить?

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

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

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

Выясним причину: почему счета не подставляются автоматически

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

Однако при программной загрузке через механизмы обмена действуют другие правила:

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

Способ 1. Настройка ПКО для Плана счетов и сопоставление свойств

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

Для корректного переноса выполним следующие действия в «Конвертации данных»:

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

Способ 2. Программное заполнение счетов в обработчике «После загрузки»

Если в базе-источнике счета не велись вовсе (например, выгрузка идет из конфигурации без бухгалтерского учета, такой как «Управление торговлей», или из базы управленческого учета) либо документы переносятся без счетов, заполнение необходимо выполнить на стороне базы-приемника.

Для этого в ПКО соответствующего документа в обработчике события «После загрузки» напишем алгоритм, вызывающий типовые функции конфигурации-приемника.

Посмотрим на пример заполнения счетов учета номенклатуры в табличной части для конфигураций на базе обычных форм (например, Бухгалтерия предприятия 2.0):


Если Объект.Товары.Количество() > 0 Тогда 
    Для Каждого СтрокаТовары Из Объект.Товары Цикл 
        Объект.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТовары, "Товары", Истина); 
    КонецЦикла; 
КонецЕсли;

Рассмотрим универсальный алгоритм прямого обращения к общим модулям конфигурации (актуально для конфигураций линейки 1С:Бухгалтерия):


Для Каждого СтрокаТаблицы Из Объект.Товары Цикл 
    СчетаУчета = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаУчетаНоменклатуры(Объект.Организация, СтрокаТаблицы.Номенклатура); 
    
    Если Не ЗначениеЗаполнено(СтрокаТаблицы.СчетУчета) Тогда 
        СтрокаТаблицы.СчетУчета = СчетаУчета.СчетУчета; 
    КонецЕсли; 
    
    Если Не ЗначениеЗаполнено(СтрокаТаблицы.СчетДоходов) Тогда 
        СтрокаТаблицы.СчетДоходов = СчетаУчета.СчетДоходов; 
    КонецЕсли; 
    
    Если Не ЗначениеЗаполнено(СтрокаТаблицы.СчетРасходов) Тогда 
        СтрокаТаблицы.СчетРасходов = СчетаУчета.СчетРасходов; 
    КонецЕсли; 
    
    Если Не ЗначениеЗаполнено(СтрокаТаблицы.СчетУчетаНДСПоРеализации) Тогда 
        СтрокаТаблицы.СчетУчетаНДСПоРеализации = СчетаУчета.СчетУчетаНДСПродажи; 
    КонецЕсли; 
    
    Если СтрокаТаблицы.СчетДоходов.ВидыСубконто.Количество() > 0 Тогда 
        СтрокаТаблицы.Субконто = Новый(СтрокаТаблицы.СчетДоходов.ВидыСубконто[0].ВидСубконто.ТипЗначения.Типы()[0]); 
        Если ТипЗнч(СтрокаТаблицы.Субконто) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда 
            СтрокаТаблицы.Субконто = СтрокаТаблицы.Номенклатура.НоменклатурнаяГруппа; 
        КонецЕсли; 
    Иначе 
        СтрокаТаблицы.Субконто = Неопределено; 
    КонецЕсли; 
КонецЦикла;

Для конфигураций на Библиотеке стандартных подсистем (БСП) в обработчике «После загрузки» можно передать специальный флаг инициализации автозаполнения:

Объект.ДополнительныеСвойства.Вставить("ЗаполнитьСчетаУчета", Истина);

Способ 3. Проверка настроек регистров счетов учета по умолчанию

Проанализируем частую ошибку: код заполнения отрабатывает без ошибок, но реквизиты остаются пустыми. Причина заключается в том, что в базе-приемнике не настроены значения по умолчанию в регистрах сведений.

Для корректной работы автоподстановки проверим заполнение двух ключевых регистров:

  1. Регистр сведений СчетаУчетаРасчетовСКонтрагентами: В регистре должна присутствовать как минимум одна запись с незаполненными полями Организация, Контрагент, Договор и ВидРасчетовПоДоговору. В ней должны быть указаны основные счета (например, 60.01 / 60.02 или 62.01 / 62.02). Данная строка является настройкой по умолчанию для всех контрагентов, по которым нет индивидуальных правил.
  2. Регистр сведений СчетаУчетаНоменклатуры: Аналогично в регистре должна быть строка с пустой организацией, номенклатурой и номенклатурной группой, где заданы базовые счета учета (например, 41.01, 90.01.1, 90.02.1, 90.03).

Альтернативный вариант: создание регламентированной базы без обмена

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

  1. Создаем полную копию рабочей информационной базы.
  2. В созданной копии с помощью обработки «Групповое изменение реквизитов» или специальной обработки помечаем на удаление все документы управленческого учета и документы организаций, которые не должны попасть в отчетность.
  3. Выполняем стандартное удаление помеченных объектов через меню «Администрирование» — «Удаление помеченных объектов».
  4. Проводим тестирование и исправление информационной базы.

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

← На главную