Имя: Пароль:
1C
 
Получить ТабличныйДокумент через COM
,
0 lamme
 
18.10.19
10:47
Из 1С8 УФ подключаюсь к типовой, не правленной(и вносить корректировки не планируются) 1С82Бух (не уф).
Необходимо получить печатную форму в уф - которая сформируется по правилам бп.
в бп у документа в модуле объекта типовая процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) экспорт

в ней идет печать упд ...
Вот это  УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, СчетФактураТребуется, СтруктураОтбораСчетаФактуры) - возвращает готовый ТабДок.

хочется его стащить в 1С8УФ и там с ним поработать дальше.

Подскажите - как такое делается ?
1 lamme
 
18.10.19
10:51
приконнектился.. тут не вопрос
типа
Ком = V83COMConnector.Connect(СтрокаПодключенияКБух);

и понимаю - что
табдок = Ком.УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, СчетФактураТребуется, СтруктураОтбораСчетаФактуры)
не взлетит
2 Галахад
 
гуру
18.10.19
11:13
В смысле? Передать ссылку и т.д. в другую базу и там эти данные обработать?
Нет, это фантастика.
3 Garykom
 
гуру
18.10.19
11:15
(0) Можно но не нужно.
Советую забыть про COM и переходить на иные способы.
4 lamme
 
18.10.19
11:18
2
почему ?

3
например ?
5 Галахад
 
гуру
18.10.19
11:23
(4) Потому, что нет смысла ссылку передавать.
Или я не так понял (0)?
6 Мимохожий Однако
 
18.10.19
11:26
(4) Перед передачей через СОМ возможно надо будет преобразовать ТЗ в  строку XML. Можно передавать только примитивные типы.
7 lamme
 
18.10.19
11:29
(5)
я в базу бух передаю номер документа (ну или Ком.Документы.Реализация.найтиПоНомеру(мойномер).ссылка) по которому надо сформировать упд и готовую упд вернуть обратно.
8 lamme
 
18.10.19
11:31
(6)
не уловил

вернее - уловил ..
но как это к табдок относиться ?
или табдок = это не примитивный вид ?

тогда может типа
табдок = Ком.УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(..)
табдок.записать()

а в базе-применике - уже работать с файлом ?
9 lamme
 
18.10.19
11:32
хотя .. вот вроде описано

https://programmist1c.ru/st_programming/st_kak_poluchit_pechat_formu_iz_udalbazi.html

(в Конфигурации1)
Процедура КнопкавыполнитьНажатие()
ИмяУдаленногоКомпьютера="Компьютер2";
СтрокаПодключенияКУдаленнойБазе="File=""D:\1CBases\Конфигурация2; Usr=""Пользователь"";"; // путь к ИБ должен формироваться относительно файловой системы _удаленного_ компьютера!!!
УдаленнаяБаза = Новый COMОбъект("V8.Application", ИмяУдаленногоКомпьютера); // экземпляр COM-объекта создается на удаленном компьютере
УдаленнаяБаза.Connect(СтрокаПодключенияКУдаленнойБазе);
ТабДок = ЗначениеИзСтрокиВнутр(УдаленнаяБаза.getPrintForm()); // получаем печатную форму из удаленной базы
ТабДок.Показать();
КонецПроцедуры


(в Конфигурации2 - должен быть расположен либо в модуле приложения, либо в общем модуле)
Функция getPrintForm() Экспорт
      ТабДок = СформироватьПечатнуюФорму(); // формируем нужную форму. На выходе получаем объект типа Табличный документ
      Возврат ЗначениеВСтрокуВнутр(ТабДок); // поскольку по OLE передаются только значения базовых типов, сворачиваем табличный документ в строку
КонецФункции
10 Провинциальный 1сник
 
18.10.19
11:33
(1) Традиционно - ЗначениеВСтрокуВнутр не сработает?
11 Провинциальный 1сник
 
18.10.19
11:34
+(10) как-то так?
табдок = ЗначениеИзСтрокиВнутр(Ком.ЗначениеВСтрокуВнутр(Ком.УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, СчетФактураТребуется, СтруктураОтбораСчетаФактуры))
12 Chameleon1980
 
18.10.19
11:48
Сериализуй, десериализуй
13 lamme
 
18.10.19
12:32
эээ ...


Ошибка при вызове метода контекста (ПечатьУниверсальногоПередаточногоДокумента)
    Ком.УчетНДС.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, Ложь, СтруктураОтбораСчетаФактуры);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.10.2466): {ОбщийМодуль.УчетНДС.Модуль(10676)}: Метод объекта не обнаружен (ПечатьУниверсальногоПередаточногоДокумента)


что это ?
в базе бух на общем модуле- УчетНДС - стоит галочка - Внешнее соединение
https://clip2net.com/s/4497kig

в базе приемнике:
https://clip2net.com/s/4497rwX


что не так делаю ?
14 lamme
 
18.10.19
12:35
V83COMConnector= Новый COMОбъект("V83.COMConnector");
    
    Попытка
            Ком = V83COMConnector.Connect(СтрокаПодключенияКБух);
    Исключение
        сообщить (описаниеошибки());
        сообщить ("Ошибка подключения к базе бухгалтерии для получения данных для печати УПД по валютному документу !");
        ЕстьошибкаПодключени = истина;

    КонецПопытки;
    
    КомДок =ком.документы.РеализацияТоваровУслуг.найтиПоНомеру("УТ-004954",Дата("16.10.2019  0:00:00"));
    ком.документы.РеализацияТоваровУслуг.печать("УниверсальныйПередаточныйДокумент",1,Ложь,Ложь);
15 lamme
 
18.10.19
12:44
дошло ..
ком соединение проваливается в этот модуль и идет по коду модуля.
тут все норм

а в коде бух встречается
Возврат СчетФактураОбъект.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДляПечати);


и вот тут оно и падает с ошибкой
16 lEvGl
 
гуру
18.10.19
12:45
ну что там падает разбираться надо, а готовый ТабДок делал через ЗначениеВСтрокуВнутр там и потом ИзСтроки тут
(10) +1
17 lamme
 
18.10.19
12:47
в модуле БП  УчетНДС процедуры - печатьуниверсальнгоПД- идет  

Функция ПечатьУниверсальногоПередаточногоДокумента(ДанныеДокумента, СчетФактураТребуется, СтруктураОтбораСчетаФактуры = Неопределено) Экспорт
.....
        
        Возврат СчетФактураОбъект.ПечатьУниверсальногоПередаточногоДокумента(ДанныеДляПечати);
        
    
...

конецфункции
18 lEvGl
 
гуру
18.10.19
12:54
там везде препроцессоры стоят, если из внешнего соединения не видно - значит изолировано от такого контекста
способ в лоб и чтобы не затерлось при обновлении - вынести ВСЕ нужные процедуры в отдельный модуль, мутотень, но работать должно
19 lamme
 
18.10.19
12:59
вот гадость ...

или внешней обработкой формировать
и потом обращаться из ком к внешней обработке

?