Вход | Регистрация
 

Получить ТабличныйДокумент через COM

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

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

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

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

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

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

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

а в базе-применике - уже работать с файлом ?
   lamme
 
9 - 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 передаются только значения базовых типов, сворачиваем табличный документ в строку

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


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


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

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


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

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

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


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

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

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

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

?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.