|
Контроль наличия подключенных устройств | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
25.10.17
✎
18:55
|
При наличие подключенных устройств к компьютеру в Сервис/Параметры добавляется вкладка Свойства независимо от версии 1С. Как то можно программно контролировать есть подключенное устройство, включено оно, или нет?
Ну забыл кассир кассу включить, и пытается чек отбить. Надо выдать предупреждение, что касса не включена. Особенно в терминале, если порт не пробросился. |
|||
1
lodger
25.10.17
✎
19:02
|
"пытается чек отбить" - "Надо выдать предупреждение"
ну так. когда пытается - ком объект даст ошибку подключения. обработать код ошибки. сообщить юзеру. |
|||
2
Mikhail Volkov
25.10.17
✎
19:09
|
(1) Зачем, куда Com-объект? Контроль порта нужен, есть что на нем, или нет? Система это делает, но как?
|
|||
3
Сияющий в темноте
25.10.17
✎
19:30
|
естб wmi,где можно все спросить,но права админа нужны
в терминале,сложнее,так как нужно по сети на машину заходить,хотя списое проброшенных портов можно увидеть, нл если порт физический,то даже если кассу не вкоючили прлброс все равно будет |
|||
4
Mikhail Volkov
26.10.17
✎
10:02
|
(3) Админские проверки может дадут результат, но хотелось проверять доступность непустого порта (с подключенным оборудованием) средствами 1С. Никак?
|
|||
5
Остап Сулейманович
26.10.17
✎
10:09
|
(0)
1. Вкладку настройки внешних устройств добавляет внешняя компонента. 2. Внешняя компонента чаще всего имеет средства проверки состояния оборудования. Тем более компоненты кассовых аппаратов. |
|||
6
piter3
26.10.17
✎
10:10
|
тестустройства проводить
|
|||
7
Йохохо
26.10.17
✎
10:12
|
(4) зачем проверять порт, если есть возможность проверить кассу?
ЗЫ "Ну забыл кассир кассу включить" зачем кассу выключать? |
|||
8
Остап Сулейманович
26.10.17
✎
10:13
|
+ (5) На ИТС можно почитать "Требования к разработке драйверов для фискальных регистраторов". Там есть ответы на все ваши вопросы.
Пример обязательного метода внешней компоненты: " ТестУстройства (DeviceTest) МассивЗначений (ValuesArray) IDispatch* [IN] Массив значений для настройки подключения BOOL Выполняет пробное подключение и опрос устройства. При успешном выполнении подключения в описании возвращается описание устройства. При отрицательном результате возвращается описание возникшей проблемы при подключении. ДополнительноеОписание (AdditionalDescription) BSTR [OUT] Описание результата выполнения теста " |
|||
9
piter3
26.10.17
✎
10:13
|
Только вот тут проблема есть,пока вы проверки делаете то пробить чек по моему нельзя
|
|||
10
Сияющий в темноте
26.10.17
✎
10:14
|
если фискальный регистратор,то проще запросить его состояние командой драйвера,и узнать,что,например,в нем нет бумаги или что-то еще странное
|
|||
11
Остап Сулейманович
26.10.17
✎
10:15
|
(9)
Открыть Проверить Пробить чек Закрыть |
|||
12
Tarlich
26.10.17
✎
10:15
|
а вы не видели есть проверить все торговое оборудование , может вызвать данную функцию и смотреть что вернет -))
|
|||
13
piter3
26.10.17
✎
10:18
|
(11) Тест относительно длительная процедура
|
|||
14
Галахад
гуру
26.10.17
✎
10:31
|
Чего-то непонятно. 1С и сама проверяет подключение торгового оборудования при каждом открытии формы Чека.
|
|||
15
Mikhail Volkov
26.10.17
✎
12:44
|
(14) Да, проверяет. В Альфа-Авто это все делает "черный ящик" СЗУО - Сервер защиты и управления оборудованием. Но обращение к нему чревато необратимой ошибкой "Порт недоступен"! Это происходит когда комп с ФР еще не включен (или ФР не включено питание), не вошел в терминал, не вошел в Альфа-Авто, не подключил ФР к Альфа-Авто. Самое печальное, когда все эти условия будут выполнены, то ошибка "Порт недоступен" не сбросится, если порт уже будет испорчен другим пользователем неудачной попыткой подключения ФР.
Сперва боролись организационно: 1-м в Альфа-Авто входит кассир с компа с ФР. Все остальные ждут кассира, курят бамбук. Трудно выполнимо. Ослабили, входить в Альфа-Авто можно, но кассой не пользоваться, ждать разрешения... Вот и хочу сделать предварительный контроль без обращения СЗУО, и выдавать это разрешение. (8) Хотел что-то попроще админское (но без прав админа не проверить)... Наверное без этого не обойтись? Глянул, с ходу не нашел примера проверки доступности подключенного устройства. Буду изучать... |
|||
16
Галахад
гуру
26.10.17
✎
12:48
|
(15) Какие-то ужасы.
(16) Ну можно впилить типовую проверку. Там вроде все прозрачно. |
|||
17
piter3
26.10.17
✎
12:49
|
(15) Может софт поменять:))))
|
|||
18
Mikhail Volkov
26.10.17
✎
18:39
|
(8) Что-то на ИТС не нашел "Пример обязательного метода внешней компоненты". Можно поточнее ссылку?
Покопался в старой ТиС, нашел свою обработку по снятию X/Z отчета, так все просто было: Процедура СформироватьX() ФР = СоздатьОбъект("AddIn.FprnM45"); // занимаем порт ФР.DeviceEnabled = 1; Если ФР.ResultCode <> 0 тогда Сообщить("Не удалось занять порт", "!"); Возврат; КонецЕсли; // если смена открыта снимаем Z-отчет Если ФР.SessionOpened = 1 тогда // Отчет по секциям ФР.Mode = 2; Если ФР.SetMode() <> 0 тогда Сообщить("Не удалось войти в режим регистрации", "!"); Возврат; КонецЕсли; // ФР.SetMode(); ФР.ReportType = 7; ФР.Report(); // снимаем X-отчет ФР.Mode = 2; ФР.SetMode(); ФР.ReportType = 2; ФР.Report(); Иначе Предупреждение("Не открыта кассовая смена!",60); КонецЕсли; // освобождаем порт ФР.DeviceEnabled=0; КонецПроцедуры Мне что-то подобное нужно: занять порт, если ФР.ResultCode вернет 0 - все хорошо, освобождаем порт. Но где, как указать IP-адрес компа с ФР? |
|||
19
Vaflya
26.10.17
✎
18:49
|
ну так описание к обслуживающему драйверу берете и смотрите что там есть, обычно есть МодельУстройства или ВерсияПрошивки, там много
|
|||
20
isa2net
26.10.17
✎
19:15
|
(18) Сихронизация времени на ККМ Атол это подойдет?
|
|||
21
Остап Сулейманович
26.10.17
✎
20:17
|
(18) Искать нужно :
"Требования к разработке драйверов для фискальных регистраторов" |
|||
22
Сияющий в темноте
26.10.17
✎
21:43
|
Если Альфа Авто так хреново работает,то проще в ней переписать работу с кассой,т.к.всё равно так не методы 1с а свой кривоколесый велосипед
|
|||
23
NorthWind
26.10.17
✎
21:59
|
(18) да нигде не надо. Под нужной учетной записью Windows настраиваете нужный вам регистратор - локальный или удаленный - неважно. И все, под тем же пользователем вы можете пытаться логиниться на него средствами драйвера. IP удаленной машины не ваща забота, это все сохранено в настройках драйвера.
|
|||
24
Mikhail Volkov
27.10.17
✎
06:56
|
(20) Да! Только ты нашел: "В Program Files \ATOL\Drivers8\Samples примеры и там ECR = new ActiveXObject ("AddIn.FPrnM45");"?
У себя смотрел c:\Program Files (x86)\ATOL\Drivers8\Samples\FprnM\1CV80\ обработку Пример - не нашел в нем ECR = new ActiveXObject ("AddIn.FPrnM45");!? Это теперь вместо ФР = СоздатьОбъект("AddIn.FprnM45");? (23) Так оно, для пользователей, которым сисадмин настроил профиль в Сервис/Параметры/Свойства уже прописан IP-адрес:6220 пользователю остается нажать кнопочку "Проверка связи", и если в Результате: 0 - ошибок нет (пишет: АТОЛ 11Ф, №... ФИСК), то пользователь может спокойно подключать кассу и отбить чек. С гарантией, что это не приведет к необратимой ошибке: -3 Порт недоступен, после которой придется сервер перезагружать! Пока это лишь рекомендация для пользователей: делать проверку связи с ФР перед каждым отбитие чека. Потому что касса по 2-3 раза на дню отваливается. Ее желательно автоматизировать: как только пользователь ставит в документе галку "Для пробития на фискальном регистраторе". |
|||
25
NorthWind
27.10.17
✎
09:03
|
(24) ну автоматизируйте, кто не велит-то? Берете руководство к драйверу и пишете эту "проверку связи". Как я понимаю, достаточно попытаться сделать DeviceEnabled = 1, после чего проверить состояние.
|
|||
26
isa2net
27.10.17
✎
12:59
|
(24) Я это из примера на jscript код выдрал, в 1c? конечно, СоздатьОбъект
|
|||
27
Mikhail Volkov
27.10.17
✎
13:53
|
(26) Это 1С7, для 8-й нашел примеры в Драйвер ККМ. Руководство программиста "C:\Program Files (x86)\ATOL\Drivers8\Doc\Drivers8_FprnM_PM.pdf"
Процедура ПриНачалеРаботыСистемы() Попытка // Загрузка внешней компоненты ЗагрузитьВнешнююКомпоненту ("C:\Program Files (x86)\ATOL\Drivers8\Bin\FPrnM1C.dll"); Сообщить("Внешняя компонента загружена"); Попытка // Создание объекта ККМ = Новый("AddIn.FPrnM8"); Исключение Сообщить("Объект не найден!"); КонецПопытки; Исключение Сообщить("Внешняя компонента драйвера не найдена"); КонецПопытки; КонецПроцедуры Но ККМ не на сервере терминалов, а на локальном компьютере. Надо наверное его IP-адрес указать. Но как? В принципе ККМ = Новый("AddIn.FPrnM8"); - это Com-объект, когда к другой базе цепляюсь по Com-соединению, указываю СтрокаПодключения: ТекCOMОбъект = БазаCOM.Connect(СтрокаПодключения); в ней путь (для файловой базы). А здесь как указать? |
|||
28
isa2net
27.10.17
✎
15:00
|
(27) Так это у вас натив объект по идее, он подцепит все настройки которые вы прописали в драйвере.
Если так // занимаем порт
|
|||
29
Mikhail Volkov
27.10.17
✎
17:41
|
(28) Это да, но у меня пока "Объект не найден!", ККМ = Новый("AddIn.FPrnM8"); - не создается!? Почему? Не зарегистрирована FPrnM1C.dll, или что?
|
|||
30
isa2net
27.10.17
✎
18:16
|
(29) бинарник 1с 32 битный запускаете?
|
|||
31
Mikhail Volkov
27.10.17
✎
18:23
|
FPrnM8 заменил на FPrnM45 - заработало!? Для проверки порта и эта пойдет, но почему с FPrnM8 не работает?
В итоге получилось: Функция ПроверкаСвязиФР(IP_Адрес = "", ТекстСообщения = "") Экспорт Если ПустаяСтрока(IP_Адрес) Тогда ТекстСообщения = "Не указан IP-адрес ФР"; Возврат Ложь; КонецЕсли; ФР = ЗагрузитьВнешнююFPrnM1C(ТекстСообщения); Если ФР = Неопределено Тогда Возврат Ложь; КонецЕсли; // ФР.АдресХоста = "10.0.13.179:6220"; // IP-адрес AKIT-09 ФР.АдресХоста = IP_Адрес + ":6220"; // ФР.Password = 30; ФР.DeviceEnabled = 1; // занимаем порт Результат = ФР.ResultCode; ТекстСообщения = "Ошибка проверки связи с ФР: " + ФР.ResultDescription; // Если Результат <> 0 тогда // Возврат Результат; // КонецЕсли; ФР.DeviceEnabled = 0; // освобождаем порт Возврат Результат; КонецФункции // ПроверкаСвязиФР() Но ФР.АдресХоста - только IP-адрес нужен, по имени компа не понимает!? 1С умеет имя в IP-адрес преобразовывать? |
|||
32
isa2net
27.10.17
✎
18:31
|
(31) 127.0.0.1
|
|||
33
Mikhail Volkov
27.10.17
✎
18:51
|
(32) Не, нужен IP-адрес того компа, к которому подключен ФР. Сейчас я знаю какой, но его могут на другой комп переставить...
|
|||
34
NorthWind
27.10.17
✎
23:24
|
(33) вообще говоря, имя в свойствах драйвера я прописывал и работало. По типу CAS-01:6220. Но я всё равно не понимаю, нафига вам это явно указывать, если у вас все это уже настроено в драйвере... По идее, вам в самом простом случае вообще достаточно тупо DeviceEnabled вызвать безо всяких приготовлений, потому как устройство у вас - одно и оно уже настроено под этим пользователем.
|
|||
35
piter3
27.10.17
✎
23:26
|
(34) ну хочет человек по хитрому,пусть попробует)
|
|||
36
Mikhail Volkov
28.10.17
✎
05:30
|
(34) В (15) подробно объяснял: борьба с ошибкой "Порт недоступен", чтобы лишний раз сервер не перезагружать. Полагаться на настройки под основного пользователя ФР нельзя (он может еще дома спит), приходится указывать настройки явно.
Согласен ФР.Password = 30; - лишнее, и прочие за комментированные строчки. А имя компа в IP-адрес преобразовывать можно в самой функции пингования: Функция PingIP_Адреса(IP_Адрес = "", ТекстСообщения = "") Экспорт Если ПустаяСтрока(IP_Адрес) Тогда Возврат Ложь; ИначеЕсли IP_Адрес = НРег(СокрЛП(ИмяКомпьютера())) Тогда Возврат Истина; КонецЕсли; objShell = Новый COMОбъект("WScript.Shell"); objScriptExec = objShell.Exec("ping.exe -n 1 " + IP_Адрес); strPingResults = НРег(objScriptExec.StdOut.ReadAll()); Результат = Найти(strPingResults, "ttl=") > 0; ТекстСообщения = ?(Результат, ТекстСообщения, ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, "IP-адрес", "Компьютер") + ": '" + ВРег(IP_Адрес) + "' - недоступен!"); IP_Адрес = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, IP_Адрес, Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "["))); Возврат Результат; КонецФункции // PingIP_Адреса() Правда при этом черное окно мигает, убрать его можно? |
|||
37
NorthWind
29.10.17
✎
14:24
|
(36) у меня есть скрипт на VBS, где пинг реализован средствами WMI. Могу дать. Правда, по общению с вами мне что-то кажется, что вы же все равно не будете переводить с VBS на 1С... Ниже скрипт.
Set WshShell = WScript.CreateObject("Wscript.Shell") Set FileSys = CreateObject("Scripting.FileSystemObject") Set InFile = filesys.OpenTextFile("g:\spisok.txt", 1) While Not InFile.AtEndOfStream strHost = InFile.ReadLine Set OutFile = filesys.OpenTextFile("g:\" & strHost & ".txt", 8, true) strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strHost & "'") For Each objStatus in colPings If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then OutFile.WriteLine strHost & vbTab & Time & vbTab & "недоступен" Else OutFile.WriteLine strHost & vbTab & Time & vbTab & "доступен" End If Next OutFile.Close WEnd InFile.Close |
|||
38
Mikhail Volkov
29.10.17
✎
14:36
|
(37) Готовый брал v8: Как средствами 1C проверить ping (Ping monitor)?, добавил преобразование имени в IP_Адрес:
IP_Адрес = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, IP_Адрес, ?(Найти(strPingResults, "[") = 0, "", Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "[") - 1))); |
|||
39
Mikhail Volkov
02.11.17
✎
10:57
|
Функция ПроверкаСвязиФР() (31) создавалось лишь для проверки, что комп с ФР включен, и порт доступен, можно подключать ФР к 1С, и отбивать чеки на нем. Но возникла следующая ситуация: пользователь в ПКО ставит галку "Для пробития на фискальном регистраторе", сразу идет эта проверка - все ОК, открывается Фронт кассира, на нем жмет кнопку "Отбить чек", запускает функцию ВыполнитьКомандуОборудования(). И она выдает код ошибки: -11 "Устройство не включено"!? Как ошибка формируется посмотреть не могу, выдает Рарус_Компонента.ЗаказатьВыполнениеДействияСинхронно(). Решил для отладки перед этим свою ПроверкаСвязиФР() вставить. Она выдает "Порт занят" - это понятно, занят самим ФР.
А в функции ПроверкаСвязиФР() как-то можно определять кем занят порт: самим ФР или чем-то другим? |
|||
40
Mikhail Volkov
02.11.17
✎
15:06
|
Сумбурно написал? Переписал свою функцию, чтобы состояние "Порт занят" как ошибку не выдавала:
Функция ПроверкаСвязиФР(IP_Адрес = "", ТекстСообщения = "", ПортЗанят = Истина) Экспорт Если ПустаяСтрока(IP_Адрес) Тогда ТекстСообщения = "Не указан IP-адрес ФР"; Возврат Ложь; КонецЕсли; Попытка ФР = Новый("AddIn.FprnM45"); Исключение ФР = ЗагрузитьВнешнююFPrnM1C(ТекстСообщения); КонецПопытки; Если СтрЧислоВхождений(IP_Адрес, ".") < 3 И Не ДоступностьIP_Адреса(IP_Адрес, ТекстСообщения) Тогда Возврат Ложь; КонецЕсли; Если ФР = Неопределено Тогда Возврат Ложь; КонецЕсли; ФР.АдресХоста = IP_Адрес + ":6220"; ФР.DeviceEnabled = 1; // занимаем порт Результат = ФР.ResultCode; Если Результат <> 0 И Не(ПортЗанят И Найти(ФР.ResultDescription, "Порт занят") > 0) Тогда ТекстСообщения = "Ошибка проверки связи с ФР: " + ФР.ResultDescription; Возврат Ложь; КонецЕсли; ФР.DeviceEnabled = 0; // освобождаем порт Возврат Истина; КонецФункции // ПроверкаСвязиФР() да вот сомнения, что порт будет занят, но не ФР, а чем-то другим? |
|||
41
Сияющий в темноте
02.11.17
✎
22:45
|
у раруса включение устройства,это действие меняющен состояние обьекта устройства и к самому устройству относится опосредовано
|
|||
42
Mikhail Volkov
03.11.17
✎
13:08
|
(41) > к самому устройству относится опосредовано
Как это понимать? Команду глТорговоеОборудование.ВключитьОборудование() выполняет, показывает статус Включено. А как чек отбить выдает код ошибки: -11 "Устройство не включено"!? |
|||
43
NorthWind
04.11.17
✎
10:29
|
(42) а вы не хотите этот вопрос задать ТП раруса? Если у вас альфа - авто куплена, то чего вы мучаетесь? Это не ваша головная боль. Нехай апгрейд этого СЗУО дают, может есть версия без косяков.
|
|||
44
Mikhail Volkov
04.11.17
✎
11:44
|
(43) У них один ответ http://rarus.ru/forum/forum7/topic11558/message72783/ - переустановка СЗУО из того же дистрибутива. Сколько можно?
|
|||
45
Mikhail Volkov
04.11.17
✎
11:47
|
+ Похоже проблема админская 1С + АТОЛ 11Ф + ФФД 1.05
|
|||
46
Mikhail Volkov
06.11.17
✎
07:10
|
(42) В обработке ТорговоеОборудование функции ВключитьОборудование() есть такой фрагмент:
// Не то что включено, а даже еще и зарезервировано под текущую сессию - просто отлично! // Возврат НомОшибки; // Оборудование уже и так включено, возвращаем ОК (НомОшибки=0) вот и все. Я конечно его за комментировал, но опасаюсь, что в СЗУО есть нечто подобное: где-то стоит признак, что ФР уже подключен, а он отвалился, в итоге подключения ФР не происходит. Думаю свое альтернативное подключение делать, в чем оно заключается? Функция ПроверкаСвязиФР() (40) работает по принципу занимаем порт/освобождаем порт. А если не освобождать порт, то ФР останется подключенным, или нужны еще какие-то команды? Какие? |
|||
47
Mikhail Volkov
10.11.17
✎
15:48
|
Сегодня выдало "ФР: Ошибка выполнения команды "ПробитьЧек" КодОшибки: -3 800 Описание: В ККМ нет денег для выплаты". Рарус-1С советуют: Отключите контроль наличных в настройках драйвера ККМ Атол. За более подробной информацией обращайтесь в Атол, например, http://forum.atol.ru/index.php?showtopic=30779
Подскажите, как отключить контроль наличных в 1С? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |