gifts2017

Взаимодействие платформы 1С 8.2 с системой ЭТРАН ОАО РЖД

Опубликовал Сергей Смирнов (milanse) в раздел Программирование - Практика программирования

Описывается опыт разработки конфигурации и построение взаимодействия с системой ЭТРАН ОАО РЖД

Что такое ЭТРАН

Начнем с того что же такое ЭТРАН (электронная транспортная накладная). Это система безбумажного документооборота между ОАО РЖД и ее контрагентами (грузоотправители, грузополучатели, экспедиторы...). РЖД довольно активно продвигает систему и в настоящий момент многие организации активно ее используют.

Для клиента ЭТРАН это рабочее место в окне браузера, подключенное по впн каналу к серверу РЖД. В системе можно формировать и корректировать заявки на перевозку, накладные и совершать другие операции. При наличии цифровой подписи можно работать действительно без использования бумажных документов, либо свести их к минимуму.

Взаимодействие в режиме АСУ-АСУ

Если у клиента есть своя АСУ, то при наличии еще и ЭТРАН, данные придется вбивать дважды - сначала а свою систему, потом в ЭТРАН, либо наоборот. Для облегчения взаимодействия система ЭТРАН предоставляет программный доступ к своим данным в режиме АСУ-АСУ. Остановимся на этом поподробнее.

Так как ЭТРАН построена на базе веб технологий, то доступ предоставляется посредством SOAP запросов к web сервису. В документации описано 2 способа подключения к web сервису:

  • прямые SOAP запросы;
  • работа через обертку - COM объект предоставляющий интерфейс для выполнения запросов.

Видимо разработчики системы неспроста предоставили 2 способа, потому что с первым у меня ничего не получилось. Не буду здесь описывать мои мучения, но скажу, что представления о SOAP у borland  и microsoft разные ;). 

Что мы имеем

АСУ построенная на базе платформы 7.7 (в своем далеком прошлом комплексная конфигурация)

десяток филиалов работающих в этой системе

механизм передачи и консолидации данных в управлении

необходимость переход от оформления бумажных накладных к работе с ЭТРАН

Что хочется видеть

Распределенную систему

Желательно доступ филиалов через web к общим данным

Обмен данными с системой ЭТРАН

Переходим на новые технологии

После ознакомления с возможностями платформы 1С 8.2, стало понятно, что это как раз то что нам нужно. Было принято решение о заморозке разработки в семерке и постепенном переносе функционала на 8.2. Попробовать как работает 8.2 решил на куске взаимодействия с системой ЭТРАН. 

Итак, для взаимодействия в режиме АСУ-АСУ ЭТРАН предоставляет COM объект, принимающий запросы и возвращающий результат в синхронном режиме. Так как рабочее место подключено к ЭТРАН через VPN, то доступ к ней (для пущей безопасности) желательно осуществлять с этого рабочего места. Я не сильно знаком с технологиями COM, но то что существует DCOM знаю, и, даже, занимался разработкой библиотеки которая такой доступ предоставляет, поэтому сразу стало понятно как достучаться до рабочего места ЭТРАН через локальную сеть.

Как получилось

Общая схема работы механизма доступа к системе ЭТРАН:

  1. От рабочего места ЭТРАН до сервера поднимается VPN канал. 
  2. На рабочем месте устанавливается COM объект компонента для доступа к ЭТРАН, настраиваются параметры доступа к ней через DCOM. 
  3. На сервере 1С создается экземпляр DCOM объекта "EtranASUGO", с указанием, что объект будет "жить" на рабочем месте ЭТРАН.
  4. Посылаем запросы и получаем ответы от объекта EtranASUGO.

Кратко о программной реализации.

Программно все это реализовано в виде конфигурации на платформе 1С 8.2. Созданы объекты метаданных, для отображения предоставляемых системой ЭТРАН данных:

  • документы "Заявка", "Накладная", "Акт общей формы", "Ведомость подачи-уборки", "Накопительная ведомость";
  • справочники "Вагоны", "Контрагенты", "Станции", прочая НСИ;
  • перечисления;

Реализован набор процедур для загрузки данных из системы ЭТРАН. Система позволяет запрашивать данные документов измененных за определенный период. Таким образом можно получать и поддерживать в актуальном состоянии все документы к которым у вас есть доступ. Вместе с документами по ссылкам загружаются и обновляются справочники (НСИ в терминах системы ЭТРАН)

Загрузка данных идет в фоне через механизм регламентных заданий.

COM объект создается в серверной процедуре в модуле с флажком "Повторное использование возвращаемых значений" - "На время сеанса". Таким образом отпадает необходимость создания объекта при каждом обращении к системе ЭТРАН.

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Владимир (hogik) 17.09.10 15:10
Поясните, пожалуйста.
Т.е. АСУ, реализованное на "1С 7.7", перестало существовать?
Или решена задача "данные придется вбивать дважды" на стыке "ЭТРАН"-"1С 8.х", а в АСУ на "1С 7.7" данные вбиваются повторно?
Или всё АСУ клиента переведено с "1С 7.7" на "1С 8.х"?
2. Сергей Смирнов (milanse) 17.09.10 15:31
(1) 7.7 существует и работает, новый функционал реализуется в 8.2 и постепенно переносится из 7.7 существующий.

на счет двойного ввода - пока вбиваются повторно, сейчас пытаемся управление процессом отгрузки сделать в 8.2, попутно можно будет сделать импорт, либо экспорт документов в ЭТРАН
3. Владимир (hogik) 17.09.10 16:02
(2)
Переход на 8.х с 7.7 дело полезное и, думаю, неизбежное.
Но заходить на этот переход со стороны "ЭТРАН" - смелое решение.
Или хороший повод...
Дело за малым - перевести всё остальное на 8.х. ;-)
Арчибальд; +1 Ответить 1
4. belchonokh 19.09.10 10:35
Занимаюсь той же проблемой, однако нашим старым решением была именно работа через SOAP, задача стояла только в чтении накладных. При переходе на 1С встала проблема невозможности достучаться до веб-сервиса ЭТРАН, т.к. 1С не поддерживает работу с веб-сервисом через прокси сервер. Статья довольно полезная, но поскольку никогда не работал с DCOM не совсем понятно как это настраивать.

>># На рабочем месте устанавливается COM объект компонента для доступа к ЭТРАН, настраиваются параметры доступа к ней через DCOM.

где взять установщик? в документации к ЭТРАНу по этому поводу ничего не написано.

>># На сервере 1С создается экземпляр DCOM объекта "EtranASUGO", с указанием, что объект будет "жить" на рабочем месте ЭТРАН.

можно узнать поподробнее как это делается?

желательно с примерами, хотелось бы конечно посмотреть на саму конфигурацию :) , думаю в скором времени данная проблема будет актуальна не только для нас, но и по всей России.
5. Сергей Смирнов (milanse) 20.09.10 08:07
(3) Было интересно решить эту задачу и на половину ее решили.
6. Сергей Смирнов (milanse) 20.09.10 08:43
(4) Функция возвращающая COM для работы с ЭТРАН:
Функция ПолучитьСоединенеиеЭтран() Экспорт 
	СоединенеиеЭтран 	= Новый COMОбъект("EtranASUGO.EtranASUGO",Константы.ждИмяКомпьютераЭТРАН.Получить());
	СоединенеиеЭтран.Connect(Константы.ждАдресСервераЭТРАН.Получить(),Константы.ждПользовательЭТРАН.Получить(),Константы.ждПарольЭТРАН.Получить());
	Возврат СоединенеиеЭтран;
КонецФункции // ПолучитьСоединенеиеЭтран()

...Показать Скрыть


А про COM объект узнал из документации, нашел случайно.
Дело в том что компания разработчик ЭТРАН, продает свое решение для интеграции с АСУ грузоотправителя, собственно в РЖД на все вопросы об интеграции посылают к ним.

Ну а вообще про DCOM наверное надо почитать на специализированных форумах, я в нем не силен.
7. belchonokh 20.09.10 09:39
>>А про COM объект узнал из документации, нашел случайно.

я про него давно знаю, а вот найти до сих пор не получилось, интернет по этому поводу молчит.
8. Сергей Смирнов (milanse) 20.09.10 12:19
(7) Думаю надо теребить РЖД, для работы в режиме АСУ-АСУ подписывается доп. соглашение, оно бесплатно, думаю копать нужно оттуда.
Правда я этого соглашения не видел.
9. Сергей Смирнов (milanse) 20.09.10 12:21
В принципе, говорят что 8.2 работает и через SOAP, тогда немного меняется логика работы и обращаться к ЭТРАН нужно непосредственно с рабочего места.
10. Сергей Холопов ($erg) 23.09.10 15:15
11. belchonokh 23.09.10 20:17
(10) Есть такая идея, самому написать некое подобие прокси-веб-сервиса, т.е. веб-сервис, который будет установлен на машине рабочего места ЭТРАН и будет редиректить запросы на сервис и отдавать ответы в 1С.
12. Сергей Смирнов (milanse) 24.09.10 08:43
(11) А в чем смысл этого сервиса будет ??? Выложить его в веб - очень опасно, а внутри сети COM объект самое то, в настройках безопасности можно ограничить доступ одним компьютером.
И даже наличие веб сервисва не решает проблему взаимодействия с 1С.
На одном из наших филиалов сделали на флексе форму для формирования и отправки заявок в этран - прекрасно работает, но опять же нет связи с корпоративной системой, в которой эти заявки уже вбиты менеджерами.
13. Вера Канаво (kanavo) 11.04.11 15:39
Здравствуйте, у меня стоит аналогичная задача по загрузке данных из Этрана в 1С 8.2 транспортной накладной, скажите могли бы вы помочь с написанием этого кода? Вся программа полностью нам не нужна, так как имеется самостоятельная программа со своим функционалом и нужна загрузка одного документа.
14. Awarder n/a (Awarder) 13.04.11 15:56
kanavo пишет:
скажите могли бы вы помочь с написанием этого кода?


Ну, допустим, это десяток строк кода - просто вызов COM-объекта. А дальше как вы собираетесь сапортить эту часть вашей конфигурации? Поделка Интелекса весьма специфична. Лично я потратил пару-тройку месяцев своей жизни на написание логики отработки _ошибок_ в выдаче из Этрана. А что собираетесь делать вы?

kanavo пишет:
Вся программа полностью нам не нужна, так как имеется самостоятельная программа со своим функционалом и нужна загрузка одного документа.


Вы даже не понимаете что именно вам нужно =) Если вы убеждены, что просто выкачать накладную вам будет достаточно, то, как минимум, вы заблуждаетесь. Ибо выборку можно делать по внутреннему ID (а это просто порядковый номер сущности, а вам будет нужен именно ID накладной), плюс забавный механизм сторнирования и внесения правок (частенько забывают одновить дату изменения и изменять operID), ну и т.д. И как вы собираетесь объяснять клиенту странности работы конфигурации? =))

Другими словами: дерзайте, вы молоды и энергичны =)
15. Вера Канаво (kanavo) 14.04.11 13:09
Согласна пока я плохо себе представляю как реально организовать выгрузку данных из Этрана. Ну а ваши предложения, стоимость?
16. aLex Hmmm (reflexfx) 20.04.11 18:04
belchonokh пишет:
Есть такая идея, самому написать некое подобие прокси-веб-сервиса, т.е. веб-сервис, который будет установлен на машине рабочего места ЭТРАН и будет редиректить запросы на сервис и отдавать ответы в 1С.


если есть желание, могу предложить решение, позволяющие организовать шлюз а ЭТРАН(замена ASUGO интрефейса), работает с пулом запросом, можно распараллеливать запросы - все настраивается в конфиге. Со стороны клиента можно использовать прилагающуюся COM-DLL, использовать SOAP либо CLR Assembly для MSSQL сервера.

Awarder пишет:
Вы даже не понимаете что именно вам нужно =) Если вы убеждены, что просто выкачать накладную вам будет достаточно, то, как минимум, вы заблуждаетесь. Ибо выборку можно делать по внутреннему ID (а это просто порядковый номер сущности, а вам будет нужен именно ID накладной)


Ошибаетесь, можно запрашивать данные и invoiceID и по invNumber(номер накладной) и по номеру вагона, причем ,повторюсь, в различных режимах -
только прибытие, только отправление, все, валидные и т.д. А если уж хотите зрить в корень, то прикручивайте получение данных по списанию денег с ЕЛС и выкачивайте накладные, даже если будет сторно, то логика тут не трехэтажная...

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


вопрос в какой момент времени вам нужна эта накладная, режим АСУ-АСУ предусматривает несколько вариантов и режимов запроса данных накладных.

PS: если будут вопросы(по существу конечно) пишите в личку - постараюсь помочь.
17. aLex Hmmm (reflexfx) 20.04.11 18:09
UP:
хочу заметить, есть еще одни неприятные грабли - если посылать запросы в ЭТРАН через АСУГО или SOAP - не всегда возвращаются валидные xml....
18. belchonokh 20.04.11 19:45
Не рабзобрался как отправить личку...

reflexfx пишет:
если есть желание, могу предложить решение, позволяющие организовать шлюз а ЭТРАН(замена ASUGO интрефейса), работает с пулом запросом, можно распараллеливать запросы - все настраивается в конфиге. Со стороны клиента можно использовать прилагающуюся COM-DLL, использовать SOAP либо CLR Assembly для MSSQL сервера.


очень интересно, хотелось бы услышать стоимость, можно в личку =)
19. Awarder n/a (Awarder) 20.04.11 22:52
reflexfx пишет:
Ошибаетесь, можно запрашивать данные и invoiceID и по invNumber(номер накладной) и по номеру вагона, причем ,повторюсь, в различных режимах -


ок, есть invoiceID 'A000001', было сторнировано перед запросом 10 накладных. и? =) не помню как звучит отлуп (под рукой этрана нет) но что-то типа укажите точно что выбирать.. только список из чего выбирать не предлагает..

belchonokh пишет:
Есть такая идея, самому написать некое подобие прокси-веб-сервиса, т.е. веб-сервис, который будет установлен на машине рабочего места ЭТРАН и будет редиректить запросы на сервис и отдавать ответы в 1С.


можно использовать любой портфорвардер.
20. Awarder n/a (Awarder) 20.04.11 22:57
господа, а где, собссна, у этрана soap шлюз находится? хочу спрыгнуть с com-объекта =)

из доки:

http://xxx.xxx.xxx.xxx:xxxx/EtranServer/EtranLR.dll/soap <- 404 not found
http://xxx.xxx.xxx.xxx:xxxx/EtranServer/EtranLR.dll <- начинается закрузка длл =)

года два назад, помню что ссылка из доки работала
21. aLex Hmmm (reflexfx) 21.04.11 15:04
Awarder пишет:

ок, есть invoiceID 'A000001', было сторнировано перед запросом 10 накладных. и? =) не помню как звучит отлуп (под рукой этрана нет) но что-то типа укажите точно что выбирать.. только список из чего выбирать не предлагает..


A000001 - такой нумерации нет, если что

ответ на ваш вопрос - <useValid/>


вопросы по поводу сотрудничества прошу присылать на reflex2[собака]list.ru
22. Awarder n/a (Awarder) 21.04.11 16:07
reflexfx пишет:
A000001 - такой нумерации нет, если что


есть - оффбоард порожняк.. ну это так, к слову =)
23. aLex Hmmm (reflexfx) 22.04.11 11:21
Awarder пишет:
есть - оффбоард порожняк.. ну это так, к слову =)


Рекомендую почитать матчасть....
<getInvoice version="1.0">
<!-- ID накладной -->
<!-- * тип данных: ЦЕЛОЕ ЧИСЛО -->
<invoiceID value=""/>
<!-- Номер накладной -->
<!-- * тип данных: строка (до 8 символов) -->
<invNumber value=""/>
<!-- Использование 6-значных кодов станций и грузов в ответе -->
.....
...Показать Скрыть
24. Awarder n/a (Awarder) 22.04.11 14:10
ну а что ж не почитать? =)

reflexfx пишет:
* тип данных: строка (до 8 символов)


не разу не сталкивались с шести- и семизначными накладными? если не сталкивались - это не означает что их нет. прежде чем тыкать носом других, лучше разобраться самому ;)
25. aLex Hmmm (reflexfx) 22.04.11 16:07
Послушайте... Вы приводите пример:

ок, есть invoiceID 'A000001', .....

так вот, в invNumber - хоть черта лысого рисуйте(тип строка), а я Вам ответил что invoiceID тип данных ЦЕЛОЕ ЧИСЛО. От Вас много претензий - читайте что пишите....могли бы поблагодарить за ответ на Ваш вопрос по поводу того как получить одну накладную вместо списка.
26. Дмитрий (dvim) 16.11.11 17:14
Так все таки, где найти и у кого просить этот ASUGO ?
27. belchonokh 16.11.11 19:14
(26) dvim, мы в итоге реализовали через протокол SOAP, всё шикарно работает, даже через прокси-сервер.
28. Сергей Смирнов (milanse) 17.11.11 08:44
(27) belchonokh, а прокси сервер каким боком тут ? Как у вас сервер 1С общается с компьютером на котором стоит рабочее место ЭТРАН ?

(26) нужно трясти тех с кем заключали договор (скорее всего ваша дорога, ДЦФТО) и приложение о работе в режиме АСУ-АСУ. У рждшников есть и дока и приложение для взаимодействия. Но так как у разработчика системы (Интелекс со товарищи) есть своя разработка для работы в режиме АСУ-АСУ, то рждники продвигают ее, может быть имеют с этого что-то, а может просто ничего не понимают.
29. Сергей Смирнов (milanse) 17.11.11 09:03
(19) Awarder, видимо имеется ввиду Номер накладной
не
>>ок, есть invoiceID 'A000001'
а
ок, есть invNumber 'A000001'
тогда на самом деле надо выбрать useValid

А вообще запросы сделаны просто и логично, за исключением пары моментов с получения статусов документов ;)
30. Дмитрий (dvim) 17.11.11 11:50
Пример какой нибудь на SOAP eсть?

Я правильно понимаю, что этот код надо будет запускать на компьютере с Этраном?.
Просто пока только подходим к этой задаче.
31. Awarder n/a (Awarder) 17.11.11 13:02
логично спроектировано начало, нелогично местами работает =)

а насчет соапа - ну не знаю, у меня точка входа не работает, приходится через ком-объект =(
32. Сергей Смирнов (milanse) 17.11.11 15:32
(31) Awarder, попробуй дельфевым соапом, может он работает, потому как етран на дельфе или Цбилдере.
33. Awarder n/a (Awarder) 17.11.11 19:39
(32) milanse,

у меня по дефолтному пути длл выгружается =) тут не принципиально чем обращаться
34. belchonokh 17.11.11 20:34
(28) milanse, на рабочем месте с ЭТРАНом стоит прокси (потому как ставить VipNet на сервер 1С равносильно самоубийству сервера), сервер соответственно посылает запрос на прокси, он перенаправляет в сеть VPN и возвращает ответ в виде XML запроса, запросы проходят по регламентному заданию по расписанию.

(33) Awarder, у них для АСУ-АСУ отдельный сервер, на котором по данному пути возвращается описание, правда у нас не на всех компьютерах оно возвращалось, на некоторых так же сохранялась dll (не знаю от чего это зависит), но всё равно работает на всех компьютерах.

Про протокол SOAP. Штатный формат 1С (WS-ссылки) не работает, в виду я так понимаю не полной поддержки всех форматов SOAP.А если подумать, SOAP - это всего лишь надстройка над протоколом HTML (в сети есть описание стандарта, формат сообщений и заголовков). Т.е. нужно просто слать сообщения в формате XML через HTTP. Поначалу мы хотели выкрутиться штатными средствами 1С, есть там HTTP-соединение или что-то в этом духе, но там нашелся глюк, либо фитча, в 1С http-запрос не дает формировать строку заголовка с двумя двоеточиями в ней, несмотря на то, что второе двоеточие используется уже в кавычках. В общем взяли COM объект входящий в windows и организующий такой же http-запрос только без лишних заморочек и проверок. Формат посылаемых сообщений на сервер приложений подсмотрели (правильно подсказывают) у Delphi. Дальше реализовали нужные сообщения по той документации, что предоставили в РЖД. Я к чему это рассказываю, возможно из-за той разработки, которую продвигают рждшники, возможно по незнанию, но нам сказали, что у нас ничего не выйдет, что доступ АСУ-АСУ работает только с их разработкой, очень неохотно давали нам адреса серверов АСУ-АСУ. Вот и хочется сказать, всё отлично работает!!! Пусть 1С конфигураций работающих напрямую с ЭТРАНом будет больше, описанная выше технология отлично работает! Их дорогая и тяжеловесная разработка никому не нужна, зачем иметь ещё одну прокладку между системами, если можно всё хранить прямо 1С-ке.
RailMen; krv2k; +2 Ответить 1
35. Awarder n/a (Awarder) 17.11.11 21:46
(34) belchonokh,

а адреса серверов (и пути) подсказать можете? (если я правильно понимаю закладка туннель в "сервер шлюз этран")
36. henry (serhenry) 18.11.11 19:56
belchonokh пишет:
В общем взяли COM объект входящий в windows и организующий такой же http-запрос только без лишних заморочек и проверок


Расскажите по подробней что за объект????
37. belchonokh 18.11.11 21:11
(36) serhenry, COMОбъект("Microsoft.XMLHTTP") - это для windows 7 или Server 2008, как пользоваться в сети есть, например _http://forum.infostart.ru/forum14/topic30957/

(35) Awarder, насколько я помню, закладка туннель, там где надо галку ставить "использовать виртуальный адреса", сам адрес требуйте у дороги, если вы платите по договору за АСУ-АСУ, то вам должны дать этот адрес (мы его долго пытались получить, в итоге нам дали телефон некоего программиста в РЖД, который знает вообще знает, что есть такие адреса, кстати с удивлением обнаружили что этот адрес уже был забит в VipNet параллельно с основным, так что можете попробовать проверить все адреса, которые там забиты).
39. henry (serhenry) 19.11.11 09:43
Спасибо за ответ, очень помог (37).
Только не совсем понятно про формат посылаемых сообщений на сервер приложений, как это посмотреть????

belchonokh пишет:
Формат посылаемых сообщений на сервер приложений подсмотрели (правильно подсказывают) у Delphi
40. aLex Hmmm (reflexfx) 19.11.11 10:47
(39) serhenry, формат сообщений соответствует стандарту SOAP 1.1

вы можете использовать SOAPToolkit (правда Microsoft прекратил его поддержку из-за введения WCF )

Сервис = Новый COMОбъект("MSSOAP.SoapClient30");
Сервис.MSSoapInit("ТУТ URL Сервера ЭТРАН");
.......

Если этот вариант не устраивает, то можете взять за основу "Microsoft.XMLHTTP", в этом случае описание стандарта SOAP есть тут и тут

belchonokh пишет:
А если подумать, SOAP - это всего лишь надстройка над протоколом HTML (в сети есть описание стандарта, формат сообщений и заголовков)

При всем уважении, протокола HTML нет, это стандарт. А вот SOAP считается протоколом, хотя с сильной натяжкой, я бы отнес его к стандарту вызова удаленных процедур или функций(RPC\RFC) поверх транспорта (как то HTTP, HTTPS, SMTP и т.д.)

