Имя: Пароль:
1C
1С v8
Добавить записи в регистр сведений ЗУП
0 Тринадцать
 
02.03.23
09:35
Всем привет конфа ЗУП 3.1.23.458. Добавляю записи в свой регистр сведений (непериодический, подчинен регистратору Исполнительный лист). При первом проведении запись создается, при повторном проведении - запись удаляется из регистра, никаких ошибок не выдает. Т.е записывается в регистр, только если нет записи с этим регистратором. Подскажите в чем ошибка?

            НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();  
            
            НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
         //   НаборЗаписей.Прочитать();
         //   НаборЗаписей.Очистить(); пробовала добавить, но нет
            
                         Запрос = Новый Запрос;
            Запрос.Текст ... выбираем доп реквизиты из Испол.листа, их будем записывать в регистр

            Выборка = Запрос.Выполнить().Выбрать();
            Выборка.Следующий();
            
            НоваяЗапись = НаборЗаписей.Добавить();                      
            ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка);  
            НоваяЗапись.Регистратор = Источник.Ссылка;  
            
            НаборЗаписей.Записать();
1 magicSan
 
02.03.23
09:44
НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();  
            
            НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
            НаборЗаписей.Прочитать();
         Запрос = Новый Запрос;
            Запрос.Текст ... выбираем доп реквизиты из Испол.листа, их будем записывать в регистр

            наборЗаписей.загрузить(Запрос.Выполнить().Выбрать().выгрузить());
            
            НаборЗаписей.Записать();
2 Тринадцать
 
02.03.23
12:17
(1) Запрос.Выполнить().Выбрать().выгрузить() - Выбрать() тут лишнее:))

Попробовала так, но при повторном проведение запись в регистре все-равно исчезает.
первый раз проводу - записывается корректно, а второй раз - удаляется запись.
Ошибок не выдает.
3 Serg_1960
 
02.03.23
14:51
Цитата: "...Для удаления записей можно выполнять запись пустого набора без выполнения считывания..."
Источник: "Манипулирование записями регистров без использования регистратора" - https://its.1c.ru/db/metod8dev/content/2719/hdoc
4 Тринадцать
 
02.03.23
15:49
(3) Если я правильно поняла, сделала так:
            НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();  //создаю набор записей
            
            НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
            НаборЗаписей.Прочитать();
            НаборЗаписей.Записать(); // записываю пустой набор по данному регистратору

Потом Запрос..
            
            Результат = Запрос.Выполнить();
            ТЗ = Результат.выгрузить();
            
            НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();  
            
            НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);

            НаборЗаписей.Загрузить(ТЗ);
            
            НаборЗаписей.Записать();

Ошибка сохраняется. При повторном проведении документа, когда запись уже есть в регистре, запись удаляется.
6 Skylark
 
02.03.23
21:08
Прежде чем растекаться мыслею по древу, я бы сначала тупо посмотрел в отладчике, что в НаборЗаписей.
Точку останова на НаборЗаписей.Записать().Записать();
7 rudnitskij
 
02.03.23
22:20
(4) "НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();  //создаю набор записей
            
            НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
            НаборЗаписей.Прочитать();
            НаборЗаписей.Записать(); // записываю пустой набор по данному регистратор"
-----------------
Если набор содержит записи - в какой момент и с какой радости он должен стать пустым?
8 Serg_1960
 
03.03.23
09:02
(4) Скорее всего, имхо, запрос составлен таким образом, что при "первом" запуске он возвращает данные (набор записывается), а при "повторном" запуске - запроса ничего не возвращает (а запись "пустого" набора == удаление набора).

//Вместо
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
...
// напишите
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
...
КонецЕсли;
9 Dmitrii
 
гуру
03.03.23
10:44
Не занимайтесь ерундой. Движения по регистратору система очищает автоматически в общем модуле ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений.
Там же система определяет какие наборы записей будут записываться. Объект.Движения[ИмяРегистра].Записывать = Истина. Ваш регистр при повторном перепроведении непременно попадает в список тех, которые будут записываться, т.к. в нём есть записи (возникшие при первом проведении).

Делайте всё через коллекцию Движений документа.
Замените своё

НаборЗаписей = РегистрыСведений.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);

на одну строчку

НаборЗаписей = Источник.Движения.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП;

Уберите всякие Прочитать() и Очистить().
В конце вместо

НаборЗаписей.Записать();

напишите

НаборЗаписей.Записывать = Истина;

И будет вам счастье.
10 Тринадцать
 
03.03.23
11:09
(9)Dmitrii Большое спасибо!!! Получилось!

НаборЗаписей = Источник.Движения.ИНФ_РеквизитыИсполЛистовДляВыгрузкиБП;  - не знала этой фишки