helpf.pro
Регистрация

v8.2 УП: вопрос по обработке проведения документа

SvetaT04
24.02.2012 15:38Прочитано: 2337
Добрый день!
Помогите, пожалуйста, правильно написать процедуру обработки проведения документа!
Документ "ПролонгацияДоговоров" пишется в периодический независимый регистр сведений "ЖурналИзмененийДоговоров": измерение - ДоговорКонтрагента, ресурсы - ДатаВступленияВСилу, ДокументРегистратор, СрокДействия, Ответственный. Структуру регистра менять нельзя.
По написанной процедуре обработки проведения (см. код ниже) при повторном проведении документа возникает ошибка: Запись с такими ключевыми полями существует! :...
Код 1C v 8.2 УП
 НаборЗаписей=РегистрыСведений.ЖурналИзмененийДоговоров.СоздатьНаборЗаписей();

Для каждого СтрокаДанных Из Договора Цикл
Запись=НаборЗаписей.Добавить();
Запись.Период=Дата;
Запись.ДоговорКонтрагента = СтрокаДанных.ДоговорКонтрагента;
Запись.СрокДействия=СтрокаДанных.СрокДействияПослеПролонгации;
Запись.ДатаВступленияВСилу=Дата;
Запись.Ответственный=Ответственный;
Запись.ДокументРегистратор=ЭтотОбъект.Ссылка;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Yandex
Возможно, вас также заинтересует
Реклама на портале
davointer
24.02.2012 16:37Ответ № 1
Вам необходимо заранее сделать нужные отборы:

Код 1C v 8.х
 НаборЗаписей.Отбор.Период.Установить(Дата);   

Изменено 24.02.12 16:38:10
SvetaT04
24.02.2012 16:50Ответ № 2
Пробовала, не помогает, такая же ошибка.
davointer
24.02.2012 17:07Ответ № 3
Так пробовали?

Код 1C v 8.х
 Для каждого СтрокаДанных Из Договора Цикл
НаборЗаписей=РегистрыСведений.ЖурналИзмененийДоговоров.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Период.Установить(Дата);
НаборЗаписей.Отбор.ДоговорКонтрагента.Установить(ДоговорКонтрагента);

Запись=НаборЗаписей.Добавить();
Запись.Период=Дата;
Запись.ДоговорКонтрагента = СтрокаДанных.ДоговорКонтрагента;
Запись.СрокДействия=СтрокаДанных.СрокДействияПослеПролонгации;
Запись.ДатаВступленияВСилу=Дата;
Запись.Ответственный=Ответственный;
Запись.ДокументРегистратор=ЭтотОбъект.Ссылка;

НаборЗаписей.Записать(Ложь);
КонецЦикла;
SvetaT04
24.02.2012 17:30Ответ № 4
Да, пробовала! Таже ошибка.
Mokey
28.02.2012 10:13Ответ № 5
Сначала очищайте записи набора по отбору, а потом заполняйте новыми данными. Ошибка возникает потому, что измерение у Вас одно, и оно должно быть уникальным.
Код 1C v 8.х
 
НаборЗаписей=РегистрыСведений.ЖурналИзмененийДоговоров.СоздатьНаборЗаписей();
Для каждого СтрокаДанных Из Договора Цикл
НаборЗаписей.Отбор.Период.Установить(Дата);
НаборЗаписей.Отбор.ДоговорКонтрагента.Установить(ДоговорКонтрагента);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количесто() > 0 Тогда
НаборЗаписей.Очистить();
КонецЕсли;
Запись=НаборЗаписей.Добавить();
Запись.Период=Дата;
Запись.ДоговорКонтрагента = СтрокаДанных.ДоговорКонтрагента;
Запись.СрокДействия=СтрокаДанных.СрокДействияПослеПролонгации;
Запись.ДатаВступленияВСилу=Дата;
Запись.Ответственный=Ответственный;
Запись.ДокументРегистратор=ЭтотОбъект.Ссылка;
НаборЗаписей.Записать(Ложь);
КонецЦикла;
Mokey
28.02.2012 10:18Ответ № 6
Либо, как вариант, если запись найдена, то её редактируем и зписываем, если нет, то добавляем новцю запись
Код 1C v 8.х
 
НаборЗаписей=РегистрыСведений.ЖурналИзмененийДоговоров.СоздатьНаборЗаписей();
Для каждого СтрокаДанных Из Договора Цикл
НаборЗаписей.Отбор.Период.Установить(Дата);
НаборЗаписей.Отбор.ДоговорКонтрагента.Установить(ДоговорКонтрагента);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количесто()=0 Тогда
Запись=НаборЗаписей.Добавить();
Иначе
Запись=НаборЗаписей[0]; //при условии, что запись такая одна!!!
КонецЕсли;
Запись.Период=Дата;
Запись.ДоговорКонтрагента = СтрокаДанных.ДоговорКонтрагента;
Запись.СрокДействия=СтрокаДанных.СрокДействияПослеПролонгации;
Запись.ДатаВступленияВСилу=Дата;
Запись.Ответственный=Ответственный;
Запись.ДокументРегистратор=ЭтотОбъект.Ссылка;
НаборЗаписей.Записать(Ложь);
КонецЦикла;
SvetaT04
05.03.2012 14:09Ответ № 7
Вопрос закрыт!
Изменено 05.03.12 14:12:39
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.