Имя: Пароль:
1C
1С v8
Периодический регистр сведений
,
0 kosmax1991
 
21.11.13
10:07
Доброго времени суток!

Ситуация следующая. В табличном поле документа "Заявка в техподдержку", в котором указываются работы и специалисты, их выполнившие, в модуле объекта создается запись в периодический регистр сведений. Проблема в том, что когда в табличном поле указано более одного специалиста, то записывается инфа только по первому специалисту. Организовал цикл перебора строк табличной части, в котором в начале создается новая запись регистра, но при проведении документа выдается ошибка, что запись с такими ключевыми полями уже существует. В регистре сведений "сотрудник" является измерением, т.е., если не ошибаюсь, должен участвовать в формировании ключа записи. Дак почему же нарушается уникальность и что с этим делать?
1 МойКодУныл
 
21.11.13
10:09
(0) а код, который записывал только одного сотрудника удалил?
2 Rie
 
21.11.13
10:10
(0) Код покажи.
3 МойКодУныл
 
21.11.13
10:12
(2) не прилично просить показать человека код на первом свидании.
4 kosmax1991
 
21.11.13
10:14
Нет. Он остался тем же, только записываться теперь, как я это представляю, должен n-количество раз, где n-количество сотрудников, указанных в табличной части.

Движение = Движения.УЗ_ЗаявкиВТехподдержкуВыезды.Добавить();
    Движение.Период = Дата;
    Движение.Контрагент = Контрагент;
    Движение.Организация = Организация;
    Движение.ОтветственныйЗаВыполнениеЗаявки = ОтветственныйЗаВыполнениеЗаявки;
    Движение.ДатаВыезда = ДатаВыезда;
    Движение.ВремяВыезда = ВремяВыезда;
    Движение.Сотрудник = Сотрудник;
    Движение.ВидЗаявки = ВидЗаявки;
    Движение.ТипЗаявки = ТипЗаявки;
    Движение.ДатаЗаявки = Дата;
    Движение.ДатаЗакрытия = ДатаЗакрытия;
    Движение.ЗаявкуПринял = ОтветственныйЗаявкуПринял;
    Движение.Сотрудник = Сотрудник;
    Движение.Закрыта = Закрыта;
    Движение.Аппаратура = Аппаратура;
    Движение.Уехал = Уехал;
    Движение.ВремяТочноНазначено = ВремяТочноНазначено;
    Движение.ПромежутокВыезда = ПромежутокВыезда;
5 МойКодУныл
 
21.11.13
10:15
0_о а где обращение к строкам ТЧ? Или ты N раз записываешь одно и то же.
6 CHerypga
 
21.11.13
10:16
(4) ЗаполнитьЗначенияСвойств() смотрелось бы лучше
7 AllJoke
 
21.11.13
10:16
Для Каждого Строка Из ТабЧастьДокумента Цикл
//Добавляешь движения
КонецЦикла;
8 AllJoke
 
21.11.13
10:17
Код бердовый. Или задвоился может чёто....
9 catena
 
21.11.13
10:20
Движение.Сотрудник = Сотрудник;


Этот Сотрудник откуда берется? Где обращение к ТЧ?
10 kosmax1991
 
21.11.13
10:37
Код написан такой

Для Каждого ТаблВыездыПоЗаявке Из ВыездыПоЗаявке Цикл     
    Движение = Движения.УЗ_ЗаявкиВТехподдержкуВыезды.Добавить();
    Движение.Период = Дата;
    Движение.Контрагент = Контрагент;
    Движение.Организация = Организация;
    Движение.ОтветственныйЗаВыполнениеЗаявки = ОтветственныйЗаВыполнениеЗаявки;
    Движение.ДатаВыезда = ДатаВыезда;
    Движение.ВремяВыезда = ВремяВыезда;
    Движение.Сотрудник = Сотрудник;
    Движение.ВидЗаявки = ВидЗаявки;
    Движение.ТипЗаявки = ТипЗаявки;
    Движение.ДатаЗаявки = Дата;
    Движение.ДатаЗакрытия = ДатаЗакрытия;
    Движение.ЗаявкуПринял = ОтветственныйЗаявкуПринял;
    Движение.Сотрудник = Сотрудник;
    Движение.Закрыта = Закрыта;
    Движение.Аппаратура = Аппаратура;
    Движение.Уехал = Уехал;
    Движение.ВремяТочноНазначено = ВремяТочноНазначено;
    Движение.ПромежутокВыезда = ПромежутокВыезда;
    КонецЦикла;
