Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ищу примеры реализации обмена с Диадок с помощью COM-библиотеки

Ищу примеры реализации обмена с Диадок с помощью COM-библиотеки
Я
   Evgenius
 
18.06.21 - 08:51
Мне нужно реализовать обмен нескольких разных самописных конфигураций с системой ЭДО Диадок (Контур).
Для практика там ничего сложного не должно быть, но. Из-за оторванности в последние годы от настоящей практики явно отстаю от сроков. Документация Контура есть, но по-моему достаточно куцая - м.б., это моя упавшая квалификация уже не позволяет быстро в ней освоиться.
Так что, вынужденно ищу примеры реализации - именно с помощью COM-библиотеки Диадок! - следующих алгоритмов:
1) заполнение и корректировка типового документа ПоступлениеТоваровУслуг или аналогичного (возможно, у вас есть пример для НЕ-типовой конфигурации) по данным объекта UniversalTransferDocument
2) подписание и отказ в подписании документа UniversalTransferDocument - т.е., создание и заполнение данными объекта PackageContentItem с типом AcceptDocument в PackageSendTask2
3) заполнение данными объекта UniversalTransferDocument на основании какого-либо документа передачи товаров 1С (ПоступлениеТоваровУслуг  или аналогичного) и отправка документа в Диадок.
4) создание и отправка корректировочного документа (UCD) по имеющемуся UniversalTransferDocument.
Готов рассмотреть возможность вознаграждения (называйте условия).

Спасибо за любую информацию и предложения по делу.
   butterbean
 
1 - 18.06.21 - 09:09
(0)
1. В результате должно быть несколько обработок на каждую конфу? Или ты пилишь одну обработку сразу на несколько баз?
2. Если обработка должна по функционалу и интерфейсу быть как типовая диадоковская, то почему бы ее не переделать?
   Evgenius
 
2 - 18.06.21 - 09:14
(1) Да, в результате будет несколько обработок и один общий модуль для работы с Диадоковской COM-dll. Вот для него и нужны развернутые примеры реализации, в документации большую часть занимает длинный перечень объектов, из которых не всегда понятно, какие юзать и как, примеры куцые.
   Evgenius
 
3 - 18.06.21 - 09:27
(1) Насчет типовой Диадоковской: потому что она (ИМХО) написана чудовищно. И я просто заманался её разбирать, честно говоря.
Примерная архитектура:
1) Основной файл обработки содержит с десяток доп. модулей в двоичном виде
2) все эти модули (1) загружаются в хранилище и уже оттуда в память - у меня отладчик с ними не работает
3) все эти модули (1)  вызывают друг друга и подключаемые модули для типовых конфиг, подключаемые модули для типовых конфиг вызывают обратно модули, которые запущены из обработки, а к некоторым из тех присоединены и загружаются (как в (1)) еще модули и - самое забавное - там в какой-то момент обнаруживается еще один слой прикладных модулей для типовых конфиг, присоединенный к другим обработкам.
   kobzon2
 
4 - 18.06.21 - 09:44
(3) Да, Да. Всё реализовано через Вычислить и Выполнить.Хрен отладишь. Но разработчики же как то отлаживают свои модули?
   Evgenius
 
5 - 18.06.21 - 09:47
(4) Ну, они наверняка многое просто знают на память, а во вторых, может, автотестами или модульными тестами всё покрывают...
В общем, для меня типовая обработка представляет трудность.
   rozer76
 
6 - 18.06.21 - 10:09
(5) диадокстандарт - макеты выгружаются в файлы - все норм отлаживается. Можете глянуть диадокпро как вариант. Писать через нативапи или ком такую глыбу такой себе вариант )
   Evgenius
 
7 - 18.06.21 - 10:13
(6) Они там не выгружаются в файлы, они там через помещение в хранилище и последующее указание адреса в хранилище загружаются. У меня отладчик так не работает. А выгружать самому каждый файл (т.е., сначала переписать где-то тот код, который подключает обработку) - тоже так себе вариант.
Короче, я прошу советов и примеров именно и только по COM-библиотеке.
По типовым обработкам - считайте, что этот вариант уже обсудили и закрыли тему ).
   Zapal
 
