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