11 kosmax1991
 
21.11.13
10:40
Может я чего то не догоняю, но в этом цикле он должен обойти все строки, обратиться к одним и тем же полям и сделать столько же записей, сколько и строк.
12 CHerypga
 
21.11.13
10:41
(10) при первом проходе по такому циклу в переменную ТаблВыездыПоЗаявке будет помещена строка табличной части, соответственно обращаться следует ТаблВыездыПоЗаявке.Контрагент, а не Контрагент. ну и все остальные так же.
13 CHerypga
 
21.11.13
10:42
(12)+ соответственно при втором проходе в ТаблВыездыПоЗаявке будет вторая строка
14 kosmax1991
 
21.11.13
10:42
А сотрудник берется из ТЧ документа
15 CHerypga
 
21.11.13
10:43
(14) ты берешь какую-то переменую Сотрудник, а к элементу строки табличной части следует обращаться ТаблВыездыПоЗаявке.Сотрудник
16 vhl
 
21.11.13
10:45
Для Каждого ТаблВыездыПоЗаявке Из ВыездыПоЗаявке Цикл    
    Движение = Движения.УЗ_ЗаявкиВТехподдержкуВыезды.Добавить();
ЗаполнитьЗначениеСвойств(Движение,ЭтотОбъект);
ЗаполнитьЗначениеСвойств(Движение,ТаблВыездыПоЗаявке);
Движение.ДатаЗаявки = Дата;
Движение.Период = Дата;
Конеццикла;
17 Ork
 
21.11.13
10:45
(14) Почитайте уже за работу с коллекциями. У вас в коде нигде нет ссылки на текущую строку выборки. Или вы думаете оно само догадается из какой строки брать например "ОтветственныйЗаявкуПринял"?
18 kosmax1991
 
21.11.13
10:59
Кто может написать пример, как в цикле обратиться именно к "текущей", "перебираемой" строке, дабы из нее получить инфу?
19 kosmax1991
 
21.11.13
11:07
Поправил код, ошибку не выдает при проведении, но все равно в отчет только по первому инфа попадает.

Для Каждого ТаблВыездыПоЗаявке Из ВыездыПоЗаявке Цикл    
    // регистр УЗ_ЗаявкиВТехподдержкуВыезды
    Движение = Движения.УЗ_ЗаявкиВТехподдержкуВыезды.Добавить();
    Движение.Период = Дата;
    Движение.Контрагент = Контрагент;
    Движение.Организация = Организация;
    Движение.ОтветственныйЗаВыполнениеЗаявки = ОтветственныйЗаВыполнениеЗаявки;
    Движение.ДатаВыезда = ДатаВыезда;
    Движение.ВремяВыезда = ТаблВыездыПоЗаявке.ВремяВыезда;
    Движение.Сотрудник = ТаблВыездыПоЗаявке.Сотрудник;
    Движение.ВидЗаявки = ВидЗаявки;
    Движение.ТипЗаявки = ТипЗаявки;
    Движение.ДатаЗаявки = Дата;
    Движение.ДатаЗакрытия = ДатаЗакрытия;
    Движение.ЗаявкуПринял = ОтветственныйЗаявкуПринял;
    Движение.Закрыта = Закрыта;
    Движение.Аппаратура = Аппаратура;
    Движение.Уехал = Уехал;
    Движение.ВремяТочноНазначено = ВремяТочноНазначено;
    Движение.ПромежутокВыезда = ПромежутокВыезда;
    КонецЦикла;
20 catena
 
21.11.13
11:08
(19)В какой отчет?
21 vhl
 
21.11.13
11:13
(18) В (16) слишком короткий чтоли для тебя?
22 hhhh
 
21.11.13
11:16
(21) там похоже что-то из ТЧ, а что-то из шапки документа берется у него.
23 CHerypga
 
21.11.13
11:22
(18) какие именно данные находятся в табличной части?
24 kosmax1991
 
21.11.13
11:27
Сотрудник
ДатаВыезда
ВремяВыезда
ПромежутокВыезда
25 catena
 
21.11.13
11:29
(24)В какой отчет попадает инфа только по первому сотруднику???
26 CHerypga
 
