CLI подходит для проверки проекта, обмена с линиями и запуска операций из скрипта. Он обращается к тем же службам работы с данными, что API, но не отправляет HTTP-запросы. Запускать API и передавать его токен для обычной команды CLI не нужно.

Подготовить CLI

Нужен отдельный комплект CLI той же сборки LabelRedo 4.1. Если его нет в поставке, запросите его у поставщика.

Примеры ниже рассчитаны на каталог с файлом lable_redo_v4.Cli.dll и установленный .NET 8. Все пути, ID и номера условные. Обозначения <...> замените своими значениями; части в [...] необязательны. Квадратные и угловые скобки в команду не вводите.

Общий запуск:

dotnet lable_redo_v4.Cli.dll <command> [arguments]

Команда help показывает весь список. Флаги -h, --help и /? в любом месте включают общую справку. Это не отдельная справка по выбранной подкоманде.

Выбрать проект

catalog, codes, sync, arni, project-status и validate получают путь к проекту в аргументе. Для migrate-postgres нужны имена переменных со строками подключения.

Группа print читает активный проект из настроек API, например LABELREDO_API_PROJECT. Это настройки процесса CLI, которые могут отличаться от службы Windows или Linux. Перед печатью проверьте путь. Команда openapi использует те же настройки для адреса в схеме.

Фоновые задачи CLI выполняются в пределах одного вызова. После завершения процесс выводит результат и выходит; его Job нельзя опрашивать через отдельную службу API.

Проверить программу и проект

Команда Результат
info Версия, .NET, ОС, архитектура и возможности платформы
paths Каталоги программы, настроек и журналов; найденные внешние утилиты
validate <project-file> Проверка пути и формата проекта; не проверка соединения с БД
project-status <project-file> Настройка проекта и отдельная проверка доступности БД
openapi JSON-схема API в стандартный вывод, без запуска HTTP-службы
relocation-check Проверка, что файлы состояния находятся в каталоге профиля

Примеры чтения:

dotnet lable_redo_v4.Cli.dll validate ./project.sld
dotnet lable_redo_v4.Cli.dll project-status ./project.sld
dotnet lable_redo_v4.Cli.dll openapi

В project-status проверьте Valid и Database reachable отдельно. Код выхода 0 означает, что файл проекта признан допустимым; доступность базы он не доказывает. Проверка соединения с MySQL не поддерживается.

relocation-check создаёт тестовые файлы relocation-check.* в каталоге профиля и журналов. Команда также ищет старые файлы состояния в рабочем каталоге. Выход 2 означает, что они найдены; команда не удаляет их. Перед удалением старых файлов проверьте их назначение по инструкции о профиле и журналах.

Получить каталог

catalog <project-file> <labels|products|printers|orders|lines>

После общего префикса запуска укажите один ресурс. Например:

dotnet lable_redo_v4.Cli.dll catalog ./project.sld printers

Строки разделены табуляцией; порядок столбцов:

Ресурс Столбцы
labels ID, UUID, название, размер, признак использования
products ID, UUID, название, GTIN, признак использования
printers ID, название, модель, IP, точки/мм, режим печати
orders ID, UUID, название, номер задания, признак закрытия
lines ID записи, LineID, название, тип БД, состояние, ID текущего задания

CLI выводит весь список. Параметров пагинации и команды одного объекта по ID здесь нет; они доступны через API. Для проекта с MySQL доступны эти пять списков. Команды печати или изменения данных с MySQL не работают.

Проверить импорт файлов

import-coverage <file-or-directory> [--format json|markdown] [--output <path>]

Команда проверяет файлы .btw, .bas, .tspl и .prn. Каталог просматривается вместе с вложенными каталогами. По умолчанию отчёт JSON выводится в консоль; --format markdown меняет формат, --output сохраняет файл.

dotnet lable_redo_v4.Cli.dll import-coverage ./labels --format markdown --output ./coverage.md

В отчёте есть число полей, восстановленные и приблизительные координаты, неподдерживаемые команды и предупреждения. Команда не записывает макеты в проект. Для сохранения используйте API импорта. Полное восстановление объектов BarTender и изображений не гарантируется.

