Pull to refresh

Comments 13

wscript.shell позволяет stdout и код возврата мониторить.
Молодцы, что прорвались.

Только вопрос, а не проще было использовать модифицированный протокол 1С-сайт через HTTPS? (модифицировать правда придется самим).
Протокол позволяет передавать файлы любой длины со сжатием и без, с контролем передачи и без. минус подхода, придется писать серверную часть с контролем немалого количества нюансов.
Если будет интересно, могу на выходных разродится статьей на эту тему.

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

Ну и третий из возможных подходов, приходящих на ум сразу, это использование WinHTTP или ему подобных компонент.

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

Ссылки:
Протокол передачи данных 1С-сайт (в очень не полном изложении 1С)

Подключение сертификата к 1С 8.х

WinHTTP

Попробую ответить:

1) Почему не через модифицированный протокол 1С-сайт через HTTPS?
На этот вопрос вы сами отчасти ответили.
(модифицировать правда придется самим)

Честно не изучали этот вопрос и ваша будущая статья представляет интерес.

2) Почему не WinHTTP либо Wget?
Долгое время пользовались WinSCP. Дергали с параметрами внешний exeшник который передавайл файлы на сайт. В какой-то момент столкнулись с проблемой при передачи большого числа файлов. Создавалось много WinSCP процессов, которые подвешивали сервер 1С. В итоге пришли к идеи поточной реализации. Внутри потока передаются файлы.

Это наш код которым можно управлять, можно модифицировать и который мы знаем как устроен.

Еще раз:
— можно ли было добиться того же эффекта другими способами?
— Да можно.

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

Под POST запросы на WEB сервере нужно выделять память. 20МБ, 30МБ — 100МБ. Хорошо если знаешь какого максимального размера будут файлы. Но если не знаешь — выделять на web сервере размер в 1GB — является потенциальной проблемлй безопасности. Нет никаких гарантий что кто-то другой, кроме 1С не начнет постить файлы. И делать это из формы на сайте
Бр-бр-бр. Я говорил не о модификации сервера 1С-Предприятия, я говорил о модификации WEB-сервера.
Ответчик придется писать (ну точнее приемщик частей файлов и сборку окончательного файла. У 1С так устроен протокол передачи.)

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

Если интересует как устроено, посмотрите обработку «Обмен с сайтом» и общий модуль «ПроцедурыОбменаССайтом» в конфигурации Торг 10.3, они по функционалу недалеки от такой же подсистемы в Торг 11, но проще для анализа.

Подбивая бабки:

1. Нужен HTTPS сервер с валидным сертификатом
2. Нужно уметь работать с сертификатами в 1С (ссылка выше)
3. Нужно модифицировать обработку «Обмен с сайтом», сделать ее внешней, перенести в нее процедуры «Послать на сайт()» и «Принять с сайта()» из «ПроцедурыОбменаССайтом», и перезаточить их на работу с HTTPS.
4. Нужно на стороне веб-сервера написать ответчик-приемщик файлов

Зачем это делать:

1. Идеологически вы остаетесь в пространстве реализаций 1С и Битрикс
2. Непосредственно в ответчик-приемщик можно вставлять дополнительные обработки файла по событию «Передача файла завершена»
3. Это решение не зависит от операционной системы, на которой запущен 1С-ВебКлиент (dll в линуксах будет чувствовать себя не очень уютно)

Почему это не надо делать:

1. Придется ковырять веб-сервер (а он может быть совсем в чужой зоне ответственности)
2. Если в команде только 1С-програмисты, то серверное програмирование придется заказывать на стороне
3. Система состоит из двух компонент, что хуже системы состоящей из одной компоненты. (если все максимально упрощать, и функционал sshd(sftp) считать априори надежным и безошибочным)

Ну а дальше вам решать :)

П.С. Наверняка забыл какие-то плюсы и минусы, но основные вроде перечислил.

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

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

Но так как все равно придется допиливать процедуры «Послать» и «Принять», то это не есть совсем уж существенные гадости.
Обмен шел с нашей системой. К Битриксу не имеем никакого отношения.
Похоже что ссылка на исходники не работает :(
К сожалению, ребята написали, что исходники и компонента у них не сохранились
Ну и ладно, написал свою уже :)
А вы не могли бы ее выложить где-нибудь, пожалуйста? Если можно — с исходниками
Sign up to leave a comment.