SQL-запросы MySales

 

Запросы, используемые в расчетах прогнозов

 

check_semaphore_ready

Используется в батче ‘Отправить SMS при отсутствии семафора’. В строках возвращает те сообщения, которые система отправляет на соответствующие номера в SMS.

all_stores

Используется в модуле classes/loaders/storeDim. Загружает список магазинов в память, чтобы каждый раз не запрашивать его из базы. Периодически перезагржается модулем loaders/masterData, в зависимости от параметра options.loader.reloadMasterDataHours, который по умолчанию равен 4-м часам. Также загружает привязки магазинов к регионам, к кодам погоды, и ценовым линиям (если используются в запросе prices_by_sku_store)

select s.STORE_ID NUM, s.STORE_NAME NAME, s.REGION_ID REGION, w.WEATHER_CODE WEATHER, WHS from STORES s left join STORE_WEATHER w on s.STORE_ID=w.STORE_ID where s.STORE_ID in (select distinct store_id from sku_range where end_date is null or end_date > dateadd(d, -90, getdate())) order by s.REGION_ID, s.STORE_ID

STORE_WEATHER это маппинг магазина и кода региона для получения данных погоды

должно быть из значений, определенных в опции - weather - locations

 

new_stores

Используется в модуле classes/loaders/storeDim для того, чтобы загружать новые магазины. Также как и запрос all_stores, периодически перезагружается в память.

select n.NEW_STORE_ID, n.OLD_STORE_ID, n.COEFFICIENT from RPM_NEW_STORES n where now() between n.START_DATE and n.END_DATE and n.IS_ACTIVE = 1

 

all_regions

Используется в модуле classes/loaders/storeDim для того, чтобы загружать список регионов. Также как и запрос all_stores, периодически перезагружается в память.

select '0' NUM, 'All' NAME, null WEATHER union all select r.REGION_ID NUM, r.REGION_NAME NAME, w.WEATHER_CODE WEATHER from REGIONS r left join REGION_WEATHER w on r.REGION_ID=w.REGION_ID

 

all_groups

Используется в модуле classes/loaders/ProductDim для того чтобы загружать полный справочник товарных групп. Периодически перезагружается в память модулем loaders/masterData, в зависимости от параметра options.loader.reloadMasterDataHours, который по умолчанию равен 4-м часам.

 

sku_group

Используется в модуле classes/loaders/ProductDim для того чтобы загружать полный справочник товаров, обычно, либо ограниченный наличием ассортиментной матрицы, либо если новый товар, определяя его по наличию первой цены в последние 30 дней. Также периодически перезагружается в память модулем loaders/masterData, в зависимости от параметра options.loader.reloadMasterDataHours, который по умолчанию равен 4-м часам.

Вместе со справочником товаров, загружает в память их закупочные цены и % НДС (для модуля Цены, формы Оптимизация цен), коэф-ты страхового запаса на позиции и привязки позиций к товарным группам

 

all_suppliers

Используется в модуле classes/loaders/supplierDim для того, чтобы загружать полный справочник поставщиком. Также периодически перезагружается в память модулем loaders/masterData, в зависимости от параметра options.loader.reloadMasterDataHours, который по умолчанию равен 4-м часам.

 

all_lines

