В процессе разработки на платформе 1С часто возникают нестандартные задачи. Одной из таких задач является создание движений по регистру накопления для документов, которые не проводятся в системе. В типовых решениях, таких как Управление торговлей 11, движения документа жестко привязаны к его статусу проведения, однако иногда требуется реализовать механизм обеспечения или резервирования, который инициируется нажатием кнопки, а не проведением документа.
Для решения этой задачи нам необходимо использовать объект РегистрНакопленияНаборЗаписей. Этот механизм позволяет напрямую манипулировать записями в регистре, минуя стандартную процедуру проведения. Рассмотрим по шагам, как добавить записи в регистр.
Сначала мы создаем серверную процедуру, которая будет формировать движения. Важно помнить, что мы всегда работаем через отбор по Регистратору, чтобы система понимала, какие именно записи мы хотим изменить для конкретного документа.
Разберем пример кода для записи движений:
&НаСервере
Процедура ДвиженияПоКнопкеНаСервере()
// Создаем набор записей для нашего регистра
НаборЗаписей = РегистрыНакопления.ОбеспечениеДенежныхСредств.СоздатьНаборЗаписей();
// Устанавливаем отбор по текущему документу
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
// Добавляем новую запись в набор
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Расход;
НоваяЗапись.Период = Объект.Дата;
НоваяЗапись.Заказ = Объект.Заказ;
НоваяЗапись.Организация = Объект.Организация;
НоваяЗапись.Контрагент = Объект.Контрагент;
НоваяЗапись.Сумма = Объект.СуммаДокумента;
// Записываем набор в базу данных
НаборЗаписей.Записать();
КонецПроцедуры
В этом примере метод Записать() при наличии установленного отбора сначала удаляет все старые записи, соответствующие этому регистратору, и записывает на их место те, что мы добавили в текущий набор. Если вы планируете добавлять несколько записей, просто вызовите метод Добавить() несколько раз перед выполнением команды записи.
Вопрос удаления записей решается по аналогичной логике. Если пользователю нужно отменить совершенное действие (например, нажав кнопку «Удалить обеспечение»), нам не нужно искать специальный метод удаления записей. Достаточно создать набор записей с установленным отбором и выполнить запись без добавления новых элементов. Для автоматизации подобных операций в пользовательском интерфейсе без написания программного кода может быть применена платформа RPA для роботизации действий пользователя.
Разберем процесс очистки движений. В задачах точечной миграции или при необходимости синхронизировать информацию между близкими версиями программ удобно использовать инструмент переноса данных между похожими конфигурациями 1С.
&НаСервере
Процедура УдалитьДвиженияНаСервере()
// Создаем пустой набор записей
НаборЗаписей = РегистрыНакопления.ОбеспечениеДенежныхСредств.СоздатьНаборЗаписей();
// Устанавливаем отбор по регистратору (текущему документу)
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
// Если коллекция записей пуста, метод Записать() просто удалит записи из БД
НаборЗаписей.Записать();
КонецПроцедуры
Этот подход является наиболее безопасным и стандартным способом управления записями в регистрах 1С при работе с кодом. Важно: убедитесь, что отбор установлен корректно, иначе вы рискуете удалить данные, не относящиеся к текущему объекту. В случае необходимости полной очистки информационной базы от сведений по конкретному юридическому лицу безопаснее использовать инструмент для выборочного удаления организаций.
Работая с регистрами накопления напрямую через НаборЗаписей, следует учитывать несколько архитектурных особенностей платформы:
ПриЗаписи).Регистратору. Если создать набор записей без отбора и вызвать Записать(), вы рискуете очистить весь регистр накопления, что приведет к необратимой потере всех данных учета.Записать() для набора записей не срабатывают стандартные проверки, которые могли бы быть описаны в модуле набора записей самого регистра. Учитывайте это при проектировании бизнес-логики.Мы проанализировали основные приемы работы с движениями регистра для непроведенных документов. Использование СоздатьНаборЗаписей с последующей установкой отбора и методом Записать — это базовый и надежный инструмент разработчика 1С, позволяющий гибко управлять учетом даже там, где стандартные механизмы проведения не применяются.