Използване на баркодове на стоки в склада
В документацията на 1C практически няма нищо за програмиране на взаимодействието на 1C с оборудването за търговия. В менюто "Сервиз" има раздел за инсталиране и конфигуриране на търговско оборудване с интуитивен интерфейс, но в противен случай вие сте поканени да се забъркате сами. Искам да споделя моя опит в програмирането на такова взаимодействие.
Фирмата ни е специализирана в продажбата на широка гама геодезическо оборудване и програми, както и уреди за безразрушителен контрол. Складовата номенклатура надхвърля 17 000 артикула, много устройства се продават или в оригинално състояние, или заедно със сертификат след държавна проверка, който посочва серийния номер на устройството. Някои от програмите са предназначени за използване с конкретен екземпляр на устройството, което също изисква контрол на серийния номер при напускане на склада. Има сервизен център с гаранционно обслужване.
В складовата подсистема 1C използваме баркодове от няколко години, за да ускорим освобождаването на стоките на клиентите и да премахнем грешките при избора на стоки. Разработването на тази подсистема съгласно нашето ТЗ първо беше поръчано от трета организация, но разработката, която не беше завършена от нея, беше значително преработена и отстранена от нашите сили. Подсистемата използва радиотерминали за събиране на данни 8470 и 8570, произведени от CypherLab, свързани чрез рутер към компютрите на складодържателите. Документите „Получаване на стоки и услуги“ и „Продажба на стоки и услуги“, отпечатани с помощта на 1C, съдържат баркод с номера и датата на документа. Инструментите, съхранявани в склад, обикновено имат баркод на производителя, който включва модела и серийния номер на инструмента. За стоки без баркод на производителя баркод етикетите се генерират в склада и се отпечатват на отделен лентов принтер. Системата поддържа справочник „Серийни номерапроверени и продадени устройства”, записи в които се въвеждат при регистриране на протоколи за държавна проверка, а за непроверени устройства - в складовата подсистема при освобождаване на стоките. Записите съдържат кода на продаващата организация, модела и серийния номер на устройството, датата на държавната проверка, датата и номера на фактурата и връзка към записа на купувача в указателя на контрагента. Тази директория се използва за проверка на издаването, ако е необходимо за освобождаване на проверено устройство и за контрол на собствеността върху устройството, когато купувачът се свърже с нашия сервизен център.
При подготовката на входа на системата в справочника "Номенклатура" се регистрират известни баркодове на модела на продукта. Ако даден артикул няма баркод на доставчика, му се присвоява баркод, равен на SKU, и се отпечатват подходящи лепливи етикети. Складовите рафтове и шкафове също са етикетирани с баркод.
Работата на подсистемата започва с осчетоводяването на стоките в склада. За да направите това, складодържателят чете баркода на входящата фактура, след като бъде разпознат в 1C, се създава нов документ или се отваря предварително създаден документ "Складова операция" с операцията "осчетоводяване", складодържателят чете последователно баркодовете на стоките от входящата партида и терминалът показва броя на броя на всеки продукт от фактурата, който все още не е регистриран в складовия документ. Ако стоките не изискват отчитане на копия, тогава приетият брой бройки се въвежда на терминала, ако има сериен номер в баркода, тогава баркодът на всяко копие се чете отделно. След това складодържателят прочита етикета с номера на складовото място от рафта, на който поставя стоките, или въвежда тези данни ръчно и ръчно въвежда датата на проверка, ако стоките пристигнат в проверено състояние. В документа "Складова работа" се въвежда или коригира ред за този продукт. В същото време зана доверени стоки, се създават записи в справочника „Серийни номера на доверени и продадени стоки“.
При освобождаване на стоки от склада складодържателят действа по подобен начин - първо прочита баркода на фактурата, което води до създаване или отваряне на предварително създадения документ "Складова операция" с операция "Издаване", а след това и баркодовете на избраните стокови позиции. В същото време, ако известието за доставка посочва стоките, които се сертифицират, тогава серийният номер на екземпляра на стоките се проверява спрямо справочника „Серийни номера на продадени и надеждни стоки“, издаването на непроверени стоки се блокира със съответно съобщение на терминала. Освободените стоки се регистрират в директорията на доверени и продадени стоки. След приключване на избора на стоки по фактура се отпечатват гаранционни карти на отделен принтер за стоки, които имат сериен номер и гаранционен срок.
При провеждане на генерирания документ "Складова работа" се коригира балансът на стоките в информационен регистър "Местоположения на стоки в складове".
Наред с описаните основни действия се осигурява регистриране на междускладово и вътрешноскладово движение на стоки и инвентаризация на остатъците.
За работата на подсистемата в 1C са създадени директориите „Поредни номера на адвокати и продадени стоки“ и „Местоположения на стоки в складове“, документът „Складова работа“, две обработки за 1C, както и спомагателна обработка за отпечатване на лепящи етикети с баркодове върху лента и на листове А4 с 51 етикета на лист, както и програма за терминала. Работата на подсистемата включва „Модул за редовно приложение“, включен в 1C, обработката „TOKlientKKMOnline“ и „TOServer“, както и обработката на услугата ScanCodeCipherLabPDT-v4 ... epf, предлагана от доставчика на терминала. Всички тези компоненти бяха включенималки промени. В продуктовата директория бяха въведени редица нови свойства. За да се улесни програмирането, терминалите 8470 и 8570 бяха регистрирани в системата 1C като "KKMOnline", което значително улесни организацията на взаимодействието между терминала и 1C.
Снимки на терминала:
Меню на терминал Търсене на документи
Избор на разположение Ние преместваме стоките
Обозначения: SHK - баркод, SNKode - сериен номер, P - проверен, N - не проверен, SHKMH - баркод на мястото за съхранение (Под / Рафт),
По време на работа в подсистемата беше добавена възможността за раздаване на предварително оформена кутия или няколко кутии с предварително подготвен набор от стоки, като терминалът чете само баркодовете на кутията, но тази възможност не намери практическо приложение.
Нека разгледаме характеристиките на организацията на взаимодействие между 1C и терминала.
Като част от 1C има инструменти, предназначени за работа с различни видове търговско оборудване. Радиотерминали за събиране на данни модел 8470L или 8571L, произведени от CipherLab, са свързани към 1C заедно с обработката на услугата CipherLabTCP8…epf, функцията „При стартиране на системата“ на модула Common Application с нашите модификации създава основния обект „Процес баркод“ въз основа на външната обработка ProcessBarcode.epf.
Обменът на информация с терминала се организира с помощта на този обект, обработка на TOServer и драйвера CipherLabTCP.dll. Обработката на TOServer и обработката на външна услуга CipherLabTCP8…epf осигуряват процедури и функции за свързване и работа с различно оборудване за търговия на дребно, включително касови апарати (KKM). Без да се вземат предвид процедурите, извършвани със стандартни средства (Меню "Сервиз \ Търговско оборудване \ Помощник за свързване и настройка на оборудване за търговия на дребно") процедури засвързване на терминала, поддръжка на обработка и създаване на обектите, необходими за работа с терминала, отбелязваме, че използваме само 2 функции за обслужване на външно събитие от терминала в обработката на TOServer: „Обработване на външно събитие“ и „Обработване на вътрешно събитие на външно събитие“, като втората функция е променена от нас и вместо функцията „Обработване на събитие онлайн“, налична в тази обработка, тя извиква едноименната функция в обекта „Процес баркод“, в който са всички основни функционалности на подсистемата е концентрирана.
Обменът винаги започва по инициатива на терминала, който създава ExternalEvent, с който се подават три параметъра - Source ("CipherLabTCP"), Event ("Query" или "Update") и Data (Terminal Number). Първото външно събитие (винаги „Query“) извиква процедурата „HandleExternalEvent“ на модула RegularApplication.
Когато възникне събитие от TSD, тази процедура извиква процедурата "ExternalEvent" на обекта "TOClientKKMOnline", като му предава същите три параметъра. Процедурата "ExternalEvent" създава обекта "TOServer" и извиква неговата функция "ProcessExternalEvent", като му предава получените 3 параметъра и към тях добавя параметъра "Client", съдържащ препратка към обекта "TOClientKKMOnline".
След като документът „Складова операция“ или „Инвентаризация по места за съхранение“ бъде създаден или отворен по време на изпълнение на задачата, последващите външни събития ще бъдат прихванати от процедурата „Обработка на външно събитие“ на отворената форма на документа, която ще извика функцията „Обработване на външно събитие“ на обекта „TOServer“ без участието на обекта „TOKlientKKMOOnline“. В това извикване на TOServer се предават същите параметри, както преди отварянето на документа, но с параметъра "Клиент", зададен на стойността на връзката към отворения формуляр.
За да обработите външно събитие в обекта TOServer,в допълнение към функцията "ProcessExternalEvent" се използва и функцията "ProcessExternalEventInternal". Тази функция изисква необходимите данни за терминала от базата данни 1C, след което извиква функцията "ProcessEventOnline" на обекта "ProcessBarcode". Тази функция получава базовия номер, номера на формуляра, който е причинил събитието, и до 8 полета с данни от този формуляр през драйвера от терминала с помощта на командата „GetData“ с номера на терминала, който е създал събитието. Функцията създава структурата "Параметри", дефинира и включва параметъра "Операция" в тази структура, използвайки името на събитието (Query или Update) и номера на формуляра, който е създал събитието, и от 1 до 6 данни, получени от терминала, след което извиква функцията "Диспетчер", която инициира една или друга верига за обработка на получените данни. Текстовете на функциите "ProcessEventOnline" и "Dispatcher" са дадени по-долу.
След като създаде външно събитие, терминалът чака отговор от 1C в рамките на 30 секунди. За такъв отговор използваме командите на драйвера "GetData", "SendMessage" и "Response". Командите "GetData" и "Response" съдържат номера на терминала и до 8 полета с данни, получени или предадени на терминала. Преди отговора могат да бъдат изпратени едно или повече съобщения, които да бъдат показани на екрана на терминала или заявка за четене на данни, подготвена в базата на терминала. Ако не се получи отговор в рамките на 30 секунди, терминалът спира да чака и няма да има отговор на следващите повиквания. Това създава известна ситуация на проблеми с времето, ако е необходимо да се извърши доста сложна верига от операции върху данните, получени от терминала, преди отговорът на терминала или при отстраняване на грешки във функциите стъпка по стъпка. В последния случай е препоръчително програмистът да постави точка на прекъсване в процедурата "ProcessingExternalEvent" на модула NormalApplication, вкойто създава обект въз основа на обработката на “TOKlientKKMOOnline”, и след това преминете през F11 всички стъпки до функцията “ProcessEventOnline”.Това ще ви позволи да имате на екрана на конфигуратора при отстраняване на грешки текстовете на всички използвани в задачата и създадени динамично програмни обекти.
Едно от предизвикателствата при складирането е случайната необходимост от прекъсване на осчетоводяването или комплектоването на голяма пратка фактура поради друга неотложна работа, за да завърши прекъснатата операция по-късно. За целта при разпознаване на баркод на входяща или изходяща фактура се създава структура, която съдържа данните на всички редове от табличната част на документа, след което се проверява дали създаденият преди това складов документ отговаря на тази фактура. Ако има, тогава всички количества стоки, включени в складовия документ, се изтриват от дублиращия се PT на структурния документ, ако не, тогава се създава нов складов документ с празен PT. При всяко следващо включване на стоките в PM на складовата операция се коригира салдото в дублиращата структура. Липсата на този остатък е сигнал за завършване на процеса.