Имя: Пароль:
1C
1С v8
Как лучше программно работать с Диадок?
,
0 ReaLg
 
07.02.23
12:24
Добрый день.
Может быть кто-то решал аналогичную задачу и подскажет, по какому пути лучше пойти.
Конфигурация - УТ11.4
Задача выполнять некие действия по обмену с Диадоком. Пусть, для примера, требуется узнать статус конкретного контрагента.
На текущий момент в системе подключена и работает обработка от Диадока.
Ранее возникала необходимость делать какие-то свои действия и я ее решал путем создания объекта формы этой обработки.
При этом там заполняется куча всяких "кэшей", "контекстов", "метрик" и т.д. И после этого я мог дергать нужные мне функции.
Но теперь потребовалось делать некие действия на сервере и форму я там инициализировать не могу.
Обработка Диадока написана в лучших традициях ООП. Код модулей-классов - в макетах.
Какие я вижу варианты:
1. Забыть про эту обработку, скачать компоненту api и работать через нее. Минус варианте - мне придется придумать и повторить кучу кода, который уже есть в этой обработке.
2. Попробовать выдернуть из этой обработки нужный функционал. По этому методу попробовал сейчас. Т.е. дохожу до серверной функции авторизации, например, и переношу в свою обработку все зависимости. Долго(но, вероятно, все же быстрее п.1), муторно, не понятно будет ли в итоге положительный результат или нет.
3. Попробовать разобраться, как вся эта вещь работает с модулями и повторить, не перенося код в одно место. Т.е. я так подозреваю, создавать темповые обработки, писать туда код из макетов, как-то их подключать и т.д.
Может быть кто-то уже разбирался с этой обработкой(она одна для многих конф, вроде бы) и подскажет, какой вариант таки выбрать?
Спасибо.
1 Kassern
 
07.02.23
12:29
(0) 3 вариант. В этой обработке диадока нет ничего сложного. Вместо модулей они используют формы. Так же хранят обработки в макетах
2 anatoly
 
07.02.23
12:33
(0) у вас Диадок Про или стандарт?

там несколько различается подход, в Про есть основной "модуль Ядро" из которого все основные процедуры вызываются, при включении режима отладки можно сохранить все обработки из макетов на диск - и запускать их (соответственно и в коде их можно исправить/дописать все что нужно)

со стандартом я не работал, но видел что структура там несколько отличается.
3 Kassern
 
07.02.23
12:33
Я в свое время правил сами модули диадока для нужд конторы. Проблемы были только во время обязательного обновления. Приходилось переносить этот функционал.
4 inkvizitr
 
07.02.23
12:36
(0) там есть подключаемый модуль, там обработка с надстройками на основную обработку, ковыряй в ту сторону, основную обработку трогать не советую, часто они ее меняют, часто придется ее поддерживать на случай если чего отвалиться
5 mikecool
 
07.02.23
13:03
(4) +1
при пользовании стандарта только раз пришлось лезть в модули обработки, все остальные вопросы закрывались подключаемым модулем
сейчас предстоит с новым разбираться - пока руки не дошли
6 ReaLg
 
07.02.23
13:30
(4)(5) Это да, про подключаемый модуль я знаю и использую, когда это возможно. Но как с его помощью решить задачу "каждую ночь регламентное задание проверяет статусы контрагентов в Диадок и если статус поменялся создает задачу пользователю" я не знаю.
7 АгентБезопасной Нацио
 
07.02.23
13:42
(2) в Стандарте было примерно так же.
(5) как ни странно, Универсал подхватывает загруженный ПМ от Стандарта, и в большинстве случаев продолжает работать "как надо", без переноса в ПМ Универсала
8 АгентБезопасной Нацио
 
07.02.23
13:43
(6) я б все-таки взялся за API. Муторно, но знаешь как оно работает, и что от нее ожидать.
9 Argo
 
08.02.23
03:34
(6) статусы в регистре сведений же хранятся? В самом регистре перед записью проверяй статус и создавай задачу. Как вариант.
А с сервера обработка примерно так же работает, создаешь, инициализируешь, авторизуешься, контекст заполняешь и дергаешь с Ядра что надо.
Например:

ОбработкаДиадок = Обработки.КонтурЭДО.Создать();
ОбработкаДиадок.ИнициализироватьОбщийКонтекст();
Ядро = ОбработкаДиадок.Модуль_Ядро();

Логин = Ядро.ОбщиеНастройки_Прочитать("СлужебнаяУчетнаяЗаписьЛогин");
Пароль = Ядро.ОбщиеНастройки_Прочитать("СлужебнаяУчетнаяЗаписьПароль");

Если НЕ ЗначениеЗаполнено(Логин) Тогда
  ВызватьИсключение "Не указана служебная учетная запись ЭДО для выполнения регламентных действий";
КонецЕсли;

Токен = Ядро.Авторизация_ПоПаролю(Логин,Пароль);
Ядро.КонтекстСеанса_ДляСлужебнойУчетнойЗаписи();
СтруктураДокумента  = Ядро.Документы_СохраненныйДокумент(ДокументДД);
ДвоичныеДанныеФайла = Ядро.Документы_ПечатнаяФормаСервераДиадок(СтруктураДокумента.Идентификаторы);
10 ReaLg
 
08.02.23
05:08
(9) О, спасибо большое. Если оно так заработает - все будет намного проще. Я до этого только через создание формы добился корректной инициализации. Если это можно через объект сделать с сервера - то супер.
11 big
 
08.02.23
20:19
Посмотрите какие там сопливые запросы по API шлются - будет смеяться над всем этим своим "серьезным" обсуждением )))  Статус контрагента узнать? ЕМНИП там даже токен не нужен )) Самое главное - это код разработчика. Вот без него точно работать не будет ))
12 magicSan
 
08.02.23
22:00
(11) я тоже угорал с их обработки - пакет в пакете с пакетами - редкое убожество. Птом апи глянул, по рест сделали чего не хватает быстро. Удоты какието - от ОПП тока название, на деле венегрет.
13 Волшебник
 
модератор
08.02.23
22:32
(12) Будьте добры повежливее. Там ведь тоже программисты.
14 bolder
 
08.02.23
22:54
(0) Нормально там все доработать.Есть описание на сайте как расширять функционал.
15 Масянька
 
16.03.23
16:13
Чтобы не плодить ветки: а где модуль для УПП?
16 saaken
 
16.03.23
16:30
(15) контекст вопроса не понятен
17 АгентБезопасной Нацио
 
16.03.23
17:59
(15) если говорю "не брал" - значит не отдам!
Но вообще, "обычные формы" там тоже есть
18 mikecool
 
16.03.23
18:04
(0) для получения инфы не нужны обработки, только ключ разработки
он(ключ) обычно в обработке зашит
19 mikecool
 
16.03.23
18:05
+18 помнится года три назад дергали статусы документов и печатные формы