Сразу скажу, что я программист 1С и постараюсь изложить принцип решения. Со стороны Сайта реализовывать будут разработчики.
Задача:
Обновление цен на сайте (порядка 3000 товаров со скидками).
Требования:
1. Обеспечение корректности цен.
2. Минимизация времени обновления
3. Необходимость проверки цен на сайте до того, как они начнут действовать
С нашей точки зрения, штатная загрузка цен из XML (CommerceML2.0) не удовлетворяет этим требованиям. Хоть время загрузки цен и будет относительно небольшим, но после загрузки кто-то должен их проверять и в случае ошибки этому сотруднику придется снова загружать цены и т.д.
Предполагаемое решение:
1. Добавить в MySQL дополнительную таблицу – аналог 1С-ного регистра сведений «Цены номенклатуры»:
inforegister_catalog_price_1c - аналог регистра сведений «Цены номенклатуры»
Columns:
- ID int(16) PK – Ид записи
- DATE datetime – Дата записи
- PRODUCT_ID int(11) – Ид товара
- CATALOG_GROUP_ID int(11) – Ид типа цены
- PRICE decimal(18,2) – Значение цены
- CURRENCY char(3) – Валюта
Если на товар должна быть установлена новая цена, например, с 01.01.2018 то в таблице добавится новая строка для товара с датой 01.01.2018 новой и ценой.
2. Существующую таблицу b_catalog_price переименовывать в b_catalog_price_old.
3. Создать View с именем b_catalog_price с колонками (аналогичными исходной b_catalog_price):
- ID int(11) AI PK
- PRODUCT_ID int(11)
- EXTRA_ID int(11)
- CATALOG_GROUP_ID int(11)
- PRICE decimal(18,2)
- CURRENCY char(3)
- TIMESTAMP_X timestamp
- QUANTITY_FROM int(11)
- QUANTITY_TO int(11)
- TMP_ID varchar(40)
- PRICE_SCALE decimal(26,12)
Выбираем в этот View записи по следующему принципу:
- Для каждого товара запись с максимальной датой, меньшей, чем Текущая дата (колонка DATE) – т. е., актуальная цена для товара (аналог Среза последних цен Регистра сведений на текущую дату в 1С).
Т.о., при загрузке данных на сайт из 1С заполняется таблица inforegister_catalog_price_1c необходимыми данными, которые средствами SQL попадают в созданный View (загрузка будет доработана разработчиками).
При обновлении цен можно заранее загрузить данные в таблицу inforegister_catalog_price_1c на будущую дату. Эти данные можно будет проверить.
При наступлении даты начала действия новых цен, они автоматом будут получены из View. Насколько я понял, необходимо будет очистить кэш страниц сайта.
Предполагаем также, что такое решение будет не сильно чувствительно к обновлениям, достаточно будет повторить подмену таблиц (однако не совсем понятно, что произойдет с inforegister_catalog_price_1c при обновлении).
Прошу оценить это решение, насколько реально его реализовать, достаточно ли замены одной таблицы, чему стоит уделить внимание?
Высказывайте критику и предложения.
Задача:
Обновление цен на сайте (порядка 3000 товаров со скидками).
Требования:
1. Обеспечение корректности цен.
2. Минимизация времени обновления
3. Необходимость проверки цен на сайте до того, как они начнут действовать
С нашей точки зрения, штатная загрузка цен из XML (CommerceML2.0) не удовлетворяет этим требованиям. Хоть время загрузки цен и будет относительно небольшим, но после загрузки кто-то должен их проверять и в случае ошибки этому сотруднику придется снова загружать цены и т.д.
Предполагаемое решение:
1. Добавить в MySQL дополнительную таблицу – аналог 1С-ного регистра сведений «Цены номенклатуры»:
inforegister_catalog_price_1c - аналог регистра сведений «Цены номенклатуры»
Columns:
- ID int(16) PK – Ид записи
- DATE datetime – Дата записи
- PRODUCT_ID int(11) – Ид товара
- CATALOG_GROUP_ID int(11) – Ид типа цены
- PRICE decimal(18,2) – Значение цены
- CURRENCY char(3) – Валюта
Если на товар должна быть установлена новая цена, например, с 01.01.2018 то в таблице добавится новая строка для товара с датой 01.01.2018 новой и ценой.
2. Существующую таблицу b_catalog_price переименовывать в b_catalog_price_old.
3. Создать View с именем b_catalog_price с колонками (аналогичными исходной b_catalog_price):
- ID int(11) AI PK
- PRODUCT_ID int(11)
- EXTRA_ID int(11)
- CATALOG_GROUP_ID int(11)
- PRICE decimal(18,2)
- CURRENCY char(3)
- TIMESTAMP_X timestamp
- QUANTITY_FROM int(11)
- QUANTITY_TO int(11)
- TMP_ID varchar(40)
- PRICE_SCALE decimal(26,12)
Выбираем в этот View записи по следующему принципу:
- Для каждого товара запись с максимальной датой, меньшей, чем Текущая дата (колонка DATE) – т. е., актуальная цена для товара (аналог Среза последних цен Регистра сведений на текущую дату в 1С).
Т.о., при загрузке данных на сайт из 1С заполняется таблица inforegister_catalog_price_1c необходимыми данными, которые средствами SQL попадают в созданный View (загрузка будет доработана разработчиками).
При обновлении цен можно заранее загрузить данные в таблицу inforegister_catalog_price_1c на будущую дату. Эти данные можно будет проверить.
При наступлении даты начала действия новых цен, они автоматом будут получены из View. Насколько я понял, необходимо будет очистить кэш страниц сайта.
Предполагаем также, что такое решение будет не сильно чувствительно к обновлениям, достаточно будет повторить подмену таблиц (однако не совсем понятно, что произойдет с inforegister_catalog_price_1c при обновлении).
Прошу оценить это решение, насколько реально его реализовать, достаточно ли замены одной таблицы, чему стоит уделить внимание?
Высказывайте критику и предложения.