SQL-запросы MySales
- 1 Запросы, используемые в расчетах прогнозов
- 2 Запросы Промо
- 2.1 Формы Промо
- 2.2 Промо-процессор
- 3 Запросы, используемые при расчете заказов в модуле Пополнение
- 4 Запросы, используемые при работе с функционалом модуля Пополнение
- 5 Батчи
Запросы, используемые в расчетах прогнозов
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.jsss_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
- может иметь специальные условия для заказов на склад
Related content
(c) MySales Labs Ltd
Единственным и исключительным владельцем программного обеспечения MySales, данной документации и других связанных с MySales сопроводительных материалов, является MySales Labs Ltd