belchonokh пишет:
закладка туннель, там где надо галку ставить "использовать виртуальный адреса"

Должно работать и с тунелированием и без.

Еще раз повторюсь, коллеги, при использовании SOAP проверяйте все ли ответы корректные, сталкивался с тем что приходящий XML соержит левые спецсимволы, из-за которых xml-документ становится не валидным для парсера.
41. belchonokh 19.11.11 11:05
(39) serhenry, нужно написать простейшую программку на Delphi, которая используя метод GetBlock отправляет какой-нибудь простейший запрос (по документации к ЭТРАН) и куда-нибудь выводит ответ. Затем берете отладчик и проваливаетесь глубоко в модули Delphi, где на низком уровне формируется заголовок и само сообщение в XML, смотрите в отладчике содержимое этих переменных и в 1С формируете всё то же самое (у нас на разбор ушло около двух дней)

P.S. Кодом не помогу, коммерческая тайна как-никак, итак много рассказал =)
42. belchonokh 19.11.11 11:11
(40) reflexfx,
reflexfx пишет:
При всем уважении, протокола HTML нет, это стандарт

Извиняюсь, опечатался, имел ввиду именно http

reflexfx пишет:
Еще раз повторюсь, коллеги, при использовании SOAP проверяйте все ли ответы корректные, сталкивался с тем что приходящий XML соержит левые спецсимволы, из-за которых xml-документ становится не валидным для парсера


Подтверждаю, приходится в приходящей строке пройтись СтрЗаменить, иначе парсер сыпет ошибками, правда сталкивались только на нескольких справочниках, как мне показалось в значениях полей этих справочников.
43. aLex Hmmm (reflexfx) 19.11.11 11:14
(41) belchonokh,
что же секретно в реализации SOAP over HTTP и куске кода выдранном из VCL?

(39) serhenry,
вот ссылка на подробное описание SOAP HTTP Binding
44. aLex Hmmm (reflexfx) 19.11.11 11:16
belchonokh пишет:
Подтверждаю, приходится в приходящей строке пройтись СтрЗаменить, иначе парсер сыпет ошибками, правда сталкивались только на нескольких справочниках, как мне показалось в значениях полей этих справочников.


Не только при запросе справочников, частенько происходит при запросе данных накладных и заявок на перевозку.
45. henry (serhenry) 19.11.11 12:08
(43) reflexfx, (41) belchonokh, благодарю, огромное спасибо очень помогли ;)
46. Awarder n/a (Awarder) 20.11.11 00:34
(38) belchonokh,

404 - not found..
можете сказать адрес на другом конце тунеля?
47. belchonokh 20.11.11 10:21
(46) Awarder, постараюсь посмотреть, а так требуйте от РЖД, если у вас заключен договор АСУ-АСУ вам обязаны его предоставить, а если не заключен, то у вас туда не будет доступа, скорее всего будет NOT FOUND (это моё предположение)
48. Дмитрий (dvim) 26.03.12 11:55
Самая большая проблема -учтите саппорт любого АСУ АСУ сильно платный у РЖД.
Стоимость ~ 28 тыс в мес.

Для нас стало неожиданным - процесс затормозился.
Часть руководителей считает, что "андроида" нанять дешевле
49. Виталий Барилко (Diversus) 12.05.12 12:13
(2) Скажите пожалуйста, каковы успехи с данной разработкой?

Тоже поставили подобную задачу, нужно пару отчетов по ЭТРАН что погрузили, когда, дата и время прибытия на станцию, время подачи и сколько осталось погрузить вагонов.

Т.е. данный отчет это объединение данных по накладным, заявки на перевозку и ведомости подачи/уборки.

Не могли бы Вы показать Вашу реализацию или подсказать куда копать.

Спасибо.
50. Дмитрий (dvim) 12.05.12 12:18
Первое куда копать - согласовать 30 тыс/мес ... (У нас с этим встали проблемы. Андроида нанять дешевле, по крайней мере пока)

Второе - в ИВЦ дают ASUGO + примеры запросов.
Далее берем и пишем.
51. Виталий Барилко (Diversus) 12.05.12 12:19
+(2) ну и конечно было бы здорово иметь пример подключения и работы с ЭТРАН в 1С.
52. Виталий Барилко (Diversus) 12.05.12 12:21
(51) А 30 тыс/мес это за что? Просто у нас уже есть ЭТРАН и в нем работает 3 пользователя. Просто хотят отчет по вагонам.

Второе - в ИВЦ дают ASUGO + примеры запросов.

А вот это уже интересней. Если программа уже стоит, где взять?
53. Дмитрий (dvim) 12.05.12 12:28
У нас тоже есть ...
За саппорт именно АСУ АСУ режима.
У меня тема и провисла ибо было рассчитано, что за нанятый за половину суммы андроид выгрузит в Ексель за 2-3 часа все необходимые данные,а далее - скриптом закачиваем в Конфу.
Просто совет - сначала согласовать сумму , а потом уже думать о технике
54. Сергей Смирнов (milanse) 12.05.12 12:28
(52) для доступа в режиме асу-асу необходимо дополнительное рабочее место, такое рабочее место стоит 30 т. в месяц.
Взять у тех, с кем договор на рабочее заключите (ваша дорога, видимо)
55. Виталий Барилко (Diversus) 12.05.12 12:35
(53)(54) Понял, спасибо.
Думаю, может тоже через Excell?
56. Дмитрий (dvim) 12.05.12 12:44
Тут выбор простой - либо "по правилам", но за большие деньги.
Либо - криво, но бесплатно.

Слышал про 3 вариант- программу, которая достает и экспортирую данные из "памяти" клиента этрана.
Но по ней - данных нет
57. Татьяна Старикова (Starikova) 22.06.12 15:21
Интересует опыт внедрения данного продукта для промышленного предприятия с оборотом вагонов от 400 шт в месяц. Требуется возможность отслеживания через Этран отправленных в наш адрес вагонов, контроль операций в местах обработки вагонов и, особенно, контроль штрафов за простои и определение виновников данных простоев.
58. Дмитрий (dvim) 22.06.12 15:31
Какого данного?.
Здесь обсуждается технология общения с АСУ АСУ.
Это технология позволяет привязать данные Этран к ВАШЕЙ системе


Продуктов я знаю 2. Первый это интеллексовский (от самих разработчиков Этрана). Цена у него большая, функционал широкий, но подробно я я его не рассматривал.
Второй - вот. Ни разу не реклама . цена у конфы приемлемая, судя по описанию и функционалу - все вполне внедряемо.

Нас остановило (надеюсь временно) необходимость тратить 30тыс/мес за сам обмен. Дорого это - и не так просто согласуется. Советую начать с этого вопроса, а не наоборот (может впустую работа быть).
59. Дмитрий (dvim) 22.06.12 15:32
Ps
Сама интеграция с этраном есть у многих крупных компаний и перевозчиков.
60. aLex Hmmm (reflexfx) 14.08.12 10:09
(57) Starikova, День добрый!
Вы уверены что Вам нужен именно ЭТРАН, данных АСОУП не будет достаточно?
Если у Вас средний оборот 400 вагонов - то по затратам это будет гараздо выгоднее чем платить за АСУ-АСУ(правда провозной платы в этих данных не будет, НО если нужны деньги, то всегда есть возможность обратиться в ГВЦ и заключить договор на САО(система абонентского обслуживания, они настроят для вас формирование и передачу данных по отправкам и прибытию вагонов в ваш адрес) ).

Контроль операций в местах обработки вагонов - чем вам поможет ЭТРАН в этом вопросе?
61. Дмитрий (dvim) 14.08.12 10:44
АСОУП - это слежение. У него кстати много альтернативных поставщиков (техноцентр, гдевагон)
В нем - данные по движению вагонов и поездов.
в Этране же данные по финансовым расчетам с РЖД
62. aLex Hmmm (reflexfx) 14.08.12 11:01
(61) dvim, информацией из АСОУП, бесспорно, торгуют все кому не лень(даже я:)).

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

Эту задачу можно решать по разному, а по скольку вводных для понимания ситуации мало, то предложил варианты,
а именно:
АСОУП(автоматизированная система оперативного управления парком) - если штрафы рассчитываются по условиям договоров с экспедиторами, то этих данных достаточно, подходы есть, определение простоев в пути(и причин этих простоев) можно реализовать.
САО - система ГВЦ для получения не только оперативных данных, но и данных по отправкам(основной минимум реквизитов из накладной с суммами), только в этом случае вы не платите фиксировано 25-30т.р., а платите только за объем переданной вам информации.
63. Сергей Смирнов (milanse) 14.08.12 11:05
информацию по финансовым расчетам мы берем в ЦФТО - оригиналы счетов фактур, и их копии в электронном виде. Ну и все начисления попавшие в расчет.
ЭТРАН по сути документооборот - согласование, изменение статусов, факты отправки, раскредитации.
У нас, например, 1 ЕЛС и несколько филиалов. Накопительные ведомости согласуются в 1С (потому как филиалы их не видят), а потом эти статусы переносятся в ЭТРАН.
Сейчас есть необходимость видеть заявки на перевозку, когда один филиал отправляет другому вагоны под отгрузку, необходимо указывать номер заявки. Это все видно.
Ну и побочный продукт это возможность видеть историю движения вагонов, потому как данные отправлений/прибытий из АСОУП мягко говоря не очень достоверны. Я сам обработкой этих данных не занимаюсь, но сверял загруженный результат с данными ЭТРАН - не все совпадает.
64. aLex Hmmm (reflexfx) 14.08.12 11:10
(63) milanse,
потому как данные отправлений/прибытий из АСОУП мягко говоря не очень достоверны. Я сам обработкой этих данных не занимаюсь, но сверял загруженный результат с данными ЭТРАН - не все совпадает.

Я бы сказал наоборот - АСОУП как раз таки показывает самую реальную картинку движения вагонов, это один из китов РЖД(и вагон в 99.9% случаев не сдвинется с места без отражения соответствующего макета в базе дорог), а ЭТРАН показывает искаженные данные по движению(Вы верно заметили -
ЭТРАН по сути документооборот
).
65. Дмитрий (dvim) 14.08.12 11:12
Расскажите подробней о САО а то вообще о нем ничего не знаю.
Там есть расход на 1 вагон в поезде (групповой отправке) ?
66. aLex Hmmm (reflexfx) 14.08.12 11:25
(65) dvim, для примера информация из сао

Screenshot
Накладная + Вагон + Тариф
67. Сергей Смирнов (milanse) 14.08.12 11:45
(65) dvim, ну не знаю, деньги вам выставляются на основании данных ЭТРАН. Может быть у нас не полные данные по отправлениям/прибытиям (очень может быть) но построить по ним картину движения вагона затруднительно. Не редка картина: есть отправка - нет прибытия, есть прибытие - нет отправки. В общем не слабо матерятся диспетчера, когда делают отчеты по груженым отправкам и сверяют с данными которые показывают филиалы.
68. Oleg (folegv) 10.01.13 15:35
milanse, как связаться с вами по интеграции с этран
69. Сергей Смирнов (milanse) 10.01.13 17:13
(64) reflexfx, Можно говорить наоборот, но у меня из наших данных по отправлениям и прибытиям не удалось построить картины движения. То есть только отправления, то есть только прибытия, то кадого по 2-3-4-5 раз, а иногда в ЭТРАН есть накладная а в данных гвц нет, если это называется 99.9, то я извиняюсь.
70. aLex Hmmm (reflexfx) 14.01.13 11:00
(69) milanse,
Можно говорить наоборот, но у меня из наших данных по отправлениям и прибытиям не удалось построить картины движения.

не очень понял про картину движения по данным отправления и прибытия, имхо картину движения нужно по данным АСОУП строить.

