Вставить значение реквизита в табличную часть

1. BARDER 37 21.08.22 10:13 Сейчас в теме
Привет всем.

Есть Документ пересчет товара в УТ 11
Есть Внешняя обработка заполнения табличной части
Там я читаю EXCEL файл получаю ячейки КодТовара и КоличествоОстаток

В Обработке доступ к документу ЭтотОбъект.ВладелецФормы
Все телодвижения делаю &НаКлиенте
Номенклатуру получаю НаСервере и возвращаю НаКлиент
А теперь сам вопрос:
Как в табличной части найти строку с номенклатурой и проставить в этой строке КоличествоФакт

Вот часть кода внешней обработки:
Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
	КодТовара = Excel.Cells(СтрокаОтсчета, 4).Text;
	Номенклатура = ПолучитьНоменклатуруПоКоду(КодТовара);
	ВладелецФормы.Модифицированность = Истина;
	Отбор = Новый Структура();
	Отбор.Вставить("Номенклатура", Номенклатура);
	Сообщить(Номенклатура);
	НайденноеЗначение = ВладелецФормы.Объект.Товары.НайтиСтроки(Отбор);
	Сообщить(НайденноеЗначение);
	НайденноеЗначение.КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);

КонецЦикла;
Excel.DisplayAlerts = 0; 
Excel.Quit();
Excel.DisplayAlerts = 1;
Показать

Но получаю ошибку:
Поле объекта не обнаружено (КоличествоУпаковокФакт)
{ВнешняяОбработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма.Форма(2567)}: НайденноеЗначение.КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);

Номенклатуру находит, а вот строку непонятно, не могу отладить внешнюю обработку
Реквизит на форме владельца есть КоличествоУпаковокФакт
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. noprogrammer 239 21.08.22 10:51 Сейчас в теме +2.87 $m
Только сейчас увидел НайденноеЗначение " это же массив строк...У нему надо обращаться так
НайденноеЗначение [0].КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);
6. Pavel Rodinchenko 21.08.22 10:52 Сейчас в теме
(1)НайтиСтроки возвращает массив. Поэтому и ошибка возникает
10. spacecraft 21.08.22 15:09 Сейчас в теме +1 $m
(8)
Добавил ВладелецФормы.Прочитать(); Всеравно не показывает что заполнил

Вместо Прочитать использовать ОповеститьОбИзменении.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 239 21.08.22 10:26 Сейчас в теме
(1)
Как в табличной части найти строку с номенклатурой и проставить в этой строке КоличествоФакт

НайденноеЗначение.КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);


Так все таки как называется реквизит табличной части? КоличестоФакт или КоличествоУпаковокФакт ?
3. BARDER 37 21.08.22 10:42 Сейчас в теме
(2) КоличествоУпаковокФакт
4. noprogrammer 239 21.08.22 10:48 Сейчас в теме
(3) Это реквизит табличной части или реквизит формы?
6. Pavel Rodinchenko 21.08.22 10:52 Сейчас в теме
(1)НайтиСтроки возвращает массив. Поэтому и ошибка возникает
5. noprogrammer 239 21.08.22 10:51 Сейчас в теме +2.87 $m
Только сейчас увидел НайденноеЗначение " это же массив строк...У нему надо обращаться так
НайденноеЗначение [0].КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);
7. BARDER 37 21.08.22 12:49 Сейчас в теме
что то он заполняет, но форму не обновляет...
11. user1831019 21.08.22 18:45 Сейчас в теме
(7) И не должен. Форма обновляется только когда изменения в ней вносятся в её контексте.
А вы пытаетесь в чужой форме изменять объект. Никакого автоматического обновления там не будет. Читаем мануалы.
8. BARDER 37 21.08.22 13:55 Сейчас в теме
Добавил ВладелецФормы.Прочитать(); Всеравно не показывает что заполнил

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.ПолноеИмяФайла = "";
Фильтр = "XLS (*.xls)|*.xls|XLSX (*.xlsx)|*.xlsx";
ДиалогОткрытия.Фильтр = Фильтр;
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите файлы EXEL";
Если ДиалогОткрытия.Выбрать() Тогда
ПутьКФайлу = ДиалогОткрытия.ПолноеИмяФайла;

Иначе
Предупреждение("Нет выбранных файлов!");
КонецЕсли;


Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ПутьКФайлу);
Исключение
Сообщить("При открытии файла произошла ошибка! Операция прервана!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
	
// Попытка выбрать первый лист
// Можно указать любой другой
Попытка 
Excel.Sheets(1).Select();    
Исключение
// Закрытие файла в том случае, если первый лист не найден
Excel.ActiveWorkbook.Close(); 	
Excel = 0;
Сообщить("Первый лист не найден!");

Возврат;
КонецПопытки;
	
// Вычисление количества строк и колонок в зависимости от версии Excel
vExcel = Лев(Excel.Version, Найти(Excel.Version,".")-1);
Если vExcel = "8" тогда
КоличествоСтрок = Excel.Cells.CurrentRegion.Rows.Count;
КоличествоКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
КоличествоСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
КоличествоКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
Конецесли;

Для СтрокаОтсчета = 2 по КоличествоСтрок Цикл
	Если СтрокаОтсчета = 15 Тогда Прервать КонецЕсли;
	КодТовара = Excel.Cells(СтрокаОтсчета, 4).Text;
	Номенклатура = ПолучитьНоменклатуруПоКоду(КодТовара);
	Состояние("Загружаем таблицу", СтрокаОтсчета * 100 / КоличествоСтрок,Номенклатура); 
	
	ВладелецФормы.Модифицированность = Истина;
	Отбор = Новый Структура();
	Отбор.Вставить("Номенклатура", Номенклатура);
	Сообщить(Номенклатура);
	НайденноеЗначение = ВладелецФормы.Объект.Товары.НайтиСтроки(Отбор);
	//Сообщить(НайденноеЗначение);
	Если НайденноеЗначение.Количество() >0 тогда
		НайденноеЗначение[0].КоличествоУпаковокФакт = Число(Excel.Cells(СтрокаОтсчета, 6).Text);
		Сообщить("Найден");
	Иначе
		Сообщить("НЕНайден");
	КонецЕсли;

КонецЦикла;
Excel.DisplayAlerts = 0; 
Excel.Quit();
Excel.DisplayAlerts = 1; 
ЭтаФорма.Закрыть();
ВладелецФормы.Прочитать();
КонецПроцедуры
Показать
9. ishelper 21.08.22 14:37 Сейчас в теме
(8)
Всеравно не показывает что заполнил
Вы ведь меняете документ? А где сохранение изменений? Где Записать()?
10. spacecraft 21.08.22 15:09 Сейчас в теме +1 $m
(8)
Добавил ВладелецФормы.Прочитать(); Всеравно не показывает что заполнил

Вместо Прочитать использовать ОповеститьОбИзменении.
12. BARDER 37 21.08.22 18:51 Сейчас в теме
(10) Спасибо друг.
Добавил:
ОповеститьОбИзменении(ВладелецФормы.Объект.Ссылка);
и все заполняет без записи)
Оставьте свое сообщение

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