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