21.11.13
11:31
(24) почему тогда пишешь
Движение.ДатаВыезда = ДатаВыезда; а не
Движение.ДатаВыезда = ТаблВыездыПоЗаявке.ДатаВыезда;
и
Движение.ПромежутокВыезда = ПромежутокВыезда; а не
Движение.ПромежутокВыезда = ТаблВыездыПоЗаявке.ПромежутокВыезда;

эти данные ведь в строке табличной части, а не где-то там
27 CHerypga
 
21.11.13
11:33
(26)+ а еще бы не помешало увидеть где в коде находится запись в регистр. и где предварительная очистка регистра
28 vhl
 
21.11.13
11:43
(22)  ЗаполнитьЗначениеСвойств(Движение,ЭтотОбъект) для чего по твоему?
29 vhl
 
21.11.13
11:44
(27) Кстати да, автор пишет "в модуле объекта", но в процедуре ли это проведения - не факт :)
30 kosmax1991
 
21.11.13
11:47
Документ является регистратором данного регистра, этого не достаточно для записи?
31 vhl
 
21.11.13
11:50
(30) В каком месте модуля ты пишешь этот текст?
32 hhhh
 
21.11.13
11:50
(28) извини, что-то не увидел эту строчку.
33 hhhh
 
21.11.13
11:51
(30) недостаточно
34 1dvd
 
21.11.13
11:53
Записывать ещё не предлагали?
35 vhl
 
21.11.13
11:54
(24) у тебя код не верный в (19).
Сколько раз тебе еще надо накосячить, чтобы скопипастить код из (16) ?
36 kosmax1991
 
21.11.13
11:59
Процедура ОбработкаПроведения(Отказ, Режим)
37 exwill
 
21.11.13
12:03
(19) Значит, такой отчет.
38 1dvd
 
21.11.13
12:03

// до цикла вставь
Движения.УЗ_ЗаявкиВТехподдержкуВыезды.Записывать = Истина;
39 kosmax1991
 
21.11.13
12:06
Когда пробую с кодом из (16), выдает ошибку: "Процедура или функция с указанным именем не определена"
40 catena
 
21.11.13
12:08
(39)ЗаполнитьЗначени_Я_Свойств

И все-таки ответь: в каком отчете ты смотришь, что движения делаются не правильно?
41 kosmax1991
 
21.11.13
12:10
Отчет называется "РаботыПоЗаявкам". Ошибка ушла) Но все равно в отчет только по одному попадает.
42 vhl
 
21.11.13
12:14
(39) ЗаполнитьЗначенияСвойств
43 exwill
 
21.11.13
12:15
(41) Это хорошо, что он так называется. А что в ем внутри?
44 vhl
 
21.11.13
12:18
(43) неонка же :)
45 catena
 
21.11.13
12:37
(41)А что говорит выборка из регистра по регистратору?
46 kosmax1991
 
21.11.13
12:53
В регистре нет никаких кодов.
47 catena
 
21.11.13
12:56
(46)А какие там должны быть кода?
48 1dvd
 
21.11.13
12:56
Нет. стоп. (38) надо в цикл вставить
49 kosmax1991
 
21.11.13
13:01
Вставил в цикл - ничего не изменилось.
50 kosmax1991
 
21.11.13
13:03
Чтобы тестовую выборку из регистра сделать - надо код писать?
51 catena
 
21.11.13
13:05
(50)Можно форму списка регистра открыть и посмотреть. Если с кодом совсем тяжко. Всё-таки подозрение, что отчет кривой, а не документ.
52 vhl
 
21.11.13
13:10
(49) ты (16)+(42) сделал? Или так и будешь гадать на кофейно гуще?
53 kosmax1991
 
21.11.13
13:39
сделал
54 1dvd
 
21.11.13
13:40
(53) выкладывай
55 kosmax1991
 
21.11.13
13:40
и ничего не изменилось
56 vhl
 
21.11.13
14:50
(55) Ну, значит судьба
57 kosmax1991
 
21.11.13
14:58
Не вариант
58 hhhh
 
21.11.13
15:14
в меню открываешь Операции-Регистры сведений - УЗ_ЗаявкиВТехподдержкуВыезды и смотри. Нафига отчеты какие-то тебе?
59 kosmax1991
 
02.12.13
08:31
Всем спасибо. Ваши советы + немного поправил отчет и все заработало!)