Загадка века Непреднамеренное изменение реквизита справочника пр программной обработке

1. ElGatoGris 10.02.23 06:46 Сейчас в теме
Было сделано следующее:
- в справочник Номенклатура из расширения были добавлены реквизиты и табличная часть. В расширение были заимствованы все реквизиты справочника
- была написана обработка, которая заполняла эти реквизиты

Для каждого Строка Из ДанныеЗаполненияРеквизитов Цикл
	
		НоменклатураСсылка = Строка["Номенклатура"];
		
		Если НоменклатураСсылка <> Справочники.Номенклатура.ПустаяСсылка() Тогда
			
			Номенклатура = НоменклатураСсылка.ПолучитьОбъект();
			
			Номенклатура["Реквизит1] = Строка["Реквизит1"];
			Номенклатура["Реквизит2"] = Строка["Реквизит2"];
			Номенклатура["Реквизит3"] = Строка["Реквизит3"];
			Номенклатура["Реквизит4"] = Строка["Реквизит4"];
			
			Отбор = Новый Структура;
			Отбор.Вставить("Номенклатура", НоменклатураСсылка);
			
			СтрокиОтбор = ДанныеЗаполненияТЧ.НайтиСтроки(Отбор);
			
			Для каждого СтрокаОтбор Из СтрокиОтбор Цикл
			
				СтрокаНоменклатураТЧ = Номенклатура.ТабличнаяЧасть.Добавить();
				
				СтрокаНоменклатураТЧ ["РеквизитТЧ1"] = СтрокаОтбор ["РеквизитТЧ1"];
				СтрокаНоменклатураТЧ ["РеквизитТЧ2"] = СтрокаОтбор ["РеквизитТЧ1"];
				СтрокаНоменклатураТЧ ["РеквизитТЧ3"] = СтрокаОтбор ["РеквизитТЧ1"];
				СтрокаНоменклатураТЧ ["РеквизитТЧ4"] = СтрокаОтбор ["РеквизитТЧ1"];
			
			КонецЦикла;
			
			Номенклатура.Записать();
			
		КонецЕсли;
	
	КонецЦикла;
Показать


В результате было потеряно значение реквизита "КодТНВЭД" во всех обработанных карточках номенклатуры.. Как такое получилось и как подобного избежать впредь?
Найденные решения
7. PowerBoy 3369 10.02.23 10:11 Сейчас в теме
Потому что вот так надо записывать, мало ли чего там в обработчиках!

Номенклатура.ОбменДанными.Загрузка=Истина;
Номенклатура.Записать();
Fatenm; ElGatoGris; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1863362 10.02.23 08:38 Сейчас в теме
Загадка века
А что бы вам было веселее её отгадывать, я заменю некторые фрагменты кода на случайные слова, потому что идентификаторы реквизитов в Нашей Организации Очень Секретные.

Ну ок. Вот этой строкой:
Номенклатура["Реквизит1] = Строка["Реквизит1"];
Ты сам всё и очистил.
DesertPunk; DBV; +2 Ответить
3. ElGatoGris 10.02.23 08:48 Сейчас в теме
(2)Нет, реквизиты только добавленные. При копировании из строки кавычка убежала )) И да, "Реквизит!" никак не равно "КодТНВЭД".
4. bad_wag 48 10.02.23 09:17 Сейчас в теме
Отгадка века: (да чего уж там, тысячелетия!!!)
заполни тнвэд в какой нибудь номенклатуре, запусти свою обработку, трассировкой отлови место где этот реквизит очищается
5. ElGatoGris 10.02.23 09:55 Сейчас в теме
(4) Видимо так и придётся сделать.
Загадочность происшествия усиливается тем обстоятельством, что значение реквизита пропало не во всех карточках ))
6. bad_wag 48 10.02.23 10:09 Сейчас в теме
(5)
Загадочность происшествия усиливается


полтергейст, не иначе! :)
8. lefthander 10.02.23 10:18 Сейчас в теме
(5)"А был ли мальчик, Карл?" - Может там и не было в карточках ничего?
9. ElGatoGris 10.02.23 11:33 Сейчас в теме
(8)Было предоставлено доказательство в виде сравнения двух последовательных версий карточки.
7. PowerBoy 3369 10.02.23 10:11 Сейчас в теме
Потому что вот так надо записывать, мало ли чего там в обработчиках!

Номенклатура.ОбменДанными.Загрузка=Истина;
Номенклатура.Записать();
Fatenm; ElGatoGris; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот