Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
консоль [09/07/2019 14:53] – [Пример работы с программой для командной строки Windows] Evgeny Viktorovконсоль [24/06/2025 12:00] (текущий) – [Синтаксис] Evgeny Viktorov
Строка 14: Строка 14:
   *[[консоль#экспорт_информационной_базы|экспортировать информационную базу]]   *[[консоль#экспорт_информационной_базы|экспортировать информационную базу]]
   *[[консоль#расчет_статистик_базы_данных|рассчитывать статистики базы данных]] (для сверки с учетной системой)   *[[консоль#расчет_статистик_базы_данных|рассчитывать статистики базы данных]] (для сверки с учетной системой)
 +  *  [[консоль#расчет_текущих_дефицитов|рассчитывать текущие дефициты товаров]] 
 +  * [[консоль#формирование_карточки_товара|формировать карточку товара по выбранному шаблону]]
 +  * [[консоль#формирование_графика_заказов_и_поставок|формировать график заказов и поставок в Excel]]
 +  * [[консоль#анализ_состояния_базы|анализировать состояние базы]]
  
 В консольную утилиту выводятся сведения о начале и завершении операции, а также о времени выполнения. Такой же вывод есть для подопераций. Консольная утилита по завершению предоставляет код возврата, при отсутствии ошибок он равен нулю, в противном случае - код ошибки. Описание ошибок представлено в таблице ниже. В консольную утилиту выводятся сведения о начале и завершении операции, а также о времени выполнения. Такой же вывод есть для подопераций. Консольная утилита по завершению предоставляет код возврата, при отсутствии ошибок он равен нулю, в противном случае - код ошибки. Описание ошибок представлено в таблице ниже.
Строка 28: Строка 32:
 FSystemConsole.exe import --properties -r D:\FNOW\SUPPLIERS\Suppliers.csv base >> C:\fcn_logs\log-swod-%date%.txt FSystemConsole.exe import --properties -r D:\FNOW\SUPPLIERS\Suppliers.csv base >> C:\fcn_logs\log-swod-%date%.txt
  
-rem загружаем поля для товаров в режиме замены, выводим логи загрузки в отдельный файл+rem загружаем поля для товаров в режиме обновления, выводим логи загрузки в отдельный файл
 FSystemConsole.exe import --items-fields -a D:\FNOW\SUPPLIERS\Itemfields.csv base >> C:\fcn_logs\log-swod-%date%.txt FSystemConsole.exe import --items-fields -a D:\FNOW\SUPPLIERS\Itemfields.csv base >> C:\fcn_logs\log-swod-%date%.txt
  
Строка 60: Строка 64:
 timeout 300 > NULL timeout 300 > NULL
  
-rem формируем заказы по фильтру 1 с учетом ранее проведенной балансировки+rem формируем заказы по фильтру 1 с учетом ранее проведенной балансировки, возможные ошибки консоли выводим в отдельный файл
 FSystemConsole.exe make-orders --user "user" --consider-balancing "1" "base" "D:\FNOW\OUT\ORDERS" >> C:\fcn_logs\log-swod-%date%.txt FSystemConsole.exe make-orders --user "user" --consider-balancing "1" "base" "D:\FNOW\OUT\ORDERS" >> C:\fcn_logs\log-swod-%date%.txt
 +echo %ERRORLEVEL% >> E:\log\log-swod-%date%.txt
 </code> </code>
 +=====Логирование выполнения команды=====
 +
 +Процесс выполнения любой консольной команды можно записывать в лог файл. Для этого, в конце команды нужно указать флаг "''log''" и после знака "''=''" путь к файлу лога.
 +
 +Пример с указанием пути к файлу:
 +<code>FSystemConsole.exe import -sh -r "D:\FNOW\format.format"  "D:\FNOW\SALES"  base --log=C:\fcn_logs\log-swod.txt</code>
 +
 +Если путь к файлу не указан или файл не доступен, то лог консоли будет записан в новый сгенерированный файл в профиле в папке %AppData%\Ingenious Team\ForecastNOW\logs
 +
 +Пример без указания пути к файлу:
 +<code>FSystemConsole.exe import -sh -r "D:\FNOW\format.format"  "D:\FNOW\SALES"  base --log</code>
 +
 +
 +При формирование балансировки с указанием этого флага, записывается расширенный лог.
 =====Логирование неудачных запусков утилиты===== =====Логирование неудачных запусков утилиты=====
  
Строка 70: Строка 89:
 Если при старте работы с консольной утилитой возникает ошибка ключа защиты, то происходит 5 переподключений. Если при старте работы с консольной утилитой возникает ошибка ключа защиты, то происходит 5 переподключений.
 При этом в консоль выводится сообщение: \\ При этом в консоль выводится сообщение: \\
-<code>protection key error. try to reconect...</code>+<code>protection key error. try to reconnect...</code>
  
  
Строка 80: Строка 99:
 {{ settings: consolelog.png?550 }} {{ settings: consolelog.png?550 }}
  
 +
 +Если консольная утилита завершилась из-за возникновения ошибки, то создаётся [[crashdumps|дамп памяти]]. \\
 +Путь к созданному файлу дампа, отображается в командной строке. По умолчанию файл дампа памяти создаётся в папке C:\ProgramData\Ingenious Team\ForecastNOW\CrashDumps в формате dmp. \\
 +Данный файл можно передать в службу технической поддержки, для анализа и выявления причины завершения работы консольной утилиты.
 ====Коды ошибок при работе консольной утилиты==== ====Коды ошибок при работе консольной утилиты====
 |0| Нормальное завершение работы| |0| Нормальное завершение работы|
Строка 112: Строка 135:
 |29| У товара нет ближайшей доступной даты формирования заказа| |29| У товара нет ближайшей доступной даты формирования заказа|
 |31| Ошибка аутентификации при отправке заказа по электронной почте| |31| Ошибка аутентификации при отправке заказа по электронной почте|
 +|34| В базе данных нет правил автоустановки с указанным типом|
 +|35| Ни одно из введенных названий правил с указанным типом не соответствует тем, что находятся в базе данных|
 +|36| Массовая загрузка данных в таблицу sales недоступна. Загрузка была произведена в обычном режиме.|
 ====Остановка работы консольной утилиты при возникновение ошибок==== ====Остановка работы консольной утилиты при возникновение ошибок====
 Если во время работы консольной утилиты выявлены ошибки, то можно отменить дальнейшее выполнение команд. Для этого нужно в файл для консольной утилиты вставить дополнительную команду: Если во время работы консольной утилиты выявлены ошибки, то можно отменить дальнейшее выполнение команд. Для этого нужно в файл для консольной утилиты вставить дополнительную команду:
Строка 152: Строка 178:
  
 - папки с настройками, если она указана то файлы gnclient.ini и dbserver-config.ini ищутся там (если не указаны конкретные пути через команды описанные выше), команда --config-path - папки с настройками, если она указана то файлы gnclient.ini и dbserver-config.ini ищутся там (если не указаны конкретные пути через команды описанные выше), команда --config-path
 +
 +По умолчанию, конфигурационные файлы которые использует программа находятся в ''C:\ProgramData\Ingenious Team\ForecastNOW'' \\
 +Флаг с указанием пути к файлам, можно указать в любой части команды.
 =====Импорт данных===== =====Импорт данных=====
 ====Общий синтаксис==== ====Общий синтаксис====
Строка 158: Строка 187:
 </code> </code>
  
-режим - замена, обновление или частичное обновление +режим - замена, обновление или частичное обновление \\ 
-формат - формат истории продаж, актуально только для истории продаж +формат - формат истории продаж, актуально только для истории продаж \\ 
-база_данных - название базы данных Forecast NOW!+база_данных - название базы данных Forecast NOW! \\
  
  
 ===Тип=== ===Тип===
 <code> <code>
- -sh, --sales-history   импорт истории продаж + -sh, --sales-history   импорт только истории продаж в csv и xml формате(для csv обязательно указание файла формата)
  -o, -c, --ontology, --classification  импорт классификации  -o, -c, --ontology, --classification  импорт классификации
  -p, --properties  импорт параметров  -p, --properties  импорт параметров
  -a, --analogs    импорт аналогов  -a, --analogs    импорт аналогов
  -mс, --marketing-campaigns       импорт акций  -mс, --marketing-campaigns       импорт акций
- -of, ----orderFrequency    импорт сроков доставки от поставщиков 
  -sp, --suppliers   импорт данных поставщиков  -sp, --suppliers   импорт данных поставщиков
- --all    импорт файла формата xml, содержащего историю продаж и параметры+ --all    импорт файла формата xml, содержащего историю продажпараметры, классификацию и даты поступления заказов
  --storage-aliases  импорт файла, содержащего названия складов  --storage-aliases  импорт файла, содержащего названия складов
  --customer-purchases   импорт файла, содержащего закупки для клиентов  --customer-purchases   импорт файла, содержащего закупки для клиентов
Строка 190: Строка 218:
 --prepare-report-settings импорт файла, содержащего фильтры подготовки заказа --prepare-report-settings импорт файла, содержащего фильтры подготовки заказа
 --recipients-limits импорт файла, содержащего ограничения для внутренних перемещений --recipients-limits импорт файла, содержащего ограничения для внутренних перемещений
 +--clients импорт файла содержащего данные по клиентам
 +---suppliers-prices   импорт файла, содержащего прайс-листы поставщиков
 </code> </code>
  
Строка 204: Строка 234:
 ==Параметры== ==Параметры==
 [[формат_данных_для_загрузки#формат_файла_для_выгрузкизагрузки_параметров|Формат файла параметров]] [[формат_данных_для_загрузки#формат_файла_для_выгрузкизагрузки_параметров|Формат файла параметров]]
 +
 +Также доступна опция --dir
 +
 +При ее использовании будут загружены все файлы из указанной директории
  
 ==Аналоги== ==Аналоги==
 [[формат_данных_для_загрузки#формат_файла_для_выгрузкизагрузки_аналогов|Формат файла аналогов]] [[формат_данных_для_загрузки#формат_файла_для_выгрузкизагрузки_аналогов|Формат файла аналогов]]
 ==Акции== ==Акции==
-[[формат_данных_для_загрузки#формат_файла_для_обмена_данными_по_акциям|Формат файла акций]]+[[формат_данных_для_загрузки#формат_файла_для_обмена_данными_по_акциям|Формат файла акций]]. Акции можно загружать в двух форматах.
  
 ==Загрузка xml файла== ==Загрузка xml файла==
Строка 220: Строка 254:
 [[настройки:список_поставщиков#формат_файла_загрузки|формат файла данных поставщиков]] [[настройки:список_поставщиков#формат_файла_загрузки|формат файла данных поставщиков]]
  
-==Загрузка сроков доставки поставщиков== +
-[[настройки:список_поставщиков#загрузка_сроков_доставки|формат файла сроков доставки поставщиков]]+
  
 ==Загрузка закупок для клиентов== ==Загрузка закупок для клиентов==
Строка 237: Строка 270:
 ==Загрузка дат поступления заказов== ==Загрузка дат поступления заказов==
 Формат: [[формат_данных_для_загрузки#ожидаемые_поступления_с_датами|csv]] или [[загрузка_данных_в_forecastnow#Ожидаемые поступления с датами|xml]] Формат: [[формат_данных_для_загрузки#ожидаемые_поступления_с_датами|csv]] или [[загрузка_данных_в_forecastnow#Ожидаемые поступления с датами|xml]]
 +
 +Также доступна опция –dir
 +
 +При ее использовании будут загружены все файлы из указанной директории
 ==Направления балансировки== ==Направления балансировки==
 [[формат_данных_для_загрузки#Направления балансировки|формат файла направлений балансировки]] [[формат_данных_для_загрузки#Направления балансировки|формат файла направлений балансировки]]
Строка 257: Строка 294:
 [[формат_данных_для_загрузки#ограничения_на_внутренние_перемещения|Формат файла ограничений на внутренние перемещения]] [[формат_данных_для_загрузки#ограничения_на_внутренние_перемещения|Формат файла ограничений на внутренние перемещения]]
  
-==ежим(только для истории продаж, классификации, произвольных полей товаров, параметров)===+==Данные по клиентам== 
 +[[формат_данных_для_загрузки#данные_по_клиентам|Формат файла с данными по клиентам]] 
 + 
 +==Прайсисты поставщиков== 
 +[[формат_данныхля_загрузки#прайс_листы_поставщиков|Формат файла с данными по прайс-листам]] 
 +===Режим загрузки===
  
 Выбор режима загрузки [[загрузка_данных_в_forecast_now#режимы_загрузки_истории_продаж|истории продаж]], Выбор режима загрузки [[загрузка_данных_в_forecast_now#режимы_загрузки_истории_продаж|истории продаж]],
  [[загрузка_данных_в_forecast_now#режимы_загрузки_классификации|классификации ]],  [[загрузка_данных_в_forecast_now#режимы_загрузки_классификации|классификации ]],
- [[загрузка_данных_в_forecast_now#Загрузка произвольных полей товара для таблицы Заказа|произвольных полей товара для таблицы Заказа]],  [[консоль#Загрузка дат поступления заказов|дат поступления заказов]], [[загрузка_данных_в_forecast_now#режимы_загрузки|параметров]] и [[ консоль#ограничения_на_внутренние_перемещения|внутренних перемещений]]+ [[загрузка_данных_в_forecast_now#Загрузка произвольных полей товара для таблицы Заказа|произвольных полей товара для таблицы Заказа]],  [[консоль#Загрузка дат поступления заказов|дат поступления заказов]], [[загрузка_данных_в_forecast_now#режимы_загрузки|параметров]] и [[ консоль#ограничения_на_внутренние_перемещения|ограничений для внутренних перемещений]] и [[https://help.fnow.ru/doku.php/%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C#%D0%BF%D1%80%D0%B0%D0%B9%D1%81-%D0%BB%D0%B8%D1%81%D1%82%D1%8B_%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D1%89%D0%B8%D0%BA%D0%BE%D0%B2|прайс-листы]]
  
 ==Синтаксис== ==Синтаксис==
Строка 267: Строка 309:
  -r, --remove                           режим замены и удаления старой информации  -r, --remove                           режим замены и удаления старой информации
  -a, --append                           режим добавления и обновления информации  -a, --append                           режим добавления и обновления информации
- -s                                     сохранение старых свойств в классификации. Может использоваться только при загрузке комплексного xml файла. Указывается в конце команды  
 </code> </code>
  
Строка 346: Строка 387:
 Будут обновлены только данные только по тем столбцам, которые присутствуют в файле загрузки. Аналогичен [[загрузка_данных_в_forecast_now?&#режимы_загрузки_истории_продаж|режиму загрузки]] "Обновить частично" Будут обновлены только данные только по тем столбцам, которые присутствуют в файле загрузки. Аналогичен [[загрузка_данных_в_forecast_now?&#режимы_загрузки_истории_продаж|режиму загрузки]] "Обновить частично"
 Этот флаг используется только для [[консоль#режим_только_для_истории_продаж_и_классификации|режима загрузки "обновить"]] Этот флаг используется только для [[консоль#режим_только_для_истории_продаж_и_классификации|режима загрузки "обновить"]]
 +
 +<code>--day-completion-part <0|1></code>
 +
 +Указывается, загружены ли остатки на конец дня или же это остатки за текущий день, которые необходимо и использовать в расчётах. \\
 +В обычной логике программы, загружаются и учитываются остатки на конец дня(значение 1 или же без указания флага). \\
 +Для того, чтобы программа использовала фактические остатки и не считала, что это данные уже на конец дня, нужно загружать информацию указывая значение флага 0. При этом, максимальной датой в базе будет считаться предыдущая дата продажи в файле. \\
 +В программе не может быть несколько дат с неполной информацией за день.
 +<note important>Остатки таким образом будут учитываться при формирование заказа с включенной глобальной настройкой [[настройки/глобальные_настройки#учитывать_даты_поступления_заказа|Учитывать даты поступления заказов]]</note>
  
 <code>--dir</code>  <code>--dir</code> 
  
-Будет произведена загрузка всех csv файлов из директории **Исходник** как файлов истории продаж. **Исходник** обязательно должен быть директорией в этом случае.+Будет произведена загрузка всех csv и xml файлов из директории **Исходник** как файлов истории продаж. **Исходник** обязательно должен быть директорией в этом случае. При этом, csv и xml файлы, можно загружать вместе. Для csv обязательно указание файла формата.
  
 <code>--temp-file=<путь к временному файлу></code>  <code>--temp-file=<путь к временному файлу></code> 
  
 Программа автоматически объединит содержимое csv файлов из директории, в указанный временный файл и загрузит историю продаж из этого файла. \\ Программа автоматически объединит содержимое csv файлов из директории, в указанный временный файл и загрузит историю продаж из этого файла. \\
 +Чтобы загрузка происходила из указанной директории, обязательно указание флага "dir" \\
 Если утилите не удастся создать новый временный файл, то об этом будет сообщено, программа завершится. \\ Если утилите не удастся создать новый временный файл, то об этом будет сообщено, программа завершится. \\
 Если файл с таким именем уже существует, то программа попытается его удалить и создать новый. \\ Если файл с таким именем уже существует, то программа попытается его удалить и создать новый. \\
Строка 362: Строка 412:
 <code>--save-properties</code>  <code>--save-properties</code> 
  
-В режиме замены классификации будут сохранены созданные в программе свойства и их значения+В режиме замены классификации будут сохранены созданные в программе свойства и их значения. Указывается в конце команды.
  
 <code>--no-warnings</code> <code>--no-warnings</code>
Строка 368: Строка 418:
 Флаг должен быть указан  сразу после [[консоль#тип|типа]] импортируемого файла Флаг должен быть указан  сразу после [[консоль#тип|типа]] импортируемого файла
  
 +<code>--user <пользователь></code>
 +Используется при загрузке настроек балансировки. Указывается пользователь 
 +для которого производится загрузка настроек балансировки.
  
 +<code>----disable-update-campaigns</code>
 +Отключение логирования некритических ошибок.
  
- +Говорит о том, что при загрузке не будет производиться перевод прошедших акций типа объем в коэффициент. Данное действие лучше выполнять один раз в день с помощью консольной команды: update-past-amount-campaigns <databaseName>, которую стоит запланировать после прогрузки ночных файлов истории. Такой подход позволит наиболее эффективно/быстрее (без потери качества результата) производить частые загрузки истории продаж как в течении дня, так и в ночное время.
  
 =====Работа с резервными копиями базы данных===== =====Работа с резервными копиями базы данных=====
Строка 397: Строка 451:
  
 =====Сжатие базы данных===== =====Сжатие базы данных=====
 +Сжатие происходит через массовую загрузку из файла.
 +Файл со сжатой историей продаж создается во временной папке для массовой загрузки (указывается в [[настройки/глобальные_настройки#пути_сохранения|Глобальных настройках]]) \\
 +Чтобы все прошло корректно сжатие должно быть запущено на компьютере где расположен сервер СУБД. \\
 +Программа должна быть запущена под пользователем, который имеет права на запись во временную папку для массовой загрузке, а сервер СУБД имеет права на чтение из этой папки. \\
  
-compress database, где database - имя/путь к базе данных+Перед процессом сжатия создается дамп базы, если  включена глобальная настройка [[настройки/глобальные_настройки#создавать_резервную_копию_базы_при_обновлении|"Создавать резервную копию базы" ]]\\ 
 + 
 + 
 +Команда для запуска сжатия базы: 
 +<code>FSystemConsole.exe compress [database-name]</code> 
 + 
 +database-name - имя базы данных
  
 ===Пример=== ===Пример===
  
-<code>FSystemConsole.exe update base </code>+<code>FSystemConsole.exe compress base </code>
 =====Формирование заказов без участия пользователя===== =====Формирование заказов без участия пользователя=====
  
Строка 425: Строка 489:
  
 <code>Source</code> <code>Source</code>
-Имя базы для MySQL или путь к базе для SQLite, в которой нужно формировать заказы+Имя базы для MySQL\MSSQL или путь к базе для SQLite, в которой нужно формировать заказы
  
 <code>Target</code> <code>Target</code>
Строка 491: Строка 555:
 <!---rc-transit-rest - В пути----> <!---rc-transit-rest - В пути---->
 <!---rc-order-rest - Заказано----> <!---rc-order-rest - Заказано---->
 +<!--rc-sum-arrivals - Сумма поступлений-->
 <!---rc-backorder - Невыполненный заказ----> <!---rc-backorder - Невыполненный заказ---->
 <!---rc-needed - Прогноз спроса----> <!---rc-needed - Прогноз спроса---->
Строка 498: Строка 563:
 <!---rc-to-buy-immutable - Заказать без корректировок----> <!---rc-to-buy-immutable - Заказать без корректировок---->
 <!---rc-to-buy-untreated - Заказать без обработок----> <!---rc-to-buy-untreated - Заказать без обработок---->
 +<!---rc-manual-edit - Ручное редактирование---->
 <!---rc-purchase-price - Цена закупа----> <!---rc-purchase-price - Цена закупа---->
 <!---rc-purchase-cost - Сумма----> <!---rc-purchase-cost - Сумма---->
Строка 548: Строка 614:
 <!---rc-to-buy-edit-cause - Причина редактирования----> <!---rc-to-buy-edit-cause - Причина редактирования---->
 <!---rc-optimal-service-level - Оптимальный УС----> <!---rc-optimal-service-level - Оптимальный УС---->
 +<!--rc-total-demand-filials - Суммарная потребность филиалов-->
 +<!--rc-available-rest - Свободный остаток-->
 <!---rc-product-properties - Значения свойств товара----> <!---rc-product-properties - Значения свойств товара---->
 <!---rc-product-parameters - Значение параметров товара----> <!---rc-product-parameters - Значение параметров товара---->
Строка 571: Строка 639:
  
 ====Полный синтаксис формирования заказов==== ====Полный синтаксис формирования заказов====
-<code>make-orders [--order-schedule schedule] [(--user | -u) user_name] [--group-by-suppliers | --group-by-storages]  [--dates date1 date2] [--union-by-supplier | --union-by-supplier-ordergroup | --union-by-supplier-ordergroup-customer | --merge-orders] [--group-order-by-product | --group-order-roundbystorage storage] [--save-union-only] [--remove-null-tobuy-records] [ --consider-balancing] [-md5][--xml] [--xls] [--xlsx] [--csv] [--sync] [--no-order-file] [--email] filter source target </code>+<code>make-orders [--order-schedule schedule] [(--user | -u) user_name] [--group-by-suppliers | --group-by-storages]  [--dates date1 date2] [--union-by-supplier | --union-by-supplier-ordergroup | --union-by-supplier-ordergroup-customer | --merge-orders] [--group-order-by-product | --group-order-roundbystorage storage] [--save-union-only] [--remove-null-tobuy-records] [--remove-empty-order]] [ --consider-balancing] [-md5][--xml] [--xls] [--xlsx] [--csv] [--sync] [--no-order-file] [--email] [--pattern-name] filter source target </code>
  
 <code> --order-schedule название расписания</code> <code> --order-schedule название расписания</code>
Строка 594: Строка 662:
 Объединение сформированных заказов по [[формирование_заказа#объединение_заказов_по_поставщикам| поставщикам]], Объединение сформированных заказов по [[формирование_заказа#объединение_заказов_по_поставщикам| поставщикам]],
 [[формирование_заказа#объединение_заказов_по_поставщикам_и_группе_заказа|поставщику и группе заказа]] или по [[формирование_заказа#объединение_заказов_по_поставщикам_группе_заказа_и_складу|поставщику, группе заказа и складу]]. [[формирование_заказа#объединение_заказов_по_поставщикам_и_группе_заказа|поставщику и группе заказа]] или по [[формирование_заказа#объединение_заказов_по_поставщикам_группе_заказа_и_складу|поставщику, группе заказа и складу]].
-Выбрать можно только одно объединение+Выбрать можно только одно объединение \\ 
 +В название файла объединённого заказа указывается идентификатор заказа.
  
 <code> <code>
Строка 604: Строка 673:
 --group-order-by-product --group-order-by-product
 </code> </code>
-[[формирование_заказа#создание_общего_заказа_на_склады|Создаст общий заказ]] на склады по объединенным при помощи ключа --merge-orders заказы+[[формирование_заказа#создание_общего_заказа_на_склады|Создаст общий заказ]] на склады  
 +  *по одному общему заказу (если использовался  ключ --merge-orders
 +  * по всем заказам, полученным в результате работы одного из ключей --union-by (если не используется ключ --merge-orders)
  
 При этом будут [[формирование_заказа#изменение_связанных_заказов|изменены]] объединения заказов, и объединённые заказы(по поставщику, группе заказа, складу), из которых этот заказ получен в соответствии с кратностью указанного склада При этом будут [[формирование_заказа#изменение_связанных_заказов|изменены]] объединения заказов, и объединённые заказы(по поставщику, группе заказа, складу), из которых этот заказ получен в соответствии с кратностью указанного склада
Строка 613: Строка 684:
 storage - код склада storage - код склада
  
-[[формирование_заказа#создание_общего_заказа_на_склады_с_учетом_кратности|Создаст общий заказа на склады с учетом кратности]] указанного склада по объединенным при помощи ключа ----merge-orders заказы+[[формирование_заказа#создание_общего_заказа_на_склады_с_учетом_кратности|Создаст общий заказа на склады с учетом кратности]] указанного склада по объединенным при помощи ключа %%--%%merge-orders заказы
  
- | --group-order-roundbystorage storage +<code>--save-union-only</code>
-<code>----save-union-only</code>+
 Сохранение только объединенных заказов Сохранение только объединенных заказов
  
Строка 628: Строка 698:
 В реестре сохраняются полные заказы. В реестре сохраняются полные заказы.
  
 +<code>--remove-empty-order</code> 
 +Удаление пустых заказов
 <code>--xml --xls --xlsx --csv</code> <code>--xml --xls --xlsx --csv</code>
 Флаги для дополнительного сохранения заказов в [[консоль#форматы_сохранения_заказов|заданных расширениях]] Флаги для дополнительного сохранения заказов в [[консоль#форматы_сохранения_заказов|заданных расширениях]]
Строка 645: Строка 716:
 <code>--email</code> <code>--email</code>
 Флаг для автоматической [[формирование_заказа#отправка_заказа_поставщику_по_электронной_почте|отправки сохранённых заказов на email]], указанный в карточке поставщика. Заказы отправляются только при указание флага с форматом, в указанном формате. Флаг для автоматической [[формирование_заказа#отправка_заказа_поставщику_по_электронной_почте|отправки сохранённых заказов на email]], указанный в карточке поставщика. Заказы отправляются только при указание флага с форматом, в указанном формате.
 +
 +Пустые заказы и нулевые заказы (где у всех позиций заказать =0) отправлены не будут
 +
 +<code>--pattern-name</code>
 +Использование имени заказа из [[настройки/глобальные_настройки#пути_сохранения|глобальных настроек]]
  
 <code>filter</code> <code>filter</code>
Строка 652: Строка 728:
 <code>Source</code> <code>Source</code>
  
-Имя базы для MySQL или путь к базе для SQLite, в которой нужно формировать заказы+Имя базы для MySQL\MSSQL или путь к базе для SQLite, в которой нужно формировать заказы
  
  
Строка 696: Строка 772:
 2) не удалит заказы с диска. тогда заказы перестанут грузится у всего набора пользователей П. об этом будет сообщено в явном виде в программе. 2) не удалит заказы с диска. тогда заказы перестанут грузится у всего набора пользователей П. об этом будет сообщено в явном виде в программе.
  
 +Если при формирование заказов, должны быть учтены ограничения поставщиков, но по каким то причинам, ограничения не были соблюдены, то при запуске программы будет выведено соответствующее сообщение, со списком заказов. Товарам к которым не применилось ограничение, будет записан соответствующий комментарий.
  
  
Строка 707: Строка 784:
 </code> </code>
 source - имя базы source - имя базы
 +
 +====Вывод времени выполнения последнего успешно рассчитанного консолью заказа====
 +
 +Если вам необходимо получить отдельно информацию о времени формирования последнего успешно сформированного заказа, то можно воспользоваться данной командой:
 +
 +<code>
 +FSystemConsole.exe check-completion make-orders <make-order-args>
 +</code>
 +
 +check-completion make-orders <make-order-args> - по команде производится поиск последнего успешного формирования заказов через консоль, запущенного с указанными в команде аргументами <make-order-args>. В противном случае выдает сообщение, что такого заказа нет
 +
 +<make-order-args> - аргументы запуска консольного заказа, по которому нужно получить информацию, аргументы точно как был запущен заказ.
 +
 +Если последний заказ был успешно сформирован командой через консоль с указанными аргументами, то будет выведено сообщение с временем начала и окончания выполнения команды: \\
 +''Last successful execution: Started: время  дата Ended: время  дата''
 +
 +Если же подобная команда не выполнялась или завершилась некорректно, то так же будет выведено соответствующее сообщение: \\
 +''No sucessful executions.''
 +
 +**Пример команды:** \\
 +Заказ формируется с помощью команды:
 +<code>FSystemConsole.exe make-orders --user "user" --consider-balancing "1" "base" "D:\FNOW\OUT\ORDERS"</code>
 +
 +Чтобы отдельно получить информацию о времени и факте формирования заказа, нужно выполнить команду:
 +<code>FSystemConsole.exe check-completion make-orders --user "user" --consider-balancing "1" "base" "D:\FNOW\OUT\ORDERS"</code>
 +
 +====Оповещение о превышение бюджетов====
 +В случае, если по итогам работы консольной утилиты превышаются бюджеты на закупку, пользователям в центре уведомлений отображается файл вида
 +<code>
 +Название правила ; Период действия ; Бюджет ; Порог бюджета ; Превышение бюджета ;
 +Пример:
 +Бюджет_филиала_32 ; 11.04.2023-30.04.2023 ; 500000 руб. ; 95% ; 140000 руб.
 +</code>
 =====Проведение балансировки===== =====Проведение балансировки=====
 ====Минимальный синтаксис команды=== ====Минимальный синтаксис команды===
Строка 718: Строка 828:
 Во время выполнения команды, файл настроек проходит проверку на наличие ошибок. Если в файле есть ошибки, то балансировка не сформируется и будет выведено соответствующее сообщение, с указанием пути где хранится лог файл. Если указан флаг который игнорирует ошибки файла настроек, то балансировка сформируется и ошибочные настройки будут заменены на настройки по умолчанию. Во время выполнения команды, файл настроек проходит проверку на наличие ошибок. Если в файле есть ошибки, то балансировка не сформируется и будет выведено соответствующее сообщение, с указанием пути где хранится лог файл. Если указан флаг который игнорирует ошибки файла настроек, то балансировка сформируется и ошибочные настройки будут заменены на настройки по умолчанию.
  
-<code>user</code> - пользователь, чьи настройки будут использованы при балансировке+<code>user</code> - пользователь, чьи настройки будут использованы при балансировке.  
 +Так же, если в команде указан пользователь, то балансировка дополнительно сохраниться в том формате, который использовался пользователем последний раз. 
  
 <note tip> <note tip>
Строка 738: Строка 849:
 ===Формат файла с настройками балансировки=== ===Формат файла с настройками балансировки===
 Рекомендуется указывать файл настроек балансировки, сохраненного из программы в соответствующем [[формат_данных_для_загрузки#настройки_балансировки|формате]] Рекомендуется указывать файл настроек балансировки, сохраненного из программы в соответствующем [[формат_данных_для_загрузки#настройки_балансировки|формате]]
-</note> в комбинации с использованием фильтра для отбора товаров, участвующих в балансировке.+в комбинации с использованием фильтра для отбора товаров, участвующих в балансировке.
  
 Также поддерживается, формат, позволяющий задавать товары, участвующие в балансировке и прочие параметры ее проведения: Также поддерживается, формат, позволяющий задавать товары, участвующие в балансировке и прочие параметры ее проведения:
Строка 780: Строка 891:
 особенности поставки;<не учитывать|основные|балансировка> особенности поставки;<не учитывать|основные|балансировка>
 иерархия складов;<основная|балансировка> иерархия складов;<основная|балансировка>
-расписание заказов;<основное|балансировка>+расписание заказов;<не учитывать|основное|балансировка>
 алгоритм балансировки;<по рентабельности|пропорциональное распределение остатка с рц> алгоритм балансировки;<по рентабельности|пропорциональное распределение остатка с рц>
-направление балансировки;<значение направления из настроек "Направления балансировки"> </code>+направление балансировки;<значение направления из настроек "Направления балансировки"
 +метод разворота аналогов;<сначала старые запасы, потом новые|сначала дешевые, потом дорогие|по приоритету|обратно приоритету> 
 +группа заказа;<не учитывать|основная|балансировка></code>
  
 3.3. Дополнительные настройки (если строчка присутствует в файле настроек, то эта настройка будет учтена при проведении балансировки) 3.3. Дополнительные настройки (если строчка присутствует в файле настроек, то эта настройка будет учтена при проведении балансировки)
  
-<code>учитывать аналоги +<code> 
-разворачивать аналоги+учитывать даты поступления заказов 
 +учитывать аналоги
 не учитывать разницу цен не учитывать разницу цен
 норма складского запаса равна сроку поставки + периодичность норма складского запаса равна сроку поставки + периодичность
Строка 793: Строка 907:
 добавлять к остатку склада-донора остаток в пути добавлять к остатку склада-донора остаток в пути
 добавлять к остатку склада-реципиента остаток заказано добавлять к остатку склада-реципиента остаток заказано
-добавлять к остатку склада-реципиента остаток в пути</code>+добавлять к остатку склада-реципиента остаток в пути 
 +исключать перемещения с нулевым свободным остатком на доноре</code>
  
 4. Имена полей, которые должны быть в сформированных балансировках, берутся либо из настроек балансировки пользователя(задается через вид -> поля товаров), 4. Имена полей, которые должны быть в сформированных балансировках, берутся либо из настроек балансировки пользователя(задается через вид -> поля товаров),
Строка 806: Строка 921:
 доставка;от(РЦ1);до(РЦ2);срок(1);стоимость(2000);кг(3);%(4) доставка;от(РЦ1);до(РЦ2);срок(1);стоимость(2000);кг(3);%(4)
 доставка;от(РЦ1);до(Ф2);срок(455);стоимость(21);кг(1);%(20) доставка;от(РЦ1);до(Ф2);срок(455);стоимость(21);кг(1);%(20)
-Отображать все нулевые перемещения;Отображать все+Отображать все нулевые перемещения;Есть свободный остаток на складе доноре;Не по расписанию;Есть дефицит;Остальное
 доход на высвобожденные средства;10 доход на высвобожденные средства;10
 не перемещать товар;14 не перемещать товар;14
Строка 813: Строка 928:
 расписание заказов;балансировка расписание заказов;балансировка
 учитывать аналоги учитывать аналоги
-разворачивать аналоги+метод разворота аналогов;сначала старые запасы, потом новые
 не учитывать разницу цен не учитывать разницу цен
 норма складского запаса равна сроку поставки + периодичность норма складского запаса равна сроку поставки + периодичность
Строка 819: Строка 934:
 добавлять к остатку склада-донора остаток в пути добавлять к остатку склада-донора остаток в пути
 алгоритм балансировки;пропорциональное распределение остатка с рц алгоритм балансировки;пропорциональное распределение остатка с рц
-направление балансировки;Распределение остатков рц</code>+направление балансировки;Распределение остатков рц 
 +группа заказа;балансировка</code>
  
 <note important> <note important>
Строка 839: Строка 955:
 ====Полный синтаксис команды==== ====Полный синтаксис команды====
  
-<code>FSystemConsole balancing database [source] target [--user] [--filter] [--xml] [--csv] [--xlsx][--consider-balancing] [--no-split-by-destinations] [--no-verification]</code>+<code>FSystemConsole balancing database [source] target [--user] [--filter] [--xml] [--csv] [--xlsx][--consider-balancing] [--no-split-by-destinations] [--no-verification] [--balancing-by-clients] [--no-split-by-order-group] [--exclude-null-balancing]</code>
  
  
Строка 848: Строка 964:
   *<code>--user Имя пользователя </code>- указывается имя пользователя, настройки балансировки и отображения которого будут использованы для сохранения балансировки (показанные параметры/свойства/анализы, единицы измерения и направления балансировки).   *<code>--user Имя пользователя </code>- указывается имя пользователя, настройки балансировки и отображения которого будут использованы для сохранения балансировки (показанные параметры/свойства/анализы, единицы измерения и направления балансировки).
 Если указывается пользователь то файл настроек указывать не обязательно. Если в команде указан и файл настроек и пользователь, то настройки балансировки будут использоваться от указанного пользователя, а файл настроек будет проигнорирован. При входе в программу, после формирования балансировок, будет выведено сообщение, что файл настроек использоваться не будет. Если указывается пользователь то файл настроек указывать не обязательно. Если в команде указан и файл настроек и пользователь, то настройки балансировки будут использоваться от указанного пользователя, а файл настроек будет проигнорирован. При входе в программу, после формирования балансировок, будет выведено сообщение, что файл настроек использоваться не будет.
 +Так же, если в команде указан пользователь, то балансировка дополнительно сохраниться в том формате, который использовался пользователем последний раз. 
  
   *<code>--filter </code>- указание фильтра, по которому будет проходить балансировка.   *<code>--filter </code>- указание фильтра, по которому будет проходить балансировка.
Строка 862: Строка 979:
   *<code>[--xml] [--csv] [--xlsx] </code>   *<code>[--xml] [--csv] [--xlsx] </code>
  
-При указании этих флагов (одного или нескольких) балансировка также будет сохраняться в указанном формате. По умолчанию балансировка сохраняется в excel csv, для флага "--csv" просто в csv (в имя файла дописывается --csv так как расширение файлов у них одинаковое). Если файл цели указан с расширением xml, то флаг "--xml" можно не указывать.+При указании этих флагов (одного или нескольких) балансировка также будет сохраняться в указанном формате. По умолчанию балансировка сохраняется в excel csv, для флага %%"--csv"%% просто в csv (в имя файла дописывается %%--csv%% так как расширение файлов у них одинаковое). Если файл цели указан с расширением xml, то флаг %%"--xml"%% можно не указывать. 
 +В excel csv формате балансировка сохраняется всегда. 
  
   *<code>--no-split-by-destinations</code>   *<code>--no-split-by-destinations</code>
-При формирование балансировок с указанием фильтра подготовки, сформированные балансировки не будут разбиваться по направлениям. Если указан этот флаг, то в качестве результата необходимо указывать не папку, а имя файла. Если балансировка была проведена через фильтр автоподготовки с флагом --no-split-destinations (не разбивать по направлениям), то в программе будет отображаться единственная балансировка с названием соответствующем шаблону: \\ <Наименование фильтра> <Текущая дата в момент проведения балансировки>+При формирование балансировок с указанием фильтра подготовки, сформированные балансировки не будут разбиваться по направлениям. Если указан этот флаг, то в качестве результата необходимо указывать не папку, а имя файла. Если балансировка была проведена через фильтр автоподготовки с флагом %%--no-split-destinations%% (не разбивать по направлениям), то в программе будет отображаться единственная балансировка с названием соответствующем шаблону: \\ <Наименование фильтра> <Текущая дата в момент проведения балансировки>
  
   *<code>--no-verification</code>   *<code>--no-verification</code>
Строка 875: Строка 994:
 ''none balancing reports where created'' - если количество сформированных балансировок равно нулю. ''none balancing reports where created'' - если количество сформированных балансировок равно нулю.
  
 +  *<code>--balancing-by-clients</code>
 +[[балансировка_запасов#балансировка_по_клиентам|Балансировка будет формироваться по клиентам]]. То есть, в качестве реципиента выступают клиенты.
 +
 +Если данный флаг не указан, то балансировка формируется исходя из настроек балансировки, пользователя указанного в команде.
 +
 +  *<code>--no-split-by-order-group</code>
 +
 +При заданных группах заказа, сформированные балансировки будут разбиваться в соответствие с заданными значениям групп заказа. Если в консольной команде указан данный флаг, то разбиение по группам заказа не происходит, не зависимо от настроек.
  
 +  *<code>--exclude-null-balancing</code>
  
 +Удаляются все балансировки без товаров или у которых суммарное количество для перемещения равно 0.
 ====Отображение балансировки в интерфейсе программы=== ====Отображение балансировки в интерфейсе программы===
 При выполнении консольной балансировки её результат сохраняется в базу.  При выполнении консольной балансировки её результат сохраняется в базу. 
Строка 947: Строка 1076:
  Далее указываются статусы для фильтрации. Для указания нескольких статусов их нужно перечислить через ;  Далее указываются статусы для фильтрации. Для указания нескольких статусов их нужно перечислить через ;
  
-Виды [[акции_новые&#фильтрация_по_коэффициенту_увеличения_спроса|значений]]:+Виды [[акции_новые1#фильтрация_по_коэффициенту_увеличения_спроса|значений]]:
  
   *notset - не установлен   *notset - не установлен
Строка 961: Строка 1090:
   *exceeded_period_treshold - период акции больше, чем указан в [[настройки/глобальные_настройки#Ограничение для расчета акций по их длительности|глобальной настройке]]   *exceeded_period_treshold - период акции больше, чем указан в [[настройки/глобальные_настройки#Ограничение для расчета акций по их длительности|глобальной настройке]]
  
 +Если используются [[настройки/глобальные_настройки#коэффициенты_акций_по_товарам|потоварные коэффициенты акций]], то расчёт и прогнозирование коэффициентов, будет производиться только по товарам удовлетворяющим условиям фильтра.
 ==Фильтрация по времени проведения акций== ==Фильтрация по времени проведения акций==
 Акции можно отфильтровать по времени их проведения  - прошедшие, текущие, будущие Акции можно отфильтровать по времени их проведения  - прошедшие, текущие, будущие
Строка 977: Строка 1107:
 <code> <code>
 --storage storage_name --storage storage_name
- 
 --client client_name --client client_name
- 
 --product product_name  --product product_name 
 </code> </code>
  
-Акция попадает в выборку, только если в неё входят клиент и склад и артикул одновременно.+Указывать нужно коды: storage_name - код склада, client_name - код клиента, product_name - код товара (артикул). 
 + 
 +Указать можно любой из 3 флагов. 
 +Если указаны все 3 флага, то акция попадает в выборку, только если в неё входят и клиенти склади код товара (артикулодновременно.
  
  
Строка 1002: Строка 1133:
  
 Если допущена ошибка в названии категории, то не будет рассчитана ни одна акция Если допущена ошибка в названии категории, то не будет рассчитана ни одна акция
 +
 +Также возможно задание категорий, по которым не будет проводиться расчет акций.
 +
 +Задается при помощи
 +<code>
 + --ignoredcategory cat1;cat2;cat3
 +</code>
 +
 +Например:
 +calc-coeff-mcampaigns --ignoredcategory test1;test2 demo
 +
 +Будут рассчитаны все акции кроме категорий test1 и test2
 ==Принудительное прогнозирование коэффициентов акций== ==Принудительное прогнозирование коэффициентов акций==
 При расчете коэффициентов акций можно принудительно прогнозировать коэффициент всех попавших под фильтр команды акций(даже для прошедших акций). При расчете коэффициентов акций можно принудительно прогнозировать коэффициент всех попавших под фильтр команды акций(даже для прошедших акций).
Строка 1029: Строка 1172:
 ==Прогресс - бар== ==Прогресс - бар==
 В командной строке будет отражен прогресс-бар степени завершенности расчета акций и число рассчитанных и расчитываемых акций  В командной строке будет отражен прогресс-бар степени завершенности расчета акций и число рассчитанных и расчитываемых акций 
-=====Проведение анализа-эффективности без участи пользователя=====+=====Проведение анализа-эффективности без участия пользователя=====
  
 ====Синтаксис==== ====Синтаксис====
-<code>FSystemConsole.exe kpianalysis database source target</code>+<code>FSystemConsole.exe kpianalysis database source target [--user userName] [--from dateFrom] [--to dateTo] </code>
  
  
Строка 1047: Строка 1190:
 Файл, куда сохранятся результаты анализа Файл, куда сохранятся результаты анализа
  
-Для сохранения результатов в формате xlsx нужно дописать флаг --xlsx после директории сохранения файла с результатами+Для сохранения результатов в формате xlsx нужно дописать флаг <code> --xlsx </code>  после директории сохранения файла с результатами 
 + 
 +user 
 + 
 +Берутся настройки пользователя (расчет сверхзапасов и пр.) для проведения анализа
  
 =====Расчет прогноза - обеспечение продаж без участия пользователя===== =====Расчет прогноза - обеспечение продаж без участия пользователя=====
  
 ====Синтаксис==== ====Синтаксис====
-<code>FSystemConsole.exe stockanalysis database source target</code>+<code>FSystemConsole.exe stockanalysis database source target --filter filter [--user user_name] [--utf8] [--type] [--units] [--price]] [[--remove-null]]</code>
  
 +database - Путь или имя базы для расчетов
  
-database+source - [[обеспечение_продаж&#создать_файл_с_параметрами_анализа_csv_или_txt|Файл]] с параметрами расчетов. 
  
-путь или имя базы для расчетов+target - Полный путь к Excel csv(.csv) или Excel(.xlsx) файлу, в который будут записаны результаты прогноза.
  
-source+filter - имя фильтра подготовки заказа, отбирающего товары для расчета. Если он указан, то отбор товаров из файла source не будет учитываться 
  
-[[обеспечение_продаж&#создать_файл_с_параметрами_анализа_csv_или_txt|Файл]] с параметрами расчетов. +username - имя пользователя, от которого будут взяты  настройки и вид итоговой таблицы 
  
-target+utf8 - сохранение файла в формате utf8
  
-Файл, куда сохранятся результаты анализа+type - выбор типа анализа  
 +  *demand - оценка спроса 
 +  *stocks - оценка запасов 
 +  *sales - оценка продаж 
 + 
 +units - выбор показателей анализа 
 +  *amount - в натуральных единицах 
 +  *money - в денежных единицах 
 + 
 +prices - выбор цен 
 +  *sell (цены реализации) 
 +  *purchase (цены закупки) 
 + 
 +--remove-null - удаление строк с нулевым прогнозом 
 +=====Расчёт прогноза - плана заказов===== 
 + \\ 
 +**Синтаксис** 
 + 
 +<code>FSystemConsole.exe stockplan database --filter filter [--user userName] --target target --dates date1 date2 [--xlsx] [--csv] [настройки плана заказов]</code> 
 + 
 +''database'' - путь или имя базы для расчетов 
 + 
 +''filter''- имя фильтра, созданного в программе для выбора товаров, попадающих в план заказов 
 + 
 +''user'' - имя пользователя. Если указан пользователь, то используются настройки плана заказов, указанные у этого пользователя в программе (Тип анализа, Временная корзина, Единицы измерения) 
 + 
 +''target'' - файл, куда сохранится рассчитанный план заказов 
 + 
 +''dates'' - период расчёта плана заказов. dates1 - дата От, dates2 - дата До 
 + 
 +''xlsx csv'' - указывается в каком формате сохранится план заказов xlsx или utf8 csv. если флаг не указан, то сохранится в xlsx. 
 + 
 + 
 +**Настройки плана заказов** 
 + 
 +  * Тип анализа 
 +<code>--type (income | ordered | rests | payment)</code> 
 +''income'' - Приходы \\ 
 +''ordered'' - Заказано \\ 
 +''rests'' - Остатки \\ 
 +''payment'' - План оплат \\ 
 + 
 +  * Временная корзина 
 +<code>--timeBucket (week | month | quarter)</code> 
 +''week'' - По неделям \\ 
 +''month'' - По месяцам \\ 
 +''quarter'' - По кварталам \\ 
 + 
 +  * Единицы измерения 
 +<code>--units (sell | purchase | amount | weight | volume | reports | sku)</code> 
 +''sell'' - в Реализационных ценах \\ 
 +''purchase'' - в Закупочных ценах \\ 
 +''amount'' - Нат. ед. \\ 
 +''weight'' - Вес \\ 
 +''volume'' - Объём \\ 
 +''reports'' - Число заказов \\ 
 +''sku'' - SKU \\ 
 + 
 +<note important>План оплат формируется только в закупочных ценах и не может быть поквартальным.</note> 
 + 
 +**Пример команды**
  
 +<code>FSystemConsole.exe stockplan demo.db --filter filter№1 --user FCN --target "D:\FNOW\OUT" --dates 01.01.2020 01.04.2020 </code>
 =====Проведение ABC анализа===== =====Проведение ABC анализа=====
 Вы можете проводить ABC- XYZ и кросс ABC-анализ автоматически при помощи консольной утилиты. Результаты анализа запишутся в базу, а также в Excel файл с разбиением товаров по группам. Вы можете проводить ABC- XYZ и кросс ABC-анализ автоматически при помощи консольной утилиты. Результаты анализа запишутся в базу, а также в Excel файл с разбиением товаров по группам.
 ====Синтаксис команды==== ====Синтаксис команды====
-<code> FSystemConsole.exe abcxyzanalysis database source target [--user username] [--save name] [--public] </code>+<code> FSystemConsole.exe abcxyzanalysis database source target [--filter filter] [--user username] [--save name] [--public] [--sum-storage]] </code>
 database – название базы  database – название базы 
  
Строка 1076: Строка 1285:
  
 target – место сохранения файла с результатами анализа target – место сохранения файла с результатами анализа
 +<code>--filter filter </code> 
 +имя фильтра автоподготовки заказа, отбирающего товары для проведения анализа. Если в файле настроек указаны товары и задан фильтр автоподготовки, то товары будут браться из фильтра.
 <code>--user username </code> <code>--user username </code>
 флаг с указанием пользователя для которого будет сохранён анализ, если пользователь  не указан, анализ в базе сохранён не будет, а только в файл флаг с указанием пользователя для которого будет сохранён анализ, если пользователь  не указан, анализ в базе сохранён не будет, а только в файл
Строка 1083: Строка 1293:
 <code>--public </code> <code>--public </code>
 флаг что бы сделать доступным итоги анализа всем пользователям флаг что бы сделать доступным итоги анализа всем пользователям
 +
 +<code>--lastyear</code>
 +флаг для проведения анализа за последний год от максимальной даты в базе
 +<code>--sum-storage</code>
 +флаг для проведения анализа суммарно по складам
 ===Формат файла для проведения анализа=== ===Формат файла для проведения анализа===
 1.Основные параметры проведения анализа 1.Основные параметры проведения анализа
Строка 1090: Строка 1305:
 дополнительные столбцы;список через ';' свойств и параметров для вывода</code> дополнительные столбцы;список через ';' свойств и параметров для вывода</code>
  
-склад - имя склада или пусто (тогда расчет будет произведен по всем складам)+склад - код склада или пусто (тогда расчет будет произведен по всем складам)
  
-тип - группа или срез+тип - товар, группа или срез
  
-название - название группы или среза+название - код товара, название группы или среза
  
 2. Настройки анализа 2. Настройки анализа
  
 Нужно задать тип анализа и границы отнесения к группам. Формат: Нужно задать тип анализа и границы отнесения к группам. Формат:
-<code>Ось;название оси (X,Y,Z (не обязательно));тип анализа (ABC/XYZ);Параметр;граница отнесения к группе С/группе X; граница отнесения к группе B/группе Y;</code>+<code>Ось;название оси (X,Y,Z (не обязательно));тип анализа (ABC/XYZ/XYZ (без нулей)/FMR);Параметр;граница отнесения к группе С/группе X/группе R; граница отнесения к группе B/группе Y/группе M;</code>
 Пример: Пример:
 <code>ось;X;ABC;Кол-во дней продаж;5;20 <code>ось;X;ABC;Кол-во дней продаж;5;20
Строка 1125: Строка 1340:
  
 <code>не анализировать новые товары</code> <code>не анализировать новые товары</code>
 +
 +если нужно [[анализ/abc-xyz#учёт_дефицитных_дней_при_проведение_авс_анализа|учитывать дефицит]] при формирование ABC анализа:
 +
 +<code>учитывать дефицит</code>
 +
 +если нужно [[анализ/abc-xyz#настройки_abc_анализа|учитывать комплекты]]:
 +
 +<code> учитывать комлекты</code>
 +
 +если нужно провести анализ [[анализ/abc-xyz#abc-xyz_анализ_внутри_каждой_группы_отдел|внутри каждой группы отдельно]]
 +
 +<code> изолированно</code>
 +
 +
  
 ===Примеры файлов для проведения анализа=== ===Примеры файлов для проведения анализа===
 <code>15.04.2017;20.04.2017 <code>15.04.2017;20.04.2017
 Склад;срез;Поставщик;Алефонсина Склад;срез;Поставщик;Алефонсина
 +учитывать дефицит
 не анализировать новые товары не анализировать новые товары
 ось;X;ABC;Продажи, ед.;5;35 ось;X;ABC;Продажи, ед.;5;35
Строка 1140: Строка 1370:
 ось;X;ABC;Продажи, ед.;5;15 ось;X;ABC;Продажи, ед.;5;15
 ось;Y;XYZ;Продажи, ед.;20;55 ось;Y;XYZ;Продажи, ед.;20;55
 +ось;Z;FMR;Кол-во дней продаж;25;50
 дополнительные столбцы;Вес;Объём</code> дополнительные столбцы;Вес;Объём</code>
  
Строка 1168: Строка 1399:
 <code>assortiment database source target [--user username] [--public]</code> <code>assortiment database source target [--user username] [--public]</code>
  
-target - xls файл, в который будут записаны итоги анализа+target - полный путь к xls или xlsx файлу, в который будут записаны итоги анализа.
  
 флаг - -public - сделать доступным итоги анализа всем пользователям флаг - -public - сделать доступным итоги анализа всем пользователям
Строка 1177: Строка 1408:
  
 ==Формат файла для проведения анализа== ==Формат файла для проведения анализа==
-формат файла source состоит из простого перечисления товаров/групп/срезов для анализа 
  
-склад;тип;название+Формат файла source состоит из простого перечисления товаров/групп/срезов для анализа
  
-где тип - товар, группа или срез+<code>склад;тип;название</code>
  
-название артикул товара, название группы или среза+  * склад - код склада
  
-результаты анализа также записываются в базу программы.+  * тип - товар, группа или срез 
 + 
 +  * название - артикул товара, название группы или среза \\ 
 +Если анализ формируется по срезу, после названия среза, через ";", нужно указать конкретное значение среза. Анализ сформируется по товарам у которых значение среза соответствует указанному. 
 + 
 +Результаты анализа также записываются в базу программы.
  
  
Строка 1199: Строка 1434:
 source - файл настроек (может не существовать, если задан ключ --dates) source - файл настроек (может не существовать, если задан ключ --dates)
  
-target - файл для сохранения результата - если указаны форматы сохранения при помощи флагов, то расширение файла можно не прописывать, если не указfны - то расширение xlsx+target - файл для сохранения результата - если указаны форматы сохранения при помощи флагов, то расширение файла можно не прописывать, если не указаны - то расширение xlsx
  
 --dates dateFrom dateTo - даты от и до для расчёта. Если не указан ключ --dates и даты, то даты берутся из файла настроек. Если указан ключ, но не даты, то берутся минимальная и максимальная даты из базы. Если указан ключ и даты, то берутся даты из аргументов --dates dateFrom dateTo - даты от и до для расчёта. Если не указан ключ --dates и даты, то даты берутся из файла настроек. Если указан ключ, но не даты, то берутся минимальная и максимальная даты из базы. Если указан ключ и даты, то берутся даты из аргументов
  
 --csv --xlsx - флаги для выбора формата сохранения файла. Без указания флага файл статистик сохранится в формате xlsx --csv --xlsx - флаги для выбора формата сохранения файла. Без указания флага файл статистик сохранится в формате xlsx
- 
 ===Формат файла настроек=== ===Формат файла настроек===
 <code>дата_от;дата_до <code>дата_от;дата_до
Строка 1230: Строка 1464:
 Завершившиеся акции Завершившиеся акции
 </code> </code>
 +=====Расчет текущих дефицитов=====
 +В Forecast NOW! можно определить, есть ли текущий дефицит по товару и % дефицита по группе товара. 
 +<code>
 +FSystemConsole.exe calc-current-deficit  base path --csv --filter test --email mail@mailru
 +</code>
 +base - имя базы
 +
 +path - путь сохранения файла
 +
 +-- filter - имя фильтра для отбора товаров для расчета дефицита
 +
 +-- email - почты, на которые нужно разослать анализ (перечисляются через ,
  
 +--csv и --xlsx - форматы сохранения файла (по умолчанию сохраняются в xlsx)
  
 +====Итог анализа====
 +В итоге будет сохранен файл, где рассчитан % дефицита для группы товаров и есть ли дефицит по конкретным товарам
  
 +{{ :currentdeficite.png?600 |}}
 =====Удаление информации из базы===== =====Удаление информации из базы=====
 ====Синтаксис==== ====Синтаксис====
Строка 1240: Строка 1490:
  
 <code> <code>
-analogs              очистка аналогов +analogs                  очистка аналогов 
-products             удаление товаров из базы +products                 удаление товаров из базы 
-customer-purchases   удаление закупок для клиентов +customer-purchases       удаление закупок для клиентов 
-composite            очистка данных о комплектах +composite                очистка данных о комплектах 
-items-fields         очистка полей для товаров +items-fields             очистка полей для товаров 
-arrivals             очистка дат поступления заказов +arrivals                 очистка дат поступления заказов 
-orders               очистка реестра заказов +orders                   очистка реестра заказов 
-order-schedule     очистка расписаний заказов +order-schedule           очистка расписаний заказов 
-storage-graphs      иерархия складов+storage-graphs           иерархия складов
 balancing-destinations   направления балансировки balancing-destinations   направления балансировки
 +clients                  справочник клиентов
 +outdated-parameters-storages      неактуальные склады из параметров (из параметров удалятся все склады, которых нет как в истории продаж, так и в справочнике складов)
 +campaigns              акции
 </code> </code>
  
Строка 1292: Строка 1545:
 После запуска утилиты для каждого артикула будет удалена информация о продажах(со всех складов), классификации, параметрах(тоже со все складов), аналогах(если товар входил в нетривиальную группу аналогов, то он будет из неё удалён, в остальном порядок товаров в группе останется прежним. Если товар был главным аналогом, то за место него главным станет второй по порядку.).  После запуска утилиты для каждого артикула будет удалена информация о продажах(со всех складов), классификации, параметрах(тоже со все складов), аналогах(если товар входил в нетривиальную группу аналогов, то он будет из неё удалён, в остальном порядок товаров в группе останется прежним. Если товар был главным аналогом, то за место него главным станет второй по порядку.). 
  
 +====Удаление  товаров, не существующих в классификации из таблицы параметров====
 +
 +<code> FSystemConsole.exe clean-up-params demo.db </code>
 +
 +Удаляет из параметров записи по всем товарам, которые не существуют в классификации
 =====Экспорт информационной базы===== =====Экспорт информационной базы=====
 Позволяет экспортировать информационную базу, в том числе, в обезличенном режиме Позволяет экспортировать информационную базу, в том числе, в обезличенном режиме
Строка 1297: Строка 1555:
 ====Синтаксис команды==== ====Синтаксис команды====
 <code> <code>
-FSystemConsole.exe export type source target [options]+FSystemConsole.exe export type source target [опции]
 </code> </code>
-  *type: -ib или - -information-base  (экспорт информационной базы)+  *type: -ib или %%--%%information-base  (экспорт информационной базы)
   *source: имя базы   *source: имя базы
   *target: путь к экспортированному файлу   *target: путь к экспортированному файлу
  
-===Обезличивание информации===+===Опции=== 
 + 
 + 
 + 
 +==Обезличивание информации==
 Для обезличивания нужно добавить опцию <code>--impersonal</code> Для обезличивания нужно добавить опцию <code>--impersonal</code>
-==Пример==+ 
 +**Пример**
 <code>FSystemConsole.exe export -ib test.db D:\FN\test.ib --impersonal</code> <code>FSystemConsole.exe export -ib test.db D:\FN\test.ib --impersonal</code>
  
Строка 1356: Строка 1619:
   *Комплексные форматы заказов   *Комплексные форматы заказов
  
 +
 +==Выбор складов и товаров для сохранения==
 +
 +Для сохранения информационной базы с определённым набором товаров, необходимо добавить опцию и файл со списком товаров.
 +
 +<code>
 +--items-file <путь к файлу с товарами>
 +</code>
 +
 +Файл со списком товаров должен быть в csv формате. Содержать в себе два столбца: 1 - склад, 2 - код товара. Без заголовка
 +
 +Пример файла для 4 товаров с 2 складов
 +
 +<code>Склад №1;40000000016
 +Склад №1;40000000017
 +Склад №1;40000000018
 +Склад №1;40000000019
 +Склад №2;40000000016
 +Склад №2;40000000017
 +Склад №2;40000000018
 +Склад №2;40000000019</code>
 +
 +В информационной базе будут присутствовать данные только по указанным артикулам(информация по товарам аналогам так же будет выгружена) и складам. Истории продаж по связанным складам из иерархии или направлений балансировки не будет.
 +
 +Список выгружаемых данных:
 +
 +Данные которые выгружаются только по выбранным товарам и аналогам:
 +
 +  * История продаж
 +  * Параметры
 +  * Аналоги
 +  * Классификация (выгружаются только группы, их свойства и структура родительских групп, в которой находятся выбранные товары)
 +  * Акции
 +  * Поступления
 +  * Закупки под клиентов
 +  * Комплекты
 +  * Временные параметры
 +Данные, которые всегда выгружаются полностью:
 +
 +  * Структуры подчиненности складов
 +  * Стоимости и сроки доставки балансировки
 +  * Направления балансировки
 +  * Поставщики
 +  * Прайс-листы поставщиков
 +  * Параметры товаров поставщиков
 +  * Сроки доставки поставщиков
 +  * Группы поставщиков
 +  * Условия оплаты поставщиков
 +  * Критериев выбора товаров для ограничений заказа
 +  * Зоны хранения
 +  * Псевдонимы упаковок
 +  * Справочник клиентов
 +  * Сегменты клиентов
 +  * Пороги округления по упаковкам
 +  * Фильтры подготовки заказов
 +  * Расписание заказов
 +  * Выходные и рабочие дни
 +  * Транспортные средства
 +  * Пользователи, группы и права доступа групп
 +  * Настройки пользователей
 +  * Глобальные настройки
 +
 +
 +**Пример команды**
 +
 +<code>
 +FSystemConsole.exe export -ib test.db D:\FN\test.ib --items-file  D:\FN\items.csv
 +</code>
 +=====Частичная выгрузка данных=====
 +
 +Если необходимо выгрузить информацию только по одному товару, с одного склада, то нужно воспользоваться командой по частичной выгрузке. Часть информации будет выгружена полностью, так как может не иметь привязки к товару. Информация сохраняется в csv файлах, для последующей загрузки в программу.
 +
 +**Синтаксис команды**
 +
 +<code>
 +FSystemConsole.exe export-test-data source Код_склада;Артикул_товара target
 +</code>
 +
 +  * source - имя базы
 +  * target - путь к экспортированному файлу
 +
 +**Пример**
 +<code>
 +FSystemConsole.exe export-test-data demo.db Склад№1;4000000000016 C:\FCN
 +</code>
 +
 +В C:\FCN буду выгружены файлы : \\
 +
 +''export_order_shedules_Склад№1_4000000000016.csv'' - Все календари и расписания заказов \\
 +''export_prepare_reports_fitlers_Склад№1_4000000000016.csv'' - Все фильтры подготовки заказов \\
 +''export_properties_Склад№1_4000000000016.csv'' - параметры для товара 4000000000016 со склада Склад№1 \\
 +''export_sales_history_Склад№1_4000000000016.csv'' - продажи для товара 4000000000016 со склада Склад№1 в формате "Склад;Артикул;Клиент;Дата;Продано;Остаток на складе;Цена реализации;Закупочная цена;Учётная цена" \\
 +''export_storage_graphs_Склад№1_4000000000016.csv'' - Все иерархии складов \\
 +''export_suppliers_Склад№1_4000000000016.csv'' - Весь справочник поставщиков \\
 +''export_user_settings_Склад№1_4000000000016.csv'' - Все глобальные и локальные настройки для всех пользователей из базы. \\
 =====Проверка цифровой подписи заказа===== =====Проверка цифровой подписи заказа=====
  
Строка 1372: Строка 1730:
  
 <code> <code>
-FSystemConsole acvtivate-licence <путь к файлу лицензии>+FSystemConsole activate-license <путь к файлу лицензии>
 </code> </code>
  
Строка 1388: Строка 1746:
 Сообщение об ошибке работы консольной утилиты в интерфейсе: "Не удалось активировать файл лицензии 'полный путь к файлу лицензий'. Недостаточно прав доступа к папке 'путь где хранится файл лицензии'" Сообщение об ошибке работы консольной утилиты в интерфейсе: "Не удалось активировать файл лицензии 'полный путь к файлу лицензий'. Недостаточно прав доступа к папке 'путь где хранится файл лицензии'"
 =====Изменение кода склада===== =====Изменение кода склада=====
-Позволяет изменить записанные в программе коды складов. Для изменения кода склада нужно сохранить информационную база(Данные-Сохранить информационную базу) потом через консольную утилиту поменять коды складов в файле информационной базы и потом загрузить информационную базу в программу(Данные-Загрузить информационную базу). +Позволяет изменить записанные в программе коды складов. 
  
 ====Синтаксис==== ====Синтаксис====
-<code>FSystemConsole rename --storages dictionary_file old_ib_file new_ib_file</code> +<code>FSystemConsole.exe rename --storages storages.csv base </code>
- +
-dictionary_file - путь к файлу с кодами складов, csv файл вида "старый кода склада;новый код склада"+
  
 +storages.csv - путь к файлу с кодами складов, csv файл вида "старый кода склада;новый код склада"
 Старые коды будут заменятся на соответствующие им новые. Старые коды будут заменятся на соответствующие им новые.
  
-old_ib_file путь к файлу с информационной базой, в которой надо переименовать коды склады+base - имя базы данных, где нужно выполнить переименование кодов складов
  
-new_ib_file - путь к файлу с информационной базой, в который запишется информационная база с переименованными кодами складов+Переименование поддерживается в 
 +История продаж, Параметры, Акции, Результаты анализов 
 +Справочник Складов, Структура подчиненности складов, Пользователи и группыФильтр подготовки заказов, Календари, Расписания заказов, Настройки балансировки по умолчанию, Транспортные средства, Правила автоустановки параметров, Поставщики, направления балансировки, Ограничения балансировки, Поступления, Поля товаров, Закупки под клиентов, Партионные остатки, Пользовательские критерии для ограничений заказа, Справочник клиентов (доступные склады, сроки доставки по клиент склад)
  
-Если во время работы команды что-то пойдёт не такто об этом будут сообщено в журнале через ненулевой код возврата.+В случае если новый код склада существует, то переименование не будет выполненов консоли будет выдана ошибка с указанием где именно и какой код склада уже существует
  
 +=====Очистка журнала действий пользователей=====
  
 +<code>FSystemConsole clearlog database</code>
 +
 +database - имя базы
 +
 +Команда позволяет очистить журнал действий пользователей от старых записей, которые не попадают в период указанный в [[настройки/глобальные_настройки#хранение_истории_действий_пользователя|глобальной настройке]] \\
 +Если глобальная настройка по [[настройки/глобальные_настройки#очищать_журнал_действий_пользователя_при_закрытии_программы|автоматической очистки журнала]] выключена, то можно использовать данную команду.
 +
 +=====Применение правил автоматической установки=====
 +<code>FSystemConsole apply-parameters-rules [--general/--seasonal] database [--names/--tags] </code>
 +
 +general — применить все правила кроме сезонности \\
 +seasonal — расчет и применение правил сезонности
 +
 +Совместное использование в одной команде флагов general и seasonal, не допускается
 +
 +database — название базы
 +
 +names — после флага, в кавычках, через запятую, указываются названия правил (%%"%%правило1,правило2,правило3%%"%%), которые нужно применить. \\
 +tags — после флага, в кавычках, через пробел, указывается список тэгов в соответствие с которыми применяются автоправила
 +
 +Совместное использование в одной команде флагов names и tags, не допускается
 +
 +Если список названий правил и тип правил, не указаны, то операция будет произведена над всеми правилами в базе(если такие есть).
 +
 +=====Работа с кэш-сервером=====
 +1) Обновление всех файлов кэша для указанной БД
 +<code>
 +FSystemConsole cache-server update --database databaseName
 +</code>
 +
 + FSystemConsole databaseName - конкретное название рабочей базы FNOW
 +
 +
 +2). Удаление файлов кэша
 +<code>
 +cache-server deleteCacheFiles --database databaseName
 +</code>
 +
 + databaseName - конкретное название рабочей базы FNOW
 +
 +=====Формирование карточки товара=====
 +При помощи утилиты можно сформировать карточку товара. Команда:
 +<code>productcard <databaseName> (<saveDirPath>) -- user <userName> (--xlsx) (--csv) (--sql) (--filter <filterName>)
 +</code>
 +
 +Указание <databaseName> и --user <userName> ОБЯЗАТЕЛЬНО.
 +Если карточка формируется с указанием ключа --sql (необязательный аргумент), то указание папки сохранения файлов (<saveDirPath>) необязательно.
 +
 +Ключ --user задает имя того пользователя, от которого будут выбираться столбцы карточки для выгрузки (например, параметр Не заказывать, свойство Вес и т.д.)
 +Выгружаемые столбцы настраиваются в отображении карточки товара на вкладке Анализ - Карточка товара.
 +Если не указать столбцы, то выгрузки не будет.
 +
 +Примеры команд:
 +<code>
 +productcard demo.db --user Администратор --sql (выгрузить в промежуточную базу FNTransferDatabase, в таблицу productCard карточку по всем товарам из классификации)
 +productcard demo.db --user Администратор --sql --filter РЦ (выгрузить в промежуточную базу FNTransferDatabase, в таблицу productCard карточку по товарам, подходящие под условия фильтра РЦ)
 +
 +Промежуточная база FNTransferDatabase создается автоматически в том же месте, где и основная база. Название задается автоматически, переименовать нельзя.
 +
 +productcard demo.db C:\\Temp--user Закупщик (выгрузить карточку по всем товарам классификации в формате xlsx - по умолчанию - в каталог C:\\Temp)
 +productcard demo.db C:\\Temp--user Балансировщик --csv (выгрузить карточку по всем товарам классификации в формате csv в каталог C:\\Temp)
 +productcard demo.db C:\\Temp--user Администрато --csv --xlsx --filter РЦ (выгрузить карточку по товарам, подходящих под условия фильтра РЦ, в форматах csv и xlsx в каталог C:\\Temp)
 +</code>
 +
 +При использовании выгрузки в промежуточную базу (флаг --sql) лучше будет позаботиться о том, чтобы работала массовая загрузка.
 +(подключение консоли к серверу БД через localhost или 127.0.0.1, путь для массовой загрузки существует (см. глоб. настройку), к нему есть доступ для записи.
 +
 +Выгружаются данные в колонках
 +storage(Код склада), product(артикул товара), column0(значение первого столбца с данными в карточке товара указанного в команде пользователя), column1(значение второго столбца), ...., columnN
 +
 +Поддерживаемые колонки: параметры, свойства, поля товаров, результаты анализов
 +=====Формирование графика заказов и поставок=====
 +
 +Вы можете сформировать график ближайших заказов и поставок в Excel в разбивке поставщик-склад-группа товаров, склад-группа товаров-поставщик и т.п (любая комбинация трех признаков заказа).
 +Для этого нужно использовать команду
 +
 +<code>
 +FsystemConsole delivery-schedule databaseName [--horizon 21] [--grouping supplier;group;storage | supplier;storage;group | group;supplier;storage | group;storage;supplier | storage;supplier;group | storage;group;supplier] [--saveDir path]
 +</code>
 +
 +delivery-schedule — название команды
 +         
 +databaseName — обязательный аргумент — название базы данных FN или путь до файла с базой SQLite.
 +
 +horizon – необязательный аргумент, указывает горизонт оценки заказов в днях. По  умолчанию должно использоваться 7 дней.
 +
 +grouping – способ группировки записей календарей. Предполагает три значения, перечисляемые через ;. supplier – поставщик, group – группа классификации, storage – склад. Указывает тип представления дерева от верхних уровней к дочерним. Например: group;supplier;storage – на верхнем уровне будут располагаться товарные группы, в них будут вложены поставщики, в свою очередь поставщиков можно раскрыть по отдельным складам. Возможные варианты перестановок приведены выше в описании формата команды.
 +
 +По умолчанию будет использоваться группировка supplier;group;storage.
 +
 +saveDir – необязательный аргумент, указывает путь к каталогу, куда должен будет выгружаться файл. По умолчанию будет использоваться подкаталог «Поставки» в директории сохранения заказов для учётной системы (соответствующий путь указан в [[настройки/глобальные_настройки#пути_сохранения|глобальной настройке]]). 
 +
 +====Итог работы====
 +В итоге вы получите Excel файл с двумя листами- "Календарь заказов" и "Календарь поставок", где будет отображено число заказов/поставок на каждую дату по выбранным признакам 
 +
 +{{ ::2024-09-11_11-06-50.png?800 |}}
 +
 +=====Проверка заказов=====
 +Вы можете проверять, какие заказы должны быть сегодня подготовлены различными пользователями, исходя из существующих расписаний заказов.
 +
 +Для этого в консольной утилите нужно использовать команду
 +
 +<code>
 +check-orders databaseName <filter f1;f2....;fn>,
 +</code>
 +
 +databaseName - название базы данных FN, 
 +
 +filter - необязательный элемент, по которому можно перечислить через ; фильтры для проверки. Если не указан, будут проверяться все имеющиеся фильтры в базе.
 +
 +Все заказы, которые нужно подготовить, появятся в [[:todo_list|списке дел]]
 +
 +=====Анализ состояния базы=====
 +Можно автоматически без взаимодействия с интерфейсом проверить состояние базы данных и выдать оповещение администраторам если есть необходимость в оптимизации некоторых элементов 
 +
 +<code>
 +analyze-database имя базы
 +</code>