|
УТ 11 Запись в регистр сведений не уникальна | ☑ | ||
---|---|---|---|---|
0
Terras
14.02.19
✎
04:28
|
Доброго времени суток, уважаемые форумчане!
Наитупейший вопрос: При записи в регистр сведений подчиненный регистратору ругается на ошибку: запись с такими ключевыми полями существует. Структура регистра: Измерения: ОсновнаяНоменклатура (СправочникСсылка.Номенклатура) СопутствующаяНоменклатура (СправочникСсылка.Номенклатура) РазмерОсновнойНоменклатуры(СправочникСсылка.ЗначениеСвойствОбъектов) РазмерСопутствующейНоменклатуры(СправочникСсылка.ЗначениеСвойствОбъектов) Ресурсы: ДокументПродажи (ДокументСсылка.ЧекККМ) Проведение осуществляется в подписке "ПриПроведенииДокумента". Привязана к ЧекуККМ. Код процедуры проведения: Процедура ПродажиСопустствующейОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт ТаблицаДвижений = Источник.Товары.Выгрузить(); //ТаблицаДвижений.Свернуть("Номенклатура, Характеристика","Количество,Сумма"); ТаблицаДвижений.Колонки.Добавить("Размер",Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов")); Для каждого строка из ТаблицаДвижений цикл Строка.Размер = ПолучитьРазмер(Строка.Характеристика,Строка.Номенклатура); КонецЦикла; ТаблицаДвижений.Свернуть("Номенклатура,Размер","Количество,Сумма"); Если ТИПЗнч(Источник) = ТИП("ДокументОбъект.ЧекККМ") И ТаблицаДвижений.Количество()>0 тогда Источник.Движения.ПродажиСопустствующей.Записывать = Истина; Источник.Движения.ПродажиСопустствующей.Очистить(); Для каждого строка из ТаблицаДвижений цикл Для каждого строкаСопутствующей из ТаблицаДвижений цикл Если СтрокаСопутствующей.Номенклатура = Строка.Номенклатура и СтрокаСопутствующей.Размер = Строка.Размер тогда Продолжить; КонецЕсли; Движение = Источник.Движения.ПродажиСопустствующей.Добавить(); Движение.ОсновнаяНоменклатура = Строка.Номенклатура; Движение.РазмерОсновнойНоменклатуры = Строка.Размер; Движение.СопутствующаяНоменклатура = СтрокаСопутствующей.Номенклатура; Движение.РазмерСопутствующейНоменклатуры = СтрокаСопутствующей.Размер; Движение.ДокументПродажи = Источник.Ссылка; КонецЦикла; КонецЦикла; КонецЕсли; КонецПроцедуры При этом почти такой же код пишу еще в обработке, чтобы заполнить движения по старым документам: Процедура ПровестиПродажиСопутствующихНаСервере() Запрос = Новый запрос; Запрос.Текст = "ВЫБРАТЬ | ЧекККМ.Ссылка КАК Ссылка |ИЗ | Документ.ЧекККМ КАК ЧекККМ |ГДЕ | ЧекККМ.Проведен = ИСТИНА | |СГРУППИРОВАТЬ ПО | ЧекККМ.Ссылка | |УПОРЯДОЧИТЬ ПО | Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() цикл Источник = Выборка.Ссылка.ПолучитьОбъект(); Источник.ОбменДанными.Загрузка = Истина; ТаблицаДвижений = Источник.Товары.Выгрузить(); //ТаблицаДвижений.Свернуть("Номенклатура,Характеристика","Количество,Сумма"); ТаблицаДвижений.Колонки.Добавить("Размер",Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов")); Для каждого строка из ТаблицаДвижений цикл Строка.Размер = Подписки.ПолучитьРазмер(Строка.Характеристика,Строка.Номенклатура); КонецЦикла; ТаблицаДвижений.Свернуть("Номенклатура,Размер","Количество,Сумма"); Если ТИПЗнч(Источник) = ТИП("ДокументОбъект.ЧекККМ") И ТаблицаДвижений.Количество()>0 тогда Источник.Движения.ПродажиСопустствующей.Записывать = Истина; Источник.Движения.ПродажиСопустствующей.Очистить(); Для каждого строка из ТаблицаДвижений цикл Для каждого строкаСопутствующей из ТаблицаДвижений цикл Если СтрокаСопутствующей.Номенклатура = Строка.Номенклатура и СтрокаСопутствующей.Размер = Строка.Размер тогда Продолжить; КонецЕсли; Движение = Источник.Движения.ПродажиСопустствующей.Добавить(); Движение.ОсновнаяНоменклатура = Строка.Номенклатура; Движение.РазмерОсновнойНоменклатуры = Строка.Размер; Движение.СопутствующаяНоменклатура = СтрокаСопутствующей.Номенклатура; Движение.РазмерСопутствующейНоменклатуры = СтрокаСопутствующей.Размер; Движение.ДокументПродажи = Источник.Ссылка; КонецЦикла; КонецЦикла; Источник.Движения.ПродажиСопустствующей.ОбменДанными.Загрузка = Истина; Источник.Движения.ПродажиСопустствующей.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры т.е. история какая: Если провожу документ, когда регистр сведений вообще пустой, все ок. Если провожу тот же документ когда регистр сведений заполнен обработкой, то ругается на неуникальность. Уже мозг взорвался, что не так? Где то беспощадно туплю, а вот где понять не могу... помогите, пожалуйста. В документе стоит не удалять движения автоматически. |
|||
1
breezee
14.02.19
✎
06:08
|
Вы отбор не накладываете.
Набор = Набор.СозатьНаборЗаписи() Набор =Набор.МоеИзмерение.Отбор = мойкреквизита Набор.Прочитаь() //изменить Набор.Записать() По памяти, синаксис может не работать |
|||
2
Terras
14.02.19
✎
06:21
|
(1) Пробовала с отбором - та же песня. Если через движения, то там отбор уже по умолчанию присутствует и читать тоже не надо, оно уже прочитанное.
|
|||
3
Terras
14.02.19
✎
06:22
|
ну и соответственно регистратор и период пишутся автоматом через движения тоже.
|
|||
4
Terras
14.02.19
✎
07:19
|
блин! я тупая! периодичность по позиции регистратора решает. Все вопрос закрыт))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |