В документации по 1С практически ничего нет по программированию взаимодействия 1С с торговым оборудованием. В меню "Сервис" есть раздел по установке и настройке торгового оборудования с интуитивным интерфейсом, но в остальном предлагается барахтаться самим. Хочу поделиться своим опытом по программированию такого взаимодействия.
Наше предприятие специализируется на продаже широкой гаммы геодезического оборудования и программ, а также приборов неразрушающего контроля. Номенклатура склада превышает 17000 наименований, многие приборы продаются либо в первоначальном состоянии, либо вместе с сертификатом после прохождения госповерки, в котором указывается серийный номер прибора. Часть программ рассчитана на использование с конкретным экземпляром прибора, что также требует контроля серийного номера при отпуске со склада. Имеется Сервис-центр с гарантийным обслуживанием.
В складской подсистеме 1С у нас уже несколько лет используются штрихкоды для ускорения отпуска товаров клиентам и исключения ошибок в подборе товаров. Разработка этой подсистемы по нашему ТЗ была заказана сначала сторонней организации, но незавершенная ей разработка была существенно переработана и отлажена нашими силами. В подсистеме используются радиотерминалы сбора данных 8470 и 8570 производства CypherLab, связанные через роутер с компьютерами кладовщиков. Документы «Поступление товаров и услуг» и «Реализация товаров и услуг», печатаемые средствами 1С, содержат штрихкод с номером и датой документа. Приборы, хранящиеся на складе, имеют как правило штрихкод производителя, включающий модель и серийный номер прибора. Для товаров без штрихкодов производителя на складе формируются этикетки со штрихкодом, печатаемые на отдельном ленточном принтере. В системе ведется справочник «Серийные номера поверенных и проданных приборов», записи в который вводятся при оформлении протоколов госповерки, а для неповеренных приборов – в складской подсистеме при отпуске товара. Записи содержат код продавшей организации, модель и серийный номер прибора, дату госповерки, дату и номер накладной и ссылку на запись покупателя в справочнике контрагентов. Этот справочник используется для проверки выдачи, если требуется отпустить поверенный прибор, и для контроля принадлежности прибора при обращении покупателя в наш сервис-центр.
При подготовке ввода системы в справочнике «Номенклатура» регистрируются известные штрихкоды модели товара. Если товар не имеет штрихкода поставщика, ему присваивается штрихкод, равный артикулу, и печатаются соответствующие липкие этикетки. Складские полки и шкафы также снабжены этикетками со штрихкодом.
Работа подсистемы начинается с оприходования товаров на складе. Для этого кладовщик считывает штрихкод приходной накладной, после ее опознования в 1С создается новый или открывается ранее созданный документ «Складская операция» с операцией «оприходование»,кладовщик поочередно считывает штрихкоды товаров поступившей партии, причем на терминале отображается количество штук каждого товара из накладной, которое еще не зарегистрировано в складском документе. Если товары не требуют по экземплярного учета, то на терминале вводится принятое количество штук, если в штрихкоде есть серийный номер, то штрихкод каждого экземпляра считывается отдельно. Затем кладовщик считывает этикетку с номером места хранения с полки, на которую он помещает товар, или вводит эти данные вручную и вводит вручную дату поверки, если товар поступает в поверенном состоянии. В документе «Складская операция» вносится или корректируется строка по данному товару. Одновременно, для поверенных товаров создаются записи в справочнике «Серийные номера поверенных и проданных товаров».
При отпуске товара со склада кладовщик поступает аналогичным образом - он сначала считывает штрихкод накладной, что приводит к созданию или открытию ранее созданного документа «Складская операция» с операцией «Выдача», а затем штрихкоды отбираемых экземпляров товаров. При этом, если в накладной указана поверенность товара, то серийный номер экземпляра товара проверяется по справочнику «Серийные номера поверенных и проданных товаров», выдача неповеренного товара блокируется с соответствующим сообщением на терминале. Отпущенный товар регистрируется в справочнике поверенных и проданных товаров. По завершении отбора товаров по накладной на отдельном принтере печатаются гарантийные талоны на товары, имеющие серийный номер и срок гарантии.
При проведении сформированного документа «Складская операция» осуществляется корректировка остатков товара в регистре сведений «Места расположения товаров на складах».
Наряду с описанными основными действиями предусмотрены регистрация межскладского и внутрискладского перемещения товаров и инвентаризация остатков.
Для работы подсистемы в 1С были созданы справочники «Серийные номера поверенных и проданных товаров» и «Места расположения товаров на складах», документ «Складская операция», две обработки для 1С, а также вспомогательные обработки для печати липких этикеток со штрихкодами на ленте и на листах а4 с 51этикеткой на листе, а также программа для терминала. В работе подсистемы участвуют входящие в состав 1С «Модуль обычного приложения», обработки «ТОКлиентККМOnline» и «ТОСервер», а также предлагаемая поставщиком терминалов обработка обслуживания ScanCodeCipherLabPDT-v4…epf. Во все эти компоненты были внесены небольшие изменения. В справочнике товаров был введен ряд новых свойств. Для облегчения программирования терминалы 8470 и 8570 регистрировались в системе 1С как «ККМOnline», что существенно облегчило организацию взаимодействия терминала с 1С.
Картинки на терминале :
Меню терминала Поиск документа
Размещение Отбор Перемещаем товар
Обозначения: ШК - штрихкод, СНКод – серийный номер, П – поверен, Н- не поверен, ШКМХ –штрихкод места хранения (Этаж/Полка),
За время эксплуатации в подсистему была добавлена возможность отпуска заранее сформированной коробки или нескольких коробок с предварительно подготовленным набором товаров со считыванием терминалом только штрихкодов коробки, однако, практического применения эта возможность не нашла.
Рассмотрим особенности организации взаимодействия 1С с терминалом.
В составе 1С имеются средства, рассчитанные на работу с разного рода торговым оборудованием. Радиотерминалы сбора данных модели 8470L или 8571L производства фирмы CipherLab подключаются к1С вместе с обработкой обслуживания CipherLabTCP8…epf, функция «ПриНачалеРаботыСистемы» модуля ОбычногоПриложения с нашими доработками создает основной объект «ОбработатьШтрихкод» на основе внешнейобработки ОбработатьШтрихкод.epf.
Обмен информацией с терминалом организуется с использованием этого объекта, обработки ТОСервер и драйвера CipherLabTCP.dll. В обработке ТОСервер и внешней обработке обслуживания CipherLabTCP8…epf предусмотрены процедуры и функции для подключения и работы с различным торговым оборудованием, в том числе с Контрольно-кассовыми машинами (ККМ). Не рассматривая выполняемые штатными средствами (Меню «Сервис\Торговое оборудование\Помощник подключения и настройки торгового оборудования») процедуры по подключению терминала, обработки обслуживания и созданию нужных для работы с терминалом объектов, отметим, что нами для обслуживания ВнешнегоСобытия от терминала в обработке ТОСервер используется только 2 функции:«ОбработатьВнешнееСобытие» и «ОбработатьВнешнееСобытиеВнутр», причем вторая функция нами изменена и, вместо имеющейся в этой обработке функции «ОбработатьСобытиеOnline»,вызывает одноименную функцию в объекте «ОбработатьШтрихкод», в котором сосредоточена вся основная функциональность подсистемы.
Обмен всегда начинается по инициативе терминала, который создает ВнешнееСобытие, с которым передаются три параметра – Источник ("CipherLabTCP"), Событие («Query» или «Update») и Данные (Номер терминала). Первое внешнее событие (всегда «Query») активизирует процедуру «ОбработкаВнешнегоСобытия» модуля ОбычногоПриложения.
При возникновении события от ТСД, эта процедура вызывает процедуру «ВнешнееСобытие» объекта “ТОКлиентККМOnline”, передавая ему те же три параметра. Процедура «ВнешнееСобытие» создает объект«ТОСервер» и вызывает его функцию «ОбработатьВнешнееСобытие» передавая ей полученные 3 параметра и добавив к ним параметр «Клиент», содержащий ссылку на объект “ТОКлиентККМOnline”.
После того, как в ходе выполнения задачи создастся или откроется документ «Складская операция» или «ИнвентаризацияПоМестамХранения», последующие внешние события будут перехватываться процедурой «ОбработкаВнешнегоСобытия» открытой формы документа, которая вызовет функцию «ОбработатьВнешнееСобытие» объекта«ТОСервер» без участия объекта “ТОКлиентККМOnline”. При этом вызове ТОСервера передаются те же параметры,что и до открытия документа, но с установкой параметру «Клиент» значения ссылки на открытую форму.
Для обработки внешнего события в объекте «ТОСервер», кроме функции «ОбработатьВнешнееСобытие» используется также функция «ОбработатьВнешнееСобытиеВнутр». Эта функция запрашивает необходимые данные о терминале из базы данных 1С, после чего вызывает функцию «ОбработатьСобытиеOnline» объекта «ОбработатьШтрихкод». Эта функция командой «ПолучитьДанные» с номером создавшего событие терминала получает через драйвер от терминала номер базы, номер формы, вызвавшей событие, и до 8 полей с данными от этой формы. Функция создает структуру «Параметры», определяет и включает в эту структуру параметр «Операция», используя имя События (Query или Update) и номер создавшей событие формы, и от 1 до 6 полученных от терминала данных, после чего вызывает функцию «Диспетчер», инициирующую ту или иную цепочку обработки полученных данных. Тексты функций "ОбработатьСобытиеOnline" и "Диспетчер" приведены ниже.
Создав внешнее событие, терминал в течение 30 секунд ожидает ответной реакции от 1С. Для такого ответа у нас используются команды драйвера «ПолучитьДанные», «ПослатьСообщение» и «Ответ». Команды "ПолучитьДанные" и "Ответ" содержат номер терминала и до 8 полей получаемых или передаваемых терминалу данных. Перед ответом может быть передано одно или несколько сообщений для отображения на экране терминала либо запрос для считывания данных, подготовленные в базе терминала. Если за 30 секунд ответа не получено, то терминал прекращает ожидание и никакой реакции на последующее обращение к нему не произойдет. Это создает определенную ситуацию цейтнота при необходимости провести до ответа терминалу достаточносложную цепочку операций над полученными от терминала данными или при отладке функций по шагам. В последнем случае программисту целесообразно поставить точку остановки в процедуре «ОбработкаВнешнегоСобытия» модуля ОбычногоПриложения, в которой создается объект на основе обработки “ТОКлиентККМOnline”, а дальше пройти по F11 все этапы вплоть до функции "ОбработатьСобытиеOnline".Это позволит иметь на экране конфигуратора при отладке тексты всех используемых в задаче и создаваемых динамически программных объектов.
Одной из проблем в складской работе является возникающая иногда необходимость прервать оприходование или комплектование отгрузки по большой накладной из-за другой срочной работы, с тем, чтобы позднее завершить прерванную операцию. Для этого при опознании штрихкода приходной или расходной накладной создается структура, содержащая данные всех строк из табличной части документа, после чего проверяется, не соответствует ли этой накладной ранее созданный складской документ. Если есть, то из дублирующей ТЧ документа структуры удаляются все вошедшие в складской документ количества товаров, если нет, то создается новый складской документ с пустой ТЧ. При каждом очередном включении товара в ТЧ складской операции корректируется остаток в дублирующей структуре. Отсутствие этого остатка сигнализирует о завершении процесса.
Остальная часть функционала реализуется обычными для 1С приемами и не нуждается в комментариях.