Заполнение строк табличной части

1. VKuser367237669 13.12.23 09:54 Сейчас в теме
Доброго времени суток!

Столкнулся с необходимостью проверять табличную часть в документе на актуальность. Данные для этой ТЧ могут измениться с момента заполнения по остаткам из регистров и до момента записи и проведения. Для этого я выгрузил существующую ТЧ в Таблицу значений и так же запросом получил Таблицу значений актуальных данных. Далее я каждую строку моих ТЗ перевожу в структуру для дальнейшего сравнения через ОбщегоНазначения.ДанныеСовпадают. И вот в этот момент когда данные не совпадают мне нужно получить каким то образом текущую строку ТЧ и перезаписать ее например через ЗаполнитьЗначенияСвойств новыми данными.

Проблема именно в получении текущей строки, а именно индекса. Ведь насколько я понимаю с индексом я смогу написать ЗаполнитьЗначенияСвойств(ТЧ[ИндексСтроки], АктуальныеДанные).

Ниже в коде я пытался найти строку нужную мне через НайтиСтроку() и в дальнейшем использовать ее как индекс, но безуспешно. Пробовал я это потому что ранее с помощью этого же метода я мог удалить строку :

МассивСтрок = Объект.Отправления.НайтиСтроки(Новый Структура("НомерОтправления", Строка.НомерОтправления));
			
			Для каждого СтрокаМассива Из МассивСтрок Цикл 
				Объект.Отправления.Удалить(СтрокаМассива);
			КонецЦикла;

фф

Буду рад любой подсказке!

Выборка = Запрос.Выполнить().Выбрать();
	
	АктуальныеОтправления = Новый Массив();
	
	АктуальныеОтправленияТЗ = Запрос.Выполнить().Выгрузить();
	
	Пока Выборка.Следующий() Цикл
		АктуальныеОтправления.Добавить(Выборка.ВнутреннийИДОтправления); 	
	КонецЦикла;
	
	НомерОтправления = "";
	ПроверяемыеОтправления = Объект.Отправления.Выгрузить();
	КоличествоУдаленных = 0;
	
	
	Для каждого Строка Из ПроверяемыеОтправления Цикл 
		
		Для Каждого СтрокаТЗ ИЗ АктуальныеОтправленияТЗ Цикл
			
			ПараметрыСтрокиСтарой 	        = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Строка); 	
			ПараметрыСтрокиАктуальной 	= ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);
			
				
			Если НЕ ОбщегоНазначения.ДанныеСовпадают(ПараметрыСтрокиСтарой 	        , ПараметрыСтрокиАктуальной 	) Тогда
				
				ПараметрыОтбора = Новый Структура("ИДОтправления", Строка.ИДОтправления);
				СтрокиИсправляемые = Объект.Отправления.НайтиСтроки(ПараметрыОтбора);	
				//СтрокаИсправляемая = СтрокиИсправляемые[0];  
				
				пСтрока = Объект.Отправления.НайтиПоИдентификатору(
				
				Для Каждого СтрокаМассива ИЗ СтрокиИсправляемые Цикл
					
					ЗаполнитьЗначенияСвойств(Объект.Отправления[СтрокаМассива], ПараметрыСтрокиАктуальной 	);// найти индекс тек строки и заполнить актуальными значениями из запроса!
									
				//КонецЦиКла;	
					
			КонецЕсли; 
			
		КонецЦикла;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sashares 35 13.12.23 10:33 Сейчас в теме
(1)
Для каждого Строка Из ПроверяемыеОтправления Цикл

Для Каждого СтрокаТЗ ИЗ АктуальныеОтправленияТЗ Цикл

ПараметрыСтрокиСтарой = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Строка);
ПараметрыСтрокиАктуальной = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);


Если НЕ ОбщегоНазначения.ДанныеСовпадают(ПараметрыСтрокиСтарой , ПараметрыСтрокиАктуальной ) Тогда


Вот это не верно. Вы каждую строку таблицы Проверяемые сверяете с каждой строкой Актуальных.
Так у вас ни одна строка не совпадет.
Надо в таблице Актуальных найти нужную строку, и сверять с нужной строкой.


Заполнить можно так:
ПараметрыОтбора = Новый Структура("ИДОтправления", Строка.ИДОтправления);
СтрокиИсправляемые = Объект.Отправления.НайтиСтроки(ПараметрыОтбора);    
                              
Для Каждого СтрокаМассива ИЗ СтрокиИсправляемые Цикл
                    
      ЗаполнитьЗначенияСвойств(СтрокаМассива, ПараметрыСтрокиАктуальной     );
                                    
КонецЦиКла;
2. soft_wind 13.12.23 10:15 Сейчас в теме
как-то все сложно делаете, попробуйте более простой вариант!

1.передаете свою/проверяемую ТЗ в запрос
2.в запросе соединяете с доступными остатками
3.и загружаете обратно в ТЧ всего одной командой
.НужнаяТабличнаяЧасть.Загрузить(Запрос.выполнить().выгрузить());
konsta2006; +1 Ответить
4. konsta2006 13.12.23 10:57 Сейчас в теме
(2)или проверяемую ТЗ использовать как параметр для отбора регистра накопления с актуальными остатками
Оставьте свое сообщение

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