Касса АМС-100Ф (16 версии - 2.2.0). Клиент пожаловался, что при выключении кассы в момент печати чека (а это приходится делать, скажем, когда кассир видит, что кончается бумага) Online Server 1.47 теряет чек. То есть чек оказывается односзначно в сброшенных, хотя на кассе в памяти остаётся часть пробитого чека.
Я скачал с сайта последнюю версию старого (не Pro) сервера и проверил на тестовой кассе - это действительно так.
Каким образом можно решить данную проблему?
Или нужно переходить на Pro версию?
Prof версия в этой ситуации, к сожалению, тоже не поможет. И вообще, зачем собственно выключать кассу в момент печати чека? Это не правильно! Также про приведенный Вами случай окончания бумаги не совсем понятно. Зачем здесь выключать кассу? Кассир может заметить, что заканчивается бумага только по цветному маркеру на ней. В этот момент бумаги еще достаточно как минимум на два полных чека (40 покупок). Т.е. нужно просто дождаться конца печати и менять бумагу. Даже если кассир не заметил конца бумаги и возникла "E ПУ", то если перезарядить бумагу и нажать "ВВ", касса полностью повторит чек, и в сервере он закроется корректно.
Т.е. данная проблема решается организационными методами.
Проблема в том, что кассиры мухлюют. При этом они и имитируют конец бумаги, чтобы напечатать несколько одинаковых чеков.
Кроме того, они это делают специально, так как нашли способ, чтобы внести расхождение между кассой и компьютером.
Соответственно хозяин выставляет претензии, что данные не сходятся.
Насколько я понимаю, OnlineServer может заглянуть в буфер контрольной ленты кассы и узнать, есть там покупки или нет. Почему отн этого не делает.
Провёл несколько экспериментов.
Как удалось выяснить - достаточно нажать клавишу СБ в момент печати чека, чтобы он в кассе пробился, а в OnlineServer не попал.
Как этого избежать.
Насколько я понимаю, в процессе печати касса не опрашивает ни клавиатуру ни принятые символы с порта. Если нажать сброс, то процессор PV его запоминает, и как только MV отчнётся от печати, обрабатывает нажатие СБ, если сервер не успеет передать команду опроса в этот момент, то он увидит кассу не после пробития чека, а перед началом ввода.
Есть мнение, что сервер может (и должен) заглянуть в буфер контрольной ленты, чтобы понять, был ли чек пробит или нет.
Устранена ли эта проблема в OSP-pro ?
Я, конечно, объясню директору, из-за чего теряются чеки, но кассиры будут говорить, что СБ не нажимали.
Вы совершенно правильно понимаете причины пропажи чека в сервере при нажатии сброса. Разъясню немного ситуацию. Описанная Вами проблема известна очень давно. В версии сервера 1.46 действительно достаточно было нажать сброс в любой момент печати и чек в сервере терялся. В версии 1.47, когда причины были обнаружены, для устранения этой проблемы, в драйвере было сделано максимум, из того что, можно было сделать, исходя из возможностей версии 1.х. В 1.47 самых последних релизов надо было очень постараться, судорожно и неприрывно давя на сброс, чтобы чек пропал.
Далее был OLSProf. В нем описанная проблема устранена на 100%, немного другим способом, нежели чтение ЭЖ, но это уже не принципиально. А по поводу контроля покупок по ЭЖ, то уверяю Вас, что там где надо он сделан. Здесь надо понимать, что мы стараемся избегать излишнего чтения из ЭЖ, т.к. это последовательная МС и работа с ней вцелом сильно замедляет работу сервера с кассой.
Теперь по поводу Выкл/Вкл. К сожалению, это совсем другая ситуация для алгоритмов сервера, нежели с кнопкой "Сброс", и она к сожалению, пока не устранена. Будем стараться что-нибудь придумать. Но сразу оговорюсь, закрыть в сервере недовыведенный после рестарта кассы чек, можно будет только свободными суммами.
В дальнейшем, при использовании АМС-100К, подобных вещей в принципе произойти не может, т.к в ней реализован полноценный Online-протокол, основанный на 200-ном, только на порядок улучшенный.
Про АМС-100К можно сказать, что после выключения у неё есть повторение печати чека (документ недопечатан - повтор).
Проблема в том, что клиент не захочет менять АМС-100Ф на АМС-100К хотя бы из-за иногда возникающих проблем с ЭКЛЗ, а также 5000 рублей за плановую замену.
Я не знаю точно, как работает касса, но однажды нажатая клавиша в процессе печати запоминается PV и отрабатывается сразу после окончания. Если нажать две клавиши, то запоминается только последняя. Просто в PV почему-то не сделали буфера нажатых клавиш, и быстрые нажатия клавиш накладываются (даже в рабочей кассе).
Проблема ещё в том, что помимо OnlineServer клиент использует различные обработки через Ole интерфейс, которые явно не будут работать на OnlinePro.
Также вы говорите о самой последней версии - это та, что на сайте, или вы можете выслать на e-mail. Потому как, если даже есть какой-то способ решения проблемы (хоть частично).
Дело в том, что кассы работают уже несколько лет, но одна часто стояла выключенная. Теперь они стали работать на двух кассах одновременно (кассы сидят на разных портах), и это и привело к тому, что иногда стала происходить потеря чеков. По поводу выключения кассы - это была моя гипотеза, так как больше ничего в голову не приходило.
По поводу чтения журнала - я думаю, что в ОЗУ где-то есть ячейка, где указано начальное положение записи в журнал нового чека, что и надо читать - сервер знает, какое должно быть положение, если чек пробит, а также если чек отменён. Если положение совсем не то, то можно заглянуть и в журнал, чтобы понять - что именно было пробито.
Продажа свободных сумм на кассе запрещена, чтобы кассиры не обманывалит покупателей (были пойманы на том, что продали товар за 150 рублей, хотя он стоил 100).
Заранее благодарен за ответ.
Детальная проверка показала следущее:
Во-первых, вы правы, сброс надо давить, так как в процессе печати он не срабатывает, но зато, если перед моментом окончания печати чека нажать любую клавишу, даже ФЦ, то чек в сервере не запоминается (версия сервера 1.47).
То есть, другими словами, если кассир спешит, и начинает набирать новый чек сразу после окончания печати старого, то старый чек попадает в сброшенные чеки.
Теперь буду проверять OnlinePro, только его и поставить-то не так просто.
Проверил Online Pro. Таких проблем нет. Даже если разорвать на время кабель, то всё равно ничего не пропадает.
Теперь вопрос такого плана:
Возможна ли какая-то доработка Online Server v1.47, или всё останется как есть, то есть в не совсем рабочем виде.
P.S. Для клиента, конечно, это проблема, но насколько я понимаю, со старым ключём Online Pro будет работать нормально.
Только кто будет оплачивать переписывание обработок для 1С и для Excel ?
В продолжение вопроса перехода на OnlineServerPro:
В onlineserver весии 1.47 в справочнике товаров было поле Сумма, которое отражало сумму проданных товаров, даже если в процессе продажи изменялась цена.
В onlineserverpro я как-то этого поля не увидел (его нет в списке доступных).
Как быть с учётом товара, цена которого меняется в середине дня.
Точнее отчёт по серверу снимается 1 раз в месяц и выгружается в Excel. На основании этого поля можно получить реальную выручку по товару, цена которого менялась на протяжении месяца.
Как подобное сделать в onlineserverpro?
Доработки в версии 1.47 производиться не будут. По поводу суммы продаж все не так сложно как кажется. В ActiveX библиотеке, обеспечивающей доступ к БД через механизмы OLE, есть интерфейс, позволяющий строить произвольные SQL запросы к БД. Сумму продаж за период можно выбрать одним запросом. Если необходимо, то я готов помочь с написанием запросов, но обсуждение этого вопроса лучше перенести на e-mail.
Спасибо за информацию.
Я уже скачал документацию по работе с FireBird.
Так как SQL-сервер открытый, то никто не запрещает обращаться к нему напрямую. Думаю, что будет быстрее, чем работа через OLE.
На старом сервере загрузка отчёта в Excel занимала более получаса.
Firebird сплёвывает отчёт в файл за несколько секунд.
Ещё такой вопрос:
Насколько я понял, если я создам ещё одну свою таблицу в базе данных Firebird, то это никак не повлияет на работу сервера, так ли это?
И как выбрать имя таблицы, чтобы избежать накладок, если в дальнейшем будет изменяться структура базы?
Совершенно верно - можно строить запросы и напрямую к БД. Нормально построенный запрос выполняется очень быстро. Например, при использовании агрегатной функции SUM можно сразу получить сумму продаж по любому товару (или по всем товарам) за указанный период. Когда я говорил про OLE, то подразумевал интерфейс библиотеки Dataset, позволяющий выполнять пользовательские запросы к БД. Создание таблицы в БД никак не повлияет на работу сервера, если не создавать внешних ключей, завязанных на существующие таблицы. Однако, я не вижу необходимости в создании промежуточных таблиц, поскольку любую задачу можно выполнить и без этого. В БД есть хранимые процедуры, которые позволяют выбрать продажи за указанный период, так что можно использовать и их. Имена всех таблиц и связей, хранятся в скрытых системных таблицах БД, но связываться с этим не стоит. Могу дать 100% гарантию, что имена таблиц при изменении структуры БД изменяться не будут