Не установлен отбор по регистратору

Манипулирование записями регистров без использования регистратора

В 1С:Предприятии 8 все регистры, кроме регистров сведений, всегда связаны с регистраторами. Регистры сведений могут быть независимыми или также подчиненными регистратору. В этом разделе мы опишем работу с регистрами, подчиненными регистраторам.

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

Однако  в 1С:Предприятии 8 существует возможность изменять записи регистров без участия документа. При этом следует учитывать, что каждая запись регистра всегда подчинена одному и только одному регистратору (документу). Поэтому с точки зрения "времени жизни" записи всегда подчинены конкретным регистраторам. Однако, записи могут изменяться без участия самого документа.

Ошибка записи! Не установлен отбор по регистратору!

Главное, чтобы в них имелась ссылка на документ. 

Для изменения записей регистров, подчиненных регистраторам, используются наборы записей. При этом всегда используется отбор по регистратору. То есть совокупность записей, подчиненных одному регистратору, является "гранулой" изменения регистра. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору. 

При изменении записей регистра можно использовать набор записей, входящий в коллекцию движений документа (свойство Движения объекта ДокументОбъект). Однако это не обязательно. Для изменения записей регистра можно использовать и набор записей созданный с помощью менеджера регистра.

Таким образом, чтобы изменить записи регистра необходимо:

  • создать набор записей;
  • установить отбор по определенному регистратору;
  • прочитать набор;
  • изменить записи набора;
  • записать набор.

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

Копировать в буфер обмена

    //Выберем всех регистраторов регистра
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
        | УчетНоменклатуры.Регистратор
        |ИЗ
        | РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры";
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    //Обойдем регистраторов
    Пока Выборка.Следующий() Цикл
        Сообщить("Изменение записей по регистратору: " + Выборка.Регистратор);
        //Для каждого регистратора выполним изменение набора записей
        НаборЗаписей = РегистрыНакопления.УчетНоменклатуры.СоздатьНаборЗаписей(); 
        НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
        НаборЗаписей.Прочитать();
        Для каждого Запись Из НаборЗаписей Цикл
            Запись.Реквизит1 = "Тест";
        КонецЦикла;
        НаборЗаписей.Записать();
    КонецЦикла; 

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

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

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

ошибка записи не установлен отбор по регистратору регистр накопления

Я
pedagog

При свертке базы вылетает такая ошибка "ошибка записи не установлен отбор по регистратору регистр накопления "Товары в резерве". Почитала на форумах, но так и не поняла, что делать.

 
 

   Московский

Чё там отладчик говорит?

   Волшебник

Модератор

ошибка в обработке свёртки базы

   Рэйв Ты забылТвояЗапись.Регистратор=ссылкаТвойДок    Рэйв

+(3)По первости тоже часто на эти грабли наступал.Думал, чт. установленного отбора достаточно:-)

   Рэйв

+ну или сам отбор криво поставлен

   pedagog обработка свертки типовая.

Не установлен отбор по регистратору

Процедура сбСформироватьДокументВводаОстатков(Запрос, ТекРег, ДатаСвертки, ОграничиватьРазмерДокументовВводаОстатков, ТипРегистра, КоличествоСтрокВДокументеВводаОстатков)     Результат = Запрос.Выполнить();     Если НЕ Результат.Пустой() ТОгда         Если ОграничиватьРазмерДокументовВводаОстатков Тогда             ТабДвиж = Результат.Выбрать();                         НомерПоследнейЗаписи = 0;             Пока НомерПоследнейЗаписи < ТабДвиж.Количество() Цикл                 НомерПервойЗаписи = НомерПоследнейЗаписи + 1;                 НомерПоследнейЗаписи = НомерПервойЗаписи + КоличествоСтрокВДокументеВводаОстатков;                 НомерПоследнейЗаписи = Мин(НомерПоследнейЗаписи, ТабДвиж.Количество());                                  ДокОст = сбСформироватьШапкуДокументаВводаОстатков(ТекРег, ДатаСвертки, ТипРегистра, НомерПервойЗаписи, НомерПоследнейЗаписи);                                  Если ТипРегистра = "накопления" Тогда                     НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();                                      Иначе                     НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();                                      КонецЕсли;                                  НаборЗаписей.Отбор.Регистратор.Установить(ДокОст);                                  Для ш = НомерПервойЗаписи По НомерПоследнейЗаписи Цикл                     ТабДвиж.Следующий();                     НоваяЗапись = НаборЗаписей.Добавить();                     ЗаполнитьЗначенияСвойств(НоваяЗапись, ТабДвиж);                     НоваяЗапись.Регистратор = ДокОст.Ссылка;                                      КонецЦикла;                                      НаборЗаписей.Записать();                              КонецЦикла;                          Иначе             ТабДвиж = Результат.Выгрузить();                          ДокОст = сбСформироватьШапкуДокументаВводаОстатков(ТекРег, ДатаСвертки, ТипРегистра);                          Если ТипРегистра = "накопления" Тогда                 НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();                              Иначе                 НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();                              КонецЕсли;                              НаборЗаписей.Отбор.Регистратор.Установить(ДокОст);             НаборЗаписей.Загрузить(ТабДвиж);             НаборЗаписей.Записать();                      КонецЕсли;                      сбСообщениеСвертки("Сформирован документ ввода остатков " + ТекРег.Имя);              КонецЕсли;          КонецПроцедуры

   pedagog

ругается на строке  НаборЗаписей.Записать();

   Nuobu

(7) На какой именно?

Их две.

   pedagog

на первой

   pedagog

разобралась. Просто док  КорректировкаЗаписейРегистровНакопления не являлся регистратором для данного регистра.

 
 

 

Наведи порядок в своей работе используя конфигурацию 1C "Управление IT-отделом 8"

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

v8: Регистры накопления