ГИИС ДМДК

 Все, кто вляпался в эту систему, поймут что это просто крик души. Когда реализация хорошей идеи заставила встать на уши всех, кого она коснулась. Эта заметка может оказаться полезной для тех, кто не смог написать программу с использованием библиотеки, выложенной на сайте (https://dmdk.ru/connect/). Здесь, а потом в комментариях, по мере прояснения ситуации, я буду делиться своими выводами и решениями практических задач поставленных передо мной моими клиентами. А также ставить вопросы, которые возникают в процессе работы. Тем, кто ответит на них, буду очень благодарен.

 Предупреждаю, что наша организация занимается оптовой продажей драгоценных камней (ДК), поэтому все мои «охи» будут вокруг именно наших проблем.

 Сразу что не понравилось:

 1. Нет четких определений, используемых в системе. Как выяснилось понятие «партия» в ГИИС ДМДК это тоже самое, что «пакет» в понимании моих клиентов. До сих пор не понятны назначения и суть «Бокс», «Опись», которые также используют мои пользователи. Попытки работать в личном кабинете с этими понятиями не дали ясного понимания.

 2. Конечно ограничение в 65К на размер загружаемого пакета – это мало. Особенно, когда грузятся большие партии.

 3. Программа SoapUI, которой пользуемся для загрузки данных имеет только терминальный интерфейс (буду рад, если я ошибаюсь). Все приходится грузить через буфер обмена. А хотелось бы иметь возможность запускать его из командной строки и получать результат обработки в файл или, на худой конец, в буфер обмена. Поправьте меня если это не так.

 4. Служба поддержки работает. Иногда ответ приходит практически сразу, а порой ждать приходится неделями в полном смысле этого слова. И очень неприятно, что не знаешь рассматривается твоя заявка или нет. Обычно формируется заявка, ей присваивается номер и задавшему вопрос приходит уведомление с указанием номера заявки.

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

 Начав промышленную эксплуатацию этого продукта разработчики и заказчики не понимали и сейчас не понимают какие нужны мощности оборудования, чтобы обеспечить нормальную работу без сбоев и зависаний системы интеграции.

 Думаю, что я не изобрел велосипед, когда придумал схему передачи данных из существующей в нашей организации:

 из данных, имеющихся в нашей базе, формируется xml-файл (Test_Deal.xml) с запросом на необходимое действие (например, SentBatch на загрузку остатков), затем он шифруется с помощью программы (TestDeal.exe) на базе библиотеки формирования подписи (https://dmdk.ru/upload/iblock/2fa/51ljlohqwjki5muszwfnzzpbhd9ekdeb/Biblioteka-dlya-formirovaniya-podpisi.zip), формируется файл Rezult.xml, содержимое которого отправляется в буфер обмена, а дальше в открытое окно запроса программы SoapUI. Потом сохраняется результат запроса (если проходит контроль этого уровня), содержимое которого грузится в буфер и передается программе, которая формирует хml-файл, она вытаскивает номер запроса и формирует файл Test_Deal.xml с запросом на проверку (например, CheckBatch). Далее опять повторяется запуск SoapGost.exe, которая формирует Result.xml, содержимое которого через буфер обмена передается программе SoapUI. Если результат обработки положительный, в нашем случае это список УИНов, результат запроса через буфер обмена возвращается в программу, которая работает с нашей базой, она связывает УИНы с нашими внутренними документами.

 Теперь о программе SoapGost.exe. Скачать ее можно по этой ссылке SoapGost.7z . Для ее работы нужен обезличенный сертификат clicker.cer, который вы получили. И, естественно, программа работает под Windows. В файле n_ser.txt (пример в архиве) серийный номер сертификата clicker.cer.

 Зарегистрировать библиотеку

  GostCryptography.dll , как сказано в описании:

 

  C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm /codebase GostCryptography.dll

 

 

 Работа программы простая: Запускаете ее, если она находит сформированный Test_Deal.xml в папке, где находится сама программа, то она формирует файл Result.xml с нужным вам содержимым.

 Сертификат clicer.cer у вас должен быть свой.

 Спасибо огромное тем, кто проделал эту огромную работу по созданию этой библиотеки и «Описание использования исходных кодов библиотеки.pdf ».

Роман (2022-09-15):
Михаил.

Все верно, ситуация такая - пока файл "еще не успел записаться" и 1С уже исполняет следующие
строчки программы, а именно передачу файла в ГИИС - файл на самом деле еще занят процессом записи, несмотря что у меня SSD и размер файла ничтожный.
И 1С ведет себя неадекватно - передает снова пред идущее сообщение, а иногда что называется "успевает" и передает что надо, это меня и ставило в тупик,
никак не мог понять - как же такое происходит.

И между записью и передачей нужно вставить задержку, дождаться окончания процесса закрытия файла. Как таковой задержки в 1С например нет. в СУБД FoxPro например есть.

И надо подождать. Тут хороши любые средства, можно вывести сообщение, я кручу цикл на 2 секунды - и все ОК.






Михаил (2022-09-14):
Роман, я не знаю что посоветовать, но после запуска программы SoapGost я запускаю функцию Delphi MessageDlg c сообщением: "Дождитесь, когда закроется 'черное окно'"(это чтобы дать программе зашифровать инормацию).
Роман (2022-09-14):
Удалось мне запихнуть код из библиотеки цифровой подписи в 1С.

Танцы с бубнами продолжались две недели.

Главная фишка работы с файлами на диске (запись файлов) в 1С такая - нужна задержка после записи файла,
потом подписывается файл и снова задержка,
иначе далее исполняемый программный код начинается раньше чем закончится запись в файл.
Это прям открытие для меня было, такого ни на одном сайте по теме "работа с файлами 1С" не написано.
Сергей (2022-09-11):
Отключение версии 1, добавление версии 3 (кстати, не работает в тестовом модуле как декларируют) - новая головная боль пользователям.
Похоже, что машина по отмыванию денег заработала в полную мощность. Теперь надо сажать человека, который бы отслеживал версионность и вносил изменения в созданные продукты.
Но есть одно "НО": неработающие версии.
Евгений (2022-09-09):
Техподдержка ГИИСа - особая песня. На зарегистрированные вопросы они не отвечают, а спустя n-е количество недель присылают письма с вопросами: воша проблема все еще актуальна?
Роман (2022-08-29):
Михаил, скопировал.
Михаил (2022-08-26):
Роман, забыл:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;


namespace SoapGost
{
class Program
{
....

}
}

Роман (2022-08-25):
Михаил!

Спасибо!

Код на С# тоже пойдет! Главное он полный, а не фрагмент как
в описании к библиотеке цифровой подписи.

Если вдруг понадобится изменить код - хоть есть с чего начать.
Скачаю себе Вижуал Студию.

А уж exe файл можно запустить из 1С без проблем.

С# тоже можно из под 1С запустить,
делается через утилиту входящую в состав Фреймворка. Но не нравятся мне такие
многоходовочки - никогда не знаешь на каком этапе возникают проблемы.




Михаил (2022-08-24):
Роман, я к сожалению с 1С не работал. Попробуйте задать вопрос вот здесь:
https://infostart.ru/1c/articles/1514792/

SoapGost, действительно скомпилирована на c#. Вот ее код (в нем нет ничего секретного):


namespace SoapGost
{
class Program
{
static void Main(string[] args)
{
dynamic oXMLSigner = Activator.CreateInstance(Type.GetTypeFromProgID("GostCryptography.XmlSignerCOM"));
string xmlString = File.ReadAllText("Test_Deal.xml", System.Text.Encoding.GetEncoding(1251));
string certificateSerialNumber = File.ReadAllText("ser_n.txt");
string output;
bool result = oXMLSigner.Sign(xmlString, certificateSerialNumber, out output);
File.WriteAllText("Result.xml", output, System.Text.Encoding.GetEncoding(1251));
}
}
}




Роман (2022-08-22):
Михаил.

Конечно я читал описание "Библиотеки цифровой подписи" в разделе для бизнеса.
Но никак не могу установить +СОМ соединение 1С и GostCryptography.dll.
В чем проблема не пойму.
Если вам не трудно перечитайте мое пред идущее сообщение, может что подскажете.

Сейчас используем БСП 3.15 от 1С для взаимодействия с ГИИС. В основе компонента XMLDSig.
И наши "главные" методы SendBatch, SendBatchSale и SendSpecification работают.

Но я ищу альтернативные способы для подписи XML.


Способ представленный в комментариях с помощью SoupGost.exe уже разрабатываю.
Утилита проверена - файлы подписываются "один в один" как и 1С БСП.

Скорее всего SoupGost.exe скомпилированный С# представленный в библиотеке.
Не могу пока понять SoupGost.exe подключается к DLL файлы по +СОМ
(тогда значит что DLL верно зарегистрирован),
либо соединение для SoupGost.exe не нужно вообще.

Заранее спасибо за ответ.


Михаил (2022-08-17):
Роман, в описании библиотеки для формирования подписи (полностью здесь) написано:

Актуальное описание интеграционного сервиса ГИИС ДМДК размещено на сайте dmdk.ru в разделе «Для бизнеса».
Библиотека, скомпилированная под .NET Framework 4.5, размещена в каталоге «bin».
Внимание! Библиотека распространяется в качестве примера, «как есть», и не поддерживается со стороны АО «Гознак».
Решение выполнено на базе проекта: https://github.com/AlexMAS/GostCryptography
Добавлено:
- реализация трансформации СМЭВ (базовая);
- запись элемента «Signature» с префиксом;
- методы для доступа через COM, что позволяет её использовать из других приложений, в том числе из 1С.
1. Регистрация библиотеки COM:
C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm /codebase GostCryptography.dll
Идентификатор класса: E492CA2C-AE71-4578-99E4-03712978D5E1
2. Использование (на примере C#):
dynamic oXMLSigner = Activator.CreateInstance(Type.GetTypeFromProgID("GostCryptography.XmlSignerCOM")); string xmlString = File.ReadAllText("Test_Deal.xml"); string certificateSerialNumber = "02 ca bc 74 00 f6 ac cd 90 4d bb 30 e7 2c 48"; bool result = oXMLSigner.Sign(xmlString, certificateSerialNumber, out output); Метод возвращает true или false. Если true, то в переменной output будут подписанные данные, если false – то в output будет текст ошибки. Добавил метод проверки подписи: bool result = oXMLSigner.Verify(xmlString, out error); Метод возвращает true или false. Если true, то проверка подписи прошла успешно, если false – то в error будет текст ошибки. Все строки – в кодировке UTF8.
Примеры файлов-шаблонов XML для регистрации контракта и для проверки состояния обработки сообщения – во вложении.
Подписанное сообщение должно успешно проходить проверку на сайте Крипто-Про: https://dss.cryptopro.ru/Verify/Verify/

Роман (2022-08-16):
К вопросу использования библиотеки цифровой подписи непосредственно в 1С

У меня x64 вин10, регистрирую dll как указано в инструкции, как x32.

1. Файлы gostcryptography.dll и GostCryptography.pdb скопировал в C:Windowssystem32>C:WindowsMicrosoft.NETFrameworkv4.0.30319
2. В командной строке от имени администратора выполнил C:Windowssystem32>C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm /codebase GostCryptography.dll
3.Ответ на попытку регистрации gostcryptography.dll
Microsoft .NET Framework Assembly Registration Utility 4.8.4084.0
для Microsoft .NET Framework 4.8.4084.0
c Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

RegAsm : warning RA0000 : Регистрация неподписанной сборки с использованием параметра /codebase может вызвать конфликт данной сборки с другими приложениями, которые могут быть установлены на том же компьютере. Параметр /codebase предназначен только для подписанных сборок. Присвойте сборке строгое имя и повторите регистрацию.
Типы зарегистрированы успешно

При этом видимо регистрация все таки проходит, в реестре есть необходимые записи.

Пытаюсь зарегистрировать в 1С сом объект

Процедура СоздатьОбъектЦифровойПодписи()
Попытка
oXML = Новый COMОбъект("GostCryptography.XmlSignerCOM");
Сообщить("Объект цифровой подписи GostCryptography.dll успешно создан", СтатусСообщения.Информация);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Объект цифровой подписи GostCryptography.dll создать не удалось :" + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
КонецПроцедуры

Сообщение вот такое:

Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован

Как правильно подцепить объект к 1С?
Алексей (2022-08-11):
ГИИС ДЕДА - сложная, тяжёлая система, которая только тормозит и ставит людей на уши.
Я бы оторвал что-нибудь заказчику, который сделал такую постановку задачи.
Марина (2022-07-18):
Убивает диагнотика системы. Отправляем заявку на Госконтроль. Три предядущих аналогичных заявки ушли без проблем, четвертая - "При подписании заявления произошла ошибка".
Сразу вспоминаем классику Чернышевского "Что делать?".
А делать нечего: "Проект принят. К замминистра мы не пойдем". Конечно, деньги распилины, а вы, как сказал "классик":"Денег нет, но вы держитесь".
Техподдержка молчит, госконтроль разводит руками, т.к. видят исправления, но сделать ничего не могут. У них тоже ошибка.
Ребята из Госконтроля потеряли всякую надежду рна поддержку сверу (см. выше), а работать надо, поэтому приняли старую схему отчетности. В дополнение к обязательным документам надо прикладывать файлы по стандрту, принятому до внедрения ГИИС.
Замминистра спит спокойно на своих хорчах, а система работает по-старому, как до внедрения ГИИСа.
И овцы целы, о волки сыты.
Вот такие реалии нашей жизни.
Наталья (2022-07-07):
С каждым днем страницы личного кабинета отвечают все дольше и долше. Работать невозможно. Служба поддержки не реагирует на запросы, связанные со скоростью ответа.
Жалобы просто игнорируются.
Поэтому написала здесь, может кто-нибудь услышит крик вопиющих в пустыне.
Евгений (2022-06-24):
Стали регистрировать запросы, присваивать номера, но отвечать на вопросы так и не стали.
Очень плохо обрабатываются ошибки. "Внутренняя ошибка сервера ДМДК", - самое популярное сообщение. И поди догадайся в чем причина.
А ответа от службы поддержки нет. Вот и тыкаемся как слепые щенки, отыскивая недочеты с способы их обхода.
Михаил (2022-04-16):
В очередной раз столкнувшись с проблемами, я понял одну простую вещь: разработчики очень здорово вляпались.
Сначала, наверное, был конкурс, на котором была поставлена задача мало соответствующая действительности. Исходя из этого разработчиками была названа сумма.
В рамках поставленной задачи работа была выполнена, деньги распилены, продукт принят.
А что теперь остается - переделывать все заново. Практически все области, которые попали под "крыло" ГИИС ДМДК , столкнулись с непониманием программистов особенностей каждого "асученного" сектора.
Не удивлюсь, если окажется, что ребята-разработчики сидят на голодном пайке.
Юлия (2022-02-24):
Абсолютно идиотский справочник организаций: нет проверки на дублирование наименований фирм. Нет единого стандарта, который требует госконтроль.
Столкнулись тем, что при формировании контракта оказалось 4! фирмы с одинаковым названием но разным написанием.
Михаил (2022-02-17):
Служба поддержки на письма не отвечает. Вот пример: 12.02.2022 я получил письмо следующего содержания:
"Добрый день. Если Ваша заявка еще актуальна, Вы можете обращаться по телефону 8 800 707 57 15 с ПН-ПТ с 00:00 по 18:00 МСК или продублировать её на почту info@dmdk.ru. "


10.01.2022 11:58, mk :

Здравствуйте!
В силу особенностей нашего учета мы не можем вводить остатки
только по укрупненным позициям (элемент position ), который разрешен при вводе партий.
Основанием для учета по укрупненным позициям является ведомость от
поставщика (см. прилагаемый файл).
Вопрос был задан перед новым годом , но ответа нет. Поэтому повторяем
свои вопросы:

Обратите внимание на дату отправки вопроса (10.01.2022)


Работа службы поддержки ДМДК


Михаил (2022-02-12):
Умные люди подсказали как правильно формировать боксы:
1. Формируем бокс (SendBatchRequest) ;
2.Формируем партии (SendBatchRequest) ;
3. Привязываем партии к боксу (SendUnPackingBoxRequest) ;
И имейте в виду, что SendBatchUnion, которую предлагают использовать, если верить инструкции по состоянию на сегодня, НЕ РАБОТАЕТ.
Примеры см. Пример формирования бокса


Дмитрий Андреевич (2022-02-11):
Наступают моменты, когда система перестает отвечать часами. И, что удивительно, это не зависит от времени суток.
Система не в состоянии обрабатывать большое количество запросов.
Инструкции меняются чуть ли не каждый день. Это, как я понимаю, является отмазкой при выяснении косяков с техподдержкой. С техподержкой можно общаться по телефону, ни одно мое письменное обращение не было зарегистрировано. И ни на один ответ по почте я не получил НИ ОДНОГО ответа.
Деньги распилили, а дальше выплывайте как хотите.
Марина (2022-02-05):
Класс! В выходные телефон техподдержки недоступен. Грузите как хотите.
Михаил (2022-02-02):
Как работать со службой поддержки.
1. Вопросы, связанные с системой интеграции ТОЛЬКО по почте, указанной на сайте.
Зарегистрировать вопрос - потеря времени. Отправив письмо ждите подтверждения.
Если не пришло - звоните на горячую линию, указывайте свой email и время отправки письма.
Если не нашли ваше письмо - просите подождать и отправляйте повторно, пока оператор на линии.
Если вы не зарегистрируете свой вопрос/запрос - ответ вряд ли получите.
Информация к размышлению: на 03.02.2022 количество зарегистрированных запросов меньше 20000. Сужу по своему номеру. Похоже, что много запросов "падает в пропасть".
2. Вопросы, связанные с работой личного кабинета и сайта, можно решить по телефону.
Михаил (2022-02-01):
01.02.2022 - столкнулся с проблемой. Не получалось загрузить бокс. Долго бился, писал в техподдержку - тишина.
Дозвонился, оказалось, что разработчики отключили работу с боксами.
Неужели нельзя было написать на сайте, что работы с боксами отключена. Чтобы все заинтересованные посетители видели это и не осаждали службу поддержку и не забивали сеть повторными попытками отправить данные.
Евгений (2022-01-27):
Хочется отметить недоделанный интерфейс личного кабинета:
- нет возможности отсортировать позиции по выбранной колонке;
- нет возможности выбрать все позиции одним кликом, чтобы привязать партии;
- отклик системы гораздо больше, чем рассчитывали разработчики. Нажимая привязать выбранные партии или подписать страница становится статичной.
- возвращение назад всегда приводит переходу на первую страницу. После этого опять вынуждены листать страницы, чтобы вернуться на нужную.
Это основные недостатки, которые просто "бесят".
Согласен с автором - нет четких определение в инструкции. То, что вкладывалось разработчиками в понятия, имеют совершенно другой смысл у реальных участником процесса.
Михаил (2022-01-26):
Я немного повторюсь.
Для себя я сформировал две главные проблемы ГИИС:
1. Ответ системы может составлять от нескольких секунд до нескольких часов. Это приводит к тому, что пользователи, если работают из личного кабинета, не понимают что происходит. Обновление страницы приводит к повторной отпрвки запросы.
Чтобы адекватно понивать ситуацию, надо держать 2 открытых окна со страницей, откуда отправляется запрос и со страницей, где отражается результат выполнения этого запроса. Например, надо прикревить 100 партий из 10000:
- открывает страницу с запросом;
- открывает страницу с запросом, нажимаем кнопку прикрепить партии, выбираем критерии для поиска, выделяем нужные партии(если надо выбрать 100 партий - кликаем 100 раз напротив каждой нужной, проверяем правильность выбора, нажимаем привязать выбранные партии.
- ждем, когда закончится работа скрипта (бегающая строка замирает), на экране ничего не происходит.
- возвращаемся на экран со стравницей запроса и нажимаем обновить страницу. Если количество привязанных партий изменилось (строчка внизу) - партии загрузились, если нет, то повторяем процедуру с обновлением.
А теперь посчитайте сколько времени надо потратить на привязку 10000 позиций. се это относится и к пакетному режиму, т.к. смотрите следующий пункт.
2. Ограничение на размер передаваемого запроса в 65К. Вот официальный ответ поддеожки:

Размер передаваемого сообщения (XML-пакета) не должен превышать 65536 символов. Количество партий в пакете определяете исходя из этого.
С уважением,
Гакашев Арсен,
заместитель начальника управления,
УРИС ДИТ АО .

А это значит, что контракт, к примеру состоящий из 10000 партий ( а такое возможно), надо "распилить" на 200 !!! пакетов и отправить их.
Для того чтобы дождаться ответа на запрос посланного пакета может пройти от нескольких секунд до нескольких часов (21.01.22 я ждал ответ в течении 5 часов)
Конечно, можно "запулить" все эти 200 порций(SendBatch) не дожидаясь ответа, но потом, если что-то не загрузилось, а такое тоже возможно из-за ошибок и сбоев системы, то поиск ошибок оборачивается еще в очередные часы поиска через отправку запросов (CheckBatch)


Ваше имя :


Ваш комментарий:

Изображение

обновить

Текст на картинке:

(к сожалению, это вынужденная мера - защита от спама)