Имя: Пароль:
1C
1С v8
Универсальный подбор-обработка. Произвольный алгоритм
0 PiotrLoginov
 
12.11.12
11:50
Привет всем. Опять пытаюсь для каждого элемента справочника создать элемент в регистре сведений. И создается запись лишь для одного из элементов.

Конфигурация - УТ 11.
Справочник - Партнеры.
Регистр сведений - ПартнерыСегмента.

Запросом в УниверсальныеПодборИОбработкаОбъектов.epf отбираю партнеров. Пишу произвольный алгоритм:

ПС = РегистрыСведений.ПартнерыСегмента.СоздатьНаборЗаписей();
НовЗап = ПС.Добавить();
НовЗап.Партнер = Объект.Ссылка;
НовЗап.Сегмент = Справочники.СегментыПартнеров.НайтиПоНаименованию("19 л.");
НовЗап.Активность = 1;
ПС.Записать();

Выполняю. В результате из регистра сведений удаляются все старые записи. И создается одна новая - для последнего из выбранных мною элементов.
1 mikecool
 
12.11.12
11:50
отбора нет
2 acsent
 
12.11.12
11:50
зачем набор? запись нужна
3 ZanderZ
 
12.11.12
11:52
ПС.Записать(Ложь);
4 ssh2006
 
12.11.12
11:52
(1) + 1
(2) +1 Менеджер записи
5 PiotrLoginov
 
12.11.12
11:57
отбор уже выполнен.
В результате вижу список партнеров, дял которых надо создать записи в РС ПартнерыСегмента. С этим порядок.

Перехожу на вкладку Обработки. Выбираю Произвольный алгоритм. Пишу код (см. выше). Выполняю. Результат плачевен.
6 Romich1981
 
12.11.12
11:57
Может так?:

ПС = РегистрыСведений.ПартнерыСегмента.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
  НовЗап = ПС.Добавить();
  НовЗап.Партнер = Выборка.Объект.Ссылка;
  НовЗап.Сегмент = Справочники.СегментыПартнеров.НайтиПоНаименованию("19 л.");
  НовЗап.Активность = 1;
КонецЦикла;
ПС.Записать();
7 PiotrLoginov
 
12.11.12
11:57
(3) ? Не понял...
8 Romich1981
 
12.11.12
11:58
(5) Имелся ввиду отбор набора записей
9 PiotrLoginov
 
12.11.12
11:59
(6) Насколько я понимаю, если алгоритм выполняется из обработки УниверсальныеПодборИОбработкаОбъектов.epf , организовывать цикл не нужно. Она сама выполнит код для каждого из выбранных объектов.
10 Romich1981
 
12.11.12
11:59
(7) А это, чтоб не затирался регистр...
11 Romich1981
 
12.11.12
12:01
(9) а, сорри... с этой обработкой не работал. Тогда, наверно, (2), (3) и (4) =)
12 hhhh
 
12.11.12
12:07
(9) если нет отбора в наборе записей регистра, ваша команда ПС.Записать(); полностью стирает весь регистр и потом добавляет вашу одну запись.
13 PiotrLoginov
 
12.11.12
12:12
(12) как же правильно написать, чтобы после указания значений измерений записать новую запись в РС для текущего выбранного обработкой Объекта и при этом не стереть уже существующие записи?
14 hhhh
 
12.11.12
12:17
ПС = РегистрыСведений.ПартнерыСегмента.СоздатьНаборЗаписей();
ПС.Отбор.Партнер.Установить(Объект.Ссылка);
ПС.Отбор.Сегмент.Установить(Справочники.СегментыПартнеров.НайтиПоНаименованию("19 л."));
НовЗап = ПС.Добавить();
НовЗап.Партнер = Объект.Ссылка;
НовЗап.Сегмент = Справочники.СегментыПартнеров.НайтиПоНаименованию("19 л.");
НовЗап.Активность = 1;
ПС.Записать();
15 PiotrLoginov
 
12.11.12
12:28
(14) чудесным образом создались записи в РС для каждого из выбранных обработкой объектов. И при этом старые записи в порядке. Спасибо огромное. Учту, что перед записью в регистр сведений необходимо отобрать записи, которые будут заменены на новые.
16 PiotrLoginov
 
12.11.12
12:29
Теперь я понимаю: у меня раньше для каждого нового объекта записывалась одна запись, но запись для следующего объекта стирала её. Еще раз спасибо.
17 Romich1981
 
12.11.12
12:44
(16) точнее для каждого нового объекта записывался набор записей, который затирал все предыдущие
18 PiotrLoginov
 
12.11.12
12:48
(17) угу, я понял
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn