Обработка заполнения табличной части

1. user1809279 29.01.25 23:00 Сейчас в теме
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ОбъектыНазначения") и Параметры.ОбъектыНазначения <> Неопределено Тогда
        
        ПоступлениеТМЗ = Параметры.ОбъектыНазначения[0];
        
    КонецЕсли;    
    УстановитьЗначенияНастроекОбработкиФорматаФайлаПоУмолчанию();
    
    Шаг = 0;
    УправлениеВидимостьюЭлементов();
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПослеЗакрытия(Результат, Параметры) Экспорт
    Если НЕ ВладелецФормы = Неопределено Тогда
        ВладелецФормы.Прочитать();
    КонецЕсли;
КонецПроцедуры 

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    ЗапросПараметров = ОткрытьФорму("ВнешняяОбработка.ЗагрузкаПлатежей2.Форма.пп_ФормаЗагрузки",
    Новый Структура("ОбъектыНазначения", ОбъектыНазначения), ОбъектыНазначения[0],,,,Новый ОписаниеОповещения("ВыполнитьПослеЗакрытия", ЭтаФорма));
КонецПроцедуры 

&НаСервере
Процедура УстановитьЗначенияНастроекОбработкиФорматаФайлаПоУмолчанию()
    НомерПервойСтрокиСДанными = 7;
    НомерСтолбцаНоменклатура = 4;
    НомерСтролбцаСумма = 37; 
    НомерСтролбцаАртикул = 18;
    НомерСтолбцаКоличество =31;
    НомерСтолбцаЦена = 34;
КонецПроцедуры

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

&НаСервере
Процедура ПрочитатьФайлНаСервере(Данные, Расширение)
    ХранилищеExcel = Новый ХранилищеЗначения(Данные);  
    ВремФайл = ПолучитьИмяВременногоФайла(Расширение);
    ХранилищеExcel.Получить().Записать(ВремФайл);
    ТаблицаЗагрузки.Прочитать(ВремФайл);
    
    Попытка
        УдалитьФайлы(ВремФайл);
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
    ИмяФайла = ПутьКФайлу;
    ВыбФайл = Новый Файл(ИмяФайла);
    Если не ВыбФайл.Существует() Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Файл не существует!");
        Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
    ПрочитатьФайлНаСервере(ДвоичныеДанные, ВыбФайл.Расширение);
КонецПроцедуры

&НаСервере
Процедура УправлениеВидимостьюЭлементов()
    Элементы.ГруппаСтарт.Видимость = (Шаг = 0);
    Элементы.ГруппаДалее.Видимость = не(Шаг = 0);
КонецПроцедуры


&НаСервере
Процедура ОбновитьТаблицуПоступление()
    
    Поступление.Очистить();
    КолСтрок = ТаблицаЗагрузки.ВысотаТаблицы;
    КолКолонок = ТаблицаЗагрузки.ШиринаТаблицы;
    
    Для НомерСтроки = НомерПервойСтрокиСДанными По КолСтрок Цикл
        Номенклатура = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтолбцаНоменклатура).Текст;
        Артикул = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтолбцаАртикул).Текст;
        Количество = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтолбцаКоличество).Текст;
        Цена = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтолбцаЦена).Текст; 
        Сумма = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтролбцаСумма).Текст;
        
        Если ПустаяСтрока(Номенклатура) или ПустаяСтрока(Артикул) or Количество = 0 or Цена = 0 Тогда
            Продолжить;
        КонецЕсли;
        
        Попытка
            НоваяСтрока = Поступление.Добавить();
            НоваяСтрока.Номенклатура = Номенклатура;
            НоваяСтрока.Артикул = Артикул;
            НоваяСтрока.Количество = Количество;
            НоваяСтрока.Цена = Цена;
            НоваяСтрока.Сумма = Сумма; // Рассчитываем сумму
        Исключение
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка в строке " + Строка(НомерСтроки) + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Далее(Команда)
    Шаг = 1;
    ОбновитьТаблицуПоступление();
    УправлениеВидимостьюЭлементов();
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
    Шаг = 0;
    УправлениеВидимостьюЭлементов();
КонецПроцедуры

&НаСервере
Функция ЗагрузитьПоступление()
    ТаблицаКеш = Поступление.Выгрузить(Новый Структура("Пометка", Истина)); 
    Если ТаблицаКеш.Количество() = 0 Тогда  
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нет строк для загрузки, обработка не выполнена...");
        Возврат Ложь; 
    КонецЕсли; 
    
    обПоступлениеТМЗ = ПоступлениеТМЗ.ПолучитьОбъект();
    
    обПоступлениеТМЗ.Поступление.Загрузить(ТаблицаКеш); 
    
    Для каждого Строка Из обПоступлениеТМЗ.Поступление Цикл  
        // Обработка артикула
        Строка.Артикул = Строка.Артикул; // Здесь вы присваиваете артикул из вашей таблицы
        
        // Если у вас есть другие поля, которые нужно заполнить, добавьте их здесь
        Строка.Номенклатура = Строка.Номенклатура;
        Строка.Количество = Строка.Количество;
        Строка.Цена = Строка.Цена;
        Строка.Сумма = Строка.Сумма;
    КонецЦикла; 
    
    обПоступлениеТМЗ.Записать(); 
    Возврат Истина;
    
КонецФункции

&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
    Результат = ЗагрузитьПоступление();
    Если Результат Тогда
        Массив = Новый Массив();
        Массив.Добавить(ПоступлениеТМЗ);
    КонецЕсли; 
    Если Открыта() Тогда
        Закрыть();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УстановитьФлажки(Флаг)
    Для каждого Строка Из Поступление Цикл
        
        Строка.Пометка = Флаг;    
        
    КонецЦикла; 
КонецПроцедуры

&НаКлиенте
Процедура ПометитьВсе(Команда)
    УстановитьФлажки(Истина);
КонецПроцедуры

&НаКлиенте
Процедура СнятьВсе(Команда)
    УстановитьФлажки(Ложь);
КонецПроцедуры
Показать



Делаю обработку по заполнении табличной части из excel. Выдает ошибку при выборе объекта для переноса
Значение не является значением объектного типа (Получитьбъект)
Данный объект на форме не размещен, это из за этого?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. jmw 61 30.01.25 04:54 Сейчас в теме
ПолучитьОбъект в вашем куске кода упоминается всего один раз.
обПоступлениеТМЗ = ПоступлениеТМЗ.ПолучитьОбъект();

Так трудно поставить здесь точку останова и посмотреть что там в переменной ПоступлениеТМЗ в этот момент?

НоваяСтрока.Номенклатура = Номенклатура;

Хотя до этого Номенклатура была строкой:
Номенклатура = ТаблицаЗагрузки.Область(НомерСтроки, НомерСтолбцаНоменклатура).Текст;

Искать номенклатуру хотя бы по наименованию не пробовали?
3. user2107191 30.01.25 08:29 Сейчас в теме
(2)
Так трудно поставить здесь точку останова и посмотреть
Тормоза - для трусов!
Оставьте свое сообщение

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