Bug 2233

Summary: Тестирование сканера ШК Eclipse M S5145 RS232/LP Code Gate
Product: [Внутреннее (Etersoft)] Отдел тестирования Reporter: Денис Баранов <baraka>
Component: Assignee: Денис Баранов <baraka>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: alexeev, amorozov, lav
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 553, 1930    
Attachments: wine regsvr32 Scaner1C.dll

Description Денис Баранов 2008-08-08 14:34:29 MSD
Необходимо провести тестирование
фискального регистратора в Windows и в WINE.

1. Тестирование и настройка при помощи
тестовой утилиты, входящей в состав
драйвера АТОЛ.
2. Подключение сканера ШК в 1С и работа с ним.
Comment 1 Денис Баранов 2008-08-08 14:59:21 MSD
Настройка в 1С описана по адресу:
http://www.atol.ru/support/encyclopedy/1c/1s77-all/1c77-scan/
Comment 2 Денис Баранов 2008-08-08 15:08:36 MSD
Все как написано удается осуществить корректно, но при попытке ввести в 1С штрих код для товара ничего не получается.
Comment 3 Александр Морозов 2008-08-12 14:31:24 MSD
Сканер пишет в COM-порт строки, состояющие из штрих-кода и символов завершения строки. Они без проблем читаются под Linux с помощью примитивной программы.

В логах 1С следующее:
0009:Call KERNEL32.ReadFile(0000072c,0032e604,00001000,0032e564,0032e550) ret=02cef403
0009:Ret  KERNEL32.ReadFile() retval=00000000 ret=02cef403
0009:Call KERNEL32.GetLastError() ret=02cef40c
0009:Ret  KERNEL32.GetLastError() retval=000003e5 ret=02cef40c
0009:Call KERNEL32.WaitForSingleObject(00000724,000005dc) ret=02cecf40
0009:Ret  KERNEL32.WaitForSingleObject() retval=00000102 ret=02cecf40
0x3e5 - это ERROR_IO_PENDING. То есть надо дождаться завершения операции чтения. 1С ждёт её в течении 1500 мс, но не дожидается (0x102 - WAIT_TIMEOUT). Если сделать хак, заставляющий Wine вместо 1500 мс ждать вечно, то всё зависает.

При поиске оборудования ReadFile завершается сразу же и штрих-код читается:
0009:Call KERNEL32.ReadFile(0000072c,02bbe5f8,00000008,0032d838,0032d824) ret=02cef403
0009:Ret  KERNEL32.ReadFile() retval=00000001 ret=02cef403
0009:Call KERNEL32.WaitForSingleObject(000006e0,000005dc) ret=02cecf40
0009:Call KERNEL32.GetOverlappedResult(0000072c,0032d824,0032d838,00000000) ret=02cef459

Написал тестовую программу для Wine, читающую штрих-код со сканера. В ней ReadFile тоже возвращает ERROR_IO_PENDING, но чтение завершается за конечное время и всё прекрасно работает.
Comment 4 Александр Морозов 2008-08-12 15:54:11 MSD
Под Wine ReadFile читает COM-порт, пока не прочитает заданное 3-м аргументом число байт. Под Windows он может завершиться, прочитав меньше.

Из MSDN: "When reading from a communications device, the behavior of ReadFile is determined by the current communication time-out as set and retrieved by using the SetCommTimeouts and GetCommTimeouts functions".
Comment 5 Александр Морозов 2008-08-12 18:00:37 MSD
Пофиксил. Исправление не совсем правильное, но для того чтобы исправить правильно надо проверить, как ведёт себя Windows при поступлении данных на COM-порт с разной скоростью и при различных комбинациях параметров в структуре COMMTIMEOUTS, так что пока пусть будет так.
Comment 6 Денис Баранов 2008-08-14 22:40:09 MSD
Проверил еще раз, все работает.
Ждем релиза  и закрываем.
Comment 7 Денис Баранов 2009-10-15 16:09:47 MSD
На последней версии в тестовой программе для сканера от АТОЛ не открывается меню настройки свойств сканера.
WINE@Etersoft 1.0.11 eter9/eter5
Драйвера версии: DTO6_2009_10_09.zip
Comment 8 Александр Морозов 2009-10-16 15:10:55 MSD
При использовании DTO6_2009_10_09.zip происходит падение при регистрации DLL.
Comment 9 Александр Морозов 2009-10-16 15:12:50 MSD
Created attachment 1343 [details]
wine regsvr32 Scaner1C.dll
Comment 10 Александр Морозов 2009-10-16 15:18:46 MSD
Scaner1C.dll успешно регистрируется, если в директорию, где она находится, скопировать DTO_comm.dll из ATOL/Drivers/Bin.
Comment 11 Александр Морозов 2009-10-16 15:35:45 MSD
При нажатии на кнопку "Поиск оборудования..." кроме окна поиска оборудования появляется ещё какое-то окно "Dialog" с кнопками OK и Cancel. 1С очень сильно тормозит, когда открыты эти окна, хотя процессор загружен не на 100%. Штрих-коды в окне поиска оборудования читаются, хоть и с большой задержкой.

При вводе штрих-кода в самой 1С она на какое-то время подвисает, но потом штрих-код таки вводится.
Comment 12 Александр Морозов 2009-10-16 15:52:27 MSD
С более старым дистрибутивом DTO6_2008_10_06.zip таких проблем нет.
Comment 13 Денис Баранов 2009-11-14 16:26:38 MSK
Решена путем использования более старых драйверов.