:) Есть вещи очевидные а есть невероятные :)
технология такая.
испокон веков, т.е. изначально crystal.exe создавал задания на загрузку и выгрузку через службу KassServer (centrum.exe через CentrumExchange), заполняя определённый COM интерфейс и передавая в эту службу мнемоники/данные загружаемые на кассы или весы.
Далее служба KassServer добавляла задание на загрузку устройств в таблицы JobsQueue и JobsData откуда их забирали служба CashServ на кассы и SetScale (начиная помоему с 60-70 версии точно не помню, до этого это была служба CashServ)
начиная с версии помоему с 78 (или с 77) crystal.exe и centrum.exe работают напрямую с базой данных, т.е. не используя никаких служб.
Crystal.exe дёргает процедуру передавая в неё список кодов товаров которые надо загрузить на кассу, и число - тип данных. эти данные вставляются в таблицу TransferCmd, в которой указаны тип данных, номер адресата, уникальный идентификатор строки данных (код товара или ID чего-нибудь) и операцию загрузки или выгрузки.
И всё!
далее всё происходит так:
служба CashServer.jar проверяет, есть ли в transfercmd данные на загрузку на кассы определённых типов данных, если есть то дёргает процедуру (геттер) которая делает выборку из БД полного набора данных по уникальному идентификатору определённого типа данных который находится в transfercmd. Служба CashServer после формирования и отправки на кассу данных, (если касса скажет всё ок) дёргает процедуру (аксептер) которая грохает задания в transfercmd.
Служба SetScale будет работать напрямую с TransferCmd только с 81 ил 82 версии. до этого всё происходит так:
задания на загрузку привязок на весы (тип данных 134) попав в таблицу
TransferCmd практически сразу закидываются в таблицу JobsQueue и удаляются из transfercmd. а из jobsqueue служба SetScale из забирает и отправляет на весы.
увидеть это можно если отключить тип данных JobsDataFill :)
спасибо за внимание :)