|
Из 1с отправить данные на определенный ip адрес и порт | ☑ | ||
---|---|---|---|---|
0
Zombi
09.08.12
✎
08:18
|
Имеются: камеры, видеорегистратор, ПО "TRASSIR" http://www.dssl.ru/support/tech/soft/trassir_index.php , и 1с "Ресторан 8" от РАРУСа. Программке "TRASSIR" можно на определенный порт присылать команды и она будет накладывать на записываемое видео какой либо текст. Каким образом можно отправлять команды из 1с в данное ПО?
|
|||
1
BuHu
09.08.12
✎
08:22
|
(0) а какие команды может принимать TRASSIR?
|
|||
2
Zombi
09.08.12
✎
08:22
|
(1)
Формат DSSL XML для ActivePOS Формат позволяет присылать события в ActivePOS от имени кассового терминала. Сообщения в этом формате можно присылать как по TCP так и UDP. Описание протокола. Как видно из названия протокола, данный протокол основан на XML. Каждое событие, произошедшее на кассовом терминале, представляется в виде блока-транзакции: <?xml version="1.0" encoding="cp1251"?> <transaction> <event_type>pos_position_add</event_type> <operation_id>E44D0F4A-9822-11E0-36A3-0050FB005F0A</operation_id> <cashier>Пупкин Василий Федорович</cashier> <date>06/16/2011</date> <time>18:14:05</time> <position>5</position> <weight>1.064</weight> <quantity>1</quantity> <code>1149990037</code> <name>Корм "Престиж"</name> <price>185.4</price> </transaction> Протокол использует следующие поля: event_type - тип события. Имеется строго ограниченный список значений, которые могут содержаться в данном поле: pos_work_session_start - начало сессии pos_work_session_end - завершение сессии pos_cashier_registration - регистрация кассира pos_exit_from_the_system - выход кассира из системы pos_moneybox_open - открытие денежного ящика pos_new_receipt_sell - новый чек "продажа", событие должно содержать имя кассира pos_new_receipt_return - новый чек "возврат", событие должно содержать имя кассира pos_new_receipt_cancel - новый чек "отмена продажи", событие должно содержать имя кассира pos_new_receipt_exchange - новый чек "замена", событие должно содержать имя кассира pos_new_receipt_inclusion - новый чек "внесение денежных средств", событие должно содержать имя кассира pos_receipt_number - номер чека pos_position_add - добавление позиции pos_position_change - изменение позиции pos_position_cancel - отмена позиции pos_position_cost_increase - увеличение стоимости позиции pos_position_cost_decrease - уменьшение стоимости позиции pos_position_amount_increase увеличение количества товара pos_position_amount_decrease - уменьшение количества товара pos_applying_discount_for_position - применение скидки к товару pos_cancel_discount_for_position - отмена скидки на товар pos_applying_discount_for_receipt - применение скидки к чеку pos_preliminary_result - предварительная суммарная стоимость pos_final_result - финальная стоимость по чеку pos_credit_card_payment - оплата кредитной картой pos_cash_payment - оплата наличными pos_cash_change - сдача pos_receipt_cancel - отмена чека pos_receipt_delay - отложенный чек pos_receipt_restore - восстановление чека pos_receipt_close - закрытие чека pos_x_report - X-отчет pos_z_report - Z-отчет pos_operation_error - ошибка pos_fraud - мошенничество pos_comment - комментарий pos_new_receipt_weighing - взвешивание pos_new_receipt_cashcounting - подсчет наличных operation_id - уникальный идентификатор операции (порядковый номер чека передается отдельным событием после открытия чека) date - дата совершения операции (MM/dd/yyyy) time - время совершения операции (hh:mm:ss) position - позиция code - артикул продукта, штрих-код quantity - количество weight - вес name - наименование товара price - цена Часто используемый вариант - скрипт отсылающий сообщения на 127.0.0.1 по UDP. Порт должен соответствовать терминалу, созданному в диалоге настройки ActivePOS. t = "<?xml version= ... <transaction> ... </transaction>" import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("127.0.0.1", port)) s.send(t) s.close() except socket.error, msg: error("can't forward to port %i: %s" % (port, msg)) s.close() |
|||
3
vde69
09.08.12
✎
08:32
|
сохраняешь в файл, далее вызываешь пакетник с телнетом
|
|||
4
Zombi
09.08.12
✎
08:37
|
(3) Пример аналогичного кода можно?
|
|||
5
aleks-id
09.08.12
✎
08:44
|
не все так просто. надо формировать xml-заголовок с хидером и его отправлять уже по типу mssoap
|
|||
6
aleks-id
09.08.12
✎
08:45
|
не могу найти свою обработку. давно уже делал
|
|||
7
Zombi
09.08.12
✎
08:46
|
(6) Если найдешь, кинь, пожалуйста.
|
|||
8
aleks-id
09.08.12
✎
09:02
|
(7) обработку не дам, кусок кода выложу
|
|||
9
Zombi
09.08.12
✎
09:15
|
(8) Да, конечно.
|
|||
10
aleks-id
09.08.12
✎
09:42
|
как то так...
Процедура ВыполнитьЗапрос() ИмяФункции = "pos_position_add"; ИдентификаторОперации = "E44D0F4A-9822-11E0-36A3-0050FB005F0A"; ФИО="Пупкин Василий Федорович"; НужнаяДата="06/16/2011"; НужноеВремя="18:14:05"; Позиция="5"; Вес="1.064"; Количество="1"; Код="1149990037"; Наименование="Корм ""Престиж"""; Цена="185.4"; АдресСервера="127.0.0.1"; НомерПорта="80"; ТекстXML="<?xml version=""1.0"" encoding=""cp1251""?> |<transaction> | <event_type>"+ИмяФункции+"</event_type> | <operation_id>"+ИдентификаторОперации+"</operation_id> | <cashier>"+ФИО+"</cashier> | <date>"+НужнаяДата+"</date> | <time>"+НужноеВремя+"</time> | <position>"+Позиция+"</position> | <weight>"+Вес+"</weight> | <quantity>"+Количество+"</quantity> | <code>"+Код+"</code> | <name>"+Наименование+"</name> | <price>"+Цена+"</price> |</transaction>"; HTTPxml = Новый COMОбъект("MSXML2.ServerXMLHTTP"); HTTPxml.setTimeouts(600000,600000,600000,600000); HTTPxml.Open("POST", АдресСервера+":"+НомерПорта); Попытка HTTPxml.Send(ТекстXML); Исключение еггог = ИнформацияОбОшибке(); Сообщить("Не удалось отправить данные серверу - "+ОписаниеОшибки()); Сообщить("Описание ошибки - "+еггог.Описание); Сообщить("Причина - " +еггог.Причина.Описание); КонецПопытки; Если СокрЛП(HTTPxml.status)<>"100" Тогда //не обязательно 100, надо проверить какой код ошибки у тебя Сообщить( "Ошибка получения данных: "+ HTTPxml.responsetext); иначе РаспарситьОтвет(HTTPxml.responsetext); //это моя процедура парсинга ответа. ты пиши свою. конецесли; КонецПроцедуры |
|||
11
Zombi
09.08.12
✎
09:47
|
(10) Спасибо, буду ковырять.
|
|||
12
Zombi
16.08.12
✎
14:18
|
Написал:
Процедура КнопкаВыполнитьНажатие(Кнопка) ИмяФункции = "pos_position_add"; ИдентификаторОперации = "E44D0F4A-9822-11E0-36A3-0050FB005F0A"; ФИО = "Пупкин Василий Федорович"; НужнаяДата = "06/16/2011"; НужноеВремя = "18:14:05"; Позиция = "5"; Вес = "1.064"; Количество = "1"; Код = "1149990037"; Наименование = "Корм ""Престиж"""; Цена = "185.4"; ТекстXML = "<?xml version=""1.0"" encoding=""cp1251""?> |<transaction> | <event_type>"+ИмяФункции+"</event_type> | <operation_id>"+ИдентификаторОперации+"</operation_id> | <cashier>"+ФИО+"</cashier> | <date>"+НужнаяДата+"</date> | <time>"+НужноеВремя+"</time> | <position>"+Позиция+"</position> | <weight>"+Вес+"</weight> | <quantity>"+Количество+"</quantity> | <code>"+Код+"</code> | <name>"+Наименование+"</name> | <price>"+Цена+"</price> |</transaction>"; HTTPxml = Новый COMОбъект("MSXML2.ServerXMLHTTP"); HTTPxml.setTimeouts(600000,600000,600000,600000); HTTPxml.Open("POST", "192.168.1.11:2555"); Попытка HTTPxml.Send(ТекстXML); Исключение Ошибка = ИнформацияОбОшибке(); Сообщить("Не удалось отправить данные серверу - "+ОписаниеОшибки()); Сообщить("Описание ошибки - "+Ошибка.Описание); Сообщить("Причина - " +Ошибка.Причина.Описание); КонецПопытки; КонецПроцедуры На строке HTTPxml.Open("POST", "192.168.1.11:2555"); выдает ошибку: {Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (open) HTTPxml.Open("POST", "192.168.1.11:2555"); по причине: Произошла исключительная ситуация (msxml3.dll): URL-адрес не использует поддерживаемый протокол Телнетом подключается на этот ип и порт. Что попробовать исправить? |
|||
13
Zombi
16.08.12
✎
14:35
|
Помог бы ко нибудь вот с этим блоком мне:
HTTPxml = Новый COMОбъект("MSXML2.ServerXMLHTTP"); HTTPxml.setTimeouts(600000,600000,600000,600000); HTTPxml.Open("POST", "192.168.1.11:2555"); |
|||
14
Rebelx
16.08.12
✎
14:38
|
||||
15
Zombi
16.08.12
✎
14:48
|
(14) Я к сожалению не очень хорошо разбираюсь во всяких сторонних компонентах, и полезного не смог ничего почерпнуть из информации по вашей ссылке. Можно немного конкретнее?
|
|||
16
Zombi
16.08.12
✎
15:07
|
В документации к TRASSIR нашел это
t = "<?xml version= ... <transaction> ... </transaction>" import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("127.0.0.1", port)) s.send(t) s.close() except socket.error, msg: error("can't forward to port %i: %s" % (port, msg)) s.close() как в 1с это все реализовать? |
|||
17
Zombi
16.08.12
✎
15:30
|
ап..,
|
|||
18
Zombi
16.08.12
✎
15:47
|
Апну еще
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |