![]() |
![]() |
![]() |
|
Контроль дублей при массовом добавлении записей в РегистрСведений | ☑ | ||
---|---|---|---|---|
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) Спасибо большое за подсказку ! Это то, что надо. :-)
Блин, мог бы и сам додуматься. Массив прикрутить таким же образом. На будущее буду знать. Ещё раз спасибо ! :-) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |