Имя: Пароль:
1C
1С v8
Сформировать и выгрузить в EXCEL отчет из другой базы по COM соединению
,
0 maslov_ilya
 
21.12.21
16:50
Добрый день!

С COMобъект до этого знаком был только поверхностно.
Задача:
Имеются базы: УПП 1.3, БУХ 3.0 (серверные)
Необходимо находясь в УПП 1.3 во внешней обработке, по кнопке выгрузить в EXCEL отчет (к примеру ОСВ), установив отборы (Период, Организация), и сохранить в папку.

Прочитал несколько ТОПиков и статей.
Сделал тестовый вариант обработки для того чтобы разобраться и получить хотя бы данные из другой базы для начала.
За основу взял пример из статьи:
https://infostart.ru/1c/articles/827371/

Но...
1. Когда пытаюсь установить параметры, получаю ошибку:
Ошибка при вызове метода контекста (УстановитьЗначениеПараметра)
{ВнешняяОбработка.АвтоматическоеФормированиеОтчетов.Форма.Форма.Форма(16)}:    КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(МесяцРасчета));
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.19.1150): Параметр с указанным именем не найден

2. Закомментил строки установки параметров. Код выполняется без ошибок но ТЗ пустая, без данных.

КОД ОБРАБОТКИ:
Процедура КнопкаВыполнитьНажатие(Кнопка)
    БазаИсточник = ПодключитьсяКбазе();
    ПапкаОтчетов = "T:\**********\ТестВыгрузкиОтчетов\Отчет.XLSX";
    Если ТипЗнч(БазаИсточник) <> Тип("Неопределено") Тогда
        
        МесяцРасчета = Дата(2021,11,01);  
        
        СхемаКомпоновкиДанных = БазаИсточник.Отчеты.ОборотноСальдоваяВедомость.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        
        КомпоновщикНастроекНастройки = БазаИсточник.NewObject("КомпоновщикНастроекКомпоновкиДанных");
        ИсточникДоступныхНастроекКомпоновкиДанных =  БазаИсточник.NewObject("ИсточникДоступныхНастроекКомпоновкиДанных",СхемаКомпоновкиДанных);
        КомпоновщикНастроекНастройки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных);
        КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);    
        
        КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(МесяцРасчета));
        КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецМесяца(МесяцРасчета));
        
        КомпоновщикМакета = БазаИсточник.NewObject("КомпоновщикМакетаКомпоновкиДанных");
        МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекНастройки.Настройки,,,БазаИсточник.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0));
        ПроцессорКомпоновкиДанных = БазаИсточник.NewObject("ПроцессорКомпоновкиДанных");
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
        
        ПроцессорВывода = БазаИсточник.NewObject("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений");    
        ДанныеТЗ = БазаИсточник.NewObject("ТаблицаЗначений");
        ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
        
        Для каждого СтрокаТаблицы из ДанныеТЗ Цикл
            а = 1;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры  

Функция ПодключитьсяКбазе() экспорт
    Путь = "*******";
    БазаДанных = "******";
    Пользователь = "******";
    Пароль = "****";
    ПараметрыПодключенияИБ =  "srvr='" + СокрЛП(Путь)
                          + "'; ref='" + СокрЛП(БазаДанных)
                          + "'; usr='" + СокрЛП(Пользователь)
                          + "'; pwd='" + СокрЛП(Пароль) + "';";
    V83COMCon = Новый COMобъект("V83.COMConnector");
    Попытка
        Возврат V83COMCon.Connect(ПараметрыПодключенияИБ);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции
1 DrShad
 
21.12.21
17:25
продолжайте наблюдения и держите нас в курсе*
2 maslov_ilya
 
21.12.21
17:46
(1) XD

Вообщем, я сейчас уже сильно склоняюсь, что стоит покопаться в типовом механизме "Рассылка отчетов" в БП 3.0.
Попробовать подсунуть туда необходимые отчеты (т.к. например ОСВ и обороты счета там нельзя выбрать) и настроить расписание.
А в УПП перенести эту подсистему из БСП.
3 FIXXXL
 
21.12.21
18:08
(2) может проще веб(хттп)-сервис на стороне БП сделать, который в БП сформирует отчет и сольет его куда надо, или вернет ответом в УПП
4 Гений 1С
 
гуру
21.12.21
18:11
(3) браво! но для этого нужно иметь IIS или Апач (Веб-сервер)
(2) а в чем вопрос, че не получается та?
5 FIXXXL
 
21.12.21
18:11
(4) давно надо иметь веб-сервер
а не костылять на СОМе
6 hhhh
 
22.12.21
01:16
(2) вообще-то НачалоПериода и КонецПериода - это же не даты должны быть, а переменные типа СтандартныйПериод. А вы туда даты суете.
7 Мимохожий Однако
 
22.12.21
06:46
(0) Судя по ошибке нет параметра МесяцРасчета. Отладчик на строке с ошибкой показывает содержание выражения КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных?
8 Pprog151713
 
22.12.21
08:29
Что тока для обмена не сделают. И ком, и файл, и СКД, и запрос с ошибкой. Все для обмена. :) А обмен на чем - то одном не пробовали ?
9 osa1C
 
22.12.21
08:34
(0) не особо читая подробности скажу.... что стоит сначала по Com в текущей базе создать ТЧ и только потом выгружать ее в Excel. По моему это проще
10 lEvGl
 
гуру
22.12.21
08:49
(4) он есть в винде, даже качать ничего не надо, если на машине сервер 1с, то уж ис там точно найдется
(0) формируйте табдок таким же кодом на стороне бп, возвращайте в упп, он сериализуется. вызов процедуры хоть комом, хоть сервисом