Используется в модуле classes/loaders/supplierDim для того, чтобы загружать полный справочник товарный линий, которые используются в модуле Цены (форма “Оптимизация цен”, “Политики”, “Динамика ценовых индексов”. Также периодически перезагружается в память модулем loaders/masterData, в зависимости от параметра options.loader.reloadMasterDataHours, который по умолчанию равен 4-м часам.

 

sku_store_ss_coef

Используется в модуле classes/loaders/skuStoreSSCoef для того, чтобы загружать коэффициенты страхового запаса в разрезе SKU-магазин, которые имеют приоритет над коэф-тами страхового запаса в разрезе SKU или магазина.

 

sales_sum_stores_sum_groups

Загружает суммарные продажи по группам и магазинам для анализа на сводном уровне. Используется в модуле classes/loaders/Sales, в том случае, если и для группы и для магазина в форме Анализ проставляется значение “sum”. Исторически, этот функционал не нашел широкого применения и имеет статус “экспериментальный”.


sales_by_stores_sum_groups

Загружает суммарные продажи по группам для анализа на сводном уровне, но в разрезе магазинов. Используется в модуле classes/loaders/Sales, в том случае, если только для группы (не для магазинов) в форме Анализ проставляется значение “sum”. Исторически, этот функционал не нашел широкого применения и имеет статус “экспериментальный”.

 

sales_by_group_sum_stores

Загружает суммарные продажи по магазинам для анализа на сводном уровне, но в разрезе групп. Используется в модуле classes/loaders/Sales, в том случае, если только для магазинов (не для групп) в форме Анализ проставляется значение “sum”, а для SKU - значение “skip”. Исторически, этот функционал не нашел широкого применения и имеет статус “экспериментальный”.

 

sales_by_sku_sum_stores

Загружает суммарные продажи по магазинам для анализа на сводном уровне, но в разрезе SKU. Используется в модуле classes/loaders/Sales, в том случае, если только для магазинов (не для групп и не для SKU) в форме Анализ проставляется значение “sum”. Исторически, этот функционал не нашел широкого применения и имеет статус “экспериментальный”.

 

sales_by_group_store

Загружает продажи в разрезе группа-магазин-неделя. Используется в модуле classes/loaders/Sales, если пользователь запрашивает прогнозы в разрезе SKU-магазин, либо группа-магазин, либо если запускается батч “Расчет прогнозов” (batches/fcst_batch). Указывается отдельно для каждого клиента, чтобы можно было исключать определенные недели или другие данные. При изменении этого запроса необходимо очищать и перезагружать файловый кэш.

 

sales_by_sku_store

Загружает продажи в разрезе SKU-магазин-неделя. Используется в модуле classes/loaders/Sales, если пользователь запрашивает прогнозы в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов” (batches/fcst_batch). Указывается отдельно для каждого клиента, чтобы можно было исключать определенные недели или другие данные. При изменении этого запроса необходимо очищать и перезагружать файловый кэш.

 

ranges_by_sku_store

Загружает ассортиментные матрицы для расчета прогнозов. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов” (batches/fcst_batch).

 

presentation_by_sku_store

Загружает презентационный запас для того, чтобы эти данные подтягивались в форму “Анализ” или для расчета прогнозов. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов (batches/fcst_batch).

 

master_fcst_by_sku_store

Загружает мастер-прогнозы и подвязанные к ним магазины. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов (batches/fcst_batch). Движок использует эти данные, чтобы пропорционально повышать или понижать прогнозы в разрезе магазинов.

 

future_group_store_prices

Загружает прогнозные будущие цены в разрезе группа-магазин, которые используются при расчете прогнозов, если в прогнозах включена каннибализация (предикторы grp_price или grp_price_r в файле options.json5)

 

prices_by_sku_store

Загружает прошлые и будущие цены из таблицы PRICES, которые могут быть либо в разрезе SKU-магазин, либо SKU-ценовая линия. Определяющим для выбора системой уровня либо SKU-магазин, либо SKU-ценовая линия, является наличие в результах поля STORE или PRL. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов (batches/fcst_batch).

 

comp_prices_by_sku

Загружает цены конкурентов, чтобы отображать их в форме Анализ, либо использовать в прогнозах. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов (batches/fcst_batch).

 

sales_day_by_sku_store

Загружает последние продажи в разрезе SKU-магазин-день, для того, чтобы движок обрабатывал предиктор adj_day (Дневная корректировка), корректирующий прогноз на ближайшие недели на основании последних продаж. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов” (batches/fcst_batch).

 

sales_day_share_by_sku_store

Загружает доли продаж по дням недели в разрезе SKU-магазин, для того, чтобы движок обрабатывал предиктор adj_day (Дневная корректировка), корректирующий прогноз на ближайшие недели на основании последних продаж. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов” (batches/fcst_batch).

 

sales_day_share_by_group_store

Загружает доли продаж по дням недели в разрезе группа-магазин, для того, чтобы движок обрабатывал предиктор adj_day (Дневная корректировка), корректирующий прогноз на ближайшие недели на основании последних продаж, в случае, если доли продаж по дням в разрезе группа-магазин, вытягиваемые запросом sales_day_share_by_sku_store, не найдены. Используется если пользователь запрашивает расчет прогнозов в разрезе SKU-магазин, либо если запускается батч “Расчет прогнозов (batches/fcst_batch).

 

select_max_sales_week

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

 

after_forecasting_batch_query

Набор запросов, выполняемый после завершения батча “Расчет прогнозов”. В нем, в частности, применяются значения корректировок прогнозов из таблицы FCST_ADJUSTMENTS и проставляется дата в поле LOADED таблицы FCST.

 

Форма Новые SKU/группы

На страницах сайта new_sku_load и new_group_load не используется, так как не используется в routes\api.js, Т.е. все что приходит в формы страниц сайта идет через http запросы, которые описаны в routes\api.js

new_sku_load и new_group_load используются в расчетах прогнозов

new_sku_load

Извлекает список пар новый SKU/аналог и соотношение RATIO, также извлекается ID группы.
В качестве фильтров может использоваться: список новых SKU, список групп, список поставщиков и завершающая неделя.

NEW_SKU_ID - новый товар, его аналогом является OLD_SKU_ID
который относится к товарной группе GROUP_ID, поставляемый поставщиком из списка supplier_list

RATIO (диапазон значений от 0,01 до 9,99) определяет насколько сильно влияет OLD_SKU_ID на NEW_SKU_ID в расчетах, а WEEK определяет, когда это влияние закончится.

Причем между SKU и группами, есть одно отличие. Новой группе можно назначить только один аналог, а SKU можно назначить несколько.

 

new_group_load
Извлекает список пар новый GROUP/аналог и соотношение RATIO.
В качестве фильтров может использоваться список новых GROUP и завершающая неделя.


sku_for_group
Извлекает список SKU_ID и наименований для заданного GROUP_ID.
Возвращает результат по запросу /api/new_items/sku_for_group на странице new_items.
Данные предназначены для заполнения выпадающих списков выбора нового SKU и аналогов.

 

all_new_items
Возвращает результат запроса /api/new_items/list для заполнения основной таблицы new_items. Извлекает новый SKU, наименование, ID группы, завершающую неделю и также списки аналогов и соотношений RATIO с разделителем ";". В качестве фильтра может использоваться строка поиска, как для наименования, так и одного SKU_ID.

remove_new_item
Удаляет связь заданного нового SKU с аналогами, установкой признака IS_ACTIVE в 0.
Вызывается со страницы new_items запросом /api/new_items/remove с newsku в качестве параметра.

add_new_item
Добавляет связь нового SKU с аналогом и соотношением RATIO, либо добавив новую запись в таблицу NEW_SKU, либо обновив существующую.
Вызывается со страницы new_items запросами /api/new_items/add , /api/new_items/edit и /api/new_items/create_from_file, соответственно при добавлении, редактировании и импорте из CSV.
В SQL запрос передается один новый SKU, аналог, соотношение RATIO и завершающая неделя, http запросы массив из таких записей.

all_new_groups
Возвращает результат запроса /api/new_groups/list для заполнения основной таблицы new_groups. Извлекает ID новой группы, ID аналога, соотношение RATIO и завершающую неделю. Наименования групп заполняются в браузере из словарей.

remove_new_group
Удаляет связь заданной новой группы с аналогом, установкой признака IS_ACTIVE в 0.
Вызывается со страницы new_groups запросом /api/new_groups/remove с newgroup в качестве параметра

add_new_group
Добавляет связь новой группы с аналогом и соотношением RATIO, либо добавив новую запись в таблицу new_groups, либо обновив существующую.
Вызывается со страницы new_groups запросами /api/new_groups/create.
В SQL запрос передается ID новой группы, ID аналога, соотношение RATIO и завершающая неделя, а http запрос массив из таких записей.

Форма Мастер-прогноз

master_fcst_table

master_fcst_check_fcst

master_fcst_add_fcst

master_fcst_stores_set_revision

master_fcst_delete_fcst

Форма Доп. загрузка (экспериментальная)

add_fcst_main_table

add_fcst_sku_stores

add_fcst_sku_check

add_fcst_add_record

add_fcst_add_record_stores

add_fcst_edit_record

add_fcst_delete_record

 

Регулировка страхового запаса

Для чего и как используется регулировка страхового запаса описано тут.

Следующие 7 запросов относятся к странице http://localhost:3000/ss_adjust "Регулировка Страхового Запаса"

Коэффициент страхового запаса можно устанавливать на уровнях:

  • SKU-Вся сеть - установленный коэффициент применяется для всех магазинов в сети - таблица SS_ADJUSTMENTS;

  • Магазин - коэффициент применяется для всех позиций в выбранном магазине - таблица STORE_SS_COEF;

  • SKU-Магазин - коэффициент применяется для конкретной пары sku-магазин - таблица SKU_STORE_SS_COEF.

Таблицы имеют похожую структуру: набор ID к которым привязывается коэффициент страхового запаса для последующего автозаказа, сам коэффициент SS_COEF numeric(9,1) и пара UPDATED_BY/UPDATED с ID менеджера и временем изменения.

 

Фронтовой функционал собран в:
public\javascripts\ss_adjust\main.js
public\javascripts\ss_adjust\templates.js

Серверная часть в:
classes\controllers\ssAdjust.js

Практически все запросы по модификации таблиц SS_ADJUSTMENTS/STORE_SS_COEF/SKU_STORE_SS_COEF через http запросы из api.js выведены в public\javascripts\ss_adjust\main.js

То что открывается, например по http://localhost:3000/ss_adjust , это index.html собранный из .jade шаблонов и набор .js скриптов. Для удобства, основная часть собрана в main.js.

Эти скрипты выполняются в браузере на клиентской стороне и обеспечивают визуальную составляющую, а максимум что могут, так отправлять http запросы и разбирать ответ на них. У нас все http запросы собраны в routes\api.js и тут можно найти, что из backend обработки соответствует какому запросу.

А вот содержимое api.js уже выполняется на стороне сервера и уже здесь есть доступ к базе данных.

И как раз тут видно, что все запросы /api/ss_adjust/.../ обращаются к classes\controllers\ssAdjust.js Внутри ssAdjust.js можно найти обращение к базе и используемые SQL запросы.

 

Фронтовой функционал собран в:
public\javascripts\ss_adjust\main.js
public\javascripts\ss_adjust\templates.js
Серверная часть в:
classes\controllers\ssAdjust.js

ss_adjustments_table_get_skus
Основной запрос наполнения таблицы таба "SKUs" ss_adjust. Назначен на /api/ss_adjust/get_skus_by_group.
Фильтр список групп. Поиск по SKU осуществляется в браузере.

 

ss_adjustments_table_get_stores
Основной запрос наполнения таблицы таба "Магазины" ss_adjust. Назначен на /api/ss_adjust/data.
Фильтров нет. Поиск по названию или ID магазина осуществляется в браузере.

 

ss_adjustments_table_get_sku-stores
Основной запрос наполнения таблицы таба "SKUs/Магазины" ss_adjust. Назначен на /api/ss_adjust/data.
Фильтров нет. Поиск по названию или ID магазина или SKU осуществляется в браузере.
Выпадающие списки для SKU/STORE - это форма добавления новой записи в таблицу.

 

ss_adjustments_sku_coef_update
Запрос сохранения данных в SS_ADJUSTMENTS. Привязан к /api/ss_adjust/update-sku-coef и /api/ss_adjust/import_skus_to_table и /api/ss_adjust/bulk-update'.
Используется как при редактировании данных из формы, так и при импорте из csv.

 

ss_adjustments_store_coef_update
Запрос сохранения данных в STORE_SS_COEF. Привязан к /api/ss_adjust/update-store-coef и /api/ss_adjust/import_stores_to_table и /api/ss_adjust/bulk-update'.
Используется как при редактировании данных из формы, так и при импорте из csv.

 

ss_adjustments_skustore_coef_update
Запрос сохранения данных в SKU_STORE_SS_COEF. Привязан к /api/ss_adjust/update-skustore-coef и /api/ss_adjust/import_skustores_to_table и /api/ss_adjust/bulk-update'.
Используется как при редактировании данных из формы, так и при импорте из csv.

 

ss_adjustments_skustore_create
Запрос добавления данных в SKU_STORE_SS_COEF. Привязан к /api/ss_adjust/create-new-skustore.
Используется для добавления новой пары SKU/STORE в таблицу с пустым SS_COEF.

Форма Корректировка прогноза

Описание корректировки прогноза

Форма Корректировка прогноза
http://localhost:3000/forecast_adjustments
Основная таблица этой формы FCST_ADJUSTMENTS.
Таблица интерфейсная, в [after_forecasting_batch_query] и [forecast_adjustment_batch] данные перегружаются в таблицу FCST_SKU.

Фронтовой функционал собран в:
public\javascripts\manual_forecast\main.js
public\javascripts\manual_forecast\templates.js
Серверная часть в:
classes\controllers\manualForecast.js

 

manual_forecast_table_data
Основной запрос страницы forecast_adjustments. Предназначен для извлечения данных отображаемых таблицей. Назначен на /api/manual_fcst/data и /api/manual_fcst/data_by_filters.
Первый используется при первом открытии страницы и дополнительно извлекает список магазинов, групп, SKU и т.д., а второй для обновления таблицы при применении фильтров.
Фильтры SKU, магазин и неделя.

 

manual_forecast_create
Запрос сохранения данных в FCST_ADJUSTMENTS. Привязан к /api/manual_fcst/create-new-skustore.
Используется при редактировании данных из формы.

 

manual_forecast_delete
Запрос удаления данных из FCST_ADJUSTMENTS. Привязан к /api/manual_fcst/delete_row, а также выполняется при редактировании записи в /api/manual_fcst/create-new-skustore, /api/manual_fcst/create-new-skustore__bulk и /api/manual_fcst/create-new-promo__bulk.
Первый назначен на удаление записи из формы.

 

manual_forecast_update
Запрос изменения данных в FCST_ADJUSTMENTS. Привязан к /api/manual_fcst/update-skustore, а также к /api/manual_fcst/import_skustores_to_table.
Первый используется при редактировании данных из формы, а второй при импорте из csv.

 

manual_forecast_sales_sku_day
Используется для извлечения объемов продаж из таблицы SALES_SKU_DAY, при добавлении записи в /api/manual_fcst/create-new-skustore__bulk.

 

manual_forecast_sales_sku_day_group
Используется для извлечения объемов продаж из таблицы SALES_SKU_DAY, при добавлении записи в /api/manual_fcst/create-new-skustore__bulk.

 

fcst_adjustments_promo
Извлекает список промо, актуальных для заданной недели, через startDate и endDate. Выведен в /api/manual_fcst/get_promo.
Используется для наполнения выпадающего списка промо.

 

fcst_adjustments_promo_stores_by_id
Извлекает список магазинов привязанных к заданному промо. Выведен в /manual_fcst/get_promo_sku-stores.
Используется для наполнения списка выбора магазина в модальном окне заведения коэффициента.

 

fcst_adjustments_promo_skus_by_id
Извлекает список SKU привязанных к заданному промо. Выведен в /manual_fcst/get_promo_sku-stores.
Используется для наполнения списка выбора SKU в модальном окне заведения коэффициента.

ss_adjustments_table_get_skus

ss_adjustments_table_get_stores

ss_adjustments_table_get_sku-stores

ss_adjustments_sku_coef_update

ss_adjustments_store_coef_update

ss_adjustments_skustore_coef_update

ss_adjustments_skustore_create

Форма Просмотр прогнозов

fcst_view_sku_by_all_regions

fcst_view_sku_by_region

fcst_view_sku_by_store

fcst_view_group_by_region

fcst_view_group_by_store

fcst_view_sku_by_sum_stores

fcst_view_stock_sku_by_all_regions

fcst_view_stock_sku_by_store

fcst_view_stock_group_by_region

fcst_view_stock_group_by_store

fcst_view_stock_sku_by_region

fcst_view_assort_sku_by_all_regions

fcst_view_assort_sku_by_region

fcst_view_assort_sku_by_store

fcst_view_managers

 

Запросы Промо

Формы Промо

promo_group_headers

promo_by_sku_store

item_structure

store_structure

promo_update_item_prices

promo_approve

promo_user

promo_headers

promo_headers_calendar

select_promo_id

create_promo

import_internal_promo_header

promo_delete

delete_promo_skus

delete_promo_stores

promo_items

promo_items_detailed

promo_stores

promo_details

promo_update_dates

promo_update_params

promo_unapprove

promo_update_fmt_stores

promo_revisions

promo_add_revision

promo_delete_revision

promo_update_revision

promo_update_revision_sku

promo_update_sku_parameters

promo_update_sku_parameters_with_sales_price

promo_up_revision

promo_up_revision_header

promo_shift_revisions

promo_shift_revisions

promo_update_sku_benefit_with_sales_price

promo_update_sku_benefit_with_communications

promo_update_sku_benefit_with_sales_price_with_communications

promo_get_sku_duplicates

promo_item_names

promo_revision_details

promo_make_copy

promo_get_sku_comparables

promo_get_promo_revision_comparables

promo_get_skus_by_item_code

promo_excel_download

 

Промо-процессор

promo_update_group_ratio

promo_max_end_week

promo_update_group_ratio

fcst_promo_items

fcst_promo_avg_sales

fcst_promo_avg_sales_group

fcst_promo_stores

promo_delete_sku

promo_delete_sku

fcst_promo_details

fcst_promo_comparable_sku_delete

fcst_promo_items_update

fcst_promo_result_clean

fcst_promo_result_header_update

fcst_update_promo_group_uplift

fcst_promo_result_update

promo_calc_batch_headers

promo_batch_headers

promo_batch_stores

promo_batch_avg_sales_sku

promo_batch_avg_sales_group

promo_batch_merge_sku_sales

update_group_avg_promo_uplift

update_sku_avg_promo_uplift

 

Запросы, используемые при расчете заказов в модуле Пополнение

rpm_get_all_cross_dock_if_any

Данный запрос используется для того, чтобы определить список кросс-док диаграмм магазинов, которые нужно пересчитывать, если батч запущен по кросс-док диаграммам склада. Это необходимо для того, чтобы пересчитывать заказы магазинов сначала, перед тем, как пересчитывать КД-заказы склад-поставщик

rpm_get_store_picking_diagrams_by_contract_and_whs_id

Данные запрос используется, чтобы выбрать все диаграммы склад-поставщик и поставщик-склад для каждого конкретного склада, в том случае, если в параметрах указана хоть одна диаграмма, относящаяся к этому складу. Это необходимо потому, что заказ поставщик-склад зависит от заказов склад-магазин, а заказы склад-магазин зависят от заказов склад-поставщик (в части корректировки доставки по наличию остатка), а позиции в разных диаграммах/контрактах могут пересекаться. Отследить как именно они пересекаются - трудоемко, поэтому пересчет заказов по складу возможен только общий.

rpm_get_stores_for_orders

Данные запрос выбирает все пары магазин-склад либо, склад-склад, либо склад-поставщик из имеющихся диаграмм, для того чтобы выстроить очередность пересчета магазинов и складов. Очередность магазинов (которые не являются в тоже время и складами), выстраивается просто по возрастанию номеров, так как она не имеет логического значения. Очередность пересчета складов выстраивается по принципу: сначала промежуточные склады, потом склады, которые которые заказывают у поставщиков. Если цепочка промежуточных складов имеет несколько звеньев, то сначала пересчитываются более поздние звеня цепи, потом более ранние. Очередность так выстраивается потому, что заказы более поздних звеньев цепи являются прогнозом отгрузок при расчете заказов более ранних звеньев цепи.

rpm_get_diagrams_by_store

Данные запрос отрабатывает отдельно по каждому магазину или складу, в соответствии с очередностью их расчета. Он вытягивает те номера и параметры диаграмм, которые влияют на расчет заказов, кроме самого графика (вместо него подтягиваются календари запросом rpm_only_calendars_by_store).

rpm_only_calendars_by_store

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

rpm_get_skus_by_store

Данные запрос вытягивает номера SKU в привязке к событиям календаря, а также значения пользовательских изменений заказа, тип заказа, и пользователя который его изменил, если на момент расчета заказ по этому событию-SKU имеется. Это необходимо, чтобы сохранить пользовательские изменения при пересчете, а также отличить системные изменения заказа от пользовательских. Отрабатывает отдельно по каждому магазину или складу.

rpm_get_forecasts_by_store

Данный запрос выполняется отдельно для каждого магазина или склада и вытягивает прогнозы ( разрезе недель), страховой запас и промо-составляющую в прогнозе по всем пересчитываемым SKU.

rpm_get_master_products_forecasts_by_store

Данный запрос выполняется отдельно для каждого магазина или склада и вытягивает прогнозы (в разрезе недель), страховой запас и промо-составляющую в прогнозе по всем пересчитываемым SKU, которые являются готовым продуктом или полуфабрикатом в одной из рецептур и у них стоит галочка “производство” в параметрах позиций на этом конкретном магазине или складе.

rpm_get_sku_range_for_master_products

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

rpm_get_if_bom_by_store

Данный запрос выполняется отдельно для каждого магазина или склада, и вытягивает все рецептуры для всех мастер-продуктов или полуфабрикатов, у которых в параметрах позиций стоит галочка “производство” на этом конкретном магазине или складе.

rpm_get_master_products_stock_presentation

Данный запрос выполняется отдельно для каждого магазина или склада, и вытягивает значения презентационного запаса для мастер-продуктов в рецептурах, у которых стоит галочка “производство”

rpm_get_presentation_stock_by_store

Данный запрос выполняется отдельно для каждого магазина или склада, и вытягивает значения презентации для всех пересчитываемых SKU.

rpm_get_add_presentation_stock_by_store

Данный запрос выполняется отдельно для каждого магазина или склада, и вытягивает значения дополнительной выкладки для всех пересчитываемых SKU.

rpm_get_latest_stock_by_store

Данный запрос вытягивает значения остатка, за минусом кол-ва, зарезервированного для заказов pick-to-zero, для каждого магазина или склада, а также дату этого остатка.

rpm_get_latest_stock_for_whs_stock_estimation

Данный запрос выполняется перед началом расчетов магазинов, и вытягивает остатки складов, которые затем используются для расчета прогнозного остатка склада по датам, чтобы выполнять корректировку доставки заказов магазинов и оценивать прогнозный остаток магазинов по датам, увеличивая будущие заказы магазинов там, где остаток склада будет вымываться.

rpm_get_latest_stock_date

Данный запрос вытягивает самую последнюю дату остатков из таблицы LATEST_STOCK. Заказы считаются на N вперед от этой даты. От этой же даты рассчитываются прогнозные остатки склада. Дата корректируется на +1 день, исходя из предположения, что остатки загружаются на вчера на вечер, а система считает их как сегодня на утро (параметр options.replenishment.adjustStockDate)

rpm_get_tender_items

Запрос вытягивает активные тендерные позиции из таблицы RPM_TENDER_ITEMS. Эти данные используются для того, чтобы проставлять на заказах признак “Тендер”.

rpm_get_sku_range_by_store

Запрос вытягивает активные позиции в ассортиментной матрице в разрезе дат. Выполняется по каждому магазину отдельно. Далее, эти данные используются, чтобы не заказывать позиции, которые не активные в АМ.

rpm_get_master_sku_range_by_store

Запрос вытягивает готовую продукцию, которая активна в ассортиментной матрице в разрезе дат, и производится в этом магазине.. Выполняется по каждому магазину отдельно. Далее, эти данные используются, чтобы не заказывать ингредиенты для готовой продукции, которая не активна в АМ.

rpm_get_sku_parameters

Данный запрос выполняется для каждого магазина отдельно, и вытягивает параметры позиций, по которым рассчитывается заказ: цена закупки, галочка “утро”, признак “pick-to-zero” для склада, с которого заказывается позиция, признак “whs-pick-to-zero” для транзитного склада, для которого рассчитывается заказ, срок годности для расчета прогноза списания (SHELF_DAYS), срок годности, умноженный на коэффициент для обрезания заказов (SHELF_DAYS_FOR_LIMIT), максимальная вместимость, вес, гарантированный заказ, кратность, минимальный заказ, признак “лимит срока годности”, дополнительные циклы заказа, дополнительные дни в прогнозе Д1Д2, фактор округления кратности, лимит списаний.

По умолчанию, для ограничения заказов по сроку годности, используется следующая формула:
round(coalesce(cast(ssc.SHELF_LIFE_PERC as numeric)/100, 0.8)
* (p.SHELF_DAYS - case when p.SHELF_DAYS >= 14 then 2 when p.SHELF_DAYS >= 3 then 1 else 0 end), 1) SHELF_DAYS_FOR_LIMIT

При необходимости ее поменять, необходимо кастомизировать этот запрос для заказчика.

rpm_get_add_load_by_store

Вытягивает даты дополнительной загрузки для SKU по каждому магазину отдельно.

rpm_get_sales_holiday_uplift

Вытягивает повышающие коэффициенты для праздничных дней в разрезе групп, для каждого магазина отдельно.

rpm_get_sales_sku_share

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

rpm_get_master_products_sales_sku_share

Вытягивает коэффициенты дней недели для каждого мастер-продукта из рецептур (IF_BOM_V). В случае, если для SKU не были посчитаны КДН, они берутся этим запросом с группы. Выполняется по каждому магазину отдельно.

rpm_get_elasticity_formulas

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

rpm_get_elasticity_formulas_for_master_products

Вытягивает формулы ценовой эластичности для мастер-продуктов из рецептур (IF_BOM_V), чтобы корректировать прогноз по дням в случае изменения цены в середине недели. Выполняется для каждого магазина отдельно.

rpm_get_prices_for_store

Вытягивает текущие и будущие цены в разрезе дат для всех SKU, по которым считается заказ. Выполняется для каждого магазина отдельно.

rpm_get_prices_for_store_master_products

Вытягивает текущие и будущие цены в разрезе дат для мастер-продуктов из рецептур (IF_BOM_V). Выполняется для каждого магазина отдельно.

rpm_get_all_promo_and_stores

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

rpm_get_all_promo_skus

Вытягивает информацию об SKU, которые участвуют в промо: номер промо, номер SKU, % скидки, цена продажи без скидки, повышающие коэф-ты промо (с учетом скидки и без).

rpm_get_store_orders_by_delivery_date_period

Вытягивает подтвержденные заказы магазинов, по которым нет прихода (oh.RECEIVED_DATE is null and ol.RECEIVED_QTY is null), а также ручные заказы из таблицы MANUAL_ORDERS. Используется для формирования товаров в пути в заказах. Выполняется по каждому магазину отдельно.

rpm_get_whs_orders_by_delivery_date_period_for_picking

Вытягивает подтвержденные заказы складов, по которым нет прихода (oh.RECEIVED_DATE is null and ol.RECEIVED_QTY is null), а также ручные заказы из таблицы MANUAL_ORDERS. Используется для расчета прогнозного остатка склада по датам.

rpm_delete_orders

Удаляет неподтвержденные заказы по каждому магазину отдельно, для диаграмм, которые участвуют в расчете. Это делается для того, чтобы вместо старых заказов, вставить новые, пересчитанные заказы.

rpm_insert_order_header

Запрос добавляет один новый заказ в таблицу RPM_ORDER_HEADER. Если при вставке пачки заказов через bulk insert возникла ошибка, то используется этот запрос, чтобы вставить в таблицу заказы по одному, для того, чтобы проблема в одном заказе не влияла на другие заказы в пачке.

rpm_insert_order_line

Запрос добавляет одну новую строку заказа в таблицу RPM_ORDER_LINE. Если при вставке пачки заказов через bulk insert возникла ошибка, то используется этот запрос, чтобы вставить в таблицу заказы по одному, для того, чтобы проблема в одном заказе не влияла на другие заказы в пачке.

rpm_get_previous_deliveries_for_writeoffs_calc

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

rpm_confirmed_deliveries_for_write_off_calc

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

rpm_get_confirmed_pick_zero_deliveries

Вытягивает подтвержденные заказы склад-поставщик pick-to-zero. Эти данные затем используются для того, чтобы выравнивать количество в заказах магазинов с количеством в заказе склада.

rpm_check_whs_working_day

Вытягивает рабочие дни склада на основании активных событий в календарях. Используется для того, чтобы при адаптации графика заказов магазинов по схеме pick-to-zero, заказы не попадали на нерабочие дни.

rpm_get_whs_pick_zero_calendars

rpm_get_whs_pick_zero_stock

rpm_get_store_pick_zero_orders

rpm_create_skus_by_diagrams_table

rpm_delete_skus_by_diagrams_table

rpm_delete_tmp_table_by_store

rpm_truncate_tmp_table_by_store

rpm_fill_tmp_table_with_skus_by_diagram

rpm_select_tmp_table_diagrams

rpm_clear_store_adjusted_delivery_today_order_delivery

rpm_get_existing_cross_dock_orders

rpm_delete_existing_cross_dock_orders

rpm_get_orders_by_stores_for_cross_dock

rpm_update_line_order_volume

rpm_add_whs_order_id_to_header

rpm_get_cross_dock_calendars

rpm_get_forecasts_for_picking

rpm_get_forecasts_for_picking_by_store

rpm_get_master_products_forecasts_picking_by_store

rpm_get_closest_picking_calendars

rpm_get_store_orders_with_insufficient_stock

rpm_get_pick_to_zero_with_insufficient_order

rpm_save_picking_forecast_orders

rpm_delete_assigned_lots

rpm_get_picking_orders_for_lots_assignment

rpm_get_picking_lots_for_assignment

rpm_get_adjusted_picking_orders_to_recalculate

rpm_get_cross_orders_to_adjust_sku_delivery

rpm_clear_adjusted_delivery

rpm_set_adjusted_delivery_by_order_id

rpm_get_todays_whs_deliveries

rpm_confirm_orders_after_orders_batch

rpm_max_calendar_id

rpm_delete_calendars

rpm_delete_unlinked_headers_and_lines

Запросы, используемые при работе с функционалом модуля Пополнение

rpm_check_orders_batch_running– Проверяет наличие временной таблицы RPM_SKU_BY_DIAGRAMS.

Форма Диаграммы

Работает с таблицами RPM_DIAGRAM, RPM_DIAGRAM_GROUPS, RPM_DIAGRAM_ITEMS

Таблица RPM_DIAGRAM_STORES устарела. (как и колонка ALL_STORES в RPM_DIAGRAM). Одна диаграмма обслуживает один магазин.

Опциональные таблицы:
RPM_DIAGRAM_SCHEDULE - содержит список диаграмм для батча расчетов заказов, если указан аргумент --diagram_from

RPM_DIAGRAM_HIST - архив удаленных диаграмм

RPM_DIAGRAM_CHANGES - трекинг изменений в основных таблицах под специфику клиента

При использовании групп СКЮ или параметра ALL_SKUS список позиций берется из SKU_STORE_CONTRACT

 

rpm_diagrams

Обслуживает метод classes/controllers/rpm/diagram.js - getDiagrams , который вызывается ендпоинтом /rpm/get_diagrams и выдает список диаграмм по фильтру.

rpm_suppliers Аналогичен all_suppliers, только без сортировки. (SupplierDim.supplier_name ?). Вызывается перед модалкой новой диаграммы.

rpm_warehouses Список складов (StoreDim.warehouse_name?) Вызывается перед модалкой новой диаграммы.

rpm_contracts_by_supplier - для ЕП /rpm/get_diagram_params_by_supplier. Вызывается при смене поставщика диаграммы в модалке.

rpm_get_contract_by_diagram - список контрактов поставщика, указанного в диаграмме. Обслуживает ЕП /rpm/get_diagram_by_id.

rpm_get_diagram_by_id - параметры диаграммы для редактирования. Обслуживает ЕП /rpm/get_diagram_by_id.

rpm_check_remaining_stores_for_cross_dock - список магазинов, которые могут быть добавлены к кроссдок-пакету диаграмм. ЕП /rpm/get_remaining_stores_for_add_crdock.

rpm_skus_by_supplier - список СКЮ по контракту и магазинам для модалки диаграммы. ЕП /rpm/get_diagram_skus_by_contract.

rpm_get_diagram - выборка пересекающихся диаграмм. Запрос checkIntersections. Проверяет перед созданием или сохранением диаграммы есть ли существующие активные диаграммы, которые имеют те же самые пары sku/store (предполагается, что в один момент может быть только один активный контракт на пару sku/store). А также для кроссдок проверяет, есть ли уже диаграмма со склада поставщику для пары sku/whs, в том числе и для подмененных через cd_contract_map контрактов.

rpm_get_groups_for_diagram - список всех групп с пометкой выбранных для диаграммы. Выбранные группы берутся из GROUPS или SKU_STORE_CONTRACT_V, если там есть GROUP_ID. ЕП rpm/get_groups_for_diagram.

rpm_delete_rpm_diagram_groups_by_diagram - в методе updateSkus при редактировании диаграммы.

rpm_delete_rpm_diagram_items_by_diagram - в методе updateSkus при редактировании диаграммы.

rpm_get_diagram_mins_for_store

rpm_get_diagram_and_related_crdock

rpm_check_cross_dock_stores_confirmation

rpm_check_cross_dock_whs_confirmation

rpm_max_diagram_id

rpm_update_diagram

rpm_get_all_diagrams

rpm_stores_by_contract

rpm_check_if_diagram_orders_confirmed

rpm_full_delete_diagram_calendars_orders

rpm_full_delete_diagram_calendars_orders_cross_dock_stores

rpm_get_cross_dock_whs_diagram

rpm_check_contract_for_supplier

rpm_check_stores_for_contract

rpm_check_skus_for_contract_and_stores

rpm_get_whs_cross_dock_diagram_by_child_id

rpm_current_diagrams_by_contract_and_store

rpm_check_is_future_diagram_exists

rpm_check_if_confirmed_orders_exist

rpm_close_existing_diagrams

rpm_check_if_store_can_be_added_to_cross_dock

rpm_check_if_store_is_attached_to_crdock_pack

rpm_check_if_store_is_attached_to_another_crdock_pack

rpm_get_diagrams_to_copy_params

rpm_get_diagram_items_by_id

rpm_update_diagram_end_date

rpm_delete_calendar_by_diagram_id_and_end_date

rpm_check_if_today_confirmed_order

rpm_update_start_store_crdock_diagrams

rpm_update_interval_store_crdock_diagrams

rpm_get_delivery_days_of_crdock_pack

rpm_update_schedule_store_crdock_diagrams

rpm_delete_skus_store_cr_dock_diagrams

rpm_update_all_skus_store_cross_dock_diagrams

rpm_get_cr_dock_store_diagram_ids

Форма Календари


Место Календарей в системе MySales

 

Диаграмма описывает общие правила по которым будут создаваться заказы и поставки (приходы) от поставщика на магазины, или от поставщика на склады, и со складов на магазины. В диаграмме указывается диапазон дат когда такие правила будут действовать.
Другими словами диаграма описывает:

  • График заказов (дни или периоды)

  • График поставок (дни или периоды)

  • Время когда Майселс  автоматически подтвердит и сохранит заказ в системе и если указан email, то отправит заказ по електронной почте

  • Привязка вышеуказанеых настроек к контракту поставщику магазину или складу

Подробнее про диаграммы тут.

На основании диаграмм создаются Календари на события.
События бывают двух видов: Заказ и Поставка.

По каким либо причинам поставка может отмениться, и если это известно заранее, ее следует деактивировать в календаре. При пересчете заказов Система учтет что из плана выпала поставка и пересчитает Заказы и Поставки с учетом таких “каникул“ поставщика. Если по какой либо причине не было деактивировано событие в календаре, а поставка не произошла, то это необходимо отобразить в приходах нулевым количеством или если это не будет сделано, то система по остаткам скорректируется и при очередном пересчете скорректирует заказы.

Календари создаются в таких случаях:

  • при сохранении диаграммы календари сразу создаются под эту диаграмму на срок действия диаграммы или на некоторое количество дней вперед (это настройка файла опций - config/options_databasename.json5 replenishment: {calendarDays: 80 // how many days ahead the calendar is calculated} )

  • можно пересчитать (пересоздать) календари, из таблицы с диаграммами на сайте - localhost:3000/diagrams (или со странице с календарями - localhost:3000/calendars, как указано на картинках ниже. Перед пересчетом заказов, пересчитываются календари на основании которых создаются эти заказы. Пересчитываются заказы по выбранной диаграмме, и только те, у которых дата больше текущей. Если нужно пересчитать календари и заказы по одной диаграмме, то это можно сделать из меню строки слева. Если пересчитать несколько диаграмм, то слева в чекбоксах отметить необходимые для пересчета диаграммы, а потом справа в меню выбрать пересчет отмеченых диграмм. При пересчете заказов (календарей) по выбранной диаграмме, так же пересчитываются и календари и заказы по всем связанным диаграммам

  • если ко времени запуска батча есть недосчитанные календари, они досчитываются

  • ручное добавление календаря ( с привязкой к диаграмме и без привязки к диаграмме )

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

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

“Пересчитать календари“ не стоит понимать дословно. Сами по себе календари не пересчитываются они создаются Диаграммой и по сути являются расписанием событий для этой диграммы. События - Заказ или Поставка.
”Пересчитать календари” это значит пересчитать Заказы и Поставки которые будет происходит согласно этим календарям. Система это осуществляет по расписанию, как правило ночью, путем запуска Батча - скрипта, который выполняет расчеты.

 

 

Форма Календари
http://localhost:3000/calendar
Основная таблица этой формы RPM_CALENDAR

ID - уникальный идентификатор Календаря, его номер
DIAGRAM_ID - номер Диаграммы, на основании которой был создан Календарь
ORDER_DATE - дата Заказа который создается по этому календарю
DELIVERY_DATE - дата Поставки которая создается по этому календарю
NEXT_DELIVERY_DATE - дата Следующей Поставки которая создается по этому календарю
MORNING - утром или не утром произойдет Поставка запланированная на DELIVERY_DATE
IS_ACTIVE - активен ли данный календарь. Если значение 1, тогда система будет создавать Заказы и Поставки по этому календарю. Если значение 0 - не будет
DELETED_DATE - дата изменения поля IS_ACTIVE
DELETED_BY - кем было изменено поле IS_ACTIVE. Если -1, то изменение внесла либо система, либо разработчик
DELETED_REASON - причина изменения поля IS_ACTIVE
TYPE - тип календаря. d - созданный по диаграмме (автоматически при сохранении или редактировании диаграммы,
с - созданный вручную, custom (дополнительный),
m - созданный вручную, manual (ручной)

Строки из RPM_CALENDAR не удаляются, при “выключении“ Календаря, а IS_ACTIVE становится равным 0
Физическое удаление строк из таблицы RPM_CALENDAR происходит при пересчет расписания или при удаление диаграммы.

 

По одной диаграмме может быть создано несколько календарей с одной и той же датой, но с разным значением TYPE (В коде JS это обычно calendarTYPE)
Однако на одну дату может быть только один календарь с определенным типом.

Когда в расписании Диаграммы на одной неделе создается более 1 события, учитывается, чтобы дата поставки раннего календаря не была больше или равна дате поставки позднего.
Например: понедельник - 4, вторник - 2



На сайте на странице календарей ( http://localhost:3000/calendar ) можно наблюдать, что одна строка из таблицы RPM_CALENDAR будет отображаться двумя строками Заказ и Поставка

 

В дальнейшем по календарям формируются Заказы и Поставки.

Запросы FrontEnd

Фронтовой функционал собран в:
public\javascripts\rpm_calendars\main.js
public\javascripts\rpm_calendars\templates.js
public\javascripts\rpm_calendars\calendar_validators.js
public\javascripts\rpm_calendars\addStoreAndDiagramModal.js
public\javascripts\rpm_calendars\createCustomCalendarForm.js
Серверная часть в:
classes\controllers\rpm\calendar.js

rpm_max_order_id
В http запрос не выведен. Предназначен для служебных целей определения следующего ID заказа авто-инкрементом.
Используется в addManualEvent назначенном на /api/rpm/add_manual_event , для создания пользовательского события формирования заказа. Сами записи календарей создает и удаляет система в фоновой обработке (батч). Пользователь может только активировать и деактивировать запись в календаре.

 

rpm_select_events
Основной запрос страницы calendar. Предназначен для извлечения данных отображаемых таблицей. Назначен на /api/rpm/get_events.

Фильтры:
diagramID - массив ID диаграмм, через запятую,
diagramName - строка для поиска диаграммы по имени,
date - интервал дат разделенный "--", для определения ORDER_DATE или DELIVERY_DATE в зависимости от ключа,
supplier - для определения поставщика по связи с RPM_DIAGRAM.SUPPLIER_ID,
contract - для определения договора, по связи через RPM_DIAGRAM.SPECIFICATION_ID и CONTRACTS.CONTRACT_ID, есть условие как на CONTRACT_ID, так и на CONTRACT_NAME,
store - для определения магазина, по связи через RPM_DIAGRAM.STORE_ID,
eventType - для задания ключа поиска дат ('all','delivery','order'),

 

calendarType - для определения типа события,

manager - для определения пользователя, последним изменившего запись в RPM_DIAGRAM.

get_diagram_managers
Назначен на /api/rpm/get_diagram_managers. Используется для наполнения выпадающего списка выбора менеджеров, для фильтра основной таблицы.

 

rpm_get_event_details
Назначен на /api/rpm/get_diagram_managers. Используется для извлечения записи события по calendar_id, для наполнения модального окна редактирования события календаря.

 

rpm_get_details_for_manual_event
Назначен на /api/rpm/get_skus_for_manual_event. Используется в модальном окне создания пользовательского события формирования заказа.

 

rpm_get_diagram_schedule
Назначен на /api/rpm/get_diagram_schedule. Используется для извлечения графика по диаграмме, который отображается в модальном окне.

 

rpm_cancel_calendar_event
Назначен на /api/rpm/cancel_event. Используется для отмены события в календаре, при снятии галки "Актив." или массово над отмеченными записями из меню "Отменить события".

 

rpm_make_calendar_event_active_again
Назначен на /api/rpm/make_event_active_again. Используется для активирования ранее отмененных событий в календаре.

 

rpm_get_suppliers_from_diagrams
Назначен на /api/rpm/get_custom_params. Вызывается при открытии модального окна добавления события. Извлекает список поставщиков для активных диаграмм. Наполняет выпадающий список поставщиков в модальном окне.

 

rpm_get_diagrams_by_supplier
Назначен на /api/rpm/get_custom_params и /api/rpm/get_custom_params_by_supplier. Второе используется в public\javascripts\rpm_calendars\createCustomCalendarForm.js Извлекает список диаграмм для заданного поставщика.

 

rpm_get_diagrams_by_contract
Назначен на /api/rpm/get_custom_params_by_contract. Используется в public\javascripts\rpm_calendars\createCustomCalendarForm.js Извлекает список диаграмм для заданного договора.

 

rpm_check_todays_calendar
Используется в addCustomEvent выведенном в /api/rpm/add_custom_event. Проверяет существование календаря на заданную дату.

 

rpm_get_max_calendar_dates
Используется в addCustomEvent выведенном в /api/rpm/add_custom_event. Определяет предельные даты заказа и доставки для заданной диаграммы.

 

rpm_create_custom_event
Используется в addCustomEvent выведенном в /api/rpm/add_custom_event. Добавляет в RPM_CALENDAR запись о новом событии.

 

rpm_calendar_get_additional_data
Используется в assignTotalsToManualOrder и далее в addManualEvent выведенном в /api/rpm/add_manual_event. Извлекает список SKU/цен и объемов для заданных магазина и договора.

 

rpm_get_calendar_by_id
Используется в addManualEvent выведенном в /api/rpm/add_manual_event. Извлекает дату следующей доставки, договор, поставщика и склад по заданному ID события в календаре.

 

rpm_max_calendar_id
Используется в addCustomEvent выведенном в /api/rpm/add_custom_event. Предназначен для служебных целей определения следующего ID события в календаре авто-инкрементом.

 

rpm_delete_calendars
Используется в classes\controllers\rpm\dbServices.js в deleteCalendars. Далее в classes\engine\rpm_units.js есть вызов calendarDbService.deleteCalendars в deletePickZeroCalendarsAndOrders, что вызывается в calcStoreOrders из batches\rpm_create_orders.js, т.е. используется только в фоновой обработке.

 

Сейчас (ноябрь 2022) в calendar не используется.
rpm_adjust_delivery_by_sku
Назначен на /api/rpm/adjust_delivery_by_sku. Используется в orders, сейчас в calendar не используется.

rpm_get_cross_dock_store_orders_id
Используется в adjustDeliveryBySku назначенном /api/rpm/adjust_delivery_by_sku из classes\controllers\rpm\orders.js , перед вызовом rpm_adjust_delivery_by_sku.
Используется в orders, сейчас в calendar не используется.

rpm_order_stock_change_reasons
Назначен на /api/rpm/get_order_stock_change_reasons. Используется в public\javascripts\rpm_orders\main.js в calendar не используется.

rpm_change_order_stock
Назначен на /api/rpm/edit_order_stock и /api/rpm/edit_order_stock_and_volume. Используется в public\javascripts\rpm_orders\customStockInput.js и далее в public\javascripts\rpm_orders\main.js в calendar не используется.

rpm_set_cross_dock_optimization_if_any
Используется в classes\controllers\rpm\orders.js в setOrderVolume, что выведено в /api/rpm/edit_order_volume. Используется в public\javascripts\rpm_orders\main.js в calendar не используется.

rpm_change_order_volume
Используется в classes\controllers\rpm\orders.js в setOrderVolume, что выведено в /api/rpm/edit_order_volume. Используется в public\javascripts\rpm_orders\main.js в calendar не используется.

 

 

 

rpm_max_order_id

rpm_select_events

get_diagram_managers

rpm_get_event_details

rpm_adjust_delivery_by_sku

rpm_get_cross_dock_store_orders_id

rpm_get_details_for_manual_event

rpm_get_diagram_schedule

rpm_cancel_calendar_event

rpm_make_calendar_event_active_again

rpm_order_stock_change_reasons

rpm_change_order_stock

rpm_set_cross_dock_optimization_if_any

rpm_change_order_volume

rpm_get_suppliers_from_diagrams

rpm_get_diagrams_by_supplier

rpm_get_diagrams_by_contract

rpm_check_todays_calendar

rpm_get_max_calendar_dates

rpm_create_custom_event

rpm_calendar_get_additional_data

rpm_get_calendar_by_id

rpm_max_calendar_id

rpm_delete_calendars

Форма Новые магазины

rpm_get_new_stores

rpm_check_new_store

rpm_add_new_store

rpm_get_new_store

rpm_edit_new_store

rpm_delete_old_store

rpm_delete_new_store

Форма Спецификации (экспериментальная)

Вместо нее используется просто загружаемая таблица IF_BOM

rpm_get_products

rpm_edit_product_notes

rpm_edit_component_quantity

rpm_get_max_product_id

rpm_get_last_product_version

rpm_add_product

rpm_add_product_version

rpm_add_product_component

rpm_set_main_product

rpm_delete_product

rpm_delete_product_version

Форма Тендерные позиции

rpm_get_sku_tenders

rpm_get_supplier_emails

rpm_get_allowed_contracts

rpm_get_sku_suitable_contracts

rpm_set_order_contract

rpm_erase_sku_tender

rpm_delete_sku_tender

Форма Заказы

rpm_get_managers

rpm_select_orders_to_autoconfirm

rpm_change_order_confirm

rpm_get_order_by_id

rpm_get_cross_dock_orders_by_id

rpm_get_cross_dock_breakdown_by_organization

rpm_set_order_header_email_date

rpm_get_order_headers

rpm_orders

rpm_order_rows_excel_export

rpm_order_headers_excel_export

rpm_get_info_by_order_ids

rpm_get_orders_for_recalculation

rpm_get_full_header

rpm_get_order_tracking

rpm_get_full_order_line

rpm_update_order_line_custom_order

rpm_update_order_line_received

rpm_bulk_update_order_line_received

rpm_update_order_head_received

rpm_update_order_header_opt

rpm_update_order_line

rpm_bulk_update_order_head_received

rpm_cancel_order_line

rpm_update_adjusted_del_date

rpm_check_whs_cross_dock_and_stores_orders_equality

rpm_check_cross_dock_order_equality_by_sku

rpm_confirm_cross_dock_store_orders

rpm_record_email_error

rpm_get_manager_by_id

rpm_cancel_order_confirmation

rpm_check_orders_before_send

rpm_get_sub_product_hierarchy

rpm_get_sub_product_hierarchy_picking

rpm_get_just_diagram_by_id

rpm_bulk_confirm_orders

rpm_get_main_record_diagram_by_id

rpm_get_whs_picking_fcst_details

rpm_reset_order_received_date

rpm_check_if_any_crdock_store_order_confirmed

rpm_bulk_cancel_orders

rpm_reset_order_cancelation

rpm_get_lines_for_adjust_custom_order

rpm_update_single_order_line_by_sku_and_id

rpm_get_main_header_record_by_id

rpm_update_order_totals

rpm_update_order_headers_by_id

Форма Параметры позиций

http://localhost:3000/sku_store_params

Подробнее про функционал “Параметры позиций“ можно узнать тут.
Основная таблица этой формы RPM_SKU_STORE_PARAMS
Таблица заполняется из базы клиента автоматически или через импорт файла csv

IS_CROSS_DOCK, PICK_TO_ZERO, IS_MORNING - эти поля определяют, подтянет ли SKU из контракта диаграмма соответствующего типа.
Сама диаграмма в таблицу RPM_SKU_STORE_PARAMS изменения не вносит.

public\javascripts\rpm_sku_store_params\main.js
Фронтовой функционал собран в:
public\javascripts\rpm_sku_store_params\main.js
public\javascripts\rpm_sku_store_params\templates.js
Серверная часть в:
classes\controllers\rpm\skuStoreParams.js

rpm_get_sku_store_params_rows
Основной запрос страницы sku_store_params. Предназначен для извлечения данных отображаемых таблицей. Назначен на /api/rpm/sku_store_params_get_rows.
Фильтры SKU (сравнивается как с SKU_ID, так и на подстроку в PRODUCTS.ARTICLE_NAME или PRODUCTS.ITEM_CODE), магазин, договор, поставщик, менеджер и признаки sku-range и is-new.

 

rpm_get_sku_store_params_by_key
Предназначен для извлечения из RPM_SKU_STORE_PARAMS признака PICK_TO_ZERO по заданным SKU и магазину.
Используется в classes\controllers\rpm\dbServices.js и далее в getPickingFcstDetails из classes\controllers\rpm\orders.js, что выведено в /api/rpm/get_picking_fcst_details , а сам запрос вызывается из orders.

 

rpm_get_sku_store_params_by_pairs
Предназначен для извлечения из RPM_SKU_STORE_PARAMS минимального заказа, кратности и признака sku-range по заданным SKU и магазину.
Используется в checkSkuStoreParamsByPairs из classes\controllers\rpm\push\index.js , что выведено в /api/rpm/push_check_sku_store_params_by_pairs, а сам запрос вызывается из http://localhost:3000/rpm_push

 

rpm_sku_store_params_get_init_data


Предназначен для извлечения списка менеджеров, наполняющего выпадающий список фильтра. Используется в getInitialData из classes\controllers\rpm\skuStoreParams.js и выведен в /api/rpm/sku_params_get_initial_data.

 

rpm_sku_store_params_get_contracts
Предназначен для извлечения списка договоров, наполняющего выпадающий список фильтра. Используется в getInitialData из classes\controllers\rpm\skuStoreParams.js и выведен в /api/rpm/sku_params_get_initial_data.

 

rpm_get_check_order
По заданному набору SKU и магазинов из вью SKU_STORE_CONTRACT_V извлекает договора, поставщиков и различные признаки для проверки возможности заказа.
Используется в checkPossibilityToOrder из classes\controllers\rpm\skuStoreParams.js и выведен в /api/rpm/sku_store_params/check_order_possibility.
Это ключевой запрос модального окна "Проверка возможности заказа".

 

rpm_get_diagram_and_cal_by_skus
По заданному набору SKU и магазинов извлекает диаграммы для проверки возможности заказа.
Используется в checkPossibilityToOrder из classes\controllers\rpm\skuStoreParams.js и выведен в /api/rpm/sku_store_params/check_order_possibility.
Это ключевой запрос модального окна "Проверка возможности заказа".

 

rpm_check_sku_store_pairs_existence
Проверяет существование SKU и магазинов в таблице RPM_SKU_STORE_PARAMS. Используется в filterNonExistentPairs и далее importFromFile из classes\controllers\rpm\skuStoreParams.js
назначенном в /api/rpm/sku_store_params/import_items. Используется при импорте из csv.

 

rpm_update_item_params_record
Предназначен для обновления полей таблицы RPM_SKU_STORE_PARAMS для заданных SKU и магазина. Используется в updateParamsBySkuIdStoreId из classes\controllers\rpm\dbServices.js и далее в importFromFile, updateRecordIntoDb и bulkUpdateRecordsIntoDb выведенных соответственно в /api/rpm/sku_store_params/import_items , /api/rpm/sku_store_params/update_record и /api/rpm/sku_store_params/bulk_update_record.

 

rpm_sku_store_params_import
Предназначен для вставки записи в таблицу RPM_SKU_STORE_PARAMS. Используется в updateParamsBySkuIdStoreId из classes\controllers\rpm\dbServices.js и далее в importFromFile, updateRecordIntoDb и bulkUpdateRecordsIntoDb выведенных соответственно в /api/rpm/sku_store_params/import_items , /api/rpm/sku_store_params/update_record и /api/rpm/sku_store_params/bulk_update_record.

Сейчас (ноябрь 2022) не используется:

rpm_sku_store_params_update_is_order
Предназначен для обновления поля IS_ORDER таблицы RPM_SKU_STORE_PARAMS для заданных SKU и магазина. Сейчас не используется.

rpm_sku_store_params_update_is_production
Предназначен для обновления поля IS_PRODUCTION таблицы RPM_SKU_STORE_PARAMS для заданных SKU и магазина. Сейчас не используется.

rpm_sku_store_params_update_is_shelf_limit
Предназначен для обновления поля IS_SHELF_LIMIT таблицы RPM_SKU_STORE_PARAMS для заданных SKU и магазина. Сейчас не используется.

 

Форма Дополнительная загрузка

rpm_get_promo_for_add_load

rpm_get_promo_stores

rpm_get_promo_skus

rpm_create_add_load

rpm_get_max_add_load_id

rpm_add_load_get_rows

rpm_delete_add_load

rpm_get_load_id_details

rpm_check_add_load_intersections

Форму Пуш распределение

rpm_push_get_stores

rpm_push_get_skus

rpm_push_get_sku_by_items

rpm_push_get_sku_by_eans

rpm_push_get_contract_by_stores_skus

rpm_push_get_store_sku_pairs

rpm_push_get_existing_diagrams

rpm_get_suppliers_by_contract

rpm_push_get_existing_diagrams_broad_params

rpm_push_get_forecasts_for_calc_distribution

rpm_push_get_max_push_id

rpm_create_push

rpm_get_closest_next_delivery_days_by_diagrams

rpm_get_managers_by_sku_store

rpm_get_purchase_prices_by_sku_store

rpm_get_all_push

rpm_push_get_whs_cross_dock_params

rpm_push_find_closest_delieveries

Форма Дополнительные места

http://localhost:3000/rpm_add_presentation
Эта функциональность завязана на две таблицы:
RPM_ADD_PRESENTATION - заголовки дополнительных мест
RPM_ADD_PRESENTATION_ITEMS - распределения дополнительных мест

rpm_add_presentation_get_table_rows

Основной запрос страницы rpm_add_presentation. Предназначен для извлечения данных отображаемых таблицей. Назначен на /api/rpm/add_presentation_get_rows.
Фильтры дата, название и SKU (сравнивается как с SKU_ID, так и на подстроку в PRODUCTS.ARTICLE_NAME).

 

rpm_add_presentation_get_promo

Назначен на /api/rpm/add_presentation_get_promo. Используется для наполнения выпадающего списка выбора "Промо" в модальном окне заведения новых дополнительных мест.
В качестве фильтра текущая дата (выбирается в левом верхнем углу страницы), должна быть меньше либо равна дате завершения "Промо"

 

rpm_add_presentation_get_promo_stores
Назначен на /api/rpm/add_presentation_get_promo_stores. Используется для наполнения выпадающего списка выбора магазинов, в модальном окне заведения новых дополнительных мест, с учетом выбранного "Промо". Фильтр, выбранный ID Промо.

 

rpm_add_presentation_get_promo_skus
Назначен на /api/rpm/add_presentation_get_promo_skus. Используется для наполнения выпадающего списка выбора SKU, в модальном окне заведения новых дополнительных мест, с учетом выбранного "Промо". Фильтр, выбранный ID Промо.

 

rpm_add_presentation_get_sku_store_pairs
Назначен на /api/rpm/add_presentation_get_sku_store_pairs. Предназначен для извлечения объемов дополнительных мест по заданным массивам SKU и магазинов.

 

rpm_add_presentation_max_id
В http запрос не выведен. Предназначен для служебных целей определения следующего ID дополнительных мест авто-инкрементом.

 

rpm_add_presentation_create

Назначен на /api/rpm/add_presentation_create. Предназначен для сохранения заголовка дополнительных мест.

 

rpm_add_presentation_delete

Назначен на /api/rpm/add_presentation_delete. Предназначен для удаления дополнительных мест, установкой признака IS_ACTIVE в 0.

 

rpm_add_presentation_get_by_id

Назначен на /api/rpm/add_presentation_load_by_id. Предназначен для извлечения заголовка дополнительных мест и списков ID SKU и магазинов, разделенных запятыми.
Используется в модальном окне редактирования.

 

add_presentation_check_sku_promo

Назначен на /api/rpm/add_presentation_check_sku_list. Используется для доопределения SKU_ID по заданным EAN или ITEM_CODE при импорте из csv.
Также используется в rpm_push при импорте.

 

rpm_add_presentation_check_unique_store_sku_dates

Назначен на /api/rpm/check_unique_store_sku_dates_for_presentation.
Выполняет проверку выбранных списков SKU/магазинов на пересечение с другими дополнительными местами.
Заводить пересекающиеся дополнительные места функционал позволяет, но отмечает предупреждение розовым цветом.

 

Форма Перемещения

используются страницей http://localhost:3000/transfers
через контроллер classes/controllers/transfers.js

get_stores_with_overstock
По установленным фильтрам выдает список магазинов с перетаркой, количество перетарки в штуках и деньгах используется в закладке Магазин - SKU

get_skus_with_overstock_by_store
По установленным фильтрам выдает список SKU с перетаркой в конкретном магазине. Ключевой параметр - STOCK_WEEKS, т.е. за какаое количество недель этот товар будет распродан.
Используется в закладке Магазин - SKU

get_stores_for_sku_transfer
Для выбранной SKU подбирает список магазинов, где STOCK_WEEKS для данного товара наименьший.
Используется в закладке Магазин - SKU

get_store_to_store_skus
Похоже на get_store_to_store_skus, но только для случаев возврата поставщику
Используется в закладке Магазин-Магазин

get_store_to_supplier_skus
Похоже на get_store_to_store_skus, но только для случаев возврата поставщику
Используется в закладке Магазин-Магазин

get_store_transfers
 Основной скрипт для закладки Заголовки
 По фильтру выдает список текущих трансферов
 Основная таблица RPM_STORE_TRANSFERS

get_store_transfer_lines
Основной скрипт для закладки Строки
По фильтру выдает позиции (строки) транферов
Основная таблица RPM_STORE_TRANSFERS_LINES

get_max_store_transfers_id
Выдаетпоследний ID в RPM_STORE_TRANSFERS, за которым можно делать вставку

 

update_store_transfer_record
Апдейт записи в RPM_STORE_TRANSFERS

 

update_store_transfer_line
Апдейт записи в RPM_STORE_TRANSFERS_LINES

 

delete_store_transfer_record
Удаление записи в RPM_STORE_TRANSFERS

 

delete_store_transfer_line
Удаление записи в RPM_STORE_TRANSFERS_LINES

 

get_sku_nearest_promo_in_store
Выдает из promo_header/promo_sku ближайшее промо в конкретном магазине (в таблице Магазин-Магазин позиции с промо помечаются голубым цветом)

Общие блоки

transfers_promo
Выдает список текущих промо или со стартом в ближайший месяц

 

transfers_add_presentation
Учитывает в калькуляции оверстока доп.презентацию

 

transfers_in_transit
 Учитывает в калькуляциях товар в пути по стандартным заказам. Товар в перемещениях учитывает другим образом.

Батчи

Батч расчета заказов

Батч расчета заказов - config/[customer]/sql_[customer]_batches.ini
Индивидуален для каждого клиента

Предварительные операции с таблицами перед началом расчета заказов

[rpm_pre_calc_orders_batch]
Выполняет предварительные операции с таблицами перед началом расчета заказов, а именно:

- синхронизирует цены в products.last_purchase_price и sku_store_contract.last_purchase_price,
где last_purchase_price - последняя актуальная цена товарной позиции


- обновляет в RPM_SKU_STORE_PARAMS записи на основе SKU_STORE_CONTRACT
где SKU_STORE_CONTRACT - таблица, которая заполняется клиентом, откуда берутся привязки SKU к актуальным контрактам.
RPM_SKU_STORE_PARAMS - это внутренняя таблица для расчетов автозаказа


- выставляет round_factor = 0,5 для записей, где он не указан явно, в таблице RPM_SKU_STORE_PARAMS


- в таблице RPM_SKU_STORE_PARAMS выставляет поле is_order на основе sku_range_current, rpm_presentation, SKU_WHS_DISABLED_ORDERS и др.
поле is_order определяет можно ли по паре SKU-STORE делать заказ. Значение 1 - можно, 0 - нельзя.


- обновляет manual_orders на основе manual_order_close, manual_order_receivings. manual_orders таблица ручных заказов, которая обновляется на основании закрытых, уже не актуальных ручных заказов manual_order_close и таблицы приходов по ручным заказам manual_order_receivings. Когда по заказу есть приход, заказ становится не актуальным. Так же заказ может становится не актуальным по дате close_date. Поле order_number во всех эти таблицах является связующим полем.


- автоматически закрывает manual_orders, если дата заказа устарела и где релевантно учитывает RPM_TRANSFERS (внутренее перемещение между магазинами). По состоянию на ноябрь 2022 таблица RPM_TRANSFERS практически никем не используется.


- обновляет received_qty в rpm_order_line на основе RPM_RECEIVINGS и где релевантно RPM_TRANSFERS
где rpm_order_line - таблица со строками автозаказов (табличная часть заказа, в вебинтерфейсе “строки“), а RPM_RECEIVINGS таблица приходов которые формируются согласно заказам.


- может автоматически выставлять в 0 received_qty в rpm_order_line для устаревших заказов.

- может автоматически закрывать устаревшие заказы


- закрывает заказ (поле received_date в rpm_order_header) на основе RPM_RECEIVINGS и rpm_order_close

где RPM_ORDER_ADJUSTMENTS делают ручные корректировки автоматически сгенерированых заказов, а RPM_RECEIVINGS -


- обновляет количество товара в заказе adjusted_delivery на основе RPM_ORDER_ADJUSTMENTS


- обновляет дату поставки adjusted_delivery_date на основе rpm_order_delay

- может иметь специальные условия для заказов на склад

 

(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd