Имя: Пароль:
1C
1С v8
Прочитать Эксельник и вывести таблицу как параметр отчета скд
0 Тессеракт
 
23.03.20
11:21
Добрый день.
Необходимо построить отчет СКД, который сравнивает данные из эксель файла и результата запроса из БП3.0. Посредством инструментов разработчика это делается элементарно. В виде отчета что то забуксовал в плане кода.

Помогите отредактировать код пжалста) Эксельник прочитал, а как оттуда данные взять и передать в запрос- не догоню( спасибо!


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка        = Ложь;
    ОсновнаяТаблицаЗапроса     = ПолучимТаблицуДанных();

    СхемаКомпоновкиДанных        = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки            = КомпоновщикНастроек.ПолучитьНастройки();

    ДанныеРасшифровки        = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета          = Новый КомпоновщикМакетаКомпоновкиДанных;    
    МакетКомпоновки        = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    
    
    ВнешнийНаборДанных        = Новый Структура("ДанныеОтчета", ОсновнаяТаблицаЗапроса);
    ПроцессорКомпоновкиДанных  = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
    
    ДокументРезультат.Очистить();
        
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
КонецПроцедуры    //"D:\Test\Тестовый.mxl" "D:\Test\Тестовый.xlsx"

&НаКлиенте
Процедура ЗагрузитьEXCEL(Команда)
    
    Файл = Новый Файл("D:\Test\Тестовый.xlsx");
    Если НЕ Файл.Существует() Тогда
        Возврат;
    КонецЕсли;
    ДвоичныеДанные = Новый ДвоичныеДанные("D:\Test\Тестовый.xlsx");
    ДокументРезультат = EXCELВТаблицуЗначений(ДвоичныеДанные, Файл.Расширение);
    ДокументРезультат.Показать();
    
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ТаблицаЗначенийВТабличныйДокумент(ТаблицаДанных)
    
    ПостроительОтчета = Новый ПостроительОтчета;
    ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных);
    ДокументРезультат = Новый ТабличныйДокумент;
    Построительотчета.Вывести(ДокументРезультат);
    Возврат ДокументРезультат;
    
КонецФункции

&НаСервере
Функция ПолучимТаблицуДанных()
    ТаблицаЗначенийВТабличныйДокумент(ТаблицаДанных);
    
    ТаблицаРезультат = Новый ТаблицаЗначений;
    
    ТаблицаРезультат.Колонки.Добавить("Номенклатура", новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    ТаблицаРезультат.Колонки.Добавить("Артикул", новый ОписаниеТипов("СправочникСсылка.Номенклатура.Артикул"));
    ТаблицаРезультат.Колонки.Добавить("Склад", новый ОписаниеТипов("СправочникСсылка.Склады"));
    ТаблицаРезультат.Колонки.Добавить("КолвоОст", новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой)));
    Запрос.УстановитьПараметр("Тэзэ",ДокументРезультат);
    
    ПоискДанных = Новый Запрос    Запрос = Новый Запрос;
    Запрос.Текст =
                "ВЫБРАТЬ
                |    Тэзэ.Номенклатура КАК НоменУТ,
                |    Тэзэ.Артикул КАК АртикулУТ,
                |    Тэзэ.Склад КАК СкладУТ,
                |    Тэзэ.КолвоОст КАК КолвоОстУТ
                |ПОМЕСТИТЬ Тзз
                |ИЗ
                |    &Тэзэ КАК Тэзэ
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |    ХозрасчетныйОстатки.Субконто1 КАК НоменБП,
                |    ХозрасчетныйОстатки.Субконто1.Артикул КАК АртикулБП,
                |    ХозрасчетныйОстатки.Субконто2 КАК СкладБП,
                |    ХозрасчетныйОстатки.Подразделение КАК ПодрБП,
                |    ХозрасчетныйОстатки.КоличествоОстаток КАК КолвоОстБП,
                |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстБП,
                |    Тзз.НоменУТ КАК НоменУТ,
                |    Тзз.АртикулУТ КАК АртикулУТ,
                |    Тзз.СкладУТ КАК СкладУТ,
                |    Тзз.КолвоОстУТ КАК КолвоОстУТ
                |ИЗ
                |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, счет В (&Счет), &СубконтоНоменклатураСклад, ) КАК ХозрасчетныйОстатки,
                |    Тзз КАК Тзз
                |ГДЕ
                |    НЕ ХозрасчетныйОстатки.Субконто1.Артикул = """"
                |
                |УПОРЯДОЧИТЬ ПО
                |    ХозрасчетныйОстатки.Субконто1.Наименование"
    ;
        
    Запрос.УстановитьПараметр("Период", Период);
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
    МассивСубконтоНоменклатураСклад = Новый Массив();
    МассивСубконтоНоменклатураСклад.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
    МассивСубконтоНоменклатураСклад.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    Запрос.УстановитьПараметр("СубконтоНоменклатураСклад",МассивСубконтоНоменклатураСклад );
    ТаблицаЗначенийВТабличныйДокумент();
    Запрос.УстановитьПараметр("Тэзэ",ДокументРезультат);
    Результат = Запрос.Выполнить();
    ТаблицаРезультат = Результат.Выгрузить();
    Возврат ТаблицаРезультат;

КонецФункции
1 Жан Пердежон
 
23.03.20
12:19
(0) тебе скорее на фрилансру или что там у фрилансеров сейчас популярно
2 mikecool
 
23.03.20
12:34
(0) так и используй ИР
3 Тессеракт
 
23.03.20
13:04
(2) бухи просят отчет сделать, который бы подтягивал данные из эксельника.
4 toypaul
 
гуру
23.03.20
13:41
набор данных объект.

подробно разбирали в нашем курсе https://learn.programstore.ru/video_kurs_skd день 03
5 Chameleon1980
 
23.03.20
13:59
ИмяОбъектаСодержащегоДанные указано?
Таблица данных в отладчике норм?
Ошибка где?
6 Chameleon1980
 
23.03.20
13:59
2 + 2 = 3.9999999999999999999999999999999...