Не все реквизиты записываются в справочнике

1. user1979322 21.05.25 11:06 Сейчас в теме
Всем привет, программно записываю данные в справочник. Данные в отладчике вижу, а в справочнике после записи их почему то нет
Вот кусок кода
	НовыйШтрихкодыУпаковокТоваров                        = СпрШтрихкодыУпаковокТоваров.СоздатьЭлемент();  			 
   			НовыйШтрихкодыУпаковокТоваров.ДатаУпаковки           = ДатУп;  
			НовыйШтрихкодыУпаковокТоваров.ЗначениеШтрихкода      = ШтрихКодПоиск; 
			НовыйШтрихкодыУпаковокТоваров.Номенклатура           = СсылкаНаименование; // Записываем ссылку на номенклатуру  
			НовыйШтрихкодыУпаковокТоваров.Количество = КолВо; 
			//НовыйШтрихкодыУпаковокТоваров.Количество  = 2.000;  // Потому что в наборе всегда 2-ве позиции                               
			Индекс=0;    
			Пока КлючИЗначение.Значение.Количество()>Индекс Цикл   								
				// Из массива QR кодов вытаскиваю данные и записываю в справочник
				QR_код=КлючИЗначение.Значение[Индекс];
				Сообщить(" QR код: " +QR_код);  
				СтруктураШтрихКода=РазборКодаМаркировкиИССлужебный.РазобратьКодМаркировки(QR_код, Неопределено, Неопределено,Неопределено, Неопределено);

				//Заполняю тип штрих кода
				НовыйШтрихкодыУпаковокТоваров.ТипШтрихкода      = СтруктураШтрихКода.ТипШтрихкода;        			 				
				//Заполняю ТипУпаковки
				Если Число(КолВо)>1 Тогда   
					НовыйШтрихкодыУпаковокТоваров.ТипУпаковки = Перечисления.ТипыУпаковок.МонотоварнаяУпаковка;   // 	МаркированныйТовар	  
				Иначе 
					НовыйШтрихкодыУпаковокТоваров.ТипУпаковки=Перечисления.ТипыУпаковок.МаркированныйТовар;
				КонецЕсли;
				// Записываю в ТЧ
				 
				НоваяСтрокаТЧ           = НовыйШтрихкодыУпаковокТоваров.ВложенныеШтрихкоды.Добавить();
				НоваяСтрокаТЧ.Штрихкод  = СтруктураШтрихКода.НормализованныйКодМаркировки; 
				   				
				Индекс=Индекс+1;
			КонецЦикла;	 
			НовыйШтрихкодыУпаковокТоваров.Записать(); 	
		КонецЕсли;   
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 21.05.25 11:10 Сейчас в теме
(1)
НовыйШтрихкодыУпаковокТоваров.Количество = КолВо;

Ну ты же явно в коде присваиваешь количество.
Видимо у тебя в КолВо 0.


Варианта 2:
1) На форме выводится не реквизит Количество элемента справочника, а что-то другое.
2) В модуле объекта в ПередЗаписью реквизит Количество перезаполняется.
3. user1979322 21.05.25 11:13 Сейчас в теме
(2) На картинке показано, что в отладчике количество записалось (красным цветом 2 обвел овалом). А почему не видны штрих кода в отладчике, хотя значение имеется, то же выделил красным цветом в таболо, не понимаю
4. Sashares 33 21.05.25 11:15 Сейчас в теме
(3)
А почему не видны штрих кода в отладчике, хотя значение имеется


