Страница 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
  1. Сканер сканирует штрих-код, но при попытке дать команду Container.Return возникает Raise - вывести текст ошибки в соотв. лог, издать звуковой сигнал ошибки
  2. Сканер сканирует штрих-код, и команда 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=»

Независимо от того, с которого места было вызвано обновление этой таблицы