Имя: Пароль:
1C
 
Контроль дублей при массовом добавлении записей в РегистрСведений
0 Hazer79
 
25.10.08
12:36
Здравствуйте.
Есть выборка (номенклатура) из результата запроса. Она прогоняется в цикле, и вся эта номенклатура добавляется в регистр сведений (ЦеныПоставщиков).
Вопрос - как можно максимально оптимально организовать контроль дублей номенклатуры ? Для каждой позиции номенклатуры выполнять запрос на существование такой записи в регистре ? Как-то не айс...
Может подскажете что-нибудь ?
1 ado
 
25.10.08
12:39
(0) Хммм, вообще то платформа сама тебе не даст записать в регистр сведений дубли.
2 ado
 
25.10.08
12:41
(1) Или я что-то не так понял?
3 Hazer79
 
25.10.08
12:44
(1) Только что попробовал добавить абсолютно идентичные записи - добавились. Разница только в периоде (текущаядата() разная).
4 ado
 
25.10.08
12:46
(3) А зачем тебе периодичность, если ты хочешь иметь только одну запись по каждой номенклатуре? Оставь только номенклатуру в измерениях, и будет тебе счастье.
5 Hazer79
 
25.10.08
12:48
(4)

Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл //гоним выбранную номенклатуру
   НаборЗаписей = РегистрыСведений.ЦеныПоставщиков.СоздатьНаборЗаписей();
   
   НаборЗаписей.Отбор.Период.Установить(ТекущаяДата());
   НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
   НаборЗаписей.Отбор.Договор.Установить(ДоговорВозврата);
   НаборЗаписей.Отбор.ЕдиницаИзмерения.Установить(Выборка.ЕдиницаИзмерения);
   
   НовЗапись = НаборЗаписей.Добавить();
   
   НовЗапись.Период = ТекущаяДата();
   НовЗапись.Номенклатура = Выборка.Номенклатура;
   НовЗапись.Договор = ДоговорВозврата;
   НовЗапись.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
   НаборЗаписей.Записать(Истина);
КонецЦикла;

Когда нет строк
   НаборЗаписей.Отбор.Период.Установить(ТекущаяДата());
и
   НовЗапись.Период = ТекущаяДата();
платформа ругается, что не установлен период.
6 ado
 
25.10.08
12:53
(5) Еще рас вопрос. Зачем тебе периодический регистр, если ты не хочешь иметь несколько записей по набору измерений? Таблица регистра сведений имеет составной первичный ключ из набора полей-измерений (включая системные). Делать для него дополнительный контроль уникальности -- бред, нужно правильно подобрать состав измерений.
7 ЁБ
 
25.10.08
12:54
Ну у тебя в конфигураторе структура метаданных такая, что есть поле периол. Что тут не понятного? Убери его если не нужен или проставляй период если нужен.
8 NULLL
 
25.10.08
12:57
(6)(7)Вы слышали как называется регистр - Цены поставщиков, не советуйте чего-попало.
9 ado
 
25.10.08
12:59
(8) Ну и что? Человек хочет, что бы для каждой номенклатуры хранилась ОДНА цена. Значит, период не нужен.
10 NULLL
 
25.10.08
13:00
Запрос пиши сюда. Там в запросе нужно добавить или Сгруппировать по номенклатуре, или Выбрыть различные. Тебе просто нужно имзенить запрос, чтобы он выдавал только уникальную номенклатуру.
11 NULLL
 
25.10.08
13:01
(8) Я так понял, что человек хочет при загрузке данных не делать дублей.
12 NULLL
 
25.10.08
13:03
(11) По крайней мере так написано в теме.
13 ЁБ
 
25.10.08
13:03
(9) На хрена тогда (0) говорит о "контроле дублей номенклатуры"?

Во-первых из запросной выборки их можно сделать уникальными (уже нет проблемы дублей). Во-вторых даже если бы они и были то платформа все равно не дала бы записать две номенклатуры на одну дату, в третьих я не вижу в коде автора запись по ресурсу отвечающего за цены поставщиков...
14 ado
 
25.10.08
13:04
(11) Судя по "Для каждой позиции номенклатуры выполнять запрос на существование такой записи в регистре ? Как-то не айс... " человек хочет что бы в регистре вообще не было двух записей по одной номенклатуре.
15 NULLL
 
25.10.08
13:08
Ндя, наверно полез убирать периодчиность.
16 Hazer79
 
27.10.08
09:35
По сообщению (15) - простите, просто субботняя вахта в 13.00 уходила - нужно было срываться.

(10) запрос уникальную номенклатуру выдавать не может, т.к. по ТЗ (это разовая обработка) юзер должен выбрать на форме контрагента, его договор, потом нажать на кнопку "Выполнить" и обработка всю номенклатуру по этому выбранному договору копирует в договор "Возврат" того же контрагента (всё это внутри регистра "Цены поставщиков"). Сами цены проставлять в договоре возврата совершенно необязательно - нужна лишь сама номенклатура.
К тому же если юзер выберет другой договор того же контрагента, а там будет точно такая же позиция номенклатуры, что была в предыдущем договоре, то вот здесь и необходимо не допустить дубликата.
17 ZZeRRo
 
27.10.08
10:22
А измерения то какие в регистре?
18 ZZeRRo
 
27.10.08
10:26
Сделай Соответствие, в которое в цикле вславляй ту номенклатуру, которая уже попала в регистр и перед записью очередного элемента. проверяй есть ли эта номенклатура в соответствии, если есть то пропускай. если нет то записывай в регистр
19 Hazer79
 
27.10.08
10:58
(18) Спасибо большое за подсказку ! Это то, что надо. :-)
Блин, мог бы и сам додуматься. Массив прикрутить таким же образом.
На будущее буду знать. Ещё раз спасибо ! :-)