Часто перед разработчиками 1С встает задача массового обновления данных в документах. Распространенная проблема, с которой сталкиваются новички при создании внешних обработок, заключается в том, что после изменения значений реквизитов в коде, данные не сохраняются в информационной базе. Давайте разберем, почему это происходит и как правильно организовать процесс записи.
Когда вы работаете с Выборка или запросом, вы получаете только «ссылочные» данные. Чтобы внести изменения в документ, недостаточно просто присвоить новое значение переменной. Необходимо получить полноценный объект документа, изменить его свойства и принудительно вызвать метод Записать(). Именно метод ОбъектДокумент.Записать() является критически важным звеном, без которого любые манипуляции останутся только в оперативной памяти и не будут зафиксированы в БД.
Рассмотрим по шагам, как правильно реализовать цикл обхода документов и их запись:
ПолучитьОбъект().Записать() для фиксации изменений.Вот пример кода, который демонстрирует этот процесс на практике:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ВводОстатковВнеоборотныхАктивов2_4.ОС";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектДокумент = Выборка.Ссылка.ПолучитьОбъект();
// Устанавливаем режим загрузки для ускорения
ОбъектДокумент.ОбменДанными.Загрузка = Истина;
Для каждого СтрокаТЧ Из ОбъектДокумент.ОС Цикл
СтрокаТЧ.ДатаПринятияКУчетуНУ = СтрокаТЧ.ДатаПринятияКУчетуБУ;
КонецЦикла;
ОбъектДокумент.Записать();
КонецЦикла;
Когда документов тысячи, важно учитывать производительность. Давайте рассмотрим, как мы можем ускорить работу кода:
ОбменДанными.Загрузка: При установке этого свойства в значение Истина, система пропускает выполнение многих проверок и подписок на события. Это значительно сокращает время выполнения операции, но будьте осторожны: движения по регистрам в этом режиме не формируются автоматически.ГДЕ, чтобы выбирать только те строки, которые действительно нужно изменить.Многие современные конфигурации, такие как 1С:ERP Управление предприятием, активно используют БСП. При вызове Записать() система может запускать множество процедур в общих модулях, что замедляет выполнение скрипта. Если вы видите, что процесс «скачет» по модулям, проверьте, нет ли у вас лишних подписок на события. Использование режима Загрузка обычно помогает избежать срабатывания большинства стандартных механизмов БСП.
Важное примечание: Если после использования метода Записать() изменения по-прежнему не видны в отчетах или списках, проверьте, не переопределены ли значения реквизитов другими подписками на события, либо убедитесь, что вы меняете именно тот реквизит, который используется в запросе отчета.
Следуя этим рекомендациям, вы сможете эффективно автоматизировать любые правки данных в базе 1С, обеспечивая при этом высокую скорость работы и корректность сохраняемых значений.