Как массово перезаписать документы в 1С:Управление торговлей 11.5 без изменения данных

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

В процессе эксплуатации 1С:Управление торговлей 11.5 часто возникают ситуации, когда документы необходимо просто перезаписать. Это особенно актуально после массового переноса данных из старых редакций (например, УТ 10.3) или при обмене данными через «Конвертацию данных». В таких случаях объекты могут быть физически созданы в базе, но внутренние механизмы конфигурации, такие как кэширование связей между заказами и реализациями или заполнение служебных регистров сведений, не отрабатывают до момента записи объекта непосредственно в текущей базе.

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

Метод 1. Использование стандартной обработки «Групповое изменение реквизитов»

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

  1. Откроем список нужных документов (например, «Заказы клиентов»).
  2. Выделим необходимые документы в списке с помощью клавиш Ctrl+A или Shift.
  3. Нажмем правую кнопку мыши и выберем пункт «Изменить выделенные...».
  4. В открывшемся окне нам нужно инициировать запись. Поскольку прямой кнопки «Записать» здесь нет, применим хитрость: выберем любой строковый реквизит, например, Комментарий.
  5. В колонке «Новое значение» можно ничего не писать или нажать на гиперссылку «Дополнительные параметры» в нижней части окна.
  6. В дополнительных параметрах установим флажок «Записывать объекты принудительно». Это заставит систему вызвать процедуру Записать() для каждого объекта, даже если вы не меняли значения полей.
  7. Нажмем «Изменить реквизиты» (в случае ошибки может потребоваться откат группового изменения реквизитов).

Этот метод хорош тем, что он типовой и не требует установки стороннего софта. Однако стоит помнить, что при этом сработают все подписки на события и встроенные проверки конфигурации.

Метод 2. Использование набора «Инструменты разработчика» (ИР)

Если стандартных средств недостаточно, рассмотрим более мощный арсенал. В сообществе программистов 1С аббревиатура «ИР» прочно закрепилась за набором инструментов Сергея Старинина. Одним из ключевых компонентов этого набора является «Консоль массовой обработки объектов».

Выясним, почему этот инструмент эффективнее:

Для перезаписи в ИР достаточно выбрать тип документа, отметить нужные записи и выбрать действие Записать. Это гарантированно вызовет обработчики ПередЗаписью и ПриЗаписи в модуле документа, что критически важно для актуализации данных в УТ 11.5.

Метод 3. Программная перезапись через консоль кода

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

Рассмотрим пример кода для перезаписи документов ЗаказКлиента за определенный период:


Выборка = Документы.ЗаказКлиента.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    // Отключаем проверки, если нужно просто прокинуть данные
    // Объект.ОбменДанными.Загрузка = Истина; 
    Объект.Записать(РежимЗаписиДокумента.Запись);
    Сообщить("Перезаписан документ: " + Объект.Ссылка);
КонецЦикла;

Важный нюанс: Обратите внимание на свойство ОбменДанными.Загрузка. Если установить его в значение Истина, то документ запишется «молча» — без большинства проверок и без выполнения прикладной логики в модулях. Если ваша цель — чтобы заказы «увиделись» реализациями в УТ 11.5, этот флаг устанавливать нельзя, так как именно прикладная логика при записи формирует необходимые записи в служебных регистрах.

Метод 4. Способ «Провести — Отменить проведение»

Посмотрим на альтернативный вариант, упомянутый пользователями форума. Если выделить документы и последовательно нажать «Провести», а затем «Отменить проведение», документы останутся в статусе «Записан», но при этом система дважды прогонит их через механизмы записи и движений.

Однако проанализируем риски этого метода:

Поэтому данный метод мы рекомендуем использовать только в крайнем случае и на небольшом объеме данных.

Почему в УТ 11.5 простая перезапись так важна?

Выясним техническую причину. В современных конфигурациях на базе «1С:ERP» и «Управление торговлей 11» используется механизм распределенных регистров и кэширования связей. Например, связь между заказом и документами закупки/продажи может храниться не только в реквизитах самого документа, но и в дополнительных регистрах сведений (таких как распределение запасов или графики оплат).

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

Таким образом, для решения задачи автора лучше всего подходит Групповое изменение реквизитов с включенным параметром принудительной записи или использование Инструментов разработчика для более точного контроля процесса.

← На главную