Программное заполнение табличной части документа Установка цен номенклатуры из эксель (КА)

1. user1934472 26.01.24 12:50 Сейчас в теме
Всем доброго дня.
Столкнулся с проблемой заполнения тч документа установка цен номенклатуры.
Создал внешнюю обработку с командой заполнения , по отладке прохожу значения в табличной части появляются но на форме ничего не происходит, может какие то надо типовые процедуры тянуть в обработку.

Мой код:

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


&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    
    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ВыбранныйФайл = ВыбранныеФайлы[0]; 
    
    ПрочитатьExcel(ВыбранныйФайл);                            

    ОбъектДокумента = ВладелецФормы.Объект; 
    
    ЗаполнитьДокументНаСервере(ОбъектДокумента);
                                                                                 
    КопироватьДанныеФормы(ОбъектДокумента, ВладелецФормы.Объект); 
                                      
КонецПроцедуры

&НаСервере
Процедура ПрочитатьExcel_НаСервере(АдресДанных)
    
    ТабДок = Новый ТабличныйДокумент; 
    
    Данные = ПолучитьИзВременногоХранилища(АдресДанных);
    ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xlsx");
    Данные.Записать(ПутьКФайлуНаСервере);
    
    Попытка
        ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
        Сообщение.Сообщить();                                                        
        Возврат;
    КонецПопытки;
    
    КоличествоСтрок = ТабДок.ВысотаТаблицы;
    КоличествоКолонок = ТабДок.ШиринаТаблицы;  
    
    
    
    ДанныеФайла = Новый ТаблицаЗначений; 
    ДанныеФайла.Колонки.Добавить("Номенклатура");
    ДанныеФайла.Колонки.Добавить("ЦенаБезНДС");
    ДанныеФайла.Колонки.Добавить("ЦенаПрайсЛист");
    
    
    Для НомерСтроки = 1 По КоличествоСтрок Цикл
        
        Если НомерСтроки = 1 Тогда
            Продолжить;            
        КонецЕсли;
        
        СтрокаТаблицы = ДанныеФайла.Добавить();
        СтрокаТаблицы.Номенклатура    = ТабДок.Область(НомерСтроки, 1).Текст;
        СтрокаТаблицы.ЦенаБезНДС        = ТабДок.Область(НомерСтроки, 2).Текст;
        СтрокаТаблицы.ЦенаПрайсЛист        = ТабДок.Область(НомерСтроки, 3).Текст;
    
    КонецЦикла;  
    
    ТаблицаТоваров.Загрузить(ДанныеФайла);
    
    
    
КонецПроцедуры // ПрочитатьExcel_ТабличныйДокумент()   

&НаКлиенте
Процедура ПрочитатьExcel(ВыбранныйФайл)
    
    ДанныеФайла = Новый ДвоичныеДанные(ВыбранныйФайл);
    АдресДанных = ПоместитьВоВременноеХранилище(ДанныеФайла);
    
    ПрочитатьExcel_НаСервере(АдресДанных);
    
КонецПроцедуры    



&НаСервере
Процедура ЗаполнитьДокументНаСервере(ОбъектДокумента)
    
    ОбъектДокумента.Товары.Очистить();    
    
    
    Для каждого ТекСтрока из ТаблицаТоваров Цикл
        
        
        НовСтрТЧДокумента = ОбъектДокумента.Товары.Добавить();
        НовСтрТЧДокумента.Номенклатура = НайтиНоменклатуруПоНаименованию(ТекСтрока.Номенклатура);  
        НовСтрТЧДокумента.ВидЦены =  Справочники.ВидыЦен.НайтиПоНаименованию("Прайс без НДС"); 
        НовСтрТЧДокумента.Цена = 10245; 
        
    КонецЦикла; 
     
    
КонецПроцедуры        

 Функция НайтиНоменклатуруПоНаименованию(НоменклатураНаименование)
        
    Если ЗначениеЗаполнено(НоменклатураНаименование) Тогда
    
        НоменклатураДляДокумента = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураНаименование);
    
        Если Не НоменклатураДляДокумента.Пустая() Тогда
        
            Возврат НоменклатураДляДокумента;
        
        Иначе
        
            Возврат Неопределено;
        
        КонецЕсли; 
        
        Возврат Неопределено;
        
    КонецЕсли;    
    
КонецФункции


Показать
Прикрепленные файлы:
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

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