Скорее всего разный тип значения у реквизита ТЧ и у присваиваемого значения.
Вангую, что вложенный штрихкод в ТЧ - это ссылка на справочник.
5. user1979322 21.05.25 11:20 Сейчас в теме
(4) Да вы правы, но здесь тип данных сам на себя ссылается, как с этим работать не понимаю. Потому что значения которые хочу записать, они уникальные. И почему количество не сохраняется, хотя записывается в отладке видно
Прикрепленные файлы:
6. Sashares 33 21.05.25 11:22 Сейчас в теме
(5) Новый элемент справочника создавать с кодом вложенного штрихкода упаковки, записывать, и присваивать эту ссылку в исходный (главный) элемент справочника.
10. user1979322 21.05.25 11:47 Сейчас в теме
(6) Я с этими QR кодами первый раз сталкиваюсь. Мне сказали, что имеется палет и у него есть код который я записываю как на картинке. В палете имеются QR коды (продукция) которые уникальные и я не могу их записать. На сколько я понял вы советуете создать справочник с номером QR кода и в него прописать номер палета и в ТЧ записать этот же QR код, а у меня несколько QR кодов (продукция). То есть нужно сначала создать Справочники с номерами QR кодов, а затем в каждом этом справочнике одинаково заполнить табличную часть. Что то не правильно я понял
Прикрепленные файлы:
11. Sashares 33 21.05.25 11:50 Сейчас в теме
(10) Нет.
1. Создаешь элемент справочника для палета по коду как на картинке. Не записываешь.
2. По каждому вложенному коду создаешь новый элемент справочника (с этим вложенным кодом, очевидно), ТЧ у него НЕ заполняешь. Записываешь элемент для вложенного кода. Добавляешь ссылку в ТЧ элемента из п.1.
3. Записываешь элемент из п.1.
12. user1979322 21.05.25 12:00 Сейчас в теме
(11) Правильно я понимаю. Например если у меня в 1-ом палете 2-ве позиции (QR-коды), тогда я должне создать 3-и справочники.
1 Справочник записываю номер палета
2 Справочник Создаю с 1-м QR кодом - при чем это будет код справочника. Сохраняю
3 Справочник Создаю со 2-м QR кодом - при чем это будет код справочника. Сохраняю

Заполняю табличную часть 1 Справочника с 1-м QR кодом и 2-м QR кодом и Сохраняю
13. Sashares 33 21.05.25 12:01 Сейчас в теме
(12) Имхо, да.
По поводу правильности алгоритма заполнения реквизитов можешь уточнить еще у постановщика задачи.
7. Sashares 33 21.05.25 11:23 Сейчас в теме
(5)
И почему количество не сохраняется, хотя записывается в отладке видно


