При работе с классической связкой конфигураций Управление торговлей 10.3 и Бухгалтерия предприятия 3.0 специалисты часто сталкиваются с ситуацией, когда после очередного обновления бухгалтерской программы привычный обмен данными начинает работать некорректно. Одной из самых неприятных проблем является отсутствие счетов учета в загруженных документах (Реализациях, Поступлениях, Отчетах о розничных продажах). Документы переносятся, но остаются «пустыми» в части бухгалтерских аналитик, что делает их проведение невозможным без ручной правки.
В данной статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы 1С и выясним, как восстановить автоматическое заполнение счетов учета, используя типовые и программные средства.
Выясним причину такого поведения системы. В старых редакциях БП и при использовании определенных версий правил обмена логика заполнения счетов могла быть зашита непосредственно в код правил (в конфигурации Конвертация данных 2.0). Однако фирма «1С» постепенно переносит всю логику заполнения на сторону конфигурации-приемника (БП 3.0). Рассмотрим основные факторы:
ОбменДанными.Загрузка = Истина. В этом режиме в БП 3.0 отключаются многие стандартные обработчики событий (например, ПередЗаписью или ОбработкаЗаполнения), которые в обычном режиме отвечают за подстановку счетов учета из регистров.Проанализируем наиболее частое решение — обновление самих правил. Многие пользователи ошибочно ищут новые правила в обновлении Бухгалтерии, но для пары УТ 10.3 — БП 3.0 актуальные правила всегда поставляются вместе с Управлением торговлей. Рассмотрим пошагово, где их найти:
AppData\Roaming\1C\1cv8\tmplts\...).\Обмены данными\Обмен с конфигурацией Бухгалтерия предприятия, ред. 3.0\.Trade_Accounting3_Rules.xml).Эти правила необходимо загрузить в настройку синхронизации данных как в УТ, так и (если требуется) в БП. Важно помнить, что при переходе на новые ставки НДС (как это было в релизе 3.0.65) старые правила просто не «знают» о существовании новых перечислений, что ломает всю цепочку записи документа.
Посмотрим на ситуацию со стороны Бухгалтерии предприятия. Счета в документах подставляются на основе регистра сведений СчетаУчетаНоменклатуры. Проанализируем возможные проблемы в нем:
Во-первых, проверьте, не появились ли дубли номенклатуры или видов номенклатуры после обмена. Если из УТ пришел «Вид номенклатуры», которого раньше не было, и для него не прописаны счета в БП, автоподстановка не сработает.
Во-вторых, убедитесь, что в БП настроены счета учета «по умолчанию» (без указания конкретной номенклатуры или склада). Часто после обновления слетают настройки именно для пустых складов или общих групп.
Если обновление типовых правил не помогает, разберем программный способ решения проблемы. Нам нужно заставить БП 3.0 заполнять счета учета, несмотря на режим загрузки. Для этого в конфигурации Конвертация данных 2.0 в ПКО (Правила конвертации объектов) для нужных документов в обработчик «ПослеЗагрузки» можно добавить принудительный вызов процедуры заполнения счетов.
Рассмотрим пример кода, который можно внедрить в обработчик:
// В обработчике "ПослеЗагрузки" ПКО документа
// Проверим, что это не удаление объекта
Если Не ИнформацияОбОбъекте.ДанныеУдалены Тогда
// Вызываем стандартный механизм БП 3.0 для заполнения счетов
// Это заставит систему обратиться к регистру СчетаУчетаНоменклатуры
Объект.ЗаполнитьСчетаУчета();
// Если требуется дозаполнение других реквизитов, можно вызвать:
// Объект.ПриЗаписи(Ложь);
// Важно: если мы меняем объект, его нужно записать,
// но обычно при обмене запись происходит автоматически после этого обработчика
КонецЕсли;
Использование метода ЗаполнитьСчетаУчета() является самым надежным способом, так как он использует внутренние механизмы конфигурации-приемника, учитывая все актуальные изменения законодательства и структуры счетов, внесенные обновлением.
Выясним, что делать, если документы уже загружены без счетов. Чтобы не перепроводить их вручную, воспользуемся стандартной обработкой «Групповое изменение реквизитов» в БП 3.0:
ЗаполнитьСчетаУчета() для выбранного массива документов.Пример кода для массового исправления:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(Объект.ДатаНачала));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(Объект.ДатаОкончания));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
// Вызываем типовой метод БП
ДокОбъект.ЗаполнитьСчетаУчета();
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Проанализировав ситуацию, мы видим, что проблема отсутствия счетов учета после обновления БП 3.0 — это следствие рассинхронизации логики конфигурации и правил обмена. Критически важно при обновлении Бухгалтерии проверять наличие свежего дистрибутива Управления торговлей, так как правила «живут» именно там. Если же вы используете сильно кастомизированные правила, не забывайте вручную прописывать вызов метода ЗаполнитьСчетаУчета() в обработчиках загрузки, чтобы нивелировать влияние флага ОбменДанными.Загрузка.