Как программно выгрузить документы из УТ 11 в Бухгалтерию и корректно синхронизировать виды запасов

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

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

Синхронизация табличных частей: Товары и Виды запасов

Рассмотрим внутреннюю архитектуру документа РеализацияТоваровУслуг в УТ 11. Многие начинающие разработчики сталкиваются с тем, что при выгрузке данных в Бухгалтерию некорректно заполняются счета учета или данные о ГТД. Это происходит потому, что основная аналитика для бухгалтерского учета в УТ 11 хранится не в табличной части Товары, а в технической таблице ВидыЗапасов.

Проанализируем связь между этими таблицами. Она осуществляется через числовое поле КлючСвязи. Одна строка в ТЧ Товары может соответствовать нескольким строкам в ТЧ ВидыЗапасов. Это случается, если товар списывается с разных партий, имеет разные налоговые режимы или часть товара является собственной, а часть — принятой на комиссию.

Чтобы обеспечить корректность данных перед выгрузкой, нам необходимо убедиться, что виды запасов актуальны. Если вы программно меняете документ, обязательно вызовите процедуру пересчета видов запасов. Разберем пример кода, который выполняет это действие:


// Массив ссылок на документы, которые нужно актуализировать
МассивДокументов = Новый Массив;
МассивДокументов.Добавить(СсылкаНаДокумент);

// Вызов серверного метода для формирования видов запасов
ЗапасыСервер.СформироватьВидыЗапасовУказанныхДокументов(МассивДокументов);

Важно понимать, что при использовании универсального формата обмена (EnterpriseData) система при формировании XML-пакета обращается именно к результатам распределения запасов. Если эта таблица пуста или содержит неактуальные данные, в Бухгалтерии документ может «не дозаполниться».

Программная регистрация изменений для обмена

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

Для этого мы должны зарегистрировать изменение этого объекта на узле обмена. Выясним, какой именно узел нам нужен. Обычно это план обмена СинхронизацияДанныхЧерезУниверсальныйФормат. Рассмотрим, как найти нужный узел и отправить туда документ:


// 1. Находим узел обмена (настройку синхронизации с Бухгалтерией)
ПланОбменаИмя = "СинхронизацияДанныхЧерезУниверсальныйФормат";
УзелОбмена = ПланыОбмена[ПланОбменаИмя].НайтиПоНаименованию("Синхронизация с Бухгалтерией");

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

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

Принудительный запуск синхронизации из кода

Если нам недостаточно просто пометить документ, а нужно инициировать передачу данных немедленно, мы можем запустить процедуру обмена программно. Разберем по шагам, как это реализовать, используя методы БСП:

  1. Зарегистрируем объект (как показано выше).
  2. Вызовем метод выполнения обмена для конкретного узла.

// Используем штатные средства для выполнения обмена
ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыВыполненияОбмена(УзелОбмена);
ПараметрыОбмена.ВариантВыполненияОбмена = Перечисления.ВариантыВыполненияОбмена.ВыгрузкаИЗагрузка;

ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзла(УзелОбмена, ПараметрыОбмена);

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

Использование обработки «Выгрузка загрузка EnterpriseData»

Посмотрим на ситуацию с другой стороны. Иногда требуется выгрузить данные в файл для ручного переноса. Для этого в современных конфигурациях доступна обработка ВыгрузкаЗагрузкаEnterpriseData. Она особенно полезна при отладке, когда нужно посмотреть, какой именно JSON или XML формирует система.

Основные моменты при работе с этой обработкой:

Заключение и рекомендации

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

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

← На главную