
Учебный каталог содержит самостоятельные комплекты и модели, стоимость которых приходит из конфигуратора. Для самостоятельных комплектов редактор задаёт исходную сумму в одной из разрешённых валют. Сайт пересчитывает её в валюту показа. Это отдельный сценарий, который нельзя свести к включению общего переключателя валют в шаблоне.
Сначала определите владельца цены
У каждого комплекта должно существовать однозначное основание расчёта. Самостоятельная сборка берёт цену из собственных полей. Связанная сборка получает результат по правилам конфигуратора. Наличие старого значения в поле самостоятельной цены не должно менять приоритет, если связь уже создана и действует.
Запишите решение таблицей состояний. Состояние «нет связи» отличается от состояния «ссылка заполнена, но объект недоступен». Во втором случае нельзя молча считать сборку самостоятельной: возможно, конфигуратор временно удалён, отключён или недоступен из-за ошибки данных. Сначала договоритесь, что должен видеть покупатель и как администратор узнает о проблеме.
Внешне карточки могут выглядеть одинаково, но путь получения цены у них различается. Полезно показать редактору источник текущего значения: «исходная цена комплекта» или «связанный конфигуратор». Такая подпись помогает диагностировать расхождение без угадывания, какой обработчик сработал последним.
| Состояние | Источник | Ожидаемое действие |
|---|---|---|
| Связи нет | Сумма и валюта сборки | Выполнить самостоятельный расчёт |
| Связь действует | Конфигуратор | Не использовать самостоятельную сумму |
| Связь повреждена | Не определён | Показать согласованное состояние ошибки |
| Исходная сумма отсутствует | Не определён | Не подставлять случайную старую цену |
Храните исходник отдельно от результата
Поля «исходная сумма» и «цена показа» выполняют разные функции. Исходник отражает согласованное значение в определённой валюте. Результат зависит от выбранного курса и правил округления. Если сохранять пересчитанную сумму обратно в исходник, следующий запуск пересчитает уже пересчитанное число.
Пусть учебная сборка стоит 100 условных единиц исходной валюты, а учебный коэффициент составляет 2,5. Результат равен 250 единицам валюты показа. Повторный запуск с тем же входом должен снова дать 250, а не 625. Эти числа иллюстрируют только свойство повторяемости; они не соответствуют рыночному курсу и не служат финансовой рекомендацией.
Сохраняйте валюту вместе с суммой, а не выводите её из названия поля. Если разрешены две исходные валюты, правило выбора должно быть явным. Заполненные одновременно суммы в обеих валютах требуют приоритета или ошибки ввода. Случайный выбор первого непустого поля делает результат зависимым от технических деталей формы.
Курс нужен с датой и направлением
Обозначение курса без направления двусмысленно. Коэффициент «исходная валюта к валюте показа» отличается от обратного. В требованиях запишите формулу словами и приведите контрольную пару. Это позволяет обнаружить инверсию до того, как цифры попадут на сайт.
Дата курса тоже влияет на смысл. Можно использовать текущий разрешённый курс, согласованный фиксированный курс или значение на определённую дату. Ни один вариант не выбирается автоматически по удобству разработчика. В административном интерфейсе полезно показывать, какой вариант применён к последнему расчёту и когда он был принят.
Если источник курса недоступен, заранее определяют поведение: использовать последнее согласованное значение с предупреждением, остановить пересчёт или временно скрыть цену. Бесконечное ожидание внешнего сервиса при открытии карточки создаёт отдельную проблему доступности. Разделяйте получение курса и показ уже принятого результата.
Округление выполняйте в одном месте
При расчёте сначала используют исходную точность, затем применяют утверждённое правило округления. Последовательное округление промежуточных значений может дать другое число, чем одно финальное округление. Для комплекта с несколькими составляющими нужно дополнительно решить, округлять каждую строку или итоговую сумму.
Правило должно быть общим для карточки, каталога, письма и других мест, где используется цена. Форматирование для экрана не заменяет денежный расчёт: отображение двух знаков после запятой может скрыть различие во внутреннем значении. При сравнении результатов проверяйте и сохранённое число, и видимую строку.
Учебный тест с дробной суммой и коэффициентом удобнее целого числа. Возьмите два близких значения по разные стороны границы округления и запишите ожидаемые результаты. Так проверка обнаружит неправильное направление округления и использование форматированной строки вместо исходной суммы.
Что меняется при создании связи с конфигуратором
Создание связи должно переключать источник цены предсказуемо. Старая самостоятельная сумма может сохраняться как редакционное значение, но не участвовать в активном расчёте, если таково правило. Скрывать поле в интерфейсе недостаточно: фоновое задание тоже должно проверять связь перед записью результата.
Рассмотрите обратное действие, удаление связи. Надо ли немедленно применять прежнюю исходную цену, требовать повторного подтверждения редактора или показывать цену по запросу? Старое поле могло не обновляться месяцами. Автоматический возврат к нему без проверки способен опубликовать устаревшую коммерческую информацию.
Для конкурентных процессов особенно существенно, чтобы задание, стартовавшее до создания связи, не завершило самостоятельный пересчёт уже после переключения. Перед сохранением проверяют актуальное основание цены. Более старый расчёт должен уступать более новому состоянию, а не побеждать только потому, что выполнялся дольше.
Пакетное обновление каталога
При изменении курса выбирайте только сборки, которые действительно используют этот курс и самостоятельную цену. Связанные модели не нужно пересчитывать вторым механизмом. В предварительном отчёте покажите число подходящих записей, исключения и причину исключения. Это помогает заметить ошибку выборки до массовой записи.
Пересчёт должен быть возобновляемым после сбоя. Для этого фиксируют обработанное входное состояние и результат каждой записи либо используют существующий механизм фоновых задач. Конкретная архитектура зависит от проекта; добавление собственной очереди без изучения текущей системы не требуется для понимания самого правила.
После пакета сравните контрольные карточки разных типов. Если отчёт сообщает об успешном обновлении ста записей, а на сайте часть цен старая, проверьте кэш и источник отображения. Нельзя повторять весь пакет бесконечно, не установив, где расходятся сохранённый результат и видимая цена.
Как проверить готовую сборку в разных представлениях
Цена может показываться в общем каталоге, поиске, карточке и печатном документе. Создайте одну контрольную сборку и пройдите все места, где она доступна. Сверяйте валюту, значение и обозначение источника. Переход из каталога не должен внезапно менять смысл суммы без объяснения.
Если заказ сохраняет снимок цены, отдельно проверьте, что последующая смена курса не переписывает историю уже оформленного заказа. Если проект требует другого поведения, оно должно быть явным и согласованным. Текущий каталог и историческое обязательство перед покупателем нельзя смешивать ради одинаковых чисел на всех экранах.
Для писем и выгрузок используйте согласованный результат, а не заново собранную формулу в каждом шаблоне. Иначе в одной точке применится новый курс, а в другой останется старый. Общий источник расчёта уменьшает число мест, которые нужно исправлять при изменении правил.
Набор приёмочных сценариев
Проверьте самостоятельную сборку в каждой разрешённой исходной валюте, связанную сборку, повреждённую связь, пустую сумму и дробное значение. Затем измените курс и повторите расчёт без изменения курса. Второй запуск должен сохранять тот же результат, а связанные сборки должны оставаться под управлением своего механизма.
Отдельный опыт посвящён переключению источника: сначала самостоятельная цена, затем связь, затем её удаление. На каждом этапе ожидание записано заранее. Так проверяется именно приоритет источников, который обычно не виден при тестировании только новой карточки.
В завершение отдайте администратору объяснение допустимых состояний. Где менять исходник, где смотреть курс, почему часть сборок пропускается и что делать с повреждённой связью. Успешный результат представляет собой понятную модель цены, которую можно повторить и проверить после следующего обновления.
Как проверять обе исходные валюты без подмены коммерческих условий
Составьте два учебных комплекта, которые после пересчёта должны давать одинаковый результат. Один хранит 100 условных единиц первой валюты с коэффициентом 2,5, другой 250 условных единиц валюты показа с коэффициентом 1. Такой опыт проверяет выбор исходника и направление операции. Он ничего не говорит о реальном курсе, налоге или выгодности покупки.
Затем задайте в одной карточке значения сразу для обеих валют. Система должна следовать заранее определённому приоритету либо сообщить о конфликте. Молчаливый выбор по порядку полей особенно опасен после доработки формы: перестановка элементов интерфейса не должна менять стоимость товара. Приоритет принадлежит модели данных, а не расположению инпутов на странице.
Проверьте ввод дробной части, разделитель и пробелы разрядов. Редактор может вставить сумму из таблицы в привычном для него формате. На границе ввода значение приводят к согласованному числовому представлению, а ошибочную строку возвращают на исправление. Удаление всех незнакомых символов без проверки может превратить ошибочную цену в другое допустимое число.
Как разделить расчёт и право видеть цену
Правильный результат расчёта не означает, что его нужно показывать любой группе посетителей. У B2B-каталога могут быть отдельные правила доступа. Проверяйте цену под учебными ролями, предусмотренными проектом: анонимный посетитель, разрешённый покупатель, редактор. Расчёт и авторизация должны оставаться разными проверками.
Особенно внимательно проверьте кэш. Сумма, полученная для одной группы, не должна случайно попадать в общую страницу другой группы. Если источник цены зависит от роли, ключ представления должен учитывать эту зависимость. Для одинаковой исходной сборки это может быть один расчёт с разными правилами видимости, а не несколько конкурирующих формул.
В журнале достаточно технической причины отсутствия цены, например «нет исходника» или «источник конфигуратора недоступен». Пользовательскому экрану не нужны внутренние детали и коды ошибок. Покупатель должен видеть согласованное действие: уточнить стоимость, обратиться за подбором или вернуться позже. Конкретный вариант выбирают по бизнес-сценарию.
Что сохранять для разбора спорной суммы
При необходимости аудита полезен компактный снимок основания: исходная сумма, валюта, принятый коэффициент, правило округления и время расчёта. Он позволяет объяснить число без повторного обращения к текущему курсу, который уже мог измениться. Снимок не должен содержать персональные данные, если они не нужны для задачи.
Для истории заказа применяют установленный в проекте порядок хранения. Не нужно добавлять бесконечный журнал каждой перерисовки карточки. Выбирайте события, которые меняют коммерческий результат: подтверждённый пересчёт, смена источника, оформление заказа. Тогда журнал остаётся полезным для проверки, а не превращается в поток одинаковых записей.
В контрольном отчёте полезно рядом показать исходник и результат. Например, две одинаковые суммы показа могут происходить из разных валют и коэффициентов. Без основания оператор не сможет отличить правильное совпадение от случайного значения, оставшегося после прежнего расчёта.
Связанные разборы
Для смежных решений пригодятся материалы: Цены и скидки из 1С на сайте: причины расхождений | S-WEBS24. Если меняется сам подбор товара, сначала согласуйте модель конфигуратора. Разделение самостоятельной и расчётной цены затем проверяют на одной и той же сборке.
Вопросы по теме
Почему повторный пересчёт снова меняет цену?
Возможная причина состоит в использовании предыдущего результата как исходника. Повтор должен считать от сохранённой базовой суммы и её валюты.
Что делать, если связанный конфигуратор удалён?
Это отдельное ошибочное состояние. Нельзя автоматически считать связь отсутствующей и брать старую самостоятельную цену без согласованного правила.
Документация и источники
- Цены каталога 1С-Битрикс: Модель каталога предусматривает отдельные операции над ценами; статья не утверждает конкретный обработчик исходного проекта.