Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:22

Добавление записи в регистр сведений

Автор syncX, 25 авг 2017, 07:13

0 Пользователей и 1 гость просматривают эту тему.

syncX

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

Записи он добавляет, но изменить не получается. Пишет что запись с таким полем есть (Счетчик. Оно уникально). Почему возникает ошибка я знаю. А вот как ее обойти и как правильно добавлять сведения в РС я понять не могу. Чтобы каждая запись была уникальна и при этом редактировалась.
В регистре одно измерение - счетчик.
Дополню: как я понимаю, нужно в отбор вставить информацию о моем уникальном ключе, чтобы он их удалял перед записью.

Golickoff

НаборЗаписей = РегистрыСведений._ДанныеЮрЛиц.СоздатьНаборЗаписей();
                   НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);   
                   НаборЗаписей.Прочитать();
                       
                       КлючУникальностиЗаписи = Новый УникальныйИдентификатор;
                           Счетчик = КлючУникальностиЗаписи;
                           
                                               
                   Если НаборЗаписей.Количество() = 0 Тогда
                       НовЗапись = НаборЗаписей.Добавить();
                       НовЗапись.Счетчик = Счетчик;
                       Сообщить(Счетчик);
                       
                       НовЗапись.Период = ТекущаяДата();
                       ЗаполнитьЗначенияСвойств(НовЗапись,Выборка);
                   Иначе
                        НаборЗаписей.Очистить(); ///////////////////////// Вот эту строчку я добавил
                       Пока Выборка.Следующий() Цикл
                           НовЗапись = НаборЗаписей.Добавить();
                           НовЗапись.Счетчик = Счетчик;
                           ЗаполнитьЗначенияСвойств(НовЗапись,Выборка);
                           Счетчик = Счетчик ;
                           Сообщить("СчетчикНескольк" + Счетчик);
                       КонецЦикла;
                   КонецЕсли;
                   
                   НаборЗаписей.Записать(Ложь);
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

syncX

Цитата: Golickoff от 25 авг 2017, 07:28
НаборЗаписей = РегистрыСведений._ДанныеЮрЛиц.СоздатьНаборЗаписей();
                   НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);   
                   НаборЗаписей.Прочитать();
                       
                       КлючУникальностиЗаписи = Новый УникальныйИдентификатор;
                           Счетчик = КлючУникальностиЗаписи;
                           
                                               
                   Если НаборЗаписей.Количество() = 0 Тогда
                       НовЗапись = НаборЗаписей.Добавить();
                       НовЗапись.Счетчик = Счетчик;
                       Сообщить(Счетчик);
                       
                       НовЗапись.Период = ТекущаяДата();
                       ЗаполнитьЗначенияСвойств(НовЗапись,Выборка);
                   Иначе
                        НаборЗаписей.Очистить(); ///////////////////////// Вот эту строчку я добавил
                       Пока Выборка.Следующий() Цикл
                           НовЗапись = НаборЗаписей.Добавить();
                           НовЗапись.Счетчик = Счетчик;
                           ЗаполнитьЗначенияСвойств(НовЗапись,Выборка);
                           Счетчик = Счетчик ;
                           Сообщить("СчетчикНескольк" + Счетчик);
                       КонецЦикла;
                   КонецЕсли;
                   
                   НаборЗаписей.Записать(Ложь);

Спасибо. Но в таком случае он стирает все записи с регистра, т.к. он подчинен регистратору

AIFrame

syncX, уникальность регистров сведений проверяется по ресурсам. Для периодических в ресурсы добавляется моментвремени.
Для периодического регистра (до дня) вида: моментвремени, пользователь (ресурс), времяприхода (измерение)
может существовать только одна запись, содержащая: 26.08.2017, Вася. И значение времяприхода тут никакой роли не играет.
Т.к. моментвремени по умолчанию заполняется от ТекущаяДата(), то за этот день мы сможем добавить только одну запись с ресурсом Вася.

Vladimkir

Попробуйте проверять в прочитанном наборе наличие записей с пересекающимися измерениями и периодом с тем что хотите добавить, в случае наличия не добавляйте запись а изменяйте изменившиеся ресурсы найденной.
И замещать = истина. У Вас же весь набор прочитан в память.

AIFrame

Цитата: AIFrame от 26 авг 2017, 09:24
syncX, уникальность регистров сведений проверяется по ресурсам. Для периодических в ресурсы добавляется моментвремени.
Для периодического регистра (до дня) вида: моментвремени, пользователь (ресурс), времяприхода (измерение)
может существовать только одна запись, содержащая: 26.08.2017, Вася. И значение времяприхода тут никакой роли не играет.
Т.к. моментвремени по умолчанию заполняется от ТекущаяДата(), то за этот день мы сможем добавить только одну запись с ресурсом Вася.
Все поперепутал. Ресурс <-> измерение. Уникальность смотрится по измерениям.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск