Имя: Пароль:
1C
1С v8
РИБ. Регистрация изменений для !периодического! регистра
0 new_hope
 
03.07.20
10:52
Доброго всем!
Подскажите, как зарегистрировать изменения для ! пиериодического регистра сведений? Както не получилось "нагуглить" никакого примера, ИТС имеет пример НЕпериодического, и все прекрасно работает,
Для периодичского ошибка Ошибка: "Недопустимое значение параметра (параметр номер "2")"

Вот проимер с ИТС:

Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ РАЗЛИЧНЫЕ
            |    КомплектующиеНоменклатуры.Номенклатура,
            |    КомплектующиеНоменклатуры.ХарактеристикаНоменклатуры
            |ИЗ
            |    РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры";
        Выборка = Запрос.Выполнить().Выбрать();
        Набор = РегистрыСведений.КомплектующиеНоменклатуры.СоздатьНаборЗаписей();
        Пока Выборка.Следующий() Цикл
            Набор.Отбор.Номенклатура.Значение = Выборка.Номенклатура;
            Набор.Отбор.Номенклатура.Использование = Истина;
            Набор.Отбор.ХарактеристикаНоменклатуры.Значение = Выборка.ХарактеристикаНоменклатуры;
            Набор.Отбор.ХарактеристикаНоменклатуры.Использование = Истина;
            
            ПланыОбмена.ЗарегистрироватьИзменения(Узел, Набор);
        КонецЦикла;
1 new_hope
 
03.07.20
10:54
Небольшое уточнение - мне нужно (вернее достаточно) зарегистрировать данные регистра "срез последних" - тоесть - последнее актуальное значение (в моем отборе)
2 Admin_Net_1C
 
03.07.20
11:10
(0) раз регистр периодический, то где отбор по периоду? И набор у тебя пустой, нет Набор.Прочитать()
3 new_hope
 
03.07.20
11:27
(2) Код, что в (0) - это код с ИТС для НЕпериодического регистра, и он работает!
Подобный код не работает, если регистр периодический. Регистр сведений стандартный - "ФИОФизЛиц"

Вот это НЕ работает:

        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ФИОФизЛицСрезПоследних.ФизЛицо
            |ИЗ
            |    РегистрСведений.ФИОФизЛиц.СрезПоследних(&Период, ) КАК ФИОФизЛицСрезПоследних
            |ГДЕ
            |    ФИОФизЛицСрезПоследних.ФизЛицо В(&Контрагенты)";
        
        Запрос.УстановитьПараметр("Контрагенты", спискоКонтрагентов);
        Запрос.УстановитьПараметр("Период", ТекущаяДата());
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Набор = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Набор.Отбор.ФизЛицо.Значение = ВыборкаДетальныеЗаписи.ФизЛицо;
                Набор.Отбор.ФизЛицо.Использование = Истина;
                Попытка
                    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбменаСЦО, Набор);
            Исключение
                Сообщить("Упс...");    
            КонецПопытки;
        КонецЦикла;
4 DJ Anthon
 
03.07.20
11:34
так а чему тут работать? ты указал отбор. а записи где?
5 Василий Алибабаевич
 
03.07.20
11:39
(3) Попробуй еще раз прочитать (2). Если что не понятно - задай вопрос.
6 Franchiser
 
гуру
03.07.20
11:42
(3) отбор на период укажи
7 new_hope
 
03.07.20
11:52
Вот так вроде заработало:
Добавил отбор по периоду!


        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ФИОФизЛицСрезПоследних.Период,
            |    ФИОФизЛицСрезПоследних.ФизЛицо
            |ИЗ
            |    РегистрСведений.ФИОФизЛиц.СрезПоследних(&Период, ) КАК ФИОФизЛицСрезПоследних
            |ГДЕ
            |    ФИОФизЛицСрезПоследних.ФизЛицо В(&Контрагенты)";
        
        Запрос.УстановитьПараметр("Контрагенты", спискоКонтрагентов);
        Запрос.УстановитьПараметр("Период", ТекущаяДата());
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Набор = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Набор.Отбор.Период.Значение = ВыборкаДетальныеЗаписи.Период;
                Набор.Отбор.Период.Использование = Истина;
                Набор.Отбор.ФизЛицо.Значение = ВыборкаДетальныеЗаписи.ФизЛицо;
                Набор.Отбор.ФизЛицо.Использование = Истина;
                Набор.Прочитать();
                Попытка
                    ПланыОбмена.ЗарегистрироватьИзменения(УзелОбменаСЦО, Набор);
                    Сообщить("ПОЛУЧИЛОСЬ!");
                Исключение
                    Сообщить("Упс... " + Набор.Отбор);
                КонецПопытки;
        КонецЦикла;
8 new_hope
 
03.07.20
11:57
(2) "Набор.Прочитать()" - работает и без этого. Тоесть метод "ЗарегистрироватьИзменения" сам считывает данные по отбору?