Печатать и создавать файл команд

До запуска проверьте активный проект в настройках CLI, ID принтера и ограничения печати. Обычные копии не заменяют уникальные коды маркировки. Для участия в общей очереди Windows/Linux настройте общий каталог блокировки.

print copies <label-id> <printer-id> <count> [product-id] [print-mode] [--transport tcp|arni-operation]
print gs1 <label-id> <printer-id> <product-id> <count> [order-id] [print-mode]
print file <label-id> <printer-id> <count> <format> [product-id] [order-id] [gs1-code-id]

print-mode и format принимают text или graph. ID и количество положительные. Для принтера, который спрашивает формат в GUI, задайте его явно.

У copies режим находится после product-id: чтобы указать режим, заполните и эту позицию. --transport разрешён только у copies, один раз и последней парой. Без него используется TCP. Для arni-operation нужны привязанный ARNI с числовым IP, графический формат, скорость и плотность проекта 0, количество 1–32 767.

У gs1 один необязательный аргумент может быть ID задания order-id либо строкой формата. Если передаёте оба, сначала идёт ID задания, затем формат. При неопределённой отправке резерв кодов остаётся; не повторяйте команду автоматически.

В команде file необязательные ID указываются по порядку: product-id, order-id, gs1-code-id. Чтобы передать order-id, сначала укажите product-id; для gs1-code-id нужны оба предыдущих значения. Пропустить позицию с помощью - или null в группе print нельзя. Если промежуточное значение не нужно, используйте API: там поля задаются по имени.

print file не печатает и не создаёт файл на диске автоматически. Результат выводится строками fileName, contentType, contentBase64, bytes и format. Декодируйте Base64, чтобы получить файл команд. gs1-code-id только подставляет код, не резервирует и не расходует его.

Проверяйте State и ErrorCode, даже если процесс вернул 0. У TCP copies, gs1 и file этот код может означать успешное принятие команды, которая затем завершилась Failed. Для copies --transport arni-operation неуспешный конечный результат даёт 2.

Читать, загружать и удалять коды

codes statistics <project-file> [gtin] [order-id]
codes import <project-file> <individual|box> <codes-file> [product-id|-] [order-id|-] [code-life-days]
codes delete <project-file> <all|used>
codes delete <project-file> <product|order> <id>

statistics выводит Available и Used, а также применённые фильтры. Для фильтра по заданию без GTIN передайте пустой строковый аргумент "" в позиции GTIN. Для необязательных ID в группе codes допускаются - и null; это правило не относится к GTIN.

При импорте файл должен содержать строки GS1; пустые строки пропускаются. Это не загрузчик CSV с произвольными колонками. Проверка дублей выполняется всегда и может удалить старые неиспользованные дубли из всей базы.

individual означает коды изделий, box — коробов. code-life-days — срок от загрузки в днях: неотрицательное число, по умолчанию 0, без ограничения. Чтобы задать срок без товара и задания, используйте заменители. Пример с условным путём и сроком:

dotnet lable_redo_v4.Cli.dll codes import ./project.sld individual ./codes.txt - - 30

До delete проверьте проект и область удаления: подтверждения не будет. all удаляет все коды, used — использованные, product и order ограничивают удаление одним внутренним ID. Сочетания used с фильтром товара или задания в CLI нет; API удаления его поддерживает.

После импорта или удаления CLI показывает итоговое состояние задачи и количество изменённых строк. Проверьте State, а при ошибке — ErrorCode и Message. Выход 0 здесь означает Succeeded; при другом конечном состоянии будет 2.

Обменяться данными с линией

До запуска проверьте исходную и целевую базы, последствия синхронизации. В позиции line-id нужен LineID из каталога линий. Для заданий передаются номера, а не внутренние ID.

sync upload <project-file> <line-id> <order-number> [order-number...]
sync download <project-file> <line-id> <order-number> [order-number...] [--replace-existing]
sync staff <project-file> <line-id>
sync references <project-file> <line-id> [--include-fonts]

upload передаёт параметры открытых, не выполняемых заданий; коды маркировки вместе с ними не отправляются. download получает результаты и по умолчанию не перезаписывает существующие. Если замена нужна, сначала сохраните локальные результаты и только затем добавьте --replace-existing. У upload этот флаг недопустим.

staff поддерживает SQLite/PostgreSQL → PostgreSQL. Если в исходной базе нет пользователей для передачи, команда удалит пользователей выбранной линии из целевой базы. references поддерживает только PostgreSQL → PostgreSQL и не передаёт шрифты: с флагом --include-fonts команда завершится ошибкой.

Проверьте State, ErrorCode и счётчики в ответе. При успехе код выхода — 0, при ошибке — 2. Если неизвестно, сохранились ли изменения, или не удалось освободить линию, не повторяйте обмен автоматически. Перед повтором проверьте данные в обеих базах и состояние линии.

Проверить и настроить ARNI

Используются те же привязка и ограничения ARNI, что у API. printer-id — ID принтера проекта. Подкоманды вводите строчными буквами.

arni <project-file> <printer-id> info
arni <project-file> <printer-id> status
arni <project-file> <printer-id> config
arni <project-file> <printer-id> queue
arni <project-file> <printer-id> jobs
arni <project-file> <printer-id> job <latest|Rsequence>
arni <project-file> <printer-id> diagnostics <kind>
arni <project-file> <printer-id> probe
arni <project-file> <printer-id> bind --device-id <observed-id>
arni <project-file> <printer-id> unbind
arni <project-file> <printer-id> pause
arni <project-file> <printer-id> resume
arni <project-file> <printer-id> apply-config <typed-json-patch>
arni <project-file> <printer-id> clear-queue --confirm-clear

info читает сведения о принтере и привязке, status — состояние устройства, config — сетевые параметры. queue и jobs используют пределы 25 и 16 записей; аргументов limit или offset в CLI нет. job принимает latest либо R и ненулевой номер UInt32. История не доказывает число отпечатков.

diagnostics принимает render-last, parser, ethernet, datamatrix, tph-health, latency, service или error-journal. Возвращаются только вид, версия схемы и доступность.

Перед bind выполните probe и сверьте observed-id. Команда bind сама получает projectRevision и повторно проверяет переданный ID устройства. unbind удаляет локальную привязку, не меняя принтер.

apply-config получает один аргумент с JSON; заключите его в кавычки по правилам своей оболочки. Поля и диапазоны перечислены в таблице параметров ARNI. Ограничения — 4 КиБ, 16 уровней, без неизвестных и повторяющихся полей.

Перед clear-queue согласуйте остановку с другими пользователями: команда отменяет задания на печать. Без --confirm-clear она не выполняется.

Команды ARNI выводят JSON. Ответы на запросы чтения идут в стандартный вывод, ошибки этих запросов — в стандартный поток ошибок. JSON с итоговым состоянием задачи поступает в стандартный вывод даже при Failed; проверяйте состояние в ответе.

Перенести базу в PostgreSQL

migrate-postgres <SQLITE|MSSQL|MYSQL|PGSQL> <source-connection-env> <postgres-connection-env>

Перед запуском остановите запись в источник и создайте пустую целевую базу. Аргументы — имена переменных окружения со строками подключения. Подготовка, ограничения и проверка результата описаны в инструкции по переносу базы.

Проверить код выхода

Код Значение
0 Команда завершена; у TCP print и project-status дополнительно проверьте содержимое ответа
1 Неверные аргументы или входной файл; прочитайте сообщение и синтаксис
2 Ошибка проверки или операции; для relocation-check найдены файлы состояния в рабочем каталоге
3 У команды ARNI результат не подтверждён; проверьте устройство до повтора
130 Обработанная отмена Ctrl+C

Отмена после возможной отправки не доказывает, что принтер ничего не сделал. В скрипте проверяйте и код процесса, и результат нужной операции. Нет общего параметра JSON для всех команд: каталог выводит табличные строки, ARNI — JSON, остальные команды — свой текстовый результат.