В процессе эксплуатации 1С:Управление торговлей 11.5 часто возникают ситуации, когда документы необходимо просто перезаписать. Это особенно актуально после массового переноса данных из старых редакций (например, УТ 10.3) или при обмене данными через «Конвертацию данных». В таких случаях объекты могут быть физически созданы в базе, но внутренние механизмы конфигурации, такие как кэширование связей между заказами и реализациями или заполнение служебных регистров сведений, не отрабатывают до момента записи объекта непосредственно в текущей базе.
Разберем подробнее, какими способами можно выполнить массовую перезапись документов, не заходя в каждый из них вручную.
Проанализируем самый доступный способ, который встроен в типовые конфигурации на управляемых формах. Эта обработка позволяет изменять данные сразу во многих объектах, но у неё есть «скрытая» возможность простого сохранения объекта.
Ctrl+A или Shift.Комментарий.Записать() для каждого объекта, даже если вы не меняли значения полей.Этот метод хорош тем, что он типовой и не требует установки стороннего софта. Однако стоит помнить, что при этом сработают все подписки на события и встроенные проверки конфигурации.
Если стандартных средств недостаточно, рассмотрим более мощный арсенал. В сообществе программистов 1С аббревиатура «ИР» прочно закрепилась за набором инструментов Сергея Старинина. Одним из ключевых компонентов этого набора является «Консоль массовой обработки объектов».
Выясним, почему этот инструмент эффективнее:
Для перезаписи в ИР достаточно выбрать тип документа, отметить нужные записи и выбрать действие Записать. Это гарантированно вызовет обработчики ПередЗаписью и ПриЗаписи в модуле документа, что критически важно для актуализации данных в УТ 11.5.
Разберем ситуацию, когда вам нужно перезаписать документы программно, чтобы иметь полный контроль над процессом. Этот метод наиболее надежен для программиста. Если у вас есть консоль кода (встроенная или внешняя), мы можем написать простой скрипт.
Рассмотрим пример кода для перезаписи документов ЗаказКлиента за определенный период:
Выборка = Документы.ЗаказКлиента.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
// Отключаем проверки, если нужно просто прокинуть данные
// Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Перезаписан документ: " + Объект.Ссылка);
КонецЦикла;
Важный нюанс: Обратите внимание на свойство ОбменДанными.Загрузка. Если установить его в значение Истина, то документ запишется «молча» — без большинства проверок и без выполнения прикладной логики в модулях. Если ваша цель — чтобы заказы «увиделись» реализациями в УТ 11.5, этот флаг устанавливать нельзя, так как именно прикладная логика при записи формирует необходимые записи в служебных регистрах.
Посмотрим на альтернативный вариант, упомянутый пользователями форума. Если выделить документы и последовательно нажать «Провести», а затем «Отменить проведение», документы останутся в статусе «Записан», но при этом система дважды прогонит их через механизмы записи и движений.
Однако проанализируем риски этого метода:
Поэтому данный метод мы рекомендуем использовать только в крайнем случае и на небольшом объеме данных.
Выясним техническую причину. В современных конфигурациях на базе «1С:ERP» и «Управление торговлей 11» используется механизм распределенных регистров и кэширования связей. Например, связь между заказом и документами закупки/продажи может храниться не только в реквизитах самого документа, но и в дополнительных регистрах сведений (таких как распределение запасов или графики оплат).
При загрузке данных из внешних систем (например, через XML или COM) документы часто записываются напрямую в таблицы БД, минуя экранные формы и стандартные обработчики. В итоге «шапка» документа есть, а служебные записи в регистрах отсутствуют. Простая перезапись в режиме Запись заставляет систему выполнить программный код в модуле объекта, который восстанавливает эти цепочки связей.
Таким образом, для решения задачи автора лучше всего подходит Групповое изменение реквизитов с включенным параметром принудительной записи или использование Инструментов разработчика для более точного контроля процесса.