Страница 1 из 1
Возврат товара
Добавлено: 03 дек 2019, 17:08
tanya
Там же, где проверяются сканеры по таблице sarmat.scanner, в случае, если штрих-код изменился и sc_type=1, то
- посылается команда товарному серверу Container.Return (см Вики)
- если команда добавилась успешно, то
- добавить запись в новую mssql таблицу ASK_RET (через команду RunMSSQL), при этом:
- ask_id = id новой добавленной записи в command_gas
- box = считанный штрих-код
- product = good_desc_id из новой добавленной записи в command_gas
- qty = quantity из новой добавленной записи в command_gas
- state = 1
- если ошибка raise выполнения команды, то проверить ее ф-ией is_ora_bkp_error:
- если ф-ия вернула true, то выйти из программы
- иначе вывести текст ошибки в лог и издать три звуковых сигнала на бипер сканера (если есть его IP в таблице scanner)
Также в таймере в части опроса MSSQL таблиц добавить новый опрос в самом начале:
- ищем в ask_ret записи у которых state=1 - для каждой из них
- берется ask_id, с Oracle выбирается запись с command_gas.id =ask_ret.ask_id - и хранится для дальнейшего анализа в шаге текущего цикла - все что далее в этом пункте делается командами RunMSSQL и RefreshMSSQLContainer;
- обновляется в ask_ret поле cell_name и zone_letter из соотв. command_gas, если они не равны полям cell_name и zone_letter в ask_ret
- вызывается стандартный алгоритм обновления container_placement
- если у соотв. command_gas state=2, то делаем update соотв. ask_ret state:=2
- если у соотв. command_gas state=5, то делаем update соотв. ask_ret state:=5
Типичные цепочки проверки возврата
Добавлено: 03 дек 2019, 17:16
tanya
- Сканер сканирует штрих-код, но при попытке дать команду Container.Return возникает Raise - вывести текст ошибки в соотв. лог, издать звуковой сигнал ошибки
- Сканер сканирует штрих-код, и команда Container.Return проходит ок
- должна создастся запись ask_ret
- в первые секунды после подачи команды:
- должны означиться поля соотв. mssql таблицы ask_ret: CELL_NAME и ZONE_LETTER
- должны обновиться поля записи CONTAINER_PLACEMENT (по стандартной процедуре обновления container_placement).
- по ходу движения контейнера должны менятся поля в соотв. mssql таблице CONTAINER_PLACEMENT по стандатрной процедуре обновления записи в mssql.container_placement (штрих-код контейнера у нас прописан в ask_ret) вплоть до достижения контейнером места постоянного хранения.
Протоколирование возврата
Добавлено: 03 дек 2019, 17:16
tanya
Все логи по возврату товара будут сопровождаться префиксом «v». Например в файле mssql_log.txt:
«15:11:55.953 v BOX 00010234 - Adding ask_ret id=3465»
«16:10:27.171 v BOX 00010324 - updating ask_ret.id 123: cell_name=001L175»
«16:10:27.203 v BOX 00010324 - updating ask_ret.id 123: zone_letter=B»
«16:12:09.484 v BOX 00010324 - updating ask_ret.id 123: status=5»
В файле oracle_log.txt:
«16:10:21.859 v BOX 00010324 - sending Container.Return…»
«16:10:23.156 v BOX 00010324 - Container.Return sent successfully»
«16:10:23.375 v BOX 00010324 - updating ask_ret.id 123: status=1, ask_id=2»
«16:12:09.453 v BOX 00010324 - COMMAND_GAS.STATE=5»
Стандартный алгоритм обновления mssql таблицы container_placement
Добавлено: 03 дек 2019, 17:30
tanya
Во многих местах цикла таймера необходимо обновить записи в mssql таблице container_placement (местоположение контейнеров). Это нужно чтобы заказчик имел реальное состояние склада на текущий момент. Основные поля для обновления:
- container_barcode - штрих-код контейнера (уникальное поле)
- container_rp_id - склад, где находится контейнер. Если пусто, значит находится за пределами склада.
- container_cell_name - ячейка, где лежит контейнер. Если пусто, то либо на платформе робота, либо за пределами склада.
- good_desc_id - код товара. если пусто, то нет никакого товара, контейнер пустой
- quantity - кол-во товара в контейнере. если 0 или пусто, то нет никакого товара.
Как необходимо делать обновление этой таблицы? Прежде всего нужно знать штрих-код контейнера. Без него - никак. Затем:
- ищем запись в mssql таблице container_placement с полем container_barcode=заданный штрих-код.
- если не находим, то добавляем запись в container_placemnet с container_barcode=заданный штрих-код
- по известному штрих-коду контейнера ищем запись в Oracle таблице sarmat.container
- если запись не нашлась, то делаем update соотв. полей mssql таблицы container_placement (в случае, если хотя бы одно поле нуждается в обновлении):
- container_rp_id=Null,
- container_cell_name=Null,
- good_desc_id=Null,
- quantity=Null
- если запись нашлась, то делаем update соотв. полей mssql таблицы container_placement (в случае, если хотя бы одно поле нуждается в обновлении):
- если container.location=0 - за пределами склада
- container_rp_id:=Null
- container_cell_name=Null,
- если container.location=1 - в ячейках - по container.cell_id берем ячейку и:
- container_rp_id:=cell.repository_part_id
- container_cell_name=cell.sname
- если container.location=3 - на платформе робота - по container.robot_id берем склад и:
- container_rp_id:=robot.repository_part_id
- container_cell_name=Null
- в любом случае ищем соотв. container_content (зная container.id):
- если container_content по соотв. container.id не найден, то (в случае, если хотя бы одно поле нуждается в обновлении):
- good_desc_id=Null,
- quantity=Null
- если container_content по соотв. container.id найден, то (в случае, если хотя бы одно поле нуждается в обновлении):
- good_desc_id=container_content.good_desc_id
- quantity=container_content.quantity
Типичные цепочки проверки обновления
Добавлено: 03 дек 2019, 17:32
tanya
- Независимо от того, с какого места вызывается обновление container_placement, запись в лог должна производиться только если есть реальное изменения положение контейнера или его сотава (товар, кол-во) - сейчас есть подозрение что иногда начинает гнать в лог кучу тупых одинаковых записей.
- После выполнения команд приема/отбора/возврата проверить валидность информации о принятых/собранных/возвращенных контейнерах в mssql таблице container_placement (по штрих-коду контейнера) - что правильно заполнены все поля (сейчас иногда не все поля правильно заполняются).
Протоколирование обновления таблицы container_placement
Добавлено: 03 дек 2019, 17:33
tanya
Все логи, касающиеся обновления таблицы container_placement будут иметь префикс [#] сразу после времени, начинаться с BOX=NNNNN, и иметь детальную инфу что поменялось. Например,
«20:39:49.265 # BOX 00010324 container_rp_id=4 container_cell_name=004L012»
«20:29:49.765 # BOX 00010340 good_desc_id=23424234 quantity=34»
«20:29:49.765 # BOX 00010705 container_rp_id= container_cell_name=»
Независимо от того, с которого места было вызвано обновление этой таблицы