То есть только отправления, то есть только прибытия, то кадого по 2-3-4-5 раз, а иногда в ЭТРАН есть накладная а в данных гвц нет, если это называется 99.9, то я извиняюсь.
Есть отправления и нет прибытия - такие случаи возможны, в любой ИС есть огрехи. Я свожу два источника отпр\приб + данные ЭТРАН чтобы снизить вероятность ошибки. Про 2-3-4-5 - там есть вполне объяснимая логика - какие то записи корректировочные(уточни у поставщика). А вот про отсутствие и наличие данных в том или ином источнике можно говорить долго, например это неправильное оформление накладных через АСУ-АСУ, например, в накладной указано правильно ОКПО и правильное наименование получателя(для случая если в твой адрес идут вагоны и в контексте видимости накладной ты являешься только получателем) а ИД организации пустое т.е. не выбрано из ПУЖТ, то в этом случае накладной ты не увидишь. И опять же эти данные только для фин.расчетов. А для движения использую данные АСОУП и ничего более - диспетчер должен видеть реальную картину положения вещей.
71. Дмитрий (dvim) 22.05.14 11:55
Вопрос всем.
С чтением данных - разобрались. Из нюансов - XML разьирать лучше руками, он не всегда валидный с точки зрения XML

Но у нас проблемы с записью
Возвращается ошибка
"Количество контейнеров должно соответствовать планируемому количеству контейнеров !"
Хотя - все совпадает...
72. belchonokh 22.05.14 19:09
(71) Для того что бы XML стал валидным нужно со стокой XML сделать следующее (установлено экспериментально):

Если СтрДанныеРазбора <> "" Тогда
	СтрДанныеРазбора = СтрЗаменить(СтрДанныеРазбора, "& #28;", " ");//Убрать пробел между & # - не дает напечатать сайт
	СтрДанныеРазбора = СтрЗаменить(СтрДанныеРазбора, "& #2;", " ");
	Возврат СтрДанныеРазбора;
Иначе
	Возврат "Ошибка";
КонецЕсли; 
...Показать Скрыть


После этого работает метод

ЧтениеXML = Новый ЧтениеXML;
Попытка
	ЧтениеXML.УстановитьСтроку(СтрДанныеРазбора);				
Исключение
Возврат;
КонецПопытки; 
	   
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
...Показать Скрыть



После этого можно пользоваться конструкциями типа

ОбъБД = ЖдНакладная.ПолучитьОбъект();
ОбъБД.invoiceID = ОбъектXDTO.invoiceID.value;




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

// Форматная xml-строка для получения списка накладных.
	НакладнаяЖД = Обработки.ЭТР_ЗагрузкаНакладных.ПолучитьМакет("XMLinvoiceDirectLoad").ПолучитьТекст();
	
		
	НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%frontEndId%",Формат(ЖдНакладная.Номер, "ЧГ=0") );
	НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invTypeID%","1"); //НакладнаяНаПогрузку

	Если ЖдНакладная.invCont.Количество() > 0 Тогда
		
		НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invSendKindID%","8"); //Контейнера комплектом на вагон
		НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invPlanContTonnage%",Формат(ЖдНакладная.invCont[0].contTonnage.TONNAGE, "ЧГ=0")); //Контейнера
		
		НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invContPlanSizeBig%",Формат(ЖдНакладная.invCont[0].contSizeBig.CODE, "ЧГ=0")); //Контейнера

	ИначеЕсли ЖдНакладная.invCar.Количество() > 1 Тогда
		
        НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invSendKindID%","4"); //Групповая
		
	Иначе 
		
		НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invSendKindID%","1"); //Повагонная
		
	КонецЕсли;
	НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invPlanContTonnage%",""); //Повагонная
    НакладнаяЖД = СтрЗаменить(НакладнаяЖД,"%invContPlanSizeBig%", "");
...Показать Скрыть
73. Дмитрий (dvim) 23.05.14 12:07
У вас - чтение накладной. С этим проблем никаких нет.
Проблемы с попыткой записать в Этран свою накладную .
Количество - совпадает, заявка по которой формируем действующая...

74. Stepan Tyumentsev (st-ty@ngs.ru) 17.04.15 12:31
Добрый день.
на текущий момент данный пост еще актуален? запрос возвращает "иероглифы", может кто пример скинуть отправки и возврата xml? сейчас делаю так:

QueryFileName = GetTempFileName();
RecordObject = New XMLWriter;
XMLWriterSettings = New XMLWriterSettings("windows-1251", , False);
RecordObject.OpenFile(QueryFileName, XMLWriterSettings);
RecordObject.WriteXMLDeclaration();
RecordObject.WriteStartElement("getNSI");
RecordObject.WriteAttribute("version", "1.0");
RecordObject.WriteStartElement("tableName");
RecordObject.WriteAttribute("value", "DF_DANGER");
RecordObject.WriteEndElement(); //tableName
RecordObject.WriteEndElement(); //getNSI
RecordObject.Close();

SoapClient = Новый COMОбъект("mssoap.SoapClient");
SoapClient.MSSOAPInit("http://ххххх:ххххх@10.248.35.9:8092/EtranServer/EtranHttpSrvr.dll","IEtranSysservice","IEtranSysPort");

ResultFile = GetTempFileName();
ResultFile = SoapClient.GetBlock("ххххх", "ххххх", QueryFileName);

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ResultFile);
Пока ЧтениеXML.Прочитать() Цикл
Сообщить(ЧтениеXML.Значение);
КонецЦикла;
ЧтениеXML.Закрыть();
SoapClient = Undefined;
75. Антон Батыркин (batyrkin) 03.09.15 22:57
Господа, подскажите, как же все таки сделать так, чтоб можно было с сервера 1С отправлять запросы на машину с установленным EtranASUGO и VipNet-ом?
Если запускать как то так:
Функция ПолучитьСоединенеиеЭтран() Экспорт 
    СоединенеиеЭтран     = Новый COMОбъект("EtranASUGO.EtranASUGO",Константы.ждИмяКомпьютераЭТРАН.Получить());
    СоединенеиеЭтран.Connect(ждАдресСервераЭТРАН,ждПользовательЭТРАН,ждПарольЭТРАН);
    Возврат СоединенеиеЭтран;