8 - 18.06.21 - 10:28
(7) поищи в настройках флажок "отладка"
тогда оно предложит выгрузить все обработки и будет их вызывать. Отлаживается нормально
   rozer76
 
9 - 18.06.21 - 10:30
(7) ну примеры https://infostart.ru/1c/articles/840032/ а вообще смотри все в обработке - там как раз все через DiadocComApi и работает. Контуровцы видимо и делали обертку "DiadocComApi" чтобы свою 1с-обработку пилить. Так проще нежели через API видимо им )
   rozer76
 
10 - 18.06.21 - 10:31
(8) +1
   rozer76
 
11 - 18.06.21 - 10:33
Сейчас чот и сам задумался - диадокСтандарт настолько раскрячил + ПМ что даже и не знаю стоит может на диадокПРО перейти. Может кто знает чем отличается ПРО ? У Контура не нашел инфы (
   Evgenius
 
12 - 18.06.21 - 10:38
(8) Да, вот это я сам упустил, это бы помогло. Но и помимо этого там черт ногу сломит
(9) Спасибо, сейчас прочитаю это всё
(11) ПРО - это "независимое" от конфигурации решение, вот с той самой архитектурой, которая описана в (3). Т.е., независимость очень относительная, если для "функциональных" вложенных модулей требуются еще вложенные модули для отдельных конфиг.
   ssh2006
 
13 - 18.06.21 - 11:51
(12) переходи на модуль ПРО. Это самый разумный вариант. Я вот недавно закочил внедрение. В подключаемом модуле полностью самописное заполнение списка на отправку, формирование пакетов и заполнение контента UniversalTransferDocument
Документации достаточно.
   ssh2006
 
14 - 18.06.21 - 11:53
(3) с отладкой что стандарта, что про придется поковырятся, но все отлаживается. В этом смысле ПРО гораздо проще внедрять
   ssh2006
 
15 - 18.06.21 - 11:58
(11) ПРО работает через вызов HTTP api, его гораздо проще кастомизировать, добавлять регламентные задания, автоматические действия при изменении статусов документов и т.д. Также там есть вариант хранения - на отдельной подсистеме - в конфу на поддержку добавляются несколько справочников и регистров сведений и суть работы идет от периодической синхронизации 1С с сервером.
   ssh2006
 
16 - 18.06.21 - 12:01
(12) добавляешшь в свою конфу объекты диадока - cfu идет в комплекте с модуле ПРО и дальше по документации начинаешь писать процедуры подключаемомго модуля:

https://1c-pro-docs.diadoc.ru/ru/latest/proc/pm/Podgotovka_Paketa_Dlya_Otpravki.html
   ssh2006
 
17 - 18.06.21 - 12:04
Орати внимание на событие ОпределитьТипЗначенияОбъекта
https://1c-pro-docs.diadoc.ru/ru/latest/func/pm/Opredelit'_Tip_Znacheniya_Obyekta.html

Позволяет определить тип используемых справочников Организации и Контрагенты.

как раз для самописных конфигураций
   ssh2006
 
18 - 18.06.21 - 12:07
Также советую выгрузить из обработки какой-нибудь типовой подключаемый модуль, например для УТ 10.3 или БП 3, и брать его как пример , смотреть как там наполнены процедуры событий.
Посмотреть заполнение контента по типовым процедурам как пример - смотри вложенную обработку ТиповойМодульДиадок.epf
выгружается при включении отладки
   Evgenius
 
19 - 18.06.21 - 12:19
(13) Спасибо, но я же предложил считать, что эту тему обсудили. Если нужно еще объяснений: я не практик, который 7 дней в неделю занимается кодированием и чтением чужого кода, для меня это нечитаемая вещь. Чтобы посмотреть пример заполнения документа во вложенном модуле модуля ПРО, к примеру, для УТ, необходимо частично разобрать:
ПМ_УТ_11.epf,
Ядро.epf,
ТиповойМодульДиадокУФ.epf,
ТиповойМодульДиадок.epf (одно из приложений - на обычных формах; даже если встроить обработку в конфигу - всё равно не работает),
Модуль_ИнтеграцияУниверсальный.epf,
Модуль_ИнтеграцияУниверсальнаяЛогика.epf,
Модуль_ИнтеграцияУТ103.epf
Ради одного примера. И это не полный список.
Спасибо, но смысл моей просьбы, как раз, помочь обойтись без этого. В (9) годный пример, может, и другие найдутся.
   ssh2006
 
20 - 18.06.21 - 12:22
(19) закажи тогда у них внедрение целиком, они это делают. Иначе наделаешь костылей, если не готов разбираться сам
   ssh2006
 
21 - 18.06.21 - 12:23
Напишут подключаемый модуль для твоей конфы
   Evgenius
 
22 - 18.06.21 - 12:29
(21)
а) Они не обещают внедрение меньше, чем за 2-3 месяца еще. Поэтому и решили попытаться сами.
б) Это разные лицензии, COM-Api и модуль ПРО. Мы уже приобрели именно последний вариант.

Костыли - ИМХО, это, как раз то, что у нас получится при попытке внедрить модуль ПРО при такой документации (ну недостаточно мне её для понимания, хоть тресни, возможно, я очень туп), и при нашей системе согласования документов.
   Evgenius
 
23 - 18.06.21 - 12:32
(22)+
"при нашей системе согласования документов"
- Имеется в виду, что нам надо цеплять к этому нашу систему согласования. Вот для этого нужно точно знать, как работает чужой модуль. А в диадоковском модуле разбирать-не разобрать, как оно работает.
   ssh2006
 
24 - 18.06.21 - 12:34
Подумай, зачем тебе брать на себя такие вещи как авторизация, получения списков, отправка, подписание.  Пускай этой остается на поддержке поставщика, чтобы это все не ломалось при обновлениях api и т.д. А вот если разобраться с подключаемым модулем - то решится основная задача подготовить данные для отправки в нужном формате, а даль модуль уже сам все сделает.

> ТиповойМодульДиадок.epf (одно из приложений - на обычных формах; даже если встроить обработку в конфигу - всё равно не работает),

ее не надо встраивать. Запускать нужно только сам главный модуль.

(23)  в определенном месте ты пишешь запрос который выбирает нужные тебе документы готовые для отправки по вашей внутренней логике
   Evgenius
 
25 - 18.06.21 - 12:41
(24)
> ее не надо встраивать. Запускать нужно только сам главный модуль.
Я выразился не совсем ясно. Вот его - главного модуля - управляемая форма не запустится, если оставить его внешней обработкой, а обычная его форма не работает, сразу не стали разбираться, почему. Поэтому я упоминал о встраивании.

Com-Api - это тоже обновляемый поставщиком модуль-обертка, там есть методы авторизации, и в основном он тоже всё делает.
   Evgenius
 
26 - 18.06.21 - 12:42
(25)+
не дописал: и в основном он тоже всё делает сам )
   ssh2006
 
27 - 18.06.21 - 12:43
(25) у меня обе формы без проблем из внешей обработки запускались
   Evgenius
 
28 - 18.06.21 - 12:44
(24)
> в определенном месте ты пишешь запрос который выбирает нужные тебе документы готовые для отправки по вашей внутренней логике
Там этого будет мало: нужно согласовывать входящие по многоэтажной схеме перед их подписанием
   Evgenius
 
29 - 18.06.21 - 12:47
(27) Ну, сразу не стали разбираться, что там за проблема. Вполне допускаю, что решаемая.
Но теперь направление уже выбрано - COM-API
   ssh2006
 
30 - 18.06.21 - 12:50
(25) ну в общем я тебе, как человек пиливший и стандарт с 2015 года (а там куча обновлений прошло и форматы документов и api) и ПРО совет дал.
с пол пинка тут не получится..

(28) согласование через диадок должно быть ? или ваша внутренняя система.
 
 
   Evgenius
 
31 - 18.06.21 - 12:52
(30) Согласование через нашу систему. ПОСЛЕ получения и ДО подписания
   Garykom
 
32 - 18.06.21 - 12:53
   Garykom
 
33 - 18.06.21 - 12:54
(29) >Но теперь направление уже выбрано - COM-API
лечиться кому то пора
на устаревшую хрень заморачиваться чтобы потом словить
   ptiz
 
34 - 18.06.21 - 12:54
   Double_Medved
 
35 - 18.06.21 - 12:56
Кто пользуется диадоком, расскажите в чем фишка. Они почти самые дорогие, техподдержка была отвратная, многие ошибки не расшифровывались. Типа в честный знак документ передан с ошибками. Все. Обработка для 1с у них такая себе, формы отрисовываются долго, тормозят, в коде я находил комментарии типа "пока так, потом нормально надо сделать", "если дата такая-то, то вывести картинку "поздравление для начальника"", куча запросов которые формируются кусками, хрен отладишь. и т.д.

Ушел от них год назад, чему очень рад и всем советую уйти
   Garykom
 
36 - 18.06.21 - 12:57
(35) Диадок это СКБ Контур
У них тарифы единые и они вполне себе на уровне, успевают за прогрессом
Одни из немногих кто позволяют физикам ЭДО юзать
   Double_Medved
 
37 - 18.06.21 - 12:58
Особенно хреновый порядок оплаты - типа купи на месяц пакет 5000 документов. Если израсходуешь 4000, то 1000 сгорит. Если израсходуешь 5200 - после 5000 покупай еще пакет, а то отрубят.

Прям 90-ми веет такое наебательство
   Double_Medved
 
38 - 18.06.21 - 12:59
(36) Типа плюс именно для физ лиц? Которые даже не ИП?

ХЗ, у меня между ООО и ИП куча доков гоняется, зачем физлицу ЭДО?
   Garykom
 
39 - 18.06.21 - 12:59
(37) покажи где ту увидел пакет на 5000 тут https://www.diadoc.ru/price ?
   ssh2006
 
40 - 18.06.21 - 12:59
(35) крупняк весь в Диадоке есть, на моей выборке
   Garykom
 
41 - 18.06.21 - 13:00
(38) Удаленные сотрудники
   Double_Medved
 
42 - 18.06.21 - 13:01
(36) и в чем плюс "единства тарифов", если они дорогие и надо блт знать сколько тебе доков надо в месяц или квартал, а остатки сгорят, что делает их как бы еще дороже?
   ptiz
 
43 - 18.06.21 - 13:01
(35) Зависит от ваших контрагентов. Например, большинство наших клиентов - это Сбис и Диадок. Поэтому приходится поддерживать интеграцию с двумя операторами (слава богу, не больше).
   ssh2006
 
44 - 18.06.21 - 13:02
(31) входящие доки у тебя сохраняются с Справочник ДиадокДокументы. Дальше крутишь их внутри 1С как хочешь до подписания

Если же хочешь все полностью на себя брать , тогда через API делай. У них есть услуга, можно покупать часы консультаций именно по работе с API
   Garykom
 
45 - 18.06.21 - 13:03
(42) Тебя кто заставлял покупать большой пакет? Купи меньше а как кончится докупи еще
   Double_Medved
 
46 - 18.06.21 - 13:04
(39) ну 3000 или 6000, какая разница.

Каким хреном вообще фирма должна посчитать сколько им надо документов в месяц, квартал, год?

Ну типа если ты дочка Газпрома, и 3 реализации в день и так 10 лет, то наверно можно, да.

А если бизнес реальный? Где торговые звонят гоняют и втюхивают другим твои товары, стырые отваливаются и т.д., кто за будущий год может посчитать что документов будет 8000 или 13000?
   Double_Medved
 
47 - 18.06.21 - 13:06
(45)И купить маленький пакет подороже (за каждый документ), и заставить бухгалтера каждое утро проверять сколько осталось? И если отгрузок в день 20-70, а осталось 47 документов, ей начинать орать и бежать срочно платить?

Ну, такой скоткий тариф наверно работает если ты на рынке уникален и монополен.

Слава богу я ушел к другому оператору, где оплата постфактум за квартал.
   Garykom
 
48 - 18.06.21 - 13:08
(47) там разница минимальна за документ, придираешься
   Garykom
 
49 - 18.06.21 - 13:08
(48)+ кто мешает договориться об индивидуальных условиях постоплаты?
   Double_Medved
 
50 - 18.06.21 - 13:13
(49)А кто диадоку мешает самим сделать по-человечески? И да, у них в любом пакете сильно дороже чем у многих других (за документ)

Нафига им настолько переплачивать, еще и с неудобным графиком оплат - я так и не понял
   Garykom
 
51 - 18.06.21 - 13:22
(50) У них уже сделано. Ты просто не умеешь общаться с менеджерами их
   Garykom
 
52 - 18.06.21 - 13:25
(50) >у них в любом пакете сильно дороже чем у многих других (за документ)


сравни сам https://taxcom.ru/dokumentooborot/fajler/ и https://www.diadoc.ru/price
6.5 р за документ только 1000 и 1200 доков и небольшая разница
   Double_Medved
 
53 - 18.06.21 - 13:36
(51)Во-во, подход из 90-х. Типа не менеджер должен мне объяснить, почему надо у них услугу покупать. (хотя кроме них вариантов куча) А я должен клянчить нормальные условия оплаты, а не указанные на сайте.


Короче хорошо что сейчас есть выбор, и год сижу на операторе гораздо дешевле диадока.

Но сейчас думаю переходить на Docrobot, там чем техподдержка шикарная, все поля у документов расписаны, и т д и тп. И внезапно график оплат сразу предложили адекватный (постфактум)
   Evgenius
 
54 - 18.06.21 - 14:15
(34) Это общедоступная дока - мне её как раз не хватило (
   Evgenius
 
55 - 19.06.21 - 19:23
Так и не нашел толком примеров по подписанию документа - кроме того, что в документации, где фактически есть только комментарий

"// Предполагаем, что есть функции заполнения контента второго титула формализованных документов"


Очень доступно, блин. 

М.б., у кого-то есть представление об объектной модели, позволяющей подписывать документы?
   ptiz
 
56 - 19.06.21 - 19:45
(55) УПД я подписываю так. Про это речь?

Если документ не в закрытом пакете:

            ReplySendTask = ДокументДиадок.CreateReplySendTask2("AcceptDocument");
            Reflector = Новый ComОбъект("AddIn.Diadoc.Reflector");

            МассивItem = ПолучитьМассивИзКоллекции(ReplySendTask.ContentItems);
            Для каждого Item Из МассивItem Цикл
                
                Content = Item.Content;
                
                TypeDesc = Reflector.Describe(Content);
                
                МассивСвойств = TypeDesc.GetPropertiesNames();
                ИмяСвойства = МассивСвойств.GetItem(0);
                
                Doc = Content[ИмяСвойства];

                Doc.DocumentCreator = Организация.НаименованиеПолное;
                Doc.OperationContent = "Реализация";

                Signers = Doc.Signers;
                Signers.AddItems();
                
                SignerReference = Signers.items.GetItem(0).SignerReference;
                SignerReference.BoxId = ОрганизацияДиадок.Id;
                SignerReference.CertificateThumbprint = ОрганизацияДиадок.Certificate.Thumbprint;

                ReplySendTask.Send();        




Если закрытый пакет:

                ПакетДиадок = ДокументДиадок.GetDocumentPackage();
                
                ReplySendTask = ПакетДиадок.CreateReplySendTask2("AcceptDocument");
                Reflector = Новый ComОбъект("AddIn.Diadoc.Reflector");

                МассивItem = ПолучитьМассивИзКоллекции(ReplySendTask.ContentItems);
                Для каждого Item Из МассивItem Цикл
                    
                    Content = Item.Content;
                    
                    TypeDesc = Reflector.Describe(Content);
                    
                    МассивСвойств = TypeDesc.GetPropertiesNames();
                    ИмяСвойства = МассивСвойств.GetItem(0);
                    
                    Если ИмяСвойства = "Type" Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    Doc = Content[ИмяСвойства];

                    Doc.DocumentCreator = Организация.НаименованиеПолное;
                    Doc.OperationContent = "Реализация";

                    Signers = Doc.Signers;
                    Signers.AddItems();
                    
                    SignerReference = Signers.items.GetItem(0).SignerReference;
                    SignerReference.BoxId = ОрганизацияДиадок.Id;
                    SignerReference.CertificateThumbprint = ОрганизацияДиадок.Certificate.Thumbprint;

                    ReplySendTask.Send();
   Evgenius
 
57 - 20.06.21 - 20:37
(56) Да, именно оно, спасибо!
А с помощью каких источников разбирались с этим?
Откуда сам перечень необходимых действий знаете? )
   ptiz
 
58 - 21.06.21 - 09:01
(57) Разбирался методом чтения ошибок и тыка в отладчик.
   Evgenius
 
59 - 21.06.21 - 15:32
(58) Круто


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