Почему «слетают» движения у проведенных документов перемещения в 1С:УТ 11 при синхронизации и как это исправить?

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

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

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

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

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

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

Шаг 1. Диагностика проблемы в пользовательском режиме

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

Проанализируем ситуацию по следующему алгоритму:

  1. Перейдем в раздел Администрирование — Синхронизация данных и откроем гиперссылку Предупреждения при синхронизации данных. Внимательно изучим вкладку с незавершенными операциями и коллизиями. Если документы перемещения не смогли провестись при обмене, там будут зафиксированы детальные ошибки (например, ошибки блокировок или нехватки остатков).
  2. Проверим статус регламентных заданий. Перейдем в Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания. Нам необходимо убедиться, что задание ВыполнениеОтложенныхДвиженийПоРасчетамСПартнерами и смежные складские задания выполняются регулярно и не завершаются аварийно.
  3. Найдем один из «пропавших» документов. Откроем его движения (кнопка «Движения документа» на панели навигации формы). Если отчет по движениям пуст, значит, документ не сформировал записи в регистрах ТоварыНаСкладах или ВыручкаИСебестоимостьПродаж.

Шаг 2. Поиск поврежденных документов с помощью запроса

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


ВЫБРАТЬ
	Перемещение.Ссылка КАК ДокументСсылка,
	Перемещение.Дата КАК Дата,
	Перемещение.Номер КАК Номер
ИЗ
	Документ.ПеремещениеТоваров КАК Перемещение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
	ПО Перемещение.Ссылка = ТоварыНаСкладах.Регистратор
ГДЕ
	Перемещение.Проведен = ИСТИНА
	И Перемещение.ПометкаУдаления = ЛОЖЬ
	И ТоварыНаСкладах.Регистратор ЕСТЬ NULL

Этот запрос соединяет таблицу документов перемещения с таблицей записей регистра накопления ТоварыНаСкладах. Если документ отмечен как проведенный, но записей в регистре нет (значение NULL), система выведет его в список. Такую выборку можно сразу передать в цикле на программное перепроведение.

Шаг 3. Автоматическое исправление при загрузке (настройка правил обмена)

Если обмен данными между базами настроен через «Конвертацию данных 2.1» (или используются правила регистрации и обмена в составе БСП), мы можем гарантировать проведение документа сразу в момент загрузки в принимающую базу. Для этого в правилах обмена объектами (ПКО) для документа ПеремещениеТоваров в обработчике события «После загрузки» необходимо прописать принудительную попытку проведения в неоперативном режиме.

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


Попытка
    Если Объект.Проведен Тогда
        // Запускаем принудительное проведение в неоперативном режиме, чтобы сформировать движения
        Объект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативно);
    КонецЕсли;
Исключение
    // Если проведение не удалось (например, из-за нехватки остатков), записываем документ просто как объект
    Объект.Проведен = Ложь;
    Объект.Записать(РежимЗаписиДокумента.Запись);
    
    // Фиксируем ошибку в Журнале регистрации для последующего анализа администратором
    ЗаписьЖурналаРегистрации(
        "ОбменДанными.ОшибкаПроведенияПриЗагрузке",
        УровеньЖурналаРегистрации.Предупреждение,
        Объект.Метаданные(),
        Объект.Ссылка,
        "Не удалось провести документ перемещения при загрузке: " + ОписаниеОшибки()
    );
КонецПопытки;

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

Шаг 4. Комплексная профилактика базы данных

Если сбои происходят регулярно и затрагивают старые периоды, рекомендуем выполнить регламентные процедуры обслуживания базы данных 1С:

  1. Тестирование и исправление (ТиИ). Запустите конфигуратор, перейдите в меню Администрирование — Тестирование и исправление. Выберите пункты Проверка логической целостности и Реиндексация таблиц информационной базы. Это исключит физическое повреждение таблиц базы данных SQL или файловой версии.
  2. Пересчет итогов. В том же окне ТиИ обязательно выберите пункт Пересчет итогов. Часто именно расхождение реальных движений со сводными таблицами итогов в регистрах накопления приводит к тому, что отчеты перестают видеть движения документов.
  3. Анализ коллизий в мониторе обмена. В подчиненном узле откройте Монитор обмена данными, найдите вкладку «Коллизии». Проверьте, не настроено ли автоматическое отклонение изменений из центральной базы в пользу локальных изменений подчиненного узла.

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

← На главную