Почему документ Приобретение товаров и услуг не переносится из УТ 11 в Бухгалтерию 3.0 из-за длины номера?

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

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

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

Если в УТ 11 документ отмечен как выгруженный, но в БП 3.0 в списке Поступление (акты, накладные) его нет, первым делом проанализируем состояние загрузки в базе-приемнике. Проблема часто кроется не в самом процессе передачи файла, а в этапе валидации данных перед записью объекта.

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

  1. В «Бухгалтерии предприятия» перейдем в раздел Администрирование — Синхронизация данных.
  2. Откроем Состав отправляемых данных или Журнал регистрации, отфильтровав события по источнику «Обмен данными».
  3. Проанализируем события с типом «Получение».

Типичная ошибка в журнале регистрации выглядит так: Событие: Получение. Обработчик: ПриКонвертацииДанныхXDTO. Ошибка выполнения обработчика. Поле Номер полученного объекта имеет некорректное значение 01/202002190379. Загрузка не возможна.

Эта ошибка означает, что программный механизм XDTO (XML Data Transfer Objects) отклонил объект еще до попытки его записи в базу, так как структура данных не соответствует схеме, принятой в конфигурации БП 3.0.

Выясняем причину: ограничение длины номера

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

В «Управлении торговлей» контроль номеров более гибкий. Длина номера может быть установлена в 12, 15 или более символов. Кроме того, пользователи могут вручную вводить номера со спецсимволами (например, слеш /, дефис - или префиксы подразделений). Если номер документа в УТ имеет вид 01/202002190379 (13 символов), то при попытке загрузки в БП система видит, что строка не помещается в стандартное поле из 11 символов, и блокирует создание документа.

Способ 1. Программная обрезка номера при выгрузке (через расширение)

Самый правильный и надежный способ — это модификация правил отправки данных в УТ 11. Мы не будем менять метаданные и снимать конфигурацию с поддержки. Вместо этого воспользуемся механизмом расширений и перехватим процедуру в модуле менеджера обмена.

Проанализируем код, который необходимо внедрить. Нам нужен общий модуль МенеджерОбменаЧерезУниверсальныйФормат. В нем найдем процедуру, отвечающую за отправку данных документа ПриобретениеТоваровУслуг.

Пример кода для модификации (используем префикс Пр_ для своего расширения):


&После("ПКО_Документ_ПриобретениеТоваровУслуг_Отправка_ПриОтправкеДанных")
Процедура Пр_ПКО_Документ_ПриобретениеТоваровУслуг_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    
    // Если это вложенная выгрузка, пропускаем
    Если СтекВыгрузки.Количество() > 1 Тогда
        Возврат;
    КонецЕсли;

    // Обрезаем номер до 11 символов справа, чтобы он влез в БП
    Если СтрДлина(ДанныеXDTO.КлючевыеСвойства.Номер) > 11 Тогда
        ДанныеXDTO.КлючевыеСвойства.Номер = Прав(ДанныеXDTO.КлючевыеСвойства.Номер, 11);
    КонецЕсли;

КонецПроцедуры

Разберем, что делает этот код: перед тем как данные будут упакованы в XML-пакет для БП, мы проверяем длину сформированного номера в объекте ДанныеXDTO. Если она превышает 11 символов, функция Прав() отсекает лишние знаки слева, оставляя только значимую правую часть номера. Это позволяет сохранить уникальность в большинстве случаев.

Способ 2. Изменение префиксов информационной базы

Часто номер становится слишком длинным из-за нагромождения префиксов: префикс организации (2 знака) + префикс ИБ (2 знака) + дефис + сам номер.

Выясним, как это можно исправить без программирования:

  1. Зайдем в настройки синхронизации в УТ 11.
  2. Проверим Префикс этой информационной базы. Если он состоит из двух символов (например, УТ), попробуем сократить его до одного или вовсе убрать.
  3. Это изменение затронет только новые документы. Для старых документов, которые уже «застряли» в обмене, этот способ не сработает автоматически.

Способ 3. Использование группового изменения реквизитов

Если проблемных документов немного, рассмотрим вариант ручного исправления в УТ 11. Мы можем воспользоваться стандартной обработкой «Групповое изменение реквизитов».

Пошаговый алгоритм:

  1. В УТ 11 выделим в списке нужные документы Приобретение товаров и услуг.
  2. Нажмем правую кнопку мыши — Изменить выделенные.
  3. Найдем поле Номер.
  4. Введем новый номер, соответствующий стандарту 11 символов.
  5. После изменения номеров документы необходимо заново зарегистрировать к обмену через Состав отправляемых данных.

Важный нюанс: при ручном изменении номеров в УТ следите за тем, чтобы поле Номер входящего документа (куда записывается реальный номер накладной от поставщика) оставалось нетронутым. Именно оно является ключевым для бухгалтера, а внутренний номер 1С служит лишь для технического учета и связи объектов.

Почему не стоит увеличивать длину номера в Бухгалтерии?

Рассмотрим вариант увеличения длины реквизита Номер в конфигураторе БП 3.0. На первый взгляд, это кажется простым решением, но оно несет в себе серьезные риски:

Резюме

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

← На главную