КонецФункции // ПолучитьСоединенеиеЭтран()
...Показать Скрыть
непосредственно с клиента (машины с VipNet-ом), то все работает. А вот как сделать чтоб запрос с сервера 1С уходил на другой комп с VipNet-ом, там выполнялся и возвращался результат обратно на сервер 1С - не понимаю. Как (чем)запрос можно отредиректить?
76. belchonokh 04.09.15 12:32
(74) st-ty@ngs.ru, Я работаю с ЭТРАНом через другой объект

// С помощью COM-объекта создать соединение с веб-сервисом ЭТРАН.
WinHttp = Новый COMОбъект("Microsoft.XMLHTTP");
WinHttp.Open("POST", СокрЛП(Константы.ЭТР_АдресВебСервиса.Получить()), 0);

WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","UTF-8");
WinHttp.setRequestHeader("SOAPAction", """urn:SysEtranInt""");
WinHttp.setRequestHeader("Content-Type","text/xml; charset=UTF-8");

// Запрос, отправляемый веб-сервису с параметрами, заданными переданным параметром. Данные для авторизации - из констант.
Запрос = "<?xml version=""1.0""?>
| <SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"">
| <SOAP-ENV:Body SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">
| <NS1:GetBlock xmlns:NS1=""SysEtranInt"">
| <Login xsi:type=""xsd:string"">" + СокрЛП(Константы.ЭТР_Пользователь.Получить()) + "</Login>
| <Password xsi:type=""xsd:string"">" + СокрЛП(Константы.ЭТР_ПарольПользователя.Получить()) + "</Password>
| <Text xsi:type=""xsd:string""> "
+ ЗапросПараметр + "
| </Text>
| <ECP xsi:type=""xsd:string""></ECP>
| <TSP xsi:type=""xsd:string""></TSP>
| </NS1:GetBlock>
| </SOAP-ENV:Body>
|</SOAP-ENV:Envelope>";


WinHttp.Send(Запрос);// Параметром передать POST-данные веб-сервису.

// Получен ответ - забрать из него строку ответа.
ЧтениеXML = Новый ЧтениеXML;
Тхт = WinHttp.ResponseText();
ЧтениеXML.УстановитьСтроку(Тхт);



(75) batyrkin, сначала я использовал прокси-сервер (3proxy), запрос уходил и возвращался нормально, потом мне сказали что это не хорошо с точки зрения безопасности, сейчас у меня на машине с VipNetом заданием запускается 1С-ка от имени другого пользователя (что бы не было видно на экране, а-ля служба), задания на загрузку-выгрузку из ЭТРАНа лежат в регистре, считываем, отправляем, получаем.
st-ty@ngs.ru; sir; +2 Ответить 1
77. belchonokh 04.09.15 12:51
(73) dvim, у меня тоже запись, планируемое количество контейнеров мы не отправляем, ЭТРАН сам считает и возвращает в записанной накладной.
78. Ruslan ww (sir) 04.09.15 13:37
(76) belchonokh, Большой респект , как раз искал как XMLHTTP запрос сделать и тут ты :))

У меня вопрос, такой запрос только с машины где защищенный канал настроен прокатит или можно пытаться с любой ?

П.С.

ЗапросПараметр = "
|<getInvoice version=""1.0"">
|<invNumber value=""910105""
|<useMod11/>
|</getInvoice>";

такой делаю.
79. belchonokh 04.09.15 14:35
(78) sir, если не настроен прокси на защищенной машине, то прокатит только на той машине. Если настроен прокси на той машине, достаточно в IE настроить использование этого прокси, и ком объект будет сам через него работать.

П.С. Запрос правильный =).
80. Ruslan ww (sir) 04.09.15 15:06
(79) belchonokh, ясн, спс.

а вот еще вопрос - Урл правильный какой будет

вида "http://ххх.ххх.ххх.ххх:ххххх@10.32.0.112:8092/EtranServer/EtranLR.dll/soap"
или "http://ххх.ххх.ххх.ххх:ххххх/EtranServer/EtranLR.dll/soap"
81. belchonokh 07.09.15 07:50
(80) sir, у нас используется такой http://ххх.ххх.ххх.ххх:ххххх/EtranServer/EtranLR.dll/soap
82. Ruslan ww (sir) 28.09.15 15:32
Не хочет почему то работать :

" Ошибка при вызове метода контекста (send): Произошла исключительная ситуация (msxml3.dll): Системная ошибка: -2146697211." (
83. belchonokh 01.10.15 06:24
(82) Скорее всего у вас недоступен адрес, попробуйте в браузере набрать http://ххх.ххх.ххх.ххх:ххххх/EtranServer/EtranLR.dll - даёт скачать ДЛЛ ?
84. Ruslan ww (sir) 01.10.15 13:01
(83) belchonokh, похоже, пишет "соединение закрыто удаленным сервером".
85. belchonokh 02.10.15 14:47
(84) sir, нужно помнить, что адрес куда цепляется клиент и адрес для АСУ-АСУ - ЭТО РАЗНЫЕ адреса. На сервере клиента скорее всего доступ закрыт. Требуйте адрес для АСУ-АСУ от РЖД, деньги то немалые берут за подключение.
86. Дмитрий (dvim) 04.02.16 15:21
А вот как сделать чтоб запрос с сервера 1С уходил на другой комп с VipNet-ом, там выполнялся и возвращался

Мы просто поставили на комп с VipNet IIS и сделали прослойку, которая публикует методы Этрана в локальную сеть.
87. Сергей Смирнов (milanse) 11.02.16 12:06
(85) belchonokh, http прокси (free proxy, например) поставил и норм. В принципе сом объект это и делает, объект создается на машине с этраном, а работаешь ты с ним как с локальным объектом.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа