КодКипер руководство пользователя
В склад
Содержание
01

КодКипер — склад кодов маркировки

«КодКипер» хранит коды «Честного знака», которые вы закупаете помногу, и отдаёт их в печать по мере надобности.

Загруженный файл становится партией, а каждая его строка — кодом со статусом «Создан»: код лежит на складе, и его можно выдать.

Когда коды нужны на линию, вы делаете выгрузку: указываете артикул и количество, а в ответ получаете файл для принтера. Выданные коды переходят в статус «Выведен».

Испорченный при печати код списывают — он получает статус «Списан» и перестаёт считаться доступным. Ошибочную выгрузку отменяют целиком, и коды возвращаются в остаток.

Печатать этикетки можно здесь же: раздел «Этикетки» собирает шаблон в миллиметрах, а печать открывается из карточки выгрузки — по одной этикетке на выданный код. Отдельная программа для принтера не нужна: печатает браузер.

Экран «Обзор»: слева меню разделов, в центре остатки по артикулам, ниже график движения кодов за 30 дней и последние события.
«Обзор» — первое, что видно после входа: сколько кодов доступно, что уходило со склада последние 30 дней и какие артикулы подходят к концу.

Три статуса кода

СтатусЧто значитКогда появляется
СозданКод лежит на складе и доступен для выгрузкиСразу после загрузки файла
ВыведенКод выдан в печать и закреплён за выгрузкойПосле выгрузки
СписанКод испорчен и из остатка убран, но из базы не удалёнПосле списания с указанием причины

Безвозвратно коды удаляет только откат партии, и он запрещён, если из партии уже что-то выдали. Списание, возврат в оборот и отмена выгрузки обратимы.

02

Первый вход, пароль и роли

Организация заводится регистрацией на сайте: «Цены» → «Попробовать 14 дней» → форма. Тот, кто её заполнил, становится владельцем: организация, учётная запись и пробный период создаются одним шагом, второго входа не требуется. Остальных сотрудников владелец и администраторы приглашают из «Настройки → Пользователи» — приглашение приходит письмом, человек открывает ссылку и придумывает себе пароль сам.

Одна учётная запись может работать в нескольких организациях: роль принадлежит паре «человек и организация», а не человеку. Если организаций больше одной, после входа открывается их список, а переключатель живёт в меню учётной записи справа вверху.

Форма входа: поля «Логин» и «Пароль», кнопка «Войти».
Форма входа. У поля пароля есть кнопка «Показать пароль» — на случай, когда пароль продиктовали вслух.

При неверном логине или пароле экран отвечает одинаково — «Неверный логин или пароль». Это сделано намеренно: по ответу нельзя понять, существует ли такая учётная запись. После 10 неудачных попыток за минуту с одного адреса вход временно блокируется, и в сообщении будет указано, через сколько секунд можно повторить. Есть и второй предел — 30 неудачных попыток по одному логину за 15 минут.

Вход через Яндекс ID и VK ID

Под формой входа есть кнопки «Войти через Яндекс» и «Войти через VK» — но только если установка их настроила: ненастроенный провайдер не рисует кнопку вовсе. Тем же способом можно и зарегистрироваться, и принять приглашение.

Два правила стоит знать заранее. Учётная запись, заведённая через провайдера, пароля не имеет: входить в неё нужно той же кнопкой, а поле пароля для неё не сработает никогда. И наоборот — вход через провайдера сам собой не привязывается к учётной записи с тем же адресом почты: совпадение адреса это не подтверждение личности, и такой вход отклоняется с просьбой войти паролем.

Второй фактор

Код из приложения-аутентификатора (Google Authenticator, Яндекс Ключ, 1Password и любое другое) включается на вкладке «Настройки → Безопасность» и только себе: потребовать его со всей организации нельзя. После включения пароль перестаёт быть входом сам по себе — за ним спрашивается шестизначный код.

Там же выписываются резервные коды — их печатают или кладут в менеджер паролей. Они и есть путь назад, если телефон потерян: каждый работает один раз. Если потеряны и телефон, и коды, второй фактор снимает администратор организации на вкладке «Пользователи»; он откажет, только если этот человек работает ещё и в другой организации, — тогда останется обратиться к тому, кто обслуживает сервер.

Смена пароля второй фактор не снимает, и сброс пароля администратором — тоже.

Смена пароля

Свой пароль меняет сам пользователь: значок учётной записи в правом верхнем углу → «Сменить пароль». Нужен текущий пароль, новый — не короче 6 символов, не совпадающий с текущим и повторённый в поле «Новый пароль ещё раз». Других требований к паролю нет.

Окно «Смена пароля» с полями «Текущий пароль», «Новый пароль» и «Новый пароль ещё раз».
После смены пароля все остальные сеансы этого пользователя закрываются — на других устройствах придётся войти заново.

Четыре роли

Роли строго старшинствуют: наблюдатель < оператор < администратор < владелец. Каждая следующая умеет всё, что умеет предыдущая, и сверх того своё. Владелец в организации ровно один.

ДействиеНаблюдательОператорАдминистраторВладелец
Просмотр остатков, кодов, партий, выгрузок и журналадададада
Выгрузка файлов: коды, экспорт реестра, журнал в CSVнетдадада
Загрузка, выгрузка, списание, возврат в оборотнетдадада
Правка артикулов, порога остатка, архивнетдадада
Отмена выгрузкинетдадада
Откат партиинетнетдада
Пользователи, приглашения и API-токенынетнетдада
Умолчания выгрузки, резервная копия и обслуживание базынетнетдада
Тариф, оплата и передача организациинетнетнетда
Наблюдатель видит журнал целиком, но не скачивает ничего Разделение не косметическое: экспорт реестра с пустым фильтром отдаёт все коды организации одним файлом. Роль «только посмотреть» такого делать не должна, иначе она перестаёт быть тем, чем её выдавали.
Разделы меню одинаковы для всех ролей Оператор тоже видит «Журнал», «Настройки» и «API», но распоряжаться там нечем.
  • «Пользователи» — таблица скрыта, вместо неё строка о том, что учётные записи заводит администратор; сменить свой пароль и включить себе второй фактор может каждый.
  • экран «API» — панель токенов не показывается вовсе, открывается сразу справочник;
  • «Экспорт» — переключатель формата, флажок BOM и выбор часового пояса видны, но выключены, а внизу написано «Менять умолчания может администратор».
  • «База данных» — вкладка открывается целиком на чтение: размер базы, журнал WAL, свободное место внутри файла базы и счётчики строк видны. Нет только двух кнопок и пути к файлу базы, вместо них строка «Резервную копию и обслуживание базы выполняет администратор».
Так же выключена и подписана причиной кнопка «Откатить партию» на карточке партии.
03

Загрузка кодов

Главная операция приёмки: файл от «Честного знака» превращается в партию, а строки — в коды со статусом «Создан».

Как устроен код маркировки

Код лёгкой промышленности состоит из четырёх частей. Каждая начинается со своего двузначного номера — это номера полей стандарта GS1, по ним и разбирается строка.

0104620439375515 215LOoCvTNLXdqf GS 91EE12 GS 92M+gw6Q1LKyBtH+CGbIWuUfvsBIpPA7MKWBjXlLPrpc4=
  • 01 — GTINКод товара, ровно 14 цифр
  • 21 — серийный номерОт 1 до 20 любых печатных символов
  • 91 — ключ проверкиРовно 4 символа
  • 92 — код проверкиРовно 44 символа
  • GS — разделительБайт 0x1D между частями

Пример показывает код в том виде, в каком его выдаёт «Честный знак».

Так же разбираются ещё две товарные группы. У табака после серийного номера (он там всегда ровно 7 символов) идёт поле 8005 — максимальная розничная цена, шесть цифр в копейках, — и поле 93, код проверки из четырёх символов; разделителей два, как и у лёгкой промышленности. У молочной продукции после серийного номера сразу идёт поле 93, и разделитель в коде всего один. Тот же вид кода имеют упакованная вода, пиво и альтернативный табак: по самой строке они не различаются никак, поэтому «КодКипер» честно называет группу «молочная продукция, вода и пиво» и не выдумывает, какая из них перед ним.

Строки остальных товарных групп — обувь, шины, лекарства и прочие — на поля не разбираются: их можно сохранить как есть, включив флажок «Загружать строки с нестандартным форматом».

Зачем нужен разделитель и почему он ломается

Серийный номер имеет переменную длину — от 1 до 20 символов. Именно поэтому после него стоит разделитель: без него нельзя понять, где серийный номер закончился и началось поле 91. Разделитель — это невидимый служебный байт (в технической записи 0x1D): на экране и на бумаге он ничего не рисует.

Именно из-за невидимости разделитель и теряется. Пока файл идёт от «Честного знака» через почту, Excel, экспорт из чужой системы и обратно, разделитель может остаться на месте, превратиться в текст, подмениться знаком вопроса или пропасть совсем. Переключите вкладки — увидите, как одна и та же строка выглядит в каждом случае и что «КодКипер» с ней сделает.

Строка в файле
Что покажет предпросмотр
Что попадёт в базу

Восстановление меняет байты Если разделителей в файле не было или они пришли повреждёнными, «КодКипер» восстанавливает их по структуре кода и сохраняет код с настоящим байтом 0x1D. Это значит, что сохранённый код отличается от строки в исходном файле. Так и нужно: печатающему ПО требуется именно 0x1D. Экран предупреждает об этом прямо в предпросмотре, до загрузки.

Восстановление работает потому, что длины полей 91 и 92 известны заранее: строка разбирается с конца, а всё, что осталось слева, — серийный номер.

Если разделить строку однозначно не выходит, «КодКипер» не угадывает: строка попадает в отчёт с пометкой «Неоднозначный разделитель: не удалось определить границу серийного номера».

Экран загрузки

Раздел «Загрузка» в левом меню. Форма слева, предпросмотр справа — он обновляется сразу.

Форма загрузки: выбор режима «в один артикул» или «разложить по GTIN», поле «Артикул», область перетаскивания файлов, поле «Комментарий», два флажка и кнопка «Загрузить коды».
Форма загрузки. Наведите курсор на шаг ниже — на снимке подсветится нужное место.
Открытый список артикулов: у каждого показан код, название и доступный остаток справа.
Список артикулов сразу показывает остаток по каждому — видно, куда коды нужнее. Список работает с клавиатуры: , Enter, Esc.

Куда лягут коды: два режима

Первое, о чём спрашивает форма, — куда класть коды. Ответа два, и переключаются они парой кружков в самом верху. Оба названы вслух, а не спрятаны за одним переключателем: это единственный выбор на экране загрузки, который потом нельзя отменить, — код, положенный не в тот артикул, «КодКипер» не удаляет никогда.

РежимКак выбирается артикул
«Загрузить в один выбранный артикул»Все строки файла лягут в артикул, который вы укажете в поле ниже. Так было всегда, это значение по умолчанию, и менять его без причины не нужно
«Разложить по артикулам автоматически, по GTIN»Артикул не выбирается: его называет GTIN каждой строки — по справочнику «GTIN → артикул». Поле «Артикул» при этом с формы снимается

Второй режим — это маршрутизация по GTIN; так он назван и в сообщениях программы. Работает он только по заполненному справочнику: GTIN должен быть закреплён за артикулом заранее — на карточке артикула, в окне «Новый артикул» или колонкой «GTIN» при импорте справочника (раздел «Артикулы»). На пустом справочнике этот режим не разложит ничего и честно вернёт список номеров, которых он не знает.

Партий у такого файла столько, сколько разных артикулов он назвал. Обычно это одна: «Честный знак» выдаёт коды на GTIN, а GTIN — это товар, поэтому обычный файл однороден и маршрутизация даёт ровно ту же партию, какую дал бы выбор артикула руками. Смешанный файл разойдётся по нескольким, и тогда:

  • партия заводится на своей первой строке, а не заранее, — пустых партий не появляется;
  • «Строк в файле» у такой партии — строки, легшие в неё, а не длина всего файла: повтори «КодКипер» длину файла у каждой из трёх партий, колонка «строк» перестала бы складываться хоть во что-нибудь;
  • номера строк остаются номерами файла. Внутри партии они поэтому идут с пропусками — 1, 3, 5 у одного артикула и 2, 4, 6 у другого, — и это правильный ответ: по такому номеру строка находится в исходном файле, который лежит у вас на диске;
  • скачивание партии отдаёт её строки в порядке файла — своё подмножество, байт в байт;
  • все партии одного файла записываются одной транзакцией: сбой на последней строке не оставит ни одной.

Строка, которой артикул не нашёлся, не сохраняется, и отчёт называет её причину. Причин ровно три: GTIN не закреплён ни за одним артикулом; закреплён за артикулом, который убран в архив (архив — это «такого товара у нас нет»); строку не разобрал ни один шаблон. Флажок «Загружать строки с нестандартным форматом» в этом режиме погашен, и подпись под ним говорит почему: у строки вне шаблона нет GTIN, а значит, и артикула, в который её положить.

Маршрутизация никогда не заводит артикул Артикул с кодом из четырнадцати цифр — это запись, которую потом нельзя ни удалить, ни объяснить. Поэтому незнакомый GTIN возвращается списком, а завести по нему артикул — отдельное решение и один щелчок: ссылка «Завести артикул с этим GTIN» стоит прямо в отчёте о загрузке и открывает окно с уже подставленным номером.

Справочник GTIN проверяет и ручной выбор

В первом режиме справочник тоже работает — не как выбор, а как проверка. Если хотя бы одна строка файла несёт GTIN, закреплённый за другим артикулом, загрузка отклоняется целиком, с номером строки и именами обоих артикулов:

Код в строке 1 несёт GTIN 04620439375515, и этот GTIN закреплён
за артикулом «ФТБ-40» — а коды загружаются в «ФТБ-42».
Ни одна строка не записана.

Это самая дорогая ошибка загрузки и единственная, которой не видно в самом файле: коды правильные, не дубликаты, они просто лягут не туда. С этой минуты остаток обоих артикулов неверен, а выдача отдаёт коды одного товара под другой. Удалением это не чинится — только списанием целой партии, то есть записью об ошибке, а не исправлением.

Флажок «Загружать, даже если GTIN закреплён за другим артикулом» Он снимает эту проверку — на одну загрузку. Флажок не запоминается: при каждом открытии экрана он снят заново. Отметив его, вы соглашаетесь, что коды лягут в выбранный артикул навсегда: остаток обоих станет неверным, и удалить их будет уже нечем. Чаще всего правильный ответ другой — закрыть окно и проверить, тот ли файл выбран.

Снятая проверка не остаётся тайной. Если она действительно что-то пропустила, это записано в трёх местах: в отчёте о загрузке — сразу, списком «GTIN, артикул-владелец, сколько строк»; на карточке партии — значком «Мимо справочника GTIN» в заголовке и тем же списком, который открывается и через год; в журнале — отдельной записью «Загрузка мимо справочника GTIN», по которой такие загрузки находятся фильтром. Владелец в этих записях назван так, как его называл справочник в момент загрузки: справочник правится, а решение принималось против тогдашнего ответа. Отмеченный флажок на файле, где чужих GTIN не оказалось, не пишет ничего — отметка это про запрос, а запись про то, что попало на склад.

Запись экрана: выбор артикула, выбор файла на 100 000 строк и предпросмотр. Без звука, 16 с. Воспроизведение — по нажатию.

Что показывает предпросмотр

Файл разбирается прямо в браузере той же программой, что и на сервере. Ещё до отправки видно, сколько в файле строк, какой разделитель обнаружен, как выглядят первые коды и сколько строк не прошло проверку формата. Если что-то не так, файл можно убрать, не тронув базу.

Предпросмотр файла codes-question.csv: 100 000 строк, все распознаны, разделитель «Восстановлен», предупреждение о замене байтов и три первых кода с подсветкой частей.
Предпросмотр файла, в котором разделители пришли знаками вопроса. Наведите курсор на шаг ниже.
Предпросмотр исправного файла: 100 000 строк, разделитель «GS 0x1D», предупреждения нет.
Для сравнения — файл, в котором разделители целы: значок «GS 0x1D» и никакого предупреждения. Такой файл сохранится байт в байт.

Ещё две строки в предпросмотре стоит прочитать: «Дубликатов в файле» — сколько раз один и тот же код встречается внутри самого файла, и GTIN — какие GTIN оказались в файле. Если ожидали один GTIN, а их два, файл собрали неправильно.

Что происходит при нажатии

Загрузка идёт этапами, и каждый подписан. Файлы отправляются по одному, каждый в своей транзакции: сбой на третьем файле не отменит первые два, а внутри одного файла записываются либо все строки, либо ни одной.

  1. Разбор в браузереразбор 50 %
  2. Отправка на серверотправка 100 %
  3. Запись одной транзакциейимпорт на сервере
  4. Готовоимпортировано 1 200 кодов
Панель загрузки: файл codes-gs.csv на 8,3 МБ, полоса «Разбор файла в браузере» на 91 проценте.
Разбор файла на 100 000 строк в браузере. Это самый долгий этап, и он идёт до отправки — база в это время не затронута.

Отчёт о загрузке

После записи форма показывает отчёт по этому файлу. На числа «Импортировано», «Дубликаты» и «Не импортировано» можно нажать — раскроется список строк.

Отчёт о загрузке: импортировано 1 200, дубликаты 40, не импортировано 3, строк в файле 1 243, кнопки «Скачать отклонённые строки» и «Открыть партию».
Отчёт о загрузке: из 1 243 строк принято 1 200, 40 кодов уже были в базе, 3 строки не прошли проверку формата.

После маршрутизации по GTIN отчёт немного другой. Четвёртым числом вместо «Строк в файле» стоит «Без артикула» — сколько строк не сохранено, потому что их GTIN не закреплён ни за одним действующим артикулом. Если файл разошёлся по нескольким артикулам, под числами появляется таблица «Файл разложен по артикулам, по GTIN каждого кода»: строка на каждую партию — артикул, её номер, принято и дубликаты, — а ссылка «открыть коды» уступает место ссылкам в этой таблице, потому что реестр фильтруется по одной партии, а не по трём. Внизу карточки идёт список того, что не легло: GTIN, сколько строк, номер первой из них и что делать. Для незнакомого номера это ссылка «Завести артикул с этим GTIN», для архивного — ссылка на артикул, который надо вернуть из архива.

Поправив справочник, загрузите тот же файл ещё раз: уже записанные коды повторно не запишутся — они уйдут в дубликаты, — а недостающие лягут в свои артикулы. Файл, из которого не легло ни одной строки, отмечен не зелёной галочкой, а предупреждением «Ни одной партии»: это не успех, и выглядеть успехом он не должен.

Раскрытая таблица дубликатов: номер строки и сам код; правее в таблице — артикул и партия, которой код уже принадлежит.
Раскрытые дубликаты. Таблица прокручивается вправо — там видно, какому артикулу и какой партии код уже принадлежит.

Как исправить отклонённые строки

Кнопка «Скачать отклонённые строки» отдаёт файл, имя которого начинается с otklonennye-: для поставка-26-07.csv получится otklonennye-postavka-26-07.csv — кириллица переводится в латиницу.

Внутри — заголовок строка ошибка содержимое и по одной записи на отклонённую строку. Колонки разделены табуляцией: в серийном номере встречаются запятые, кавычки и точки с запятой, и обычный CSV разрушил бы код. Файл открывается в Excel и 1С без настройки.

Раскрытый список отклонённых строк: номер строки, причина и содержимое строки.
Раскрытый список отклонённых строк. Тот же состав попадает в скачиваемый файл, только целиком, а не первой сотней.
Причина в отчётеЧто произошлоЧто делать
«Не соответствует ни одному шаблону: 01/21/91/92, 01/21/8005/93, 01/21/93»Строка не подошла ни под один разбираемый шаблон: обрезана, склеена с соседней или относится к товарной группе, для которой шаблона пока нет (например, обувь или шины)Проверьте строку целиком. Если это товарная группа без шаблона — включите флажок нестандартного формата
«Серийный номер длиннее 20 символов»Между полями 21 и 91 оказалось больше 20 символов — обычно из-за склеенных строкРазбейте строку на две
«Неоднозначный разделитель: не удалось определить границу серийного номера»Разделителей нет, а на их месте стоит символ, который может быть и частью серийного номераЗапросите файл заново, с настоящими разделителями
Дубликат не ошибка Код уникален во всей базе, а не внутри артикула. Повторная загрузка того же файла ничего не испортит: все коды окажутся дубликатами, будут пропущены, и в базе останется по одному экземпляру каждого. Это безопасный способ убедиться, что файл дошёл целиком.

Ограничения

Размер файла
128 МБ на файл. Файл на 100 000 кодов весит около 8,3 МБ, так что предел достигается редко
Число строк
Не ограничено
Число файлов за раз
Не ограничено; каждый файл — отдельная партия, а разложенный по GTIN — по партии на каждый артикул, который он назвал
Формат
CSV или TXT, кодировка UTF-8, одна строка — один код. Заголовок не нужен
Комментарий
До 2 000 символов
04

Выгрузка кодов

Обратная операция: указать артикулы и количества, получить файл для печати и перевести выданные коды в статус «Выведен».

Строки выгрузки

Новая выгрузка создаётся в разделе «Выгрузка», а все ранее сделанные лежат в разделе «Выгрузки». Одна строка — один артикул и количество; строк можно добавить до 300. Под каждой строкой сразу видно, что получится. Длинный список не набирают руками — его вставляют целиком, см. «Импорт строк» ниже.

Строка выгрузки: артикул ФТБ-2х2-БЕЛ-40, количество 300, кнопка «Всё», кнопка удаления строки и подсказка об остатке.
Одна заполненная строка выгрузки.
Коды уходят в порядке поступления Первым всегда выдаётся самый старый код артикула — тот, что раньше попал в базу. Выбрать конкретные коды нельзя: так на складе не залёживаются старые коды.

Импорт строк: сто позиций одним движением

Сборка ФБС или ФБО — это список на сто с лишним позиций, который приходит выгрузкой из маркетплейса, столбцом из Excel или строками в письме. Набивать его по одной строке незачем: кнопка «Импорт строк» в шапке панели «Строки выгрузки» открывает окно, куда список вставляют целиком или приносят файлом — книгой Excel (.xlsx), CSV, TSV или TXT.

В книге читается первый видимый лист. Колонки «Артикул» и «Количество» находятся по шапке, даже если между ними стоят чужие («№», «Наименование», «Склад»), а сама шапка — не в первой строке. Если шапки нет, работает то же правило, что и для текста: количество справа, артикул слева, причём первая колонка с порядковыми номерами за артикул не принимается.

В тексте разделитель может быть любым: точка с запятой, табуляция, запятая или пробел. Количество — это последнее число строки, всё, что левее, — артикул, поэтому артикулы с пробелами и запятыми внутри читаются правильно. Шапка таблицы вроде «Артикул;Количество» распознаётся и пропускается. При явном разделителе пробел внутри числа считается разделителем разрядов, и 1 000 из Excel читается как тысяча.

Окно «Импорт строк выгрузки»: счётчики «Добавится строк», «Артикулов» и «Кодов», сообщение о ненайденном артикуле, сообщение о неразобранной строке и таблица разобранных строк с остатком по каждой.
Разбор показывается до того, как строки попадут в форму: сколько строк добавится, сколько это кодов и хватает ли остатка.
  • Артикул не найден на складе — строки с ним не добавятся, и он назван по имени. Артикул заводится загрузкой кодов, из этого окна создать его нельзя;
  • строка не разобрана — указан её номер в исходном тексте, сама строка и причина: нет количества, количество не число, ноль или слишком большое;
  • остаток по каждому артикулу спрашивается у сервера сразу при разборе, поэтому нехватка видна ещё в окне;
  • кнопка «Добавить N строк» дописывает разобранное к тому, что уже набрано, а «Заменить строки» — начисто. Повторяющиеся артикулы не сливаются: в форме они останутся отдельными строками, а количества сложатся при выгрузке.

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

Когда кодов не хватает

Нехватка видна до подтверждения — и в строке, и в итоге справа. Кнопка «Выгрузить …» выключается, пока не хватает хотя бы одного кода.

Две строки выгрузки, во второй предупреждение «Не хватает …» с указанием доступного остатка.
В строке прямо написано, сколько кодов не хватает и сколько есть.
Панель «Итог»: запрошено, доступно, будет выдано сейчас, не хватает; выключенная основная кнопка и кнопка «Выгрузить сколько есть».
В панели «Итог» — разбивка по артикулам и кнопка «Выгрузить сколько есть».

Формат файла — и почему нужен 0x1D

Перед подтверждением выбирается, как записать разделитель в файле. Выбор запоминается в этом браузере и в следующий раз подставится сам.

ВариантЧто в файлеКогда нужен
0x1DНастоящий байт-разделительПечать. Это значение по умолчанию, и менять его без причины не нужно
<GS>Четыре видимых символа <GS>Посмотреть файл в Excel или «Блокноте»
Без разделителейНичего между частямиСверка со сторонней системой. Для печати не подходит

Почему принтеру нужен именно байт. Программа печати кодирует строку в квадратный штрихкод DataMatrix как есть. Байт 0x1D она превращает в служебный разделитель внутри штрихкода — тот, по которому сканер и «Честный знак» отличают конец серийного номера от начала поля 91.

Если вместо байта в файле лежат четыре символа <GS>, они станут обычными знаками внутри серийного номера: код напечатается, но проверку не пройдёт. Поэтому <GS> годится только для просмотра человеком.

Панель «Параметры выгрузки»: номер заказа, комментарий, выбор формата файла и флажок «Добавить BOM».
Флажок «Добавить BOM» ставит в начало файла служебную метку кодировки. Для файла с кодами она не нужна: включайте её, только если принимающая система показывает вместо русских букв вопросы.

Номер заказа и комментарий

Оба поля необязательны, но номер заказа стоит заполнять: он попадает в список выгрузок, в карточку, в журнал и в имя файла. Для артикула ФТБ-2х2-БЕЛ-40 и заказа ОТГР-1142 файл сохранится как FTB-2h2-BEL-40_OTGR-1142.csv — кириллица переводится в латиницу, потому что имена файлов ходят через принтеры и чужие системы. Если артикулов несколько, вместо CSV придёт ZIP vygruzka_OTGR-1142.zip с отдельным файлом на каждый артикул.

Подтверждение

Окно подтверждения выгрузки: состав по артикулам, итог 300 кодов, формат файла, номер заказа и комментарий.
Окно повторяет состав целиком и напоминает, что выгрузку можно отменить. Это последний экран, на котором ещё ничего не произошло.

После подтверждения файл скачивается сам, а «КодКипер» открывает карточку выгрузки. Коды получают статус «Выведен» и закрепляются за этой выгрузкой — всё одной транзакцией, поэтому два человека, нажавшие кнопку одновременно, не получат одни и те же коды.

Последняя проверка по справочнику GTIN Перед записью «КодКипер» смотрит на те самые коды, которые сейчас уйдут, и сверяет их GTIN со справочником. Если хоть один из них закреплён за другим артикулом, выгрузка останавливается целиком — «Выгрузка остановлена: в „ФТБ-40“ 300 кодов с GTIN 04620439375522, а этот GTIN закреплён за артикулом „ФТБ-42“», — и ни один код статуса не меняет. Целиком, а не по строкам: файл, уехавший клиенту, назад не возвращается, и половина заказа хуже честного отказа. Чинится это на карточке артикула, в справочнике GTIN; байты кодов при этом не трогаются вовсе. Если выгрузить всё равно нужно, галочка «Выгрузить, несмотря на расхождение GTIN» в том же окне снимает отказ, а расхождение уходит в журнал вместе с выгрузкой — оно записано в самой её строке, а не спрятано.

Запись экрана: заполнение строки, номер заказа, подтверждение и карточка выгрузки. Без звука, 18 с.

Панель «Сведения» карточки выгрузки: дата, пользователь, номер заказа, количество кодов, формат при выгрузке и комментарий.
Карточка выгрузки хранит всё, что было указано при её создании, включая формат файла.

Скачать файл ещё раз

Панель «Файл выгрузки» с выбором формата и кнопкой «Скачать файл ещё раз».
Файл не хранится на диске — он собирается заново из тех же кодов в том же порядке, поэтому его можно скачать через месяц.

Формат при повторном скачивании выбирается заново и не обязан совпадать с исходным: один и тот же набор кодов можно получить и с байтом 0x1D для печати, и с текстовым <GS> для проверки глазами. Состав и порядок кодов при этом всегда одни и те же.

Отмена выгрузки

Если выгрузили не то или не столько, выгрузка отменяется целиком: кнопка «Отменить выгрузку» в шапке карточки.

Окно отмены выгрузки: сколько кодов вернётся, поле «Причина» и поле для ввода номера выгрузки.
Чтобы подтвердить, нужно вручную набрать номер выгрузки — число из заголовка карточки, например 13. Это не номер заказа: значение вида ОТГР-1142 для подтверждения не подойдёт. Причина необязательна и попадает в журнал.

После отмены коды возвращаются в статус «Создан» и снова становятся доступными. Сама выгрузка остаётся в списке с пометкой «Отменена», её состав и дата сохраняются, а вот файл собираться перестаёт: скачать его повторно уже нельзя. Ранее скачанный файл становится недействительным — коды из него снова числятся в остатке, и печатать их по этому файлу нельзя.

Карточка отменённой выгрузки: пометка «Отменена» и строка о том, что 300 кодов возвращены в статус «Создан».
Отменённая выгрузка остаётся видимой и подписана: сколько кодов и когда вернулось в остаток.
Список выгрузок: номер, номер заказа, количество кодов, артикулы, дата, пользователь и статус.
Список выгрузок фильтруется по артикулу, периоду и состоянию. Отменённые видно сразу.
Нужна не вся выгрузка, а часть Отмена работает только целиком. Чтобы вернуть в остаток отдельные коды, откройте «Реестр кодов» по ссылке из карточки, отметьте нужные строки и нажмите «Вернуть в оборот». Выгрузка при этом останется выполненной, а её файл станет короче.
05

Поиск кода

Три режима для трёх разных задач: разобраться с одним кодом, работать со сканером весь день и сверить список с личным кабинетом «Честного знака».

Вставленный код не нужно чистить. «КодКипер» приводит и запрос, и хранимые коды к одному виду — без разделителей вообще, — и сравнивает уже их. Поэтому все три записи одного кода ведут в одну карточку:

0104620439375515215LOoCvTNLXdqf<GS>91EE12<GS>92M+gw…pc4=   ← текстом
0104620439375515215LOoCvTNLXdqf␝91EE12␝92M+gw…pc4=          ← настоящий байт
0104620439375515215LOoCvTNLXdqf91EE1292M+gw…pc4=            ← вообще без разделителей

Карточка кода

Карточка найденного кода со статусом «Выведен», артикулом, датами, партией загрузки и выгрузкой.
Карточка отвечает на вопрос «откуда этот код взялся и что с ним стало».

Ниже карточки — «История кода»: загрузка в составе партии, выдача в выгрузке, списание, возврат. Каждая запись с датой и с относительным временем.

Окно «Списать код» с обязательным полем «Причина списания» и четырьмя готовыми причинами.
Причина обязательна: без неё кнопка не сработает. Четыре частые причины подставляются нажатием.

Если код не найден

Состояние «Код не найден» с двумя подсказками: проверить, что код скопирован целиком, и посмотреть партии загрузок.
Вместо пустого экрана — две подсказки: чаще всего дело в одном из двух.

Чаще всего код обрезан при копировании: в нём должны быть все четыре части. Вторая причина — файл с этим кодом не загружали или он попал в отклонённые строки; это видно в разделе «Партии». Если код был скопирован целиком, но в базе есть другие коды с тем же серийным номером, «КодКипер» предложит их показать.

Сканер

Режим для склада. Курсор сам возвращается в поле ввода — после каждого сканирования и после щелчка по любому другому месту экрана.

Режим сканера: крупный вердикт «Выведен» с артикулом и предупреждением, ниже счётчики сессии.
Вердикт набран крупно намеренно: его должно быть видно от стола с принтером.
Сканирование ничего не меняет в базе Это проверка, а не операция: статусы кодов остаются прежними. Сканер может присылать разделитель как угодно или не присылать вовсе — код найдётся в любом случае. Сканирование завершается клавишей Enter, которую сканер посылает сам.

Запись экрана: четыре сканирования подряд — выведенный код, доступный, списанный и отсутствующий в базе. Без звука, 17 с.

Массовая проверка

Для сверки с личным кабинетом «Честного знака». Вставьте список кодов или выберите файл — до 50 000 строк за раз. Список уходит на сервер частями по 2 000 строк, поэтому страница остаётся отзывчивой; рядом показан индикатор выполнения, и проверку можно остановить.

Результат массовой проверки: проверено 1, найдено 1, не найдено 0, фильтр по статусам и таблица со строкой, кодом, артикулом, статусом и датами.
Результат: сводка, фильтр по статусам (включая «Не найден») и таблица, в которой сохранён номер строки из вашего списка.

Кнопка «Экспорт CSV» сохраняет отфильтрованные строки — можно оставить только «Не найден» и сохранить именно их. В отчёте есть серийный номер, GTIN, артикул, статус, даты, партия и выгрузка; файл в UTF-8 с BOM и точкой с запятой, то есть открывается в Excel двойным щелчком.

06

Реестр кодов

Все коды в одной таблице, с фильтрами и групповыми действиями.

Панель фильтров реестра: поиск по коду, артикул, статус, партия, выгрузка, фильтр GTIN с вариантами «Любой», «У другого артикула» и «Нет в справочнике», период заведения и флажок «Только с ошибкой формата».
Фильтры записываются в адрес страницы, поэтому отобранные строки можно отправить коллеге ссылкой.
Таблица реестра: код, артикул, статус, дата заведения, дата вывода, партия и выгрузка.
Код в таблице сокращён посередине, чтобы были видны и начало, и конец; рядом кнопка копирования. Щелчок по коду открывает его карточку.

Таблица отсортирована от новых к старым и подгружается кнопкой «Показать ещё 100»; рядом всегда стоит точное общее число — например, «Показано 100 из 5 800 кодов». Фильтры «Партия» и «Выгрузка» загружают свои списки при первом открытии.

Отчёт по справочнику GTIN

Фильтр «GTIN» отвечает на два вопроса о справочнике, и отвечает по кодам, а не по артикулам, — поэтому он стоит здесь и складывается с остальными фильтрами: артикулом, партией, периодом. Найденное открывается построчно, каждая строка ведёт в карточку своего кода, а кнопка «Экспорт CSV» сохраняет всю находку целиком.

ЗначениеЧто показывает
«У другого артикула»Код лежит в одном артикуле, а его GTIN закреплён в справочнике за другим. Один из двух описан неверно — исправляется GTIN на карточке артикула
«Нет в справочнике»GTIN кода не закреплён ни за одним артикулом. Это не ошибка, а список незаполненного: пока номера нет в справочнике, маршрутизация по GTIN такие строки по артикулам не разложит

Два вопроса намеренно не сведены в один «проблемный GTIN»: первый — это расхождение, которое надо разобрать, второй — работа, которую ещё не сделали. И ни один из них ничего не прячет: отчёт только сужает реестр по свойству кода, а сами коды остаются на месте и байт в байт такими, какими пришли.

Групповые действия

Полоса групповых действий: выбрано 3 кода, кнопки «Списать», «Вернуть в оборот», «Экспорт выбранных».
Полоса появляется, как только отмечена хотя бы одна строка. Диапазон отмечается щелчком с Shift.
  • Списать — требует причину; она попадёт в журнал и в карточку каждого кода.
  • Вернуть в оборот — возвращает статус «Создан». Если среди отмеченных есть выведенные коды, придётся вручную набрать слово ВЕРНУТЬ: связь с выгрузкой снимается безвозвратно.
  • Экспорт выбранных — файл только из отмеченных кодов, до 20 000 кодов за раз.
Экспорт из реестра — файл кодов, а не таблица Несмотря на расширение .csv, внутри нет ни заголовка, ни колонок: одна строка — один код, ровно как в файле для печати. Это сделано, чтобы файл можно было отдать в печать напрямую. Табличные отчёты, которые открываются в Excel, дают «Массовая проверка», журнал сессии сканера и журнал действий.
07

Партии

Партия — это одна загрузка одного файла. Она навсегда хранит отчёт о том, как файл был принят.

Карточка партии: импортировано, дубликаты, строки с ошибкой формата, файл, артикул, разделитель, дата и комментарий.
Отчёт сохраняется целиком: имя файла, вид разделителя, комментарий и кто загружал.
Список партий: номер, артикул, файл, импортировано, дубликаты, ошибки, дата и пользователь.
Список партий. Откаченные помечены прямо у имени файла.

С карточки партии можно открыть все её коды, посмотреть, что с ними стало (сколько ещё в остатке, сколько выведено и списано), и скачать файл именно этой партии в любом из трёх форматов.

Откат партии

Откат — единственная операция во всём «КодКипере», которая удаляет коды из базы безвозвратно. Поэтому подтверждение здесь строже, чем у остальных операций.

Окно отката партии с требованием ввести количество удаляемых кодов.
Подтверждение — это количество удаляемых кодов, набранное вручную. Не слово, а число из сообщения.
Панель отката с выключенной кнопкой и причиной: из партии уже израсходованы коды.
Если из партии уже что-то выдали, кнопка выключена и подписана причиной.

Откат доступен, только пока все коды партии в статусе «Создан». Стоит одному коду уйти в выгрузку или в списание — откат запрещён целиком, частичного отката нет. Ещё три условия: откат делает администратор; повторно откатить уже откаченную партию нельзя; и откатывать нечего, если в базе не осталось ни одного кода партии — так бывает, когда весь файл оказался дубликатами. В этом случае кнопка подписана «Кодов этой партии в базе не осталось».

После отката коды удаляются, а запись о партии остаётся в списке с пометкой «Откачена»: отчёт о загрузке сохраняется, сам откат попадает в журнал. Вернуть удалённые коды можно только повторной загрузкой исходного файла — поэтому файл поставщика стоит хранить.

08

Артикулы

Артикул — товарная позиция, к которой привязаны коды. Чаще всего он появляется сам, при первой загрузке кодов: достаточно назвать его в форме загрузки. А кнопка «Новый артикул» вверху экрана заводит его руками — с кодом, названием и GTIN-ами сразу. Она нужна там, где кодов ещё нет: чтобы разложить файл по артикулам автоматически, GTIN должен быть закреплён в справочнике заранее. Из отчёта о такой загрузке ссылка «Завести артикул с этим GTIN» открывает это же окно с уже подставленным номером.

Список артикулов с названиями, остатками, выведенными и списанными кодами и порогом низкого остатка.
Название, описание и порог правятся прямо в таблице: щелчок по ячейке, Enter — сохранить, Esc — отменить.
Карточка артикула: доступно, выведено, списано, всего заведено, график движения за 90 дней и свойства — название, описание, порог низкого остатка и GTIN.
Карточка артикула: остатки, движение за 90 дней, его партии и выгрузки, а справа — свойства с порогом низкого остатка.

Порог низкого остатка

Порог — это остаток, при котором по артикулу пора докупать коды. Он ничего не запрещает: выгрузить коды ниже порога можно всегда. Порог только включает предупреждения, и появляются они здесь:

  • над любым экраном — плашка «Артикулов ниже порога: N» со ссылкой на список и кнопкой «Скрыть». Скрытая плашка не возвращается сама: она поднимется, только когда порог перейдёт следующий артикул;
  • на экране «Обзор» — отдельным числом с подписью «Артикул / Артикула / Артикулов ниже порога» (слово склоняется по числу) и списком таких артикулов;
  • в таблице остатков на экране «Обзор» — пометкой «ниже порога» рядом с числом;
  • в списке артикулов — цветом числа и строкой вида «4 артикула · ниже порога: 2» над таблицей;
  • в карточке артикула — значком «Ниже порога» рядом с названием.

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

И письмо. Раз в сутки на организацию уходит одно письмо со списком артикулов, которые до порога дошли; про один и тот же артикул чаще раза в неделю не напоминают. Кому оно уходит, задаётся в «Настройки → Уведомления»; наблюдателям не пишут никогда. Ссылка в письме открывает список артикулов, отфильтрованный по порогу.

На экране выгрузки предупреждения о пороге нет Там другая логика: «КодКипер» предупреждает только о том, что кодов физически не хватает на выгрузку. Следить за порогом нужно на экране «Обзор».

GTIN артикула

GTIN — код товара, те самые четырнадцать цифр в начале кода маркировки. Справочник «GTIN → артикул» связывает их с вашими артикулами, и на нём держатся три вещи: маршрутизация файла кодов по артикулам при загрузке, проверка «файл выбран не в тот артикул» и отчёт по расхождениям в реестре кодов. Пока справочник пуст, всё это просто не работает — ничего не ломается, но и не помогает.

Номера правятся полем «GTIN» на карточке артикула. Их может быть сколько угодно — пишутся через пробел или с новой строки, — но один GTIN принадлежит ровно одному артикулу: если номер уже закреплён за другим, карточка откажет и назовёт владельца. Под полем всё время видно, что именно сохранится: номер длиной 8, 12, 13 или 14 цифр приводится к четырнадцати дописыванием нулей слева. Это не починка, а его каноническая запись по GS1 — и заодно ответ на ведущий ноль, съеденный Excel-ем. Принимается и запись через пробелы или дефисы, ровно как номер напечатан под штрихкодом.

Нечитаемый обломок в поле не отбрасывается молча: пока в нём есть хоть один такой, не сохраняется ничего — иначе половина набора уехала бы в базу, а оператор узнал бы об этом, не найдя свой товар в выгрузке. Пустое поле снимает все номера артикула. Контрольная цифра не проверяется: «КодКипер» номер не судит, он только связывает его с артикулом.

Справочник файлом: экспорт и импорт

Названия и описания придумывают не на складе, а в прайсе или в карточке маркетплейса. Поэтому справочник ездит файлом. «Экспорт CSV» отдаёт все артикулы, включая архивные: артикул, название, описание, порог остатка, GTIN и справочные колонки с остатками. Файл — UTF-8 с BOM и точкой с запятой, Excel открывает его сразу.

Заполненный файл возвращают кнопкой «Импорт CSV» — и она принимает не только CSV, но и книгу Excel (.xlsx): сохранять таблицу обратно в CSV не нужно. Колонки ищутся по названиям в шапке, поэтому их можно менять местами и удалять лишние; сама шапка может стоять не в первой строке — над ней в выгрузке из чужой системы обычно заголовок отчёта. Нужна как минимум колонка «Артикул» и одна из изменяемых.

Числа и даты из книги читаются так, как их видно на экране Excel: порог остатка приходит числом, а ячейка с датой — датой, а не пятизначным числом, которым дата хранится внутри файла. Старый двоичный .xls и книги под паролем не читаются — окно прямо просит пересохранить их как .xlsx или CSV. Формат распознаётся по содержимому, поэтому книга, переименованная в .csv, тоже прочитается; CSV в кодировке Windows-1251 из складских программ — тоже.

Окно «Импорт справочника артикулов»: счётчики «Изменится» и «Без изменений» и таблица построчных изменений — артикул, поле, было, станет.
Сначала показывается, что именно изменится: артикул, поле, было и станет. До кнопки «Применить» в базе не меняется ничего.
  • выгружается всегда CSV — его можно не только открыть в Excel, но и вставить текстом; принимается и CSV, и книга Excel;
  • применяются только «Название», «Описание», «Порог остатка» и «GTIN»; остатки и признак архива — справочные, импорт их не трогает;
  • в колонке «GTIN» может стоять несколько штрихкодов через пробел; ведущий ноль, съеденный Excel-ем, и EAN-13 приводятся к четырнадцати цифрам сами — в том числе набранный так, как он напечатан под штрихкодом, через пробелы или дефисы. Один GTIN принадлежит ровно одному артикулу: если он уже закреплён за артикулом, которого этот файл не касается, окно откажет и назовёт владельца. А вот внутри одного файла штрихкоды можно менять местами: файл читается целиком, как конечное состояние справочника, поэтому обмен двумя ячейками — обычный способ исправить два GTIN-а, заведённых не на те артикулы;
  • пустая ячейка очищает поле, а колонка, которой в файле нет, не трогается вовсе — так можно залить файл всего из двух столбцов, «Артикул» и «Название». Для GTIN-ов это особенно важно: ячейка в файле — это ВЕСЬ набор артикула, и пустая снимает все. Ячейка со словом («нет», «уточнить») пустой не считается: такую строку окно покажет в пропущенных и GTIN-ы артикула не тронет;
  • если один артикул назван в файле дважды, в дело идёт первая его строка, а остальные окно перечислит среди пропущенных;
  • артикулы не переименовываются: код в строке — это ключ, по которому ищут, а не изменяемое поле;
  • артикулы не создаются, пока не поставлена галочка «Создавать отсутствующие артикулы». Без неё строки с неизвестным артикулом пропускаются и перечисляются в окне; с ней предпросмотр сначала показывает, сколько артикулов будет заведено и каких, и только потом «Применить» их заводит — с пустыми остатками, коды к ним загружаются отдельно;
  • повторный импорт того же файла не делает ничего — окно скажет «Менять нечего»;
  • в журнале операция отмечается одним событием «Импорт справочника артикулов» с составом правки, а не сотней отдельных.

Архив

Ненужный артикул убирают в архив. Коды, партии, выгрузки и история остаются на месте, но артикул исчезает из подсказок при загрузке и выгрузке, а также перестаёт учитываться в остатках на экране «Обзор». Вернуть его из архива можно в любой момент — действие обратимо, поэтому подтверждающее слово вводить не нужно.

09

Этикетки

Раздел «Этикетки» собирает шаблон этикетки и печатает его по кодам выгрузки. Печатает браузер через обычное окно печати: отдельная программа, драйверы и настройка принтера не нужны.

Экран «Этикетки»: таблица шаблонов с названием, размером, числом блоков, датой изменения и кнопкой «В архив».
Реестр шаблонов. Флажок «Показывать архив» поднимает убранные с глаз: печатать по ним нельзя, вернуть — можно.

Шаблон и блоки

Шаблон — это этикетка заданного размера, на которой расставлены блоки. Размер и координаты задаются в миллиметрах, поэтому напечатанная этикетка совпадает с макетом один в один — на любом экране и при любом масштабе. Кнопка «Новый шаблон» спрашивает название и размер: готовые размеры рулонов, от 30 × 20 до 100 × 100 мм, либо свой — от 10 до 210 мм по каждой стороне.

Новый шаблон заводится не пустым: в нём уже лежат три блока — код маркировки, артикул и серийный номер. Их можно двигать и удалять, но этикетка без DataMatrix — не этикетка, и окно создания говорит об этом прямо. Блоков на одной этикетке не больше сорока: они рисуются на каждой этикетке задания, и шаблон из сорока блоков на рулоне 58 × 40 мм уже нечитаем.

БлокЧто печатает
ТекстНадпись, набранную в шаблоне, — одну и ту же на всех этикетках
ПолеЗначение из артикула или из самого кода — своё на каждой этикетке
DataMatrixКод маркировки целиком, квадратным символом GS1 DataMatrix
ШтрихкодЛинейный штрихкод по GTIN артикула — EAN-13 или ITF-14, по виду номера
Линия, РамкаОформление: отчеркнуть подпись, обвести группу полей

Блок «Поле» подставляет артикул, его название или описание, а из самого кода — GTIN, серийный номер, шаблон кода, срок годности (обычный и с точностью до минут), максимальную розничную цену, массу нетто или объём. Значения печатаются в человеческом виде: срок годности — как 31.12.2026, а не шестью цифрами из кода. Поле, которого в этом коде нет, остаётся пустым — этикетка из-за него не ломается.

Конструктор

Конструктор этикетки: сверху панель шаблона с названием и размером, ниже слева список блоков, в центре холст с этикеткой и выбранным блоком DataMatrix, справа свойства блока.
Четыре панели: «Шаблон» — имя и размер, «Блоки» — что на этикетке лежит, «Этикетка» — холст, «Блок» — свойства выбранного.

Холст — не приближение. На нём лежит ровно тот рисунок, который уйдёт в принтер: его собирает тот же код и по тому же образцовому коду маркировки. Поэтому «влезает ли DataMatrix в блок» и «не налезла ли подпись на код» видно в конструкторе, а не на рулоне. Образец подбирается по тем полям, которые вы поставили на этикетку: положили «Срок годности» — образцом станет код с датой, положили «Массу нетто» — код весового товара. Настоящих кодов организации в предпросмотре нет.

Как двигают блоки. Мышью — с шагом 0,5 мм; за уголки и стороны выделенного блока его растягивают. Стрелки клавиатуры делают то же самое, встав на холст: шаг тот же, с Shift — 5 мм, с Alt стрелки не двигают, а растягивают. Блок, накрытый другим блоком, берётся щелчком с Alt. Точные миллиметры набираются числами в панели «Блок» — там же, где шесть кнопок «Выровнять по этикетке» прижимают блок к краю или ставят по середине, чтобы не считать (58 − ширина) / 2 на бумаге.

Свойства блока. «Вид блока» меняет вид уже поставленного блока и сохраняет при этом место, размер и поворот, а между текстовыми видами — ещё кегль, жирность и выравнивание: ошибиться в выпадающем списке при добавлении — обычное дело, и цена ошибки не должна равняться цене всего блока. Дальше — положение и размер в миллиметрах, поворот на 0°, 90°, 180° или 270° вокруг центра блока и содержимое: текст, подставляемое поле с приставкой («Годен до: »), кегль и начертание, вид штрихкода, толщина линии.

ДействиеКак
Отменить и вернуть правкуCtrl+Z и Ctrl+Shift+Z, либо кнопки «Отменить» и «Вернуть» в панели шаблона
Копия выбранного блокаCtrl+D — копия ложится со сдвигом на шаг сетки, чтобы её было видно
Выбрать блок под блокомЩелчок с Alt — или строка в списке слева
Посмотреть, влезут ли длинные значенияФлажок «Показать длинными значениями»: в образец подставляется название товара длиннее обычного
Увеличить холст«По размеру» или 1× … 6×. Ниже натуральной величины конструктор не опускается — уменьшенная этикетка врёт про читаемость кода

Под холстом стоит список «Что не напечатается»: каждая строка называет блок его человеческим именем и причину — «блок слишком мал для кода DataMatrix», «в коде нет GTIN — штрихкод строить не из чего», «не заполнено поле». Строка не только называет блок, но и доводит до него: щелчок по ней выделяет виноватого на холсте. Тот же значок стоит у строки блока в списке слева.

Правка не сохраняется сама: под панелью шаблона написано «Всё сохранено» или «Есть несохранённые изменения», и кнопка «Сохранить» — единственный способ вторую фразу убрать. Правят шаблоны администратор и владелец; печатать по ним может и оператор — это то же право, что и на выгрузку файла кодов. Ненужный шаблон убирают в архив, как артикул: он исчезает из выбора при печати, но не удаляется, и вернуть его можно в любой момент. Создание, правка, архив и каждая печать записываются в «Журнал».

Печать

Кнопка «Печать этикеток» стоит в карточке выгрузки. Страница печати показывает этикетки — по одной на каждый выданный код и в том же порядке, в каком коды легли в файл выгрузки: рулон сверяется с файлом построчно. Кнопка «Печать» открывает обычное окно печати браузера.

Страница печати этикеток: плашка «Выгрузка печатается по частям», сведения о задании — выгрузка, шаблон, число этикеток, раскладка, предел части, вид печати и переключатель частей — и сами этикетки ниже.
Шапка задания отвечает на все вопросы до нажатия «Печать»: что печатаем, по какому шаблону, сколько этикеток из скольких и какая это часть.

Вида печати два, и они переключаются прямо на странице. Рулон — страница равна этикетке, полей нет: вариант для принтера этикеток, размер страницы задаёт сам шаблон. Лист A4 — этикетки раскладываются сеткой с полями, и строка «Раскладка» называет её словами: сколько этикеток в ряд, сколько рядов и сколько выйдет листов. Если этикетка целиком не помещается в печатное поле листа, страница скажет об этом до печати.

Части

Выгрузка бывает в десятки тысяч кодов, а каждая этикетка несёт свой DataMatrix — рисунок из тысячи с лишним прямоугольников. Поэтому задание печатается частями: по умолчанию сто этикеток, не больше тысячи. Обрезка не подразумевается, а объявляется: «Напечатано 100 из 150: часть 1 из 2, коды с 1-го по 100-й», — и соседние части переключаются кнопками «Предыдущая» и «Следующая» тут же, на странице.

Часть — это не «нажать печать ещё раз» Номер части стоит в адресе задания и решает, какие коды в него попадут. Печать одной и той же части дважды даст одни и те же коды маркировки — то есть два набора коробок с одинаковыми кодами. Переходите к следующей части кнопкой, а не повторяйте задание.

Иногда часть уменьшается сама, и страница об этом говорит: «Часть уменьшена под шаблон». Считается не число этикеток, а число символов — DataMatrix и штрихкодов вместе, — и шаблон с десятком символов на этикетку упирается в потолок раньше, чем в сотню этикеток. Это честнее, чем принять задание и подвесить браузер.

В DataMatrix уходят хранимые байты кода В символ кодируется тот же код, что лежит в базе и уходит в файл выгрузки, — с настоящими разделителями 0x1D, без пересборки и «очистки». Отсканированная этикетка отвечает ровно тем, что хранит склад.
Про невозможное говорится вслух Блок, который нельзя напечатать честно, не рисуется «как получится» и не пропадает молча — плашка «Часть блоков не напечатается» называет причину и число этикеток, которых она касается: блок слишком мал для кода, в коде нет GTIN. Отдельный случай — GTIN с несходящейся контрольной цифрой: EAN-13 и ITF-14 по нему не строятся, потому что сканер пересчитает цифру и откажет уже на кассе. Для таких артикулов в свойствах блока выбирается Code 128 — он печатает четырнадцать цифр без требований к контрольной цифре.

Печатать можно только по выданному коду. У отменённой выгрузки коды вернулись в остаток и за ней больше не закреплены — страница печати это говорит и печатать не даёт.

Печать работает и тогда, когда подписка не оплачена и организация переведена в режим «только чтение»: выданные коды — ваши, и напечатать их можно всегда. Закрыта в этом режиме только правка шаблонов.

10

Журнал действий

Каждое изменение записано: кто, когда и что сделал.

Журнал действий, отфильтрованный по типу «Выгрузка кодов»: события сгруппированы по дням.
Журнал, отфильтрованный по одному типу действия. События сгруппированы по дням: «Сегодня», «Вчера», затем даты.

Записывается всё, что меняет данные:

  • партии — загрузка и откат, а отдельной строкой «Загрузка мимо справочника GTIN» — те загрузки, где оператор снял проверку «Загружать, даже если GTIN закреплён за другим артикулом». В ней названы номер, артикул-владелец по справочнику и сколько строк прошло; та же пометка стоит на карточке партии;
  • выгрузки — создание, отмена, повторное скачивание;
  • коды — списание и возврат в оборот;
  • артикулы — создание, правка, импорт справочника файлом и переход остатка через порог;
  • этикетки — создание и правка шаблона, архив и возврат из него, и каждая печать: сколько этикеток, по какому шаблону и какой части;
  • пользователи и токены;
  • настройки и резервная копия;
  • второй фактор и внешний вход — включение, снятие администратором, вход по резервному коду, привязка и отвязка провайдера;
  • входы в систему, включая неудачные.

Каждая строка — готовая русская фраза, а не машинный код события: Выгрузка №ОТГР-1142: 300 кодов («ФТБ-2х2-БЕЛ-40» — 300). Строки, у которых есть объект, ведут прямо на него.

Два фильтра — по пользователю и по типу действия — показывают рядом с каждым вариантом его количество, так что видно, чего в журнале много. Журнал видят все роли; скачать его в CSV может оператор и старше: точка с запятой, UTF-8 с BOM, до 20 000 строк по текущему фильтру. На экране показывается до 500 событий; чтобы увидеть остальные, скачайте журнал в CSV.

Глубина показа зависит от тарифа: более ранние записи сохранены и станут видны на старшем тарифе — это ограничение показа, а не удаления, и экран это проговаривает.

11

Настройки

Шесть вкладок: «Пользователи», «Безопасность», «Экспорт», «Уведомления», «База данных» и «Тариф». Последняя видна владельцу и только там, где включён биллинг, и разобрана отдельно — в разделе «Тариф и оплата». Токены и справочник API живут не здесь, а на своём экране «API» — см. «Интеграция по API».

Пользователи

Вкладка «Пользователи»: своя учётная запись, таблица пользователей с ролями, последним входом и действиями.
Свою учётную запись видит каждый; таблицей пользователей распоряжается администратор.

Администратор приглашает человека в организацию, меняет роль, сбрасывает пароль и отключает доступ. Приглашение уходит письмом на адрес; пароль приглашённый придумывает себе сам, открыв ссылку. Отключённый участник теряет доступ немедленно: его открытые сеансы закрываются. Данные и записи в журнале при этом остаются.

Самого себя нельзя ни отключить, ни лишить прав администратора, и нельзя убрать последнего администратора — «КодКипер» откажет с объяснением. Владелец в организации ровно один; передать эту роль может только он сам.

В строке участника есть и кнопка «Снять 2ФА» — для того, кто потерял и телефон, и резервные коды. Она откажет, если этот человек работает не только в этой организации: иначе администратор одной организации снимал бы защиту с владельца соседней, пригласив его к себе наблюдателем.

Безопасность

Вкладка про себя, а не про организацию: здесь включается второй фактор и выписываются резервные коды. Подробнее — в разделе «Первый вход, пароль и роли».

Если установка не настроена на хранение секретов второго фактора, вкладка прямо об этом говорит и включить фактор не даёт. Это не поломка: секрет второго фактора — единственные учётные данные, которые нельзя держать хешем, и хранить их открытым текстом «пока не настроим» продукт отказывается.

Экспорт

Вкладка «Экспорт»: выбор разделителя, флажок BOM, выбор часового пояса и текущее время в нём.
Панель «Умолчания выгрузки» на вкладке «Экспорт»: формат разделителя, BOM и часовой пояс.
У каждого сотрудника свой формат Экраны «Выгрузка» и «Реестр кодов» берут формат из настроек того браузера, в котором работают. Сохранённое здесь значение применяется к запросам API, в которых формат не указан. Кроме того, оно сразу становится текущим в том браузере, где администратор нажал «Сохранить». У остальных сотрудников формат останется прежним, пока они не поменяют его сами. По умолчанию везде 0x1D — тот, что нужен для печати.
Часовых поясов два Пояс из этой вкладки влияет на даты в экспорте журнала, на имена файлов резервных копий и на даты в таблицах — на вкладке «Пользователи» и на экране «API». Даты на экранах берутся из настройки сервера KODKEEPER_TZ; изменить её можно только при запуске сервера. Текущее значение показано на этой же вкладке.

Уведомления

Две панели. «Письма о низком остатке» — одно письмо в сутки со списком артикулов, у которых остаток дошёл до порога; порог задаётся у самого артикула. Единственная настройка — кому писать: «Владельцу и администраторам», «Всем, кроме наблюдателей» или «Не отправлять». Поля со свободным вводом адреса нет и не будет: получатели берутся из списка участников организации.

Выключенные письма ничего больше не выключают: плашка в приложении, отметка «ниже порога» в списке артикулов и записи в журнале продолжают работать.

«Исходящие» — список всех писем, которые приложение написало по этой организации: приглашения, подтверждение адреса, чеки, предупреждения об оплате и уведомления о низком остатке. По каждому видно вид письма, получателя, тему, время и чем закончилась доставка. Ссылки из писем здесь не показываются: каждая из них — одноразовые учётные данные, а вкладку видит любой сотрудник организации.

База данных

Вкладка «База данных»: размер базы, журнал WAL, свободное место внутри файла базы и таблица со счётчиками строк.
Размер базы, размер журнала предзаписи WAL — в него SQLite складывает свежие изменения до переноса в основной файл — и количество строк по таблицам.

Скачать резервную копию отдаёт целый файл базы вашей организации на момент запроса — с именем вида kodkeeper-sklad-nadezhda-2026-07-26_1620.db. Короткое имя организации стоит в имени файла затем, чтобы две копии, скачанные подряд из разных организаций, не перезаписали друг друга в папке «Загрузки». Копию можно снимать на работающей системе: она снимается штатным средством SQLite, которое делает согласованный снимок базы, и никаких дополнительных файлов рядом с ней не нужно.

«Оптимизировать» переносит журнал WAL в основной файл и обновляет внутреннюю статистику базы, по которой она выбирает способ поиска. Данные не меняются, подтверждения не требуется. Размер базы после этого обычно не уменьшается — операция ускоряет работу, а не освобождает место.

12

Тариф и оплата

Вкладка «Настройки → Тариф»: что оплачено, до какого числа, что входит в тариф и чем это кончится, если не заплатить. Вкладку видит только владелец — и только там, где установка вообще берёт деньги.

Вкладка «Тариф»: панель «Текущий тариф» с состоянием, ценой и датой окончания периода, ниже панель «Расход по лимитам» со столбиками использования.
«Текущий тариф» отвечает на три вопроса сразу: что оплачено, до какого числа и спишутся ли деньги сами.
Правило, из которого следует всё остальное Ни один код не удаляется и не прячется ни при каком состоянии подписки. Самое строгое, что бывает, — режим «только чтение»: смотреть, искать, скачивать файлы выгрузок и печатать этикетки можно всегда. Неоплата останавливает работу склада, но не отнимает то, что на нём лежит.

Пробный период

Организация начинает с 14 дней бесплатно и без платёжных данных: карту не спрашивают ни при регистрации, ни потом, пока вы сами не нажмёте «Оплатить». Пробный период — это полноценная работа с меньшими лимитами: 20 000 кодов в хранилище, двое участников, один API-токен. Оплатить его нельзя и не нужно — платят уже за выбранный тариф.

Что показывает вкладка

  • Текущий тариф — название, цена, состояние («Оплачено», «Пробный период», «Оплата не прошла», «Только чтение»…), дата конца оплаченного периода и сколько дней осталось. Тут же кнопка оплаты следующего периода и «Не продлевать»;
  • Расход по лимитам — сколько кодов в хранилище, сколько выгружено за период, сколько участников и токенов, предел файла загрузки, глубина журнала и частота запросов к API. Рядом с каждым — предел тарифа. Чтение, поиск и скачивание не ограничены никогда;
  • Способ оплаты — флажок «Списывать оплату автоматически». Пока он снят, каждый период оплачивается кнопкой: без вашего согласия деньги списаться не могут. Номер карты в «КодКипере» не хранится и не запрашивается — он вводится на стороне платёжного сервиса;
  • Тарифы — карточки с ценами и лимитами. У каждой две кнопки: «Перейти сейчас» ведёт прямо на оплату, «Перейти со следующего периода» только запоминает выбор. Денег не двигает ни выбор тарифа, ни его отмена — только оплата;
  • Платежи — последние двадцать попыток оплаты с их состоянием. Незавершённую строку можно закрыть самому: деньги по ней не списывались;
  • Документы — нумерованные записи об оплате с периодом и суммой, отдельной кнопкой выгружаются в CSV для бухгалтерии. Фискальный чек приходит от оператора фискальных данных и может появиться позже платежа — до тех пор в строке стоит «ожидается».
Пропорционального пересчёта нет, и об этом написано прямо в карточке Переход на старший тариф посреди периода оплачивается его полной ценой, а оплаченные дни прибавляются к новому периоду — не сгорают. Карточка тарифа показывает справочную разницу за остаток текущего периода, чтобы это решение принималось с числом перед глазами.

Если не заплатить

Лестница неплатежа проходится по датам, а не по посещениям: заходите вы в «КодКипер» или нет, состояние считается одинаково.

СостояниеКогдаЧто работает
ОплаченоПериод оплаченВсё
Оплата не прошлаПервая неделя после конца периодаВсё. Только плашка — склад продолжает отгружать, из этого он и заплатит
Загрузка приостановленаЕщё неделяВыгрузка работает. Заморожены загрузка кодов, правка артикулов, приглашения и новые токены — то, что растит объём
Только чтениеДальшеСмотреть, искать, скачивать файлы выгрузок и печатать этикетки. Ничего не удаляется

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

Отдельно стоит «По договору»: организация, которая платит по счёту, по лестнице не идёт никогда и платной стены не встречает. Тарифы ей не показываются — их меняет поставщик.

Оплата подтверждается не вкладкой браузера Если после оплаты вы закрыли вкладку раньше, чем платёжный сервис вернул вас обратно, платёж всё равно применится: «КодКипер» сверяется с кассой сам, по расписанию. Дважды платить не нужно, и двойной платёж, если он всё же случился, не перезаписывает период, а складывается с ним.
13

Интеграция по API

Раздел для разработчика 1С: три метода, токен в заголовке, JSON в ответе.

Токен создаётся на экране «API» — с 2026 года это отдельный пункт меню, а не вкладка настроек. Токен передаётся в каждом запросе заголовком Authorization: Bearer kodkeeper_…; cookie интерфейса для API не работают. Ограничение — 120 запросов в минуту на один токен, а там, где включены тарифы, предел берётся из тарифа. Действующее значение приходит в заголовке X-RateLimit-Limit, остаток — в X-RateLimit-Remaining. Ошибки — это JSON с русским текстом и машиночитаемым идентификатором ошибки.

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

Каждой внешней системе — свой токен, тогда его можно отозвать, не трогая остальные. Отзыв необратим и подтверждается вводом названия токена; отозванный токен сразу перестаёт работать, а его строка остаётся в списке с датой отзыва. Панель токенов показывается тому, кому доступно управление токенами, — администратору и владельцу; у остальных экран открывается сразу на справочнике.

Справочник API в настройках: пример curl с адресом сервера, ограничение частоты, формат ошибки и таблица общих ошибок.
Справочник API встроен в приложение и всегда соответствует установленной версии.
Где взять примеры с адресом сервера На экране «API» те же примеры показаны с настоящим адресом сервера и кнопкой копирования — их можно брать оттуда, не подставляя адрес сервера вручную.

Остатки по артикулам

curl -s "https://app.kodkeeper.ru/api/v1/stock" \
  -H "Authorization: Bearer kodkeeper_ВАШ_ТОКЕН"

Ответ — те же числа, что на «Обзоре»:

{
  "generatedAt": "2026-07-26T22:53:26.454Z",
  "totals": { "available": 7335, "issued": 5800, "writtenOff": 65, "total": 13200 },
  "items": [
    {
      "article": "ФТБ-2х2-БЕЛ-40",
      "name": "Футболка 2х2, белая, размер 40",
      "available": 4560,
      "issued": 2600,
      "writtenOff": 40,
      "total": 7200,
      "lowStockThreshold": 2000,
      "archived": false
    }
  ]
}

Один артикул запрашивается параметром article с его полным кодом.

Проверка одного кода

GET /api/v1/codes/{код}. Код подставляется в путь и, как и в интерфейсе, принимается в любом виде — с байтом 0x1D, с текстовым <GS> или вовсе без разделителей. Не забудьте URL-кодирование: в коде встречаются +, / и =.

curl -s "https://app.kodkeeper.ru/api/v1/codes/0104620439375515215LOoCvTNLXdqf91EE1292M%2Bgw6Q1LKyBtH%2BCGbIWuUfvsBIpPA7MKWBjXlLPrpc4%3D" \
  -H "Authorization: Bearer kodkeeper_ВАШ_ТОКЕН"
{
  "found": true,
  "code": {
    "normalized": "0104620439375515215LOoCvTNLXdqf91EE1292M+gw…pc4=",
    "canonical": "0104620439375515215LOoCvTNLXdqf\u001d91EE12\u001d92M+gw…pc4=",
    "gtin": "04620439375515",
    "serial": "5LOoCvTNLXdqf",
    "status": "issued",
    "statusLabel": "Выведен",
    "article": "ФТБ-2х2-БЕЛ-40",
    "batch":    { "id": 1, "filename": "zakaz-4412-belaya.csv", … },
    "shipment": { "id": 1, "number": "ОТГР-1041", … },
    "timeline": [ … ]
  }
}

Показаны не все поля: ответ также содержит articleName, formatValid, createdAt, issuedAt, writtenOffAt и writeOffReason. Полный список — на экране «API».

normalized — код без разделителей, по нему идёт поиск. canonical — код с настоящими байтами 0x1D, ровно в том виде, в каком он уйдёт в печать. Если кода нет, ответ короткий: { "found": false }.

Выгрузка кодов

curl -s -X POST "https://app.kodkeeper.ru/api/v1/issue" \
  -H "Authorization: Bearer kodkeeper_ВАШ_ТОКЕН" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{ "article": "ФТБ-3х3-СЕР-44", "quantity": 10 }],
    "number": "ЗАКАЗ-1177",
    "includeCodes": false
  }'
{
  "shipmentId": 13,
  "number": "ЗАКАЗ-1177",
  "createdAt": "2026-07-26T22:54:09.392Z",
  "total": 10,
  "format": "gs",
  "items": [{ "article": "ФТБ-3х3-СЕР-44", "requested": 10, "issued": 10 }]
}

Выгрузка по API создаёт настоящую выгрузку — её видно в интерфейсе и оттуда же можно скачать файл или отменить. Сами коды приходят в поле codes, если не передать "includeCodes": false; с кодами за один запрос можно заказать не больше 20 000 штук. В JSON байт 0x1D экранируется как \u001d.

Ответы на ошибки

HTTPcodeКогда
401unauthorizedЗаголовка нет, токен неизвестен или отозван
404article_not_foundАртикула нет. API не создаёт артикулы — заведите его загрузкой кодов
409insufficient_stockКодов меньше, чем запрошено. В ответе есть массив shortage с нехваткой по каждому артикулу
409gtin_mismatchGTIN выдаваемых кодов закреплён в справочнике за другим артикулом. В ответе есть массив conflicts — артикул, GTIN, артикул-владелец и количество. Ни один код статуса не поменял
400bad_requestПустой список, некорректное количество или больше 20 000 кодов вместе с их выдачей в ответе
429rate_limitedЗапросов в минуту больше, чем разрешено. В ответе есть Retry-After
402quota_exceededКвота тарифа исчерпана — например, выгрузка за период. Нужен старший тариф
403forbiddenУ токена не та роль. Токен для выгрузки создают с ролью «оператор»

Чтобы не получать 409, запросите остаток заранее через /api/v1/stock или передайте "allowPartial": true — тогда выдастся столько, сколько есть. У gtin_mismatch ответ другой: это не нехватка, а расхождение со справочником, и чинится оно в справочнике. Поле "allowGtinMismatch": true его снимает — так же, как галочка в интерфейсе, и с той же записью в журнале.

Чего API не делает Не создаёт артикулы, не загружает коды и не отменяет выгрузки. Загрузка идёт файлом через интерфейс, где виден предпросмотр и отчёт о дубликатах, а отмену выгрузки делает человек.
14

Что делать, если…

Файл загрузился, но часть строк не принята

Это штатная ситуация, а не сбой: принятые строки уже в базе, отклонённые — нет. Нажмите «Скачать отклонённые строки» в отчёте (или откройте партию — отчёт хранится там же). В файле указаны номер строки, причина и сама строка.

Дальше по причине: «Не соответствует ни одному шаблону: 01/21/91/92, 01/21/8005/93, 01/21/93» — строка обрезана или склеена с соседней; «Серийный номер длиннее 20 символов» — почти всегда две строки слиплись в одну; «Неоднозначный разделитель: не удалось определить границу серийного номера» — файл пришёл без разделителей и восстановить их однозначно нельзя, нужен исходный файл от поставщика. Чаще всего это молочная продукция, вода или пиво: в их коде всего одна граница поля, и подтвердить её нечем — у лёгкой промышленности эту роль берёт на себя второй разделитель. Если так пришёл весь файл, предпросмотр скажет об этом отдельной строкой.

Исправленный файл загружайте тем же порядком. Уже принятые коды повторно не запишутся — они станут дубликатами и будут пропущены.

«Этот GTIN закреплён за артикулом …» — файл не принят целиком

Справочник GTIN говорит, что коды из файла принадлежат не тому артикулу, который выбран в форме. Ни одна строка не записана, база не тронута — отказ произошёл до записи.

Сначала проверьте очевидное: тот ли файл выбран и тот ли артикул подставился в поле. Ошибка выбора артикула — самая частая причина, и справочник существует ровно для того, чтобы её поймать: коды в файле правильные, не дубликаты, и без этой проверки они бы просто легли не туда.

Если артикул выбран верно, а справочник описывает товар неправильно, поправьте GTIN на карточке артикула (раздел «Артикулы») и повторите загрузку. Ещё проще — переключить режим на «Разложить по артикулам автоматически, по GTIN»: тогда артикул назовёт сам файл и промахнуться будет нечем.

Галочка «Загружать, даже если GTIN закреплён за другим артикулом» — последнее средство и осознанное решение: коды лягут в выбранный артикул навсегда, остаток обоих станет неверным, а удалить их будет уже нечем. О такой загрузке останется запись в журнале и пометка на карточке партии.

«Выгрузка остановлена» — расхождение GTIN

Коды, которые сейчас должны были уйти, несут GTIN, закреплённый в справочнике за другим артикулом. Выгрузка отменена целиком, ни один код статуса не поменял, файл не создан.

Это разговор о справочнике, а не о кодах: байты кодов правильные и меняться не будут. Откройте карточку названного в отказе артикула и разберитесь, у кого из двух GTIN указан неверно. Найти все такие коды разом можно в «Реестре кодов» фильтром «GTIN → У другого артикула».

Если товар всё равно надо отгрузить сегодня, галочка «Выгрузить, несмотря на расхождение GTIN» в окне подтверждения снимает отказ. Расхождение при этом уходит в журнал вместе с выгрузкой и остаётся видно в её строке.

При загрузке по GTIN часть строк осталась «без артикула»

Их GTIN не закреплён ни за одним действующим артикулом, поэтому класть их было некуда, и «КодКипер» их не сохранил. Артикул из четырнадцати цифр он не выдумывает: такую запись потом нельзя ни удалить, ни объяснить.

Отчёт перечисляет номера по одному: GTIN, сколько строк, номер первой из них и что делать. Для незнакомого номера там стоит ссылка «Завести артикул с этим GTIN» — она открывает окно «Новый артикул» с уже подставленным номером. Если артикул есть, но убран в архив, ссылка ведёт на него: верните его из архива.

Затем загрузите тот же файл ещё раз. Уже записанные коды повторно не запишутся — они уйдут в дубликаты, — а недостающие лягут в свои артикулы.

Файл вообще не принимается

Проверьте расширение: принимаются .csv и .txt. Проверьте размер: предел — 128 МБ на файл; файл большего размера разрежьте и загрузите по частям (каждая часть станет своей партией, это нормально).

Если в предпросмотре стоит «Ни один шаблон Честного знака не распознан» и распознано ноль кодов, скорее всего, файл сохранён не как обычный текст — например, это книга Excel с расширением .csv. Пересохраните его как обычный текст в кодировке UTF-8.

Табак и молочная продукция (а также вода и пиво) разбираются на поля наравне с лёгкой промышленностью — флажок для них не нужен. Он нужен для товарных групп, шаблона для которых пока нет: включите «Загружать строки с нестандартным форматом», и такие строки сохранятся как есть, а найти их потом можно фильтром «Только с ошибкой формата».

Код не находится в поиске

Разделители тут ни при чём: поиск принимает код и с ними, и без них. Проверьте другое.

  • Код скопирован не целиком. Самая частая причина. В коде четыре части, и он длинный — при копировании из письма или PDF конец часто теряется. Попробуйте поискать только серийный номер: если код в базе есть, он найдётся.
  • Файл с этим кодом не загружали. Откройте «Партии» и проверьте, была ли загрузка нужного поставщика.
  • Строка попала в отклонённые. Посмотрите в карточке партии число «Строк с ошибкой формата».
  • Партию откатили. Откаченная партия помечена в списке, её коды удалены из базы.
Не хватает кодов на выгрузку

«КодКипер» покажет, по какому артикулу и сколько именно не хватает, ещё до подтверждения. Варианты действий:

  • нажать «Выгрузить сколько есть» — выдастся доступный остаток, недостающее закажете отдельно;
  • загрузить новый файл с кодами и повторить выгрузку;
  • проверить, не лежат ли нужные коды в выгрузке, которую можно отменить, или в списании — их можно вернуть в остаток.

Если остаток на экране кажется завышенным, нажмите «Обновить остаток»: пока вы заполняли выгрузку, коды мог выдать кто-то другой.

Выгрузили не то количество или не тот артикул

Откройте выгрузку (раздел «Выгрузки» или ссылка из журнала) и нажмите «Отменить выгрузку». Подтверждение — ввод номера выгрузки вручную. Все коды вернутся в статус «Создан».

Если вернуть нужно только часть, отмена не подойдёт: она работает целиком. Перейдите из карточки в «Реестр кодов», отфильтрованный по этой выгрузке, отметьте лишние строки и нажмите «Вернуть в оборот» — для выведенных кодов потребуется набрать слово ВЕРНУТЬ.

Файл, который уже ушёл в печатьПосле отмены ранее скачанный файл становится недействительным: коды из него снова числятся в остатке и могут уйти в другую выгрузку. Если печать уже началась, безопаснее не отменять выгрузку, а списать те коды, которые действительно испорчены.
Коды испортились при печати

Их нужно списать, а не отменять выгрузку. Один код — через «Поиск»: найдите его и нажмите «Списать», указав причину. Несколько — через «Реестр кодов»: отфильтруйте по выгрузке, отметьте строки и нажмите «Списать» на полосе групповых действий.

Причина обязательна и сохраняется в карточке кода и в журнале. Списание обратимо: если код всё-таки годен, «Вернуть в оборот» возвращает его в остаток.

Забыт пароль

Пароль обычного участника сбрасывает любой администратор: «Настройки → Пользователи → Пароль» в строке нужного человека. Все открытые сеансы этого человека при этом закроются, а второй фактор, если он был включён, останется на месте.

Пароль администратора сбрасывает другой администратор или владелец тем же способом. Именно поэтому администраторов стоит держать хотя бы двух.

Самостоятельного восстановления пароля по письму в продукте нет. Если в организации не осталось никого, кто может сбросить пароль, понадобится тот, кто обслуживает сервер.

Отдельный случай — учётная запись, заведённая через Яндекс ID или VK ID: пароля у неё нет вовсе, и восстанавливать нечего. Входите той же кнопкой.

Нужна резервная копия базы

«Настройки → База данных → Скачать резервную копию». Копию можно снимать, не останавливая работу: получится согласованный снимок на момент запроса, одним файлом kodkeeper-<организация>-ГГГГ-ММ-ДД_ЧЧММ.db. Никаких сопутствующих файлов сохранять не нужно.

Копии стоит делать по расписанию и хранить вне сервера. Отдельно храните исходные файлы кодов от поставщика: только по ним можно восстановить откаченную партию.

Нужно восстановить базу из копии

В интерфейсе такой операции нет — восстановление делается на сервере, вручную. Это работа для того, кто обслуживает сервер, и она требует остановки приложения.

  1. Остановите приложение. Это обязательно: база открыта на запись, и подмена файла у работающей системы приведёт к порче данных.
  2. Найдите текущий файл базы — точный путь показан на вкладке «База данных». У каждой организации свой файл, и восстанавливать нужно именно его.
  3. Отложите текущий файл в сторону вместе с соседними -wal и -shm, если они есть.
  4. Положите на его место файл резервной копии под прежним именем. Файлов -wal и -shm рядом быть не должно: старый журнал рядом с новой базой даёт «database disk image is malformed» на первом же чтении.
  5. Проверьте, что владелец и права файла те же, что были у прежнего.
  6. Если копия сделана более старой версией, схему двигают отдельной командой, до запуска приложения: сервер, увидевший устаревшую схему, откажется обслуживать организацию, а не перепишет её файл молча.
  7. Запустите приложение.

Учётные записи и роли живут не в файле организации, а в общей управляющей базе установки, и восстановление одной организации их не трогает.

Напечаталась только часть выгрузки

Так и задумано: задание печати идёт частями — по умолчанию сто этикеток, не больше тысячи, — и страница пишет об этом прямо: «Напечатано 100 из 150: часть 1 из 2». Остальные этикетки берутся кнопкой «Следующая» в строке «Часть».

Не печатайте одну и ту же часть дважды: она отдаёт те же самые коды маркировки, и второй набор коробок получит наклейки, уже наклеенные на первый. Номер части стоит в адресе страницы — по нему всегда видно, где вы находитесь.

Если часть оказалась меньше сотни и висит плашка «Часть уменьшена под шаблон», дело в числе символов: DataMatrix и штрихкоды каждой этикетки считаются вместе, и тяжёлый шаблон упирается в потолок раньше. Уменьшить число символов на этикетке — единственный способ сделать части длиннее.

Подписка не оплачена — что будет со складом

Ничего не удаляется и не прячется ни на одном шаге. Первую неделю после конца периода работает всё, дальше замораживается только рост — загрузка кодов, правка артикулов, приглашения и новые токены, — а выгрузка продолжает работать: склад должен отгружать, из этого он и заплатит. Ещё позже остаётся режим «только чтение»: смотреть, искать, скачивать файлы выгрузок и печатать этикетки можно всегда.

Что именно сейчас доступно, написано на вкладке «Настройки → Тариф» и в плашке над экраном. Подробности — в разделе «Тариф и оплата».

Страница показала ошибку

Незавершённая операция не записывается наполовину, поэтому ошибка на экране не портит данные: загрузка либо записала весь файл, либо не записала ничего. Нажмите «Повторить».

Если ошибка повторяется, передайте администратору код ошибки с экрана — по нему запись находится в журнале сервера. Проверить, прошла ли операция, можно в разделе «Журнал»: там видно, появилось ли событие о загрузке или выгрузке.

Снимки экранов сделаны на работающей системе с демонстрационными данными: четыре артикула и 12 000 кодов.