Еще раз - посмотри в модуле объекта справочника процедуру ПередЗаписью.
8. user1979322 21.05.25 11:31 Сейчас в теме
(7) Посмотрел там нет записи в реквизит количество
Процедура ПередЗаписью(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	Если Не (ДополнительныеСвойства.Свойство("НеРассчитыватьКоличествоВложенныхШтрихкодов")
		И ДополнительныеСвойства.НеРассчитыватьКоличествоВложенныхШтрихкодов) Тогда
	
		РассчитатьКоличествоВложенныхШтрихкодов();
		
	КонецЕсли;
	
	Если Не (ДополнительныеСвойства.Свойство("НеРассчитыватьХешСумму")
		И ДополнительныеСвойства.НеРассчитыватьХешСумму) Тогда
		
		Если ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
			ХешСумма = "";
		Иначе
			ДанныеДляВычисления = Справочники.ШтрихкодыУпаковокТоваров.ДанныеДляВычисленияХешСуммы(ЭтотОбъект);
			ХешСумма = Справочники.ШтрихкодыУпаковокТоваров.ХешСуммаСодержимогоУпаковки(ДанныеДляВычисления);
		КонецЕсли;
		
	КонецЕсли;
	
	ХешСуммаЗначенияШтрихкода = ОбщегоНазначенияИС.ХэшСуммаСтроки(ЗначениеШтрихкода);
	
	ЗаполнениеСлужебныхПолейДляGS1();
	
	ИнтеграцияИСПереопределяемый.ПередЗаписьюОбъекта(ЭтотОбъект, Отказ);
	
КонецПроцедуры
Показать
9. Sashares 33 21.05.25 11:36 Сейчас в теме
(8)
Посмотрел там нет записи в реквизит количество


Ох, чел...

РассчитатьКоличествоВложенныхШтрихкодов();


Вот тут смотри.
Название процедуры как бы намекает что в ней делается.

Upd. Если реквизит Количество это количество вложенных штрихкодов, то если ты будешь заполнять правильно реквизит Штрихкод в ТЧ, все будет работать правильно - количество будет верным.
А раз у тебя сейчас штрихкод в ТЧ пустой - то и количество вложенных штрихкодов = 0.
aezdakov; +1 Ответить
14. user1979322 21.05.25 13:17 Сейчас в теме
(9) Табличная часть с Штрих кодами заполняется корректно, а количество не прописывается. Я с этой процедурой разобраться не могу

Процедура РассчитатьКоличествоВложенныхШтрихкодов() Экспорт
	
	Итоги = Новый Структура("УчетноеКоличество, ТолькоШтучнаяПродукция, КоличествоПотребительскихУпаковок", 0, Истина, 0);
	
	Если ВложенныеШтрихкоды.Количество() Тогда
		
		МассивВложенныхШтрихкодов = ВложенныеШтрихкоды.Выгрузить(, "Штрихкод").ВыгрузитьКолонку("Штрихкод");
		
		Результат = ШтрихкодированиеИС.ВложенныеШтрихкодыУпаковок(
			МассивВложенныхШтрихкодов,
			ШтрихкодированиеОбщегоНазначенияИС.ПараметрыСканирования(ЭтотОбъект));
		
		Для Каждого СтрокаДерева Из Результат.ДеревоУпаковок.Строки Цикл
			
			ПроизвольнаяЕдиницаУчета = ЗначениеЗаполнено(СтрокаДерева.Номенклатура) И СтрокаДерева.ПроизвольнаяЕдиницаУчета;
			
			Итоги.ТолькоШтучнаяПродукция = Итоги.ТолькоШтучнаяПродукция И Не ПроизвольнаяЕдиницаУчета;
			
			Если СтрокаДерева.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
				Если ПроизвольнаяЕдиницаУчета Тогда
					Итоги.УчетноеКоличество                 = Итоги.УчетноеКоличество                 + СтрокаДерева.КоличествоПоДаннымИБ;
					Итоги.КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок + 1;
				Иначе
					Итоги.УчетноеКоличество                 = Итоги.УчетноеКоличество                 + 1;
					Итоги.КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок + 1;
				КонецЕсли;
			Иначе
				Если ПроизвольнаяЕдиницаУчета Тогда
					Итоги.УчетноеКоличество                 = Итоги.УчетноеКоличество                 + СтрокаДерева.КоличествоПоДаннымИБ;
					Итоги.КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок + СтрокаДерева.КоличествоПотребительскихУпаковокПоДаннымИБ;
				Иначе
					Итоги.УчетноеКоличество                 = Итоги.УчетноеКоличество                 + СтрокаДерева.КоличествоПотребительскихУпаковокПоДаннымИБ;
					Итоги.КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок + СтрокаДерева.КоличествоПотребительскихУпаковокПоДаннымИБ;
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
		Если Итоги.ТолькоШтучнаяПродукция Тогда
			Количество                        = Итоги.КоличествоПотребительскихУпаковок;
			КоличествоПотребительскихУпаковок = 0;
		Иначе
			Количество                        = Итоги.УчетноеКоличество;
			КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок;
		КонецЕсли;
		
	КонецЕсли;
	
Показать


я не понимаю что и как в этих строчках происходит
Итоги.УчетноеКоличество                 = Итоги.УчетноеКоличество                 + СтрокаДерева.КоличествоПотребительскихУпаковокПоДаннымИБ;
Итоги.КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок + СтрокаДерева.КоличествоПотребительскихУпаковокПоДаннымИБ;


тем более у меня
ВложенныеШтрихкоды.Количество()=2


Перезаписывается количество здесь, но почему так не понимаю
Если Итоги.ТолькоШтучнаяПродукция Тогда
			Количество                        = Итоги.КоличествоПотребительскихУпаковок;
			КоличествоПотребительскихУпаковок = 0;
		Иначе
			Количество                        = Итоги.УчетноеКоличество;
			КоличествоПотребительскихУпаковок = Итоги.КоличествоПотребительскихУпаковок;
		КонецЕсли;
15. user1979322 21.05.25 13:53 Сейчас в теме
Где то в функции заполняется переменная КоличествоПотребительскихУпаковокПоДаннымИБ, не могу найти. Точку останова ставил и каждый раз когда проваливался в функцию через поиск искал не находит почему то. Может подскажите хитрости какие ни будь.

Результат = ШтрихкодированиеИС.ВложенныеШтрихкодыУпаковок(
			МассивВложенныхШтрихкодов,
			ШтрихкодированиеОбщегоНазначенияИС.ПараметрыСканирования(ЭтотОбъект));
16. Sashares 33 21.05.25 13:53 Сейчас в теме
Оставьте свое сообщение

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