|
Работа с ЭДО через API... | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
13.06.23
✎
21:53
|
Добрый день!
А кто-либо имел дело с API ЭДО - ? В смысле, не с типовыми конфигурациями, а с чем-то своим, самописным? Конкретнее: Делаю ЭДО для нетиповой конфы 7.7, только входящие, розничный магазин. То, что это 7.7, по существу вопроса не важно, поэтому и не стал писать в секцию 7.7, вопрос общий(только не нужно мне петь про "переходите на восьмерку, там это все есть в готовом виде"). ЭДО - ЭДО Лайт от Честного знака. Думаю, по существу - это тоже не особо важно, скорее всего, у всех примерно одинаково устроено. На данном этапе, сделано: Авторизуюсь, получаю токен. Получаю список входящих документов на сервере. Получаю нужный документ в XML по его ID из этого списка. При желании, получаю его печатную форму в PDF. Обрабатываю его - это было у меня сделано ранее, все сопоставления/создания новыз товаров/контрагентов и т.п., просто раньше грузил файлы скачанные из ЛК вручную, теперь работает и автоматически. Осталась одна проблема - подписать УПД... Не могу пока понять принцип, как это работает - уж больно убогое описание API у ЦРПТ... Ясно одно - на основании полученного XML УПД, формируется файл "Информация покупателя", тоже XML, в теле которого содержится открепленная ЭЦП отправителя исходного полученного файла в формате Base64. Где ее взять??? Никаких методов ее получить, я в описании не нахожу... Далее, все понятно, этот файл подписывается своей ЭЦП, так-же открепленной, и отправляется на сервер запросом, в его теле, вместе со своей открепленной ЭЦП(с этим проблем нет, ее я спокойно формирую). После этого, файл УПД считается подписанным. Понятно все, кроме одного - где брать открепленную ЭЦП отправителя-??? Ни одного документа, содержащего ее в удобоваримом виде, на сервере нет... Есть только в полном архиве документооборота, но, она там не в Base64 - строкой, а в бинарнике "p7s"... Есть так-же какие-то квитанции с ней, она там в нужном формате, но.. Неужели, для того, что-бы подписать документ, нужно скачивать весь архив документооборота, извлекать из него нужную квитанцию, и вытаскивать из нее ЭЦП - ??? Сложно как-то, может я перемудрил чего-то... Подскажите пожалуйста, кто сталкивался с чем-то подобным... |
|||
275
MWWRuza
гуру
22.06.23
✎
07:17
|
(273) Примерно так у нас.
Примерно так и у меня... Двумя месагами выше, я приводил ткст запроса. Нет только этого: Карлик.Инит();//Для работы на старых версиях нужна эта загрузка переменных И этого: Карлик.УстановитьПараметр("FOLLOWLOCATION" ,1); Уж не знаю, насколько это критично, но сегодня попробую. Спасибо! (274) ЭП в Титуле надо указывать продавца, это на всякий случай. Это понятно :-) Но, с этим тоже есть определенные проблемы... Когда у огрганизации несколько ЭЦП(в моем случае их 3 - одна, основная налоговская у генДира дома, вторая у одного из сотров для работы УТМ в магазе, и третья у меня - что-бы "на кошках тренироваться(С)" :-) Вторую и третью делал я сам, через Калугу-Астрал. Так вот, "извещение просмотра документа покупателем", из которого можно извлечь ЭЦП продавца, для дальнейшего формирования титула, формируется от имени того сотра, кто первый загрузил ХМЛ входящего дока. Подписант берется из его ЭЦП, под которой он входил(токен доступа формировал). И потом, если дальнейший ДО совершает другой сотрудник, с другой ЭЦП, эта квитанция остается висеть не подписанная, так, как "фамилия в ЭЦП не совпадает с фамилией пытающегося подписать документ". Я вчера с этим столкнулся. И все-бы ничего, висит эта квитанция неподписанная, и ладно... Но, тут похоже на глюк ЭТО Лайт - если висит такая квитанция, отдельно, "оторванная от всего"(документ, о просмотре которого она была сформирована - уже нормально подписан и ДО по нему завершен), то новая квтанция, при первом просмотре следующего документа не формируется! И "запрос списка неподписанных квитанций" только ее ИД возвращает :-( Где в таком случае брать ЭЦП отправителя для нового документа? Мне вчера пришлось скачивать весь ДО нового дока, брать от туда одну из квитанций, и вытаскивать вручную оттуда ЭЦП отправителя для титула, сохранять ее в файл, и скармливать обработке в функцию формирования ХМЛ титула... После подписания текущего дока, эта квитанция(от предыдущего дока) так и осталась висеть в списке неподписанных. Пришлось зайти по удаленке, и подписать ее ЭЦП того сотра, от имени которого она сформировалась. И только тогда она исчезла из списка. Думаю, дальше должно быть все нормально, квитанции о просмотре будут формироваться штатно, но пока проверить не на чем - сегодня нет пока входящих новых. |
|||
276
MWWRuza
гуру
22.06.23
✎
08:32
|
+(275) так, как "фамилия в ЭЦП не совпадает с фамилией пытающегося подписать документ".
Не верно сформулировал, а правки своих сообщений на Мисте нет... Должно быть: так, как фамилия подписанта в XML файле квитанции, не совпадает с фамилией владельца ЭЦП, пытающегося подписать эту квитанцию |
|||
277
MWWRuza
гуру
22.06.23
✎
08:46
|
(275) Уж не знаю, насколько это критично, но сегодня попробую.
Попробовал. Все равно упало... |
|||
278
MWWRuza
гуру
22.06.23
✎
09:25
|
В отладчике:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-537.jpg Следующий шаг(F8), думает 1-2 секунды и крашится... У меня уже мысль, может глупая - ну в тестовой обработке то работает! А там отличие, в том, что он в табло "МногоБукФФ" выводит... Может в процессе этого происходят где-то какие-то задержки, из-за которых он не падает??? |
|||
279
big
22.06.23
✎
10:07
|
Задам банальный вопрос - а в content нет ли недопустимых символов? Может "пиграться" контентом на предмет подсунуть хоть что-то лишь-бы не упало, а уже потом разбираться досконально?
|
|||
280
MWWRuza
гуру
22.06.23
✎
10:11
|
(279) Этот-же контент, сохраняется в файл в Temp(временно, для отладки), из которого я его подсовываю в тестовую обработку. Как и сигнатура тоже. И там, не падает, на тех-же файлах.
|
|||
281
АгентБезопасной Нацио
22.06.23
✎
10:13
|
(280) повтори еще раз для тупых - где падает, где не падает?
|
|||
282
MWWRuza
гуру
22.06.23
✎
10:14
|
Я уже вот так для отладки сделал, что-бы исключить влияние строки сожданной скриптом или прочитанной методом 1С.
// Отладка Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.ДобавитьСтроку(СтрТитула); Тхт.Записать("C:\Temp\NewTitulScript.txt"); КонецЕсли; ВыхФайл = ПодписатьТекст(СтрТитула, СокрЛП(ЮрЛицо.ЭЦП.Отпечаток)); СигнДокаИнфПок = СокрЛП(УбратьПереносыСтрок(ВыхФайл)); // Отладка Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.ДобавитьСтроку(СигнДокаИнфПок); Тхт.Записать("C:\Temp\NewTitulScriptSign.txt"); КонецЕсли; // Данные для карлика СзКарл = СоздатьОбъект("СписокЗначений"); // Отладка, танцы с бубном Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.Открыть("C:\Temp\NewTitulScript.txt"); СтрТитула = СокрЛП(Тхт.ПолучитьСтроку(1)); КонецЕсли; // Отладка, танцы с бубном Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.Открыть("C:\Temp\NewTitulScriptSign.txt"); СигнДокаИнфПок = СокрЛП(Тхт.ПолучитьСтроку(1)); КонецЕсли; |
|||
283
MWWRuza
гуру
22.06.23
✎
10:18
|
(281)
Падает у меня в конфе, во встроенной обработке, текст полный несклькими сообщениями выше. Не падает в тестовой обработке от Джефа, которая вместе с длл идет... Там я только дописал передачу своих данных из файлов. Но, там, видимо где-то инициализируется какая-то отладочная функция, что она в табло всю трассировку выводит. У меня, в боевой, этого нет. Так-же, как нет, как я понял и у Виктуана... |
|||
284
Djelf
22.06.23
✎
10:43
|
Это обычно не требуется, когда уже работает. имхо не должно влиять. Разве что Карлик.ВыводитьСостояние(1) довольно полезно на больших файлах.
Карлик.Отладка(1/0) // выводит сообщения отправки/приемки в окно сообщений Карлик.Трассировка(1/0) // служебный метод, используется для отладки curl1c.dll, может помочь при внезапных падениях Карлик.ВыводитьСостояние(0/1) // выводит при выполнении в строку состояния данные по текущей загрузке/отправке |
|||
285
MWWRuza
гуру
22.06.23
✎
11:11
|
(284) Добавил:
Карлик.Отладка(1); // выводит сообщения отправки/приемки в окно сообщений Карлик.Трассировка(1); // служебный метод, используется для отладки curl1c.dll, может помочь при внезапных падениях Карлик.ВыводитьСостояние(1); // выводит при выполнении в строку состояния данные по текущей загрузке/отправке Много букфф в табло вывело, точно как в тесте, запрос отработал, по сообщению видно, и в конце упало... https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-538.jpg |
|||
286
MWWRuza
гуру
22.06.23
✎
11:18
|
Еще одна мысль, по различиям в тесте и у меня...
В тест я подсовываю готовые файлы контента и ЭЦП, сформированные ранее, этой-же моей обработкой. А тут, я формирую их "на лету", в этой-же процедуре. ХМЛ формирую через DOM, по идее не должно ни с чем конфликтовать... ЭЦП черех CADESCOM, тоже не должно... НО!!! Перед тем, как сформировать XML, я формирую ее имя, а в нем GUID... Его я получаю из v7Plus, через метод информации о системе... Может тут конфликт с v7Plus - ??? |
|||
287
big
22.06.23
✎
11:20
|
(286) С такими танцами уже на всё думать приходится (((
|
|||
288
MWWRuza
гуру
22.06.23
✎
11:39
|
Закомменитовал вообще все, оставил только:
// Данные для карлика СзКарл = СоздатьОбъект("СписокЗначений"); // Отладка, танцы с бубном Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.Открыть("C:\Temp\NewTitulScript.txt"); СтрТитула = СокрЛП(Тхт.ПолучитьСтроку(1)); КонецЕсли; // Отладка, танцы с бубном Если Отл = 1 Тогда Тхт = СоздатьОбъект("Текст"); Тхт.Открыть("C:\Temp\NewTitulScriptSign.txt"); СигнДокаИнфПок = СокрЛП(Тхт.ПолучитьСтроку(1)); КонецЕсли; СзКарл.ДобавитьЗначение(СтрТитула, "СтрТитула"); СзКарл.ДобавитьЗначение(ИД, "ИД"); СзКарл.ДобавитьЗначение(СигнДокаИнфПок, "СигнДокаИнфПок"); // Отладка ИмяФайлаИнфПок = "ON_NSCHFDOPPOKMARK_2BM-7730168552-2012052808325375862630000000000_2LT-11000120731_20230622_ADF41E4F-0B6D-4852-83A6-B6663CFC650A"; СзКарл.ДобавитьЗначение(ИмяФайлаИнфПок, "ИмяФайлаИнфПок"); Не упало!!! :_) Теперь, буду понемногу возвращать все обратно, и смотреть, с чем конфликт... |
|||
289
MWWRuza
гуру
22.06.23
✎
11:57
|
Да вот оно, искать долго и не пришлось...
Как только раскомментирую эту строку: XMLDOM = ЗагрузитьDOMизФайла(ПутьКДоку); Сразу краш :-( |
|||
290
MWWRuza
гуру
22.06.23
✎
12:05
|
Нет, если непонятно написал - крашится не на создании ДОМ, крашится сам Карлик, если перед этим создан XMLDOM и загружены в него данные из файла...
Это, перед вызовом запроса Карлика: XMLDOM = 0; не помогает... |
|||
291
MWWRuza
гуру
22.06.23
✎
12:07
|
Вынести этот кусок из контекста обработки в отдельную функцию? Можно даже в ГМ... Или смысла в этом нет?
|
|||
292
MWWRuza
гуру
22.06.23
✎
12:22
|
Не помогает...
Так: В обработке: СзРеквПодпДДока = ПолучитьДанныеДокаДляПодписания(ПутьКДоку); В глобальном модуле: Функция ПолучитьДанныеДокаДляПодписания(ПутьКДоку) Экспорт XMLDOM = ЗагрузитьDOMизФайла(ПутьКДоку); КонецФункции Все равно крашится... XMLDOM - переменная глобальная, создается и инициализируется при старте системы... Больше ни на что не влияла никогда. Да и тут не влияет, пока файл не откроешь. |
|||
293
MWWRuza
гуру
22.06.23
✎
13:16
|
И еще, заметил одну особенность, не знаю, насколько это важно, но возможно разные ветки алгоритма:
Когда закомментирован вызов загрузки файла в DOM, строчка результата запроса выводится нормально: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-539.jpg А когда раскоментировано, и крашится, то вот так: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-540.jpg Точки вместо результата... |
|||
294
MWWRuza
гуру
22.06.23
✎
13:19
|
А, нет... Он просто не успевает вывести эту строку с человекочитаемым результатом... Крашится перед ней.
Когда не падает, эта строка тоже есть, выше. |
|||
295
MWWRuza
гуру
22.06.23
✎
15:19
|
Но, из этого ясно одно - падает в самом конце, перед выводом результата.
|
|||
296
MWWRuza
гуру
22.06.23
✎
16:25
|
Сейчас попробовал не читать файл квитанции, а просто фейковые данные пихнуть в функцию создания документа через тот-же DOM. Документ создался, карлик не падает.
Значит, тут проблема не с самим DOM, а с тем, что открывается файд методом XML_DOM.load(путькфайлу). Попробовать получать содержимое исходного документа другим способом? Например, через анализатор XML компоненты v7plus - ??? Не люблю я его, ну да ладно... |
|||
297
MWWRuza
гуру
22.06.23
✎
18:58
|
(296) Попробовать получать содержимое исходного документа другим способом? Например, через анализатор XML компоненты v7plus - ??? Не люблю я его, ну да ладно...
Сделал. Вроде нормально работает, ничего не падает. Права, у меня нет сегодня входящих доков, поэтому подписываю уже подписанный документ и получаю соответствующую ошибку. Но, это сейчас не важно, главное не крашится :-) Правда там наверное придется еще в одном месте переделывать, там, где я ЭЦП отправителя из квитанции получаю, она там тоже через DOM читается, но, пока проверить не могу - нет дока входящего и соответственно нет квитанции. Сейчас я ему для отладки ЭЦП дока отправителя в готовом виде подсовываю, из файла текстового. Но, теперь, причина понятна - не проблема переделать одну функцию :-) |
|||
298
MWWRuza
гуру
22.06.23
✎
20:32
|
(297) Правда там наверное придется еще в одном месте переделывать, там, где я ЭЦП отправителя из квитанции получаю, она там тоже через DOM читается, но, пока проверить не могу - нет дока входящего и соответственно нет квитанции.
Не утерпел, проверил... Так-же вылетает, надо на v7Plus разбор XML квитанции переделывать. |
|||
299
princepersei
23.06.23
✎
05:35
|
Не нашел код функции ЗагрузитьDOMизФайла()
XML_DOM бывали падения при создании xml документа, но там проблема была в другом, при смене кодировки для глобальной переменной XML_DOM. Header = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding="""+Кодировка+""" standalone=""yes""" ); |
|||
300
princepersei
23.06.23
✎
05:45
|
(275) для ЭДО Лайт закачиваем архив с документооборотом и берем файлы .xml и ЭП .p7s
Команда = "/api/v1/"+ ?(флВходящие = 1,"incoming","outgoing")+"-documents/"+СокрЛП(ИдентификаторДокумента); СпЗаголовки = СоздатьОбъект("СписокЗначений"); СпЗаголовки.ДобавитьЗначение("Authorization", "Bearer "+ТокенЭДО); СпЗаголовки.ДобавитьЗначение("Accept", "application/zip"); ПарамВыход = СоздатьОбъект("СписокЗначений"); ПарамВход = СоздатьОбъект("СписокЗначений"); ПарамВход.Установить("Метод" ,"GET"); ПарамВход.Установить("Сервер" ,СокрЛП(Сервер) + Команда); ПарамВход.Установить("СпЗаголовки" ,СпЗаголовки); |
|||
301
big
23.06.23
✎
05:48
|
(296) А можно этот файл посмотреть?
|
|||
302
MWWRuza
гуру
23.06.23
✎
11:28
|
(300) для ЭДО Лайт закачиваем архив с документооборотом и берем файлы .xml и ЭП .p7s
Не, я нашел(на ОлегОне подсказали) способ проще, не описанный в документации к API(вообще, жутко безобразная штука :-( ) "нужно получить титул продавца DP_PDOTPR, в нём ЭЦП находится по этому адресу я получаю имя файла и eventId /api/v1/incoming-documents/{0}/events/{1} {0} - идентификатор документа (1) - 112003" Действительно работает, и не нужно из бинарной ЭЦП текстовую делать, в этом доке она готовой строкой в Base64 есть :-) Блин, в описании ни слова про то, что можно получить список квитанций по типу... Там только получение списка неподписанных описано :-( (301) Какой именно файл? ХМЛ-ку титула, или входящего дока? Я сейчас переделал в процедуре подписания оба разбора XML, и входящего дока, и квитанции с ЭЦП отправителя, с DOM на v7Plus, работает, карлик не крашит 1С. Сегодня УПД есть входящая, попробую подписать из программы уже полноценно, как товар привезут... |
|||
303
big
23.06.23
✎
11:41
|
(302) Файл, на котором DOM рушится. Хочется взглянуть )
|
|||
304
MWWRuza
гуру
23.06.23
✎
12:09
|
(303) Хм... Да он на любом рушится, пофик.
Вот например УПД: https://cloud.mail.ru/public/zUTb/KB7hDeEyb А потом, что значит DOM рушится? Почему именно DOM - ??? Рушится 1С, когда в DOM загружен файл, после отработки запроса карликом... Само чтение ХМЛ с помощью DOM работает у меня в конфе несколько лет, и ни разу не рушилось. Карлик, без загруженного в DOM файла - тоже работает стабильно. Как только вместе - так падение. При чем, сам запрос отрабатывает(действие совершается, у меня так даже один док подписался и 1с после этого рухнула, зашел следующий раз - статус дока поменялся на "подписан и отправлен в гис"), падает в конце - при выводе результата. Что они там между собой по ресурсам не поделили - мне на моем уровне не видно... Джеф, если захочет, разберется. |
|||
305
big
23.06.23
✎
12:14
|
(304) Значит это я недопонял. Зачастую теряется нить обсуждения на таких длинных ветках ;)
|
|||
306
Djelf
23.06.23
✎
13:37
|
(304) Попробуй изолировать через МояФункция(Знач ИзDOM_Текст)
В карлик поступет копия данных, возможно что DOM портит внутреннюю структуру CString (это внутри 77), такое вроде неоднократно отмечалось, но не помню как найти, многогие ссылки уже умерли. Пока ничего для обхода ситуации ответить не могу. |
|||
307
MWWRuza
гуру
23.06.23
✎
16:54
|
(304) Попробуй изолировать через МояФункция(Знач ИзDOM_Текст)
Я пробовал. Но, я то не из DOM карлику значение пихаю... Я вначале строки получаю, парся ХМЛ через DOM, потом много чего с ними еще делаю для формирования титула(опять-же, формирую окончательно XML-ку титула так-же DOMом, НО, ЭТУ ХМЛ КАРЛИК СЪЕДАЕТ И НЕ ПАДАЕТ), а падает только тогда, когда я перед выполнением запроса карликом, но в этой-же процедуре, открываю файл DOMом... Даже просто так, не передавая этот открытый DOMом ХМЛ, или стоки из него в запрос. Так, что изолировать бесполезно. Куда уж тут изолированнее, если просто не используется. И кроме того, если-бы карлику не нравились полученные данные, он бы падал в начале, или в процессе работы, а тут, он падает в конце, когда запрос успешно отработал, и нужно только результат вывести. Такое ощущение, что он пытается передать результат своей работы в область памяти, занятую DOMом... Рабочую уже переделывать не буду, там все функционирует идеально, когда парсинг входных ХМЛ на v7Pus сделал(XML титула по прежнему формирую DOMом), а в тестовую обработку, для экспериментов, добавлю загрузку одного из файлов в DOM, сразу будет все понятно... |
|||
308
MWWRuza
гуру
23.06.23
✎
17:00
|
А ведь работает, зараза :-)
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-541.jpg Сколько времени и нервов отняло, но получилось... Осталось сделать подписание квитанций о просмотре, при первой загрузке документа(а то они сейчас так и висят в списке не подписанных), и все. Ну, с отказами, уточнениями и прочей лабудой, буду позже разбираться. |
|||
309
Djelf
23.06.23
✎
21:48
|
Эх... Это уже шаманизм...
|
|||
310
MWWRuza
гуру
24.06.23
✎
17:49
|
(309) Ну, ежи, ужи, ножи - это хорошо.
Но, далеко от темы сабжа. Доделал, навел сделал автоматическое подписание квитанций о просмотре, "красивости" навел, подкрасил статусы в цвета web-ЛК ЭДО Лайт, пусть работает. https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-542.jpg А с карликом... Если Джеф не против, создам новую ветку, в 7.7. Написал обработку для теста, и вместе с необходимыми файлами выложу. Там в комплекте, текстовые файлы - файл титула, файл ЭЦП для него, и XML-ка(вообще - пофик, можно любую взять, без разницы). ЭЦП для работы не нужна, нужен только токен авторизации. https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-543.jpg Так, как это "боевой" контур реального клиента, в общий доступ еговыкладывать не буду - отправлю Джефу на почту, из редмишки к карлику. Живет он 12 часов, соответственно, буду высылать "по первому требованию" :-) , не проблема, у меня он одной кнопкой формируется. Там в обработке "галочка", грузить/не грузить DOM. С галочкой - крашится, без нее - нет, просто выводит ошибку, что док уже подписан(это так и есть). |
|||
311
MWWRuza
гуру
24.06.23
✎
18:29
|
+(0) Должно быть вот так:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-543.jpg Имя файла и ИД документа из текста мудуля подставляются автоматом, пути к файлам токена, титула и его ЭЦП надо выбрать к файлам из архива. XML тестовая - есть в комплекте, но, вообще, может быть произвольная, не принципиально, в обработке данные из нее не испольхуются, только в DOM загружаются, при установленной "галочке". Я думаю, для теста и поиска бага - самое то... |
|||
312
MWWRuza
гуру
24.06.23
✎
18:29
|
Блин, не туда запостил :-(
|
|||
313
MWWRuza
гуру
25.06.23
✎
17:04
|
(300) для ЭДО Лайт закачиваем архив с документооборотом и берем файлы .xml и ЭП .p7s
Команда = "/api/v1/"+ ?(флВходящие = 1,"incoming","outgoing")+"-documents/"+СокрЛП(ИдентификаторДокумента); Да вот как-бы не пришлось переделывать, и тоже так делать... Сегодня, у дугого клиента поймал проблему - в документе DP_PDOTPR нет тега ЭПОтпрФайл... Зато, есть в нем тег ЭЦППолФайл, и в нем подпись оператора, самого ЦРПТ... С чего-бы это? Непонятно, где ЭЦП отправителя брать в таких случаях. Ранее, во всех доках, которые я видел, в нем была, в теге ЭПОтпрФайл в готовом виде. А архив ДО скачать не проблема, и ихвлечь из него файл ЭФП дока тоже не проблема. Но, там он бинарный, в формате p7s, и с таким-же расширением... Как Вы из него получаете ЭЦП текстом в Base64, для вставки в титул? |
|||
314
MWWRuza
гуру
25.06.23
✎
18:36
|
Отвечу сам себе...
Тут, как оказалось, нет ничего сложного - просто этот файл надо закодировать в Base64... Гиморой конечно, с получением ЭЦП из квитанции отправителя проще, но зато надежнее - файл эцп самого документа в бинарном формате есть всегда, а с квитанциями, как мы видим, разные чудеса случаются :-( |
|||
315
big
25.06.23
✎
19:26
|
Какой-то цирк с конями это ЭДО-НЕДОлайт ((((
|
|||
316
NorthWind
25.06.23
✎
22:50
|
(313) > Сегодня, у дугого клиента поймал проблему - в документе DP_PDOTPR нет тега ЭПОтпрФайл... Зато, есть в нем тег ЭЦППолФайл, и в нем подпись оператора, самого ЦРПТ... С чего-бы это?
Версии квитанций в начале месяца должны были поменяться, там как раз названия этих тегов зачем-то поменяли. Но все ли участники поменяли версии квитанций на данный момент - вопрос. Вы это учли? |
|||
317
MWWRuza
гуру
25.06.23
✎
23:09
|
Я решил забить на квитанции, раз там такой "зоопарк"... Да и проблема то не в именах тегов а в содержимом - нафик мне ЭЦП оператора, когда мне нужна ЭЦП отправителя?
Переделал на скачку архива, извлечение из него файлов по маске(формирую из ID документа), там получаются два файла с одним именем - один XML, и второй ЭЦП к нему. Его кодирую в Base64, и полученную строку использую для формирования титула. В этой схеме, мне квитанции как-бы и не нужны. |
|||
318
MWWRuza
гуру
26.06.23
✎
10:02
|
+(317)
Единственное, что мне не очень нравится в этой схеме, это то, что 1с77 не умеет сама работать с архивами, и для этого приходится использовать очередную внешнюю компоненту... Из всех имеющихся, умеющих это делать, мне больше всего понравилсь "DialMail.dll". Ранее, в конфе нигде не использовалась, но, из-за архивов пришлось прицепить ее... Вроде работает, стабильно, ни с чем не конфликтует... Но, после борьбы с "карликом", который конфликтовал с XmlHttp DOM, у меня какое-то чувство настороженности. Я когда переписал обработку, уже так при первом тестировании и ждал - рухнет или нет Вроде нет, работает стабильно. Но, все равно, при первой возможности, переделаю на шел из винды с помошью скрипта - в винде есть встроенные средства работы с ZIP архивами, логично их задействовать, а не использовать внешние костыли(внешние компоненты). Ни у кого нет примеров готовых скриптов под 7.7. для работы с ZIP-архивами - ? Нужно - получить список имен файлов из архива, и извлечь из него файлы по маске(маску формирую как "*" + <ИдДокумента> + ".*"). DialMail.dll прекрасно с этим справляется, но, хочется уйти от лишней ВК... |
|||
319
big
26.06.23
✎
10:17
|
(318) Если используется 1СРР, можно её архиватором пользоваться
|
|||
320
MWWRuza
гуру
26.06.23
✎
10:21
|
Она есть, и грузится, но, толком нигде не используется. Плотно используется везде только FormEx, но, в нем вроде нет такого.
А из 1СРР - я не нашел вменяемого описания методов и свойств работы с архивами. Может плохо искал :-) |
|||
321
MWWRuza
гуру
26.06.23
✎
10:24
|
С ДиалМайл все очень просто получается:
Функция УстановитьКомпоненту() Если ЗагрузитьВнешнююКомпоненту("DialMail.dll") = 0 Тогда Сообщить("Не удалось обнаружить компоненту DialMail.dll!"); Возврат 0; КонецЕсли; Попытка ZIP = СоздатьОбъект("AddIn.ZIP"); Исключение Сообщить("Не удалось создать объекты из компоненты DialMail.dll!"); Возврат 0; КонецПопытки; Возврат 1; КонецФункции Функция ИзалечИзАрхива(ИдДока, ПутьКАрхиву) УстановитьКомпоненту(); ZIP.КаталогИзвлечения = КаталогВременныхФайлов(); КолФайлов = ZIP.Извлечь(,"*" + Врег(ИдДока) + ".*", ПутьКАрхиву); Если ZIP.КодОшибки = 0 Тогда СЗ = СоздатьОбъект("СписокЗначений"); Сч = 0; Для Сч = 1 По ZIP.КоличествоФайлов() Цикл ИмФвАрх = ZIP.ПолучитьИмяФайла(Сч); Если Найти(ВРег(ИмФвАрх), ВРег(ИдДока)) > 0 Тогда СЗ.ДобавитьЗначение(ИмФвАрх); КонецЕсли; КонецЦикла; Возврат СЗ; Иначе Сообщить("Ошибка работы с архивами: код " + ZIP.КодОшибки + ": " + ZIP.КодОшибкиСтр); Возврат 0; КонецЕсли; КонецФункции |
|||
322
big
26.06.23
✎
10:28
|
(320) Класс BinaryData.
pkZip Синтаксис: pkZip(Команда) Параметры: Команда - тип Строка. Командная строка архиватору. Формат командной строки: [-s[пароль]] имя_и_путь_создаваемого_архива имя_и_путь_архивируемого_файла(ов) Описание: сжимает файлы внутренним архиватором. Метод не влияет на состояние и на данные объекта. pkUnzip Синтаксис: pkUnzip(Команда) Параметры: Команда - тип Строка. Командная строка архиватору. Формат командной строки: [-s[пароль]] имя_и_путь_архива путь_к_каталогу_назначения Описание: разжимает файлы внутренним архиватором. Метод не влияет на состояние и на данные объекта. |
|||
323
MWWRuza
гуру
26.06.23
✎
10:58
|
(322) Спасибо. Но, это я видел. Как-то бедненько...
Нет похоже метода извлечения файлов по маске... И списка имен тоже нет. А их там, в каждом архиве "100-500" :-) Если их каждый раз все извлекать, то через месяц работы, место на диске кончится :-) Или придумывать какую-то схему "чистки мусора" за собой, после отработки дока... Опять-же в какое время? По какому принципу? По маске тут не пойдет - там не все файлы содержат ИД документа, там и другие есть... По маске удалять файлы - я могу только сами архивы и извлеченные из них XML и ЭЦП(p7s) этого XML, там это прокатит. Правда, пока не придумал в какой момент и чем инициировать эту очистку... После подписания? Ну, можно, но, вдруг подпишут раньше, чем загрузят файл в 1С, сразу после просмотра(до просмотра кнопка "подписать" у меня не доступна) - ? В принципе, все равно загрузится, но, это пара лишних секунд - опять получение файла XML заново. Не страшно, может так и сделаю. |
|||
324
MWWRuza
гуру
26.06.23
✎
11:02
|
Можно конечно внутри КаталогаВременныхФайлов создавать подкаталог с именем по ИД Документа, помещать все в него, и потом прибивать его целиком. Тогда это решает проблему удаления файлов по маске - оно просто не нужно становится.
Подумаю... |
|||
325
MWWRuza
гуру
26.06.23
✎
11:38
|
(317) Да и проблема то не в именах тегов а в содержимом - нафик мне ЭЦП оператора, когда мне нужна ЭЦП отправителя?
Ошибся я... Видимо заработался. Все-таки, там эцп отправителя, видимо, из-за не совпадающего имени тега, откуда-то не от туда подтянул ЭЦП: https://storage.olegon.ru/supermag/1С/Markirovka/ПровЭЦП.jpg Посыпаю голову пеплом... Бывает, не ошибается только тот, кто ничего не делает :-) С этим ЭДО Лайт, уже ни чему не удивляюсь. Извиняюсь, что ввел в заблуждение... |
|||
326
MWWRuza
гуру
26.06.23
✎
11:40
|
||||
327
АгентБезопасной Нацио
26.06.23
✎
13:53
|
(323) в калатоге временных файлов - временный каталог. вы ж не на сервере обрабатываете, а локально. значит, при перезагрузке машины он почистится.
|
|||
328
MWWRuza
гуру
26.06.23
✎
14:31
|
Сейчас посмотрел у клиента... А там - их милЬЁн, почти три гига... Удивлся, а потом понял,система хоть и не сервер, а обычная семерка проф, но, комп там не выключают и не перезагружают неделями - там алкашка, а значит УТМ, а время торговли алкоголем не мовпадает со временем работы оператора, который имеет доступ к этому компу... Поэтому, там временный каталог пухнет как на дрозжах. Надо будет им планировщик настроить на ночную перезагрузку, хотя-бы раз в неделю.
|
|||
329
Djelf
26.06.23
✎
15:40
|
Ну... в sqlite есть для этого расширение, оно все это умеет, но это опять еще одна ВК и еще одно расширение к ней ;)
Не прокатит, нужно же без ВК, без расширений и чтобы из 7.7 работало нативно. Так? В принципе можно, через shell.explorer вроде как можно. |
|||
330
АгентБезопасной Нацио
26.06.23
✎
15:48
|
(328) три гига - не так уж и много. а если планировщик - то можно и на принудительное удаление, если уж настраивать. тем более, в клюшках - хоть подключение и асинхронное, процессы все равно синхронные, можно и чистить за собой. Хороший тон...
|
|||
331
Djelf
26.06.23
✎
15:53
|
(330) Да, это небольшие объемы, по сравнению с парой киношек.
Я, например и не парюсь, все что проходит через егаис пихаю в базу sqlite и чистить даже не собираюсь. Разве что марок у меня нет... Но это тоже решаемо, сжатие таблиц никто отменить не сможет. |
|||
332
АгентБезопасной Нацио
26.06.23
✎
15:55
|
(331) просто воспитание такое: лишний килобайт оперативы - порка, а за лишние 100 байтов в канал - расстрел.
|
|||
333
Djelf
26.06.23
✎
16:25
|
(332) Я тоже экономлю, но я экономлю экономичнее!
В sqlite можно очень много чего запихать, от чего клюшки треснут и взорвутся. Накладные расходы? Да я вас умаляю... меньше метра занимает 1sqlite со всеми приблудами, с match, c fts5, c json и т.д. и т.п. И при этом работает значительно быстрее ключшек с базами, которые туда вообще никак не влезут. Я не спорю что MSSQL лучше, ну да лучше, но он как-то и побольше одного метра sqlite... Забудь уже про "640 КБ должно хватить всем". И кстати! sqlite, хотя и вышел за этот запрет, но за пределы 1 метра он он еще не готов выйти. 1scurl, да, он пухлый, 2 метра сейчас, но туда напихахано чёрт знает что. Но должен работать вообще со всеми протоколами, не уверен что я должен решать какие протоколы стоит вырезать. |
|||
334
АгентБезопасной Нацио
26.06.23
✎
17:34
|
(333) >>Забудь уже про "640 КБ должно хватить всем".
Просто это слишком долго забывалось... в ущерб работе, увы. |
|||
335
big
27.06.23
✎
04:37
|
(328) Если 7.7 не выключается, то временные файлы она "держит", их не удалишь. Буквально 2 недели назад столкнулись с этим, когда два робота ВетИс-Меркурия (из двух разных баз!!!) гадили в одну Temp-папку. Из-за этого у них иногда пересекались имена временных фалов DBF от результата запроса. А выяснилось как - в одном роботе добавили ещё одно поле в запрос и начались обвалы системы с "Не найдено поле N". Пришлось разнести базы по разным папкам Temp, есть в такая опция при запуске 7.7
з.ы. и пока из 7.7 не выйдешь, эту кучу DBF от запросов не удалишь - файл занят другим процессом. |
|||
336
MWWRuza
гуру
27.06.23
✎
08:27
|
(327) в калатоге временных файлов - временный каталог. вы ж не на сервере обрабатываете, а локально. значит, при перезагрузке машины он почистится.
Да вот, не особо то он и чистится... Сегодня включил свой комп(на ночь был выключен), не открывая 1С заглянул в КаталогВременныхФайлов, и вот: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-545.jpg То, с чем "игрался" вчера. Так, что похоже придется чистить мусор самостоятельно. |
|||
337
MWWRuza
гуру
27.06.23
✎
08:33
|
(335) з.ы. и пока из 7.7 не выйдешь, эту кучу DBF от запросов не удалишь - файл занят другим процессом.
Ну, это файлы, создаваемые самой 1С. Так и должно быть. Они удаляются по большей части при корректном выходе из 1С, автоматом. О моих-же файлах, 1С ничего не знает. Соответственно - не удаляет. И не держит, они спокойно удаляются инерактивно, при запущеной и просто свернутой 1С. Проверил :-) |
|||
338
NorthWind
27.06.23
✎
08:50
|
(337) начиная с Win10 можно настроить, чтобы винда автоматически удаляла ненужные файлы, в том числе из темпов. Но совершенно необязательно что она это сделает при перезагрузке именно с теми файлами, про которые вы думаете. Как я понимаю, там просто слежение за свободным местом, поэтому она может удалить совершенно другие файлы, или вообще ничего не удалить, если решит, что сейчас это не надо. И по умолчанию, по-моему, это дело для темпов отключено, его еще включить надо где-то там в "хранилищах" надо.
|
|||
339
MWWRuza
гуру
27.06.23
✎
09:58
|
Хм... Да что там голову морочить особенностями разных ОС и их "тонкими" настройками :-)
Сделал у себя, по принципу - в процедуре подписания документа, смотрю, что он загружен в базу 1С, и есть ПоступлениеТМЦРозница соответствующее этому УПД, и если подписание удачное - статус дока в ЭДО поменялся, то удаляю каталог. Аналогично, если загружаю док в базу, то потом, при закрытии дока ПоступлениеТМЦРозница, генерю внешнее событие и в обработке ЭДО Лайт ловлю его и смотрю, если док в статусе подписан - удаляю временный каталог. Так оно спокойнее будет. Есть там конечно нюансы - например, загрузили док, и закрыли обработку ЭДО Лайт, до закрытия загруженного документа, в таком случае некому будет удалять, но, это частные случаи, ничего страшного(можно конечно это удаление и в доке ПоступлениеТМЦРозница делать, но, как-то лениво). |
|||
340
MWWRuza
гуру
27.06.23
✎
10:05
|
+(339) А вообще, сейчас пришла в голову идея - проще и правильнее, наверное, это делать при обновлении списка документов в обработке(при открытии, при выполнении каких-то действий, или по кнопке) - если статус подписан, и документ загружен, то и каталог можно удалить.
|
|||
341
MWWRuza
гуру
27.06.23
✎
10:13
|
+(340) Этим, кстати, мы обойдем еще одну проблему - статус дока на сервере, может поменяться не мгновенно, а через несколько секунд, когда процедура подписания уже отработала. В этом случае чистки не будет.
А при обновлении списка, которое будет рано или поздно(при следующем открытии или пользователь на кнопочку "Обновит список" жмакнет) - все равно почистится. |
|||
342
MWWRuza
гуру
30.06.23
✎
12:43
|
Все, финиш:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-548.jpg Работает на продуктиве, все ОК. Больше не знаю, что еще добавить :-) |
|||
343
Djelf
30.06.23
✎
14:30
|
(342) Как это не знеешь? оО
1. Например счетчик документов едо за год, чтобы внезапно все не сломалось. 2. Переписать тз на тп (1с++), это и сортировки, и фильтры по клику на заголовке, и динамические фильтры по быстрому поиску строки, и много его чего придумать можно. Да, такие "подвиги" не оценят, но тут весь "подвиг" в освоении этого достаточно простого навыка, это займет время, но не так много. Имхо стоит освоить, я уже как-то с тп уже совсем сжился, мне сейчас раз в 10-1000 проще на тп что-то ваять, чем на тз. Потыкай пример: https://cloud.mail.ru/public/iEgz/owsfxgduj это очень просто... |
|||
344
АгентБезопасной Нацио
30.06.23
✎
14:39
|
(343) подтверждаю! освоив прямые запросы, табличное поле - делать на них становится гораздо проще и эффективнее.
зы. можно вместо ТП сразу использовать ПоставщикДанных |
|||
345
Djelf
30.06.23
✎
14:47
|
(344) В ПоставщикДанных есть шероховатости на новых движках, патчи я постил, но кто ж из найдет.
Но на dbf-версиях 1sqlite невероятно крут, это же возможность использовать и соединять внешние таблицы sqlite одновременно со внутренними таблицами 1С 7.7 Может ли осилить такое ваша 8ка? Не уверен... |
|||
346
Djelf
30.06.23
✎
14:51
|
Мне все равно придется на 8ку, затраты шеф уже не простит ;)
Казалось что пиво и вода будут значительно жестче, но тут я не угадал, это для опта сейчас супер лайт-версия. |
|||
347
АгентБезопасной Нацио
30.06.23
✎
14:56
|
(346) имея опыт с нормальными запросами и нормальными ТП, не только с ТЗ - на снеговика переползать гораздо проще, чем можно подумать. а из радикальных преимуществ - пожалуй, только СКД
|
|||
348
MWWRuza
гуру
30.06.23
✎
17:14
|
(343) Да делал я когда-то на ТП, вот, этот документ, как раз на ТП сделан:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-549.jpg Только, в данном случае, когда доков 1-2 в день-через день, это излишне... По той-же причине, счетчик, так-же излишен - эта несчастная 1000 доков в год ограничение ЭДО Лайт, как я понял, в нем только для исходящих доков, входящие не ограничены. А их, если и будут - то и десятка не наберется(редкие возвраты если только? Я их все равно пока не делал через API, тестировать не на чем)... Поэтому, смысла нет считать доки. Да даже если и не так, и считаются в эту 1000 и входящие - то никто не запрещал грузить доки из файлов скачаных из ЛК. Эту возможность я не блокировал, просто обработку работы с документом нужно грузить не из этой обработки, а из журната приходных документов. |
|||
349
big
30.06.23
✎
19:36
|
(348) 1000 документов в год - это исходящие подписанные через API. Если же их загружать неподписанные, то ограничений нет. В ЭДО-лайт будут загружены как черновики, потом их в WEB-интерфейсе можно интерактивно подписывать. Это есть у них в документации, кстати. А на входящие ограничений нет.
|
|||
350
АгентБезопасной Нацио
30.06.23
✎
19:44
|
(348) просто имеет смысл все делать "хоть безобразно, но однообразно".
(349) несколько дней назад родилась мыслЯ™ - а если сделать заполнение через веб-морду, но скриптом? :-) так сказать, "обмануть систему"... |
|||
351
big
30.06.23
✎
20:04
|
(350) п.2 Там перед операцией с ЭЦП появляется окошко с вопросом а-ля "можно ли произвести операцию с ключом бла-бла-бла..." Скрипт сможет кнопку ОК нажать? А перед этим, кстати, из выпадающего списка нужный ключ выбрать? ЧЗ выкатывает ооочень большой список - даже тех ключей, которые уже удалены давно.
|
|||
352
MWWRuza
гуру
30.06.23
✎
20:31
|
(350) а если сделать заполнение через веб-морду, но скриптом? :-) так сказать, "обмануть систему"...
А смысл этого? Работает и через API, вообще без проблем, быстро, удобно, список заполняется с кучей отборов, постранично, страницы можно листать, в программу доки загружаются, все подписывается. А кому нужно больше 1000 исходящих в год, ну, например каким-то оптовикам или производителям, те не будут связываться с ЭДО Лайт, а подключат полноценного оператора, того-же "Диадок" или "СБИС". (350) "хоть безобразно, но однообразно". :-) В моем случае, это без ТП. Тот док, который в предыдущей моей месаге, так и остался не востребованным. Я его делал больше из "спортивного интереса", с ТП поиграться. У меня у всех работает отчет "Алкогольная декларация", давно, с 2012 года, вполне успешно. Документ был задуман как альтернатива отчету, для возможности ручного заполнения/правки данных и хранения их в документах, а не получения "на лету" из итогов. Но, как-то особо никому не потребовался, все сдают как есть, по данным учета, а скоро ее совсем отменят, когда маркировку на пиво введут, как уже отменили для маркируемого алкоголя. Так, что, скоро станет совсем не нужным. А больше, на ТП у меня в конфе и нет ничего, как-то не было необходимости, не те задачи. |
|||
353
MWWRuza
гуру
30.06.23
✎
20:57
|
(351) ЧЗ выкатывает ооочень большой список - даже тех ключей, которые уже удалены давно.
Это не ЧЗ выкатывает(где он их возьмет? :-) ), а это сертификаты от этих ЭЦП присутствуют у Вас в системном хранилище. Просто Вы удалили контейнеры с сертификатами и ключами, а копии сертификатов(без ключей) в хранилище остались. Если таким сертификатом попробовать авторизоваться в ЧЗ или еще где-либо, или подписать что-то, КриптоПро запросит доступ к носителю с контейнером ключей. |
|||
354
Djelf
01.07.23
✎
04:26
|
(348) Не обманешь, это не ТП, это Йоксель ;)
|
|||
355
MWWRuza
гуру
01.07.23
✎
07:18
|
(354) Вот ни сколько не собирался :-)
Похоже, просто сам забыл, с чем работал(давно это было), так, как у Йокселя тоже есть свой табличный документ(а не таблисное поле, как у 1cpp). Вот, это на форме: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-551.jpg А это в модуле: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-550.jpg Действительно Йоксель :-) |
|||
356
big
03.07.23
✎
04:50
|
(353) Список к показу готовит именно ЧЗ. И критерии включения в этот список заложены мозголомами из ЧЗ. Удаляя ключи средствами КриптоПро и если там остаются некие "хвосты" и недействующие ключи, то на фейхоа их показывать пользователю? Похоже вываливают всё, что болтается в Личном хранилище. Считаю это крайне непрофессиональным подходом.
|
|||
357
victuan1
03.07.23
✎
08:38
|
(356) Да, вываливает что в Личном хранилище. Просто через certmgr.msc удаляю лишнее, и оно не светится в списке выбора при входе в ЛК ГИСМТ.
|
|||
358
MWWRuza
гуру
03.07.23
✎
08:46
|
(356) Ну, да, чудес не бывает - но, тут они явно чего-то намудрили...
Основную часть списка, подтягивают из системного хранилища, но, дополняют его сертификатами, которыз давно нет на компе в хранилище, но по которым вход когда-либо осуществлялся с этого компьютера. Странно звучит, но факт. По какому признаку они их у себя отбирают и как сопоставляют с текущим рабочим местом - загадка... Вот, изначальный список сертификатов для входа, на моем компе на сегодня - их там "мульЁн", видно по маленькому движку линейки прокрутки. https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-552.jpg Вот, хранилище, после этого, удалил все лишние. https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-553.jpg А вот, после удаления. Движок линейки прокрутки стал шире, в несколько раз, их там сильно поубавилось, но, если прокрутить список ниже, то там присутствуют сертификаты, которых нет в хранилище, соответственно я не могу их удалить, но, когда-то я под ними заходил в ЛК ЧЗ. https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-554.jpg Как-то странно, но так. |
|||
359
MWWRuza
гуру
03.07.23
✎
08:53
|
(357) Просто через certmgr.msc удаляю лишнее
А кстати, да. Через браузер не все виды, и соответственно не все можно удалить, а через утилиту - все. После удадения утилитой, лишние исчезли из списка выбора ЧЗ. |
|||
360
MWWRuza
гуру
03.07.23
✎
09:08
|
+(357)(359) Встроенное в осла(IE) средство управления сертификатами, через меню "Содержание", как-то не совсем полноценно работает. В нем, в списке "другие пользователи", увидел старый сертификат одного из моих клиентов - там ему точно делать нечего, видимо когда-то добавил по ошибке, случайно. Хотел удалить - а кнопка удаления не активна. Через утилиту удалился нормально, и оттуда исчез тоже.
|
|||
361
MWWRuza
гуру
03.07.23
✎
09:25
|
Хоть руки дошли почистить мусор :-)
Сейчас там только три, два моих - один мой личный, как ИП, выданный в ФНС, второй, тоже мой, на меня, как сотрудника - "Администратора" "ВЕГА", и третий тестовый ФСРАР для работы тестового контура УТМ от той-же "ВЕГИ": https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-555.jpg https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-556.jpg Правда, второй и третий, там повторяются дважды - видимо, плагин один раз подтягивает их из хранилища, а второй, с аппаратного ключа(он сейчас вставлен). Входит по любому - и по тому, который в хранилище, и по второму. Но, естественно, только при вставленом ключе. |
|||
362
MWWRuza
гуру
03.07.23
✎
23:49
|
Добавил запрос уточнения и запрос анулирования.
Правда, пока не проверял, не на чем, но теоретически - должны работать :-) |
|||
363
MWWRuza
гуру
05.07.23
✎
17:24
|
Вот тебе и "приехали", гладко было на бумаге, да забыли про овраги:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-557.jpg Уперлось в ограничение длины строки в 1с77... УПД - большой, более 40 строк документа. Строка здесь, это контент ХМЛ подписываемого УПД, который не умеет передавать карлик в теле мульттипарт запроса в виде файла(ссылки на файл), а может только строкой... На небольших УПД, порядка 10-15 строк, это прокатывало. А на 40 строках - встряло, ХМЛ переведенный в одну строку, похоже превысил допустимую длину :-( Djelf в (144) писал: (133) У меня вся отсылка из строк идет, файлы не поддерживаваются. Можно допилить, но таких ообъемов сложно достичь чтобы через файлы данные гонять. Похоже, оказалось не очень сложно. Это реально? Или проще забить на использование карлика, и переделать на чистый curl из командной строки? Не хочется, уж больно карлик понравился :-) |
|||
364
MWWRuza
гуру
05.07.23
✎
17:37
|
Хотя, сейчас посмотрел, не должны размеры документа влиять на длину подписываемой, и передаваемой на сервер строки... Там, в титуле не передается контент документа, только его ЭЦП. Буду смореть, похоже еще где-то узкое место.
|
|||
365
MWWRuza
гуру
05.07.23
✎
19:09
|
Все оказалось проще - эти клиенты ранее подписывали серез сайт, и ничего мне об этом не говорили, как так и надо...
А оказывается, там бухгалтер, на которого ЭЦП оформлена, не был зарегистрирован в справочнике "ФизЛица". А при формировании титула, я брал ФИО подписанта по ЭЦП, но из справочника ФзЛица. Он там не находил его, и отправлял титул с пустыми полями Фамилия, Имя, Отчество. На что сервер ЭДО выводил свою любимую ошибку "400", и длинную строку комментария этой ошибки, которую я выводил в табло 1С, когда статус ответа не 200 или 201. Соответственно, такая строка не лезла в табло, выводила ошибку... И так, как в табло ошибка не выводилась, то и не понятно было, почему... Хорошо, я хоть сразу, когда делал, предусмотрел запись этой строки в файл, перед выводом в табло... Просмотрев этот файл, понял, в чем дело, добавил подписанта в справочник ФмзЛиц, и все полетело :-) PS Добавлю проверку на наличие подписанта в справочнике, и при отсутствии его там, соответствующее предупреждение и прерывание процедуры, как не имеющей смысла при таких условиях. |
|||
366
MWWRuza
гуру
05.07.23
✎
19:14
|
(363) Похоже, оказалось не очень сложно.
Всетаки, наверное действительно сложно. Вопрос снят, табло и просто длина строковой переменной, это совершенно разные вещи... |
|||
367
MWWRuza
гуру
05.07.23
✎
19:43
|
+(365) и длинную строку комментария этой ошибки, которую я выводил в табло 1С, когда статус ответа не 200 или 201.
А вообще, эта строка - это JSON. Можно его прочитать в список значений, и в "удобоваримом" виде вывести в табло, для понимания в чем ошибка. Вопрос - можно как-то из ответа карлика, понять тип возвращаемого значения, что это обычная текстовая строка или JSON - ? Или только по первым/последним символам ответа анализировать? |
|||
368
Aleksey
05.07.23
✎
21:58
|
(367) прjсто перед выводом обрезать выводимую строку, либо через сред() выводить порционно, типа
Ответ=ТвояДлиннаяСтрокаОтвета; Пока ПустоеЗначение(Ответ)=0 Цикл Сообщить(Лев(Ответ,200)); Ответ = Сред(Ответ,201); КонецЦикла; |
|||
369
MWWRuza
гуру
05.07.23
✎
22:25
|
(368) Да я уже вот так сделал:
ОписОш = "Ошибка " + СокрЛП(СтрОшибка) + " " + СокрЛП(Ответ); Тхт = СоздатьОбъект("Текст"); Тхт.ДобавитьСтроку(ОписОш); Попытка Тхт.Записать("C:\Temp\ОшОтпр" + ИД + ".txt"); Исключение КонецПопытки; Если (Лев(Ответ, 2) = "[{") И (Прав(Ответ, 2) = "}]") Тогда СзОтв = глРазборJSON(Ответ); Сч = 0; Для Сч = 1 По СзОтв.РазмерСписка() Цикл Предст = ""; Зн = СзОтв.ПолучитьЗначение(Сч, Предст); Сообщить("Ошибка " + Зн.Получить("err_type") + " " + Зн.Получить("err_message")); КонецЦикла; Иначе Сообщить(ОписОш); КонецЕсли; Просто думал вот это: "Если (Лев(Ответ, 2) = "[{") И (Прав(Ответ, 2) = "}]") Тогда" - определение, что вернулся JSON, более красиво разрулить. |
|||
370
MWWRuza
гуру
05.07.23
✎
22:36
|
Тут, в отличии от ЕГАИС, разработчики API ЦРПТ не поскупились на расшифпровки ошибок, на каждый не верный тег или атрибут XML своя строка в ответе.
Это там получив скупое описание ошибки, гадаешь, "что-бы это значило". Здесь, сразу все понятно. Единственное, он номера строк файла XML выводит на каждую ошибку, но так, как XML передан одной строкой - везде 1. Но, тут ничего не поделать. Все равно лучше так чем никак :-) |
|||
371
Aleksey
05.07.23
✎
23:12
|
(369) и опять оставил потенциально опасное место, если стрдлина(ОписОш) будет > 250 и это не json, то опять будет таже самая ошибка
|
|||
372
Djelf
05.07.23
✎
23:30
|
Да, елы палы... Опять 25!
Перехватчик.ВключитьРазбиениеДлинныхСтрокДляМетодаСообщить(); GPT вам это не сообщит. Это же тайные знания 1с++ для 1с 7.7!
|
|||
373
MWWRuza
гуру
06.07.23
✎
09:40
|
(371) Я сейчас посмотрел, а там только два варианта - или пусто, если статус 200 или 201(если пусто - я сам пишу: "Документ успешно подписан!"), или, если ошибка, то строка JSON...
Других вариантов то и нет. (372) Да, мы это проходили с тобой, когда работу с карликом я отлаживал. Мне понравилось, действительно построчно выводит. Но тут, я просто не ожидал, что это при обычной работе понадобится. А так, парсинг JSON в этом месте более правильный вариант... Зачем юзверю любоваться на все эти "фигурные, квадратные и прочие скобочки" синтаксиса JSON :-) , когда можно получить строки ошибок в удобочитаемом виде? |
|||
374
MWWRuza
гуру
06.07.23
✎
09:48
|
+(373) или, если ошибка, то строка JSON...
Просто до этого, у меня все ошибки были "короткие", которые были естественны в "стадии экспериментов", ну, типа "Документ вида 504 в статусе 61 не может быть подписан", это тоже был JSON, но, я на это просто не обратил внимание и выводил в табло так, без разбора. Строка короткая, пролазила. А тут, строка оказалась длинная - там два тега ФИО, и в каждом по 3 поля - фамилия, имя, отчество. Итого, 8 строк. Соответственно в JSON эта строка очень длинная, и в табло естественно не полезла. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |