Как в 1С массово изменить цены по сложной формуле с соблюдением условий округления

Пользователь 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с торговыми конфигурациями, такими как 1С:Розница или 1С:Управление торговлей, часто возникает необходимость не просто поднять цены на определенный процент, но и обеспечить их соответствие специфическим математическим условиям. Рассмотрим типичную ситуацию: необходимо увеличить стоимость всех товаров на 10% так, чтобы при последующем делении новой цены на коэффициент 1,6 результат всегда имел не более двух знаков после запятой (был кратен копейкам). Разберем подробно, как реализовать такую задачу стандартными средствами системы и с помощью математических хитростей.

Метод 1. Использование вспомогательного вида цены и формул расчета

Самый надежный способ решить задачу внутри программы — это создание специального правила расчета. Проанализируем, как настроить систему для автоматического вычисления нужных значений. Основная сложность заключается в том, что обычное округление до двух знаков после запятой не гарантирует «красивого» результата после деления на 1,6. Чтобы добиться цели, нам нужно заставить систему округлять цену до значения, кратного определенному числу.

Посмотрим на алгоритм настройки через справочник Виды цен:

  1. Перейдем в раздел Маркетинг — Виды цен (в некоторых конфигурациях этот путь может быть иным, например, CRM и маркетинг — Настройки и справочники).
  2. Создадим новый вид цены, назовем его, например, «Техническая переоценка».
  3. В поле «Способ задания цены» выберем значение Рассчитывать по другим видам цен.
  4. В конструкторе формул пропишем выражение, которое обеспечит нам нужный результат. Основываясь на обсуждениях экспертов, формула может выглядеть следующим образом:

Окр([РозничнаяЦена] * 1.1 * 2 / 1.6, 1) / 2 * 1.6

Разберем, что делает эта формула. Умножение на 1,1 дает нам искомый прирост в 10%. Дополнительные операции умножения и деления на 2 в сочетании с округлением Окр(..., 1) позволяют «подогнать» число под кратность, которая при обратном делении на 1,6 не даст лишних знаков. Однако есть еще более элегантное математическое решение.

Метод 2. Математическое обоснование и использование кратности 0,08

Проанализируем ситуацию с точки зрения математики. Деление на 1,6 эквивалентно умножению на 0,625 (так как 1 / 1,6 = 0,625). Чтобы при умножении любого числа на 0,625 мы получили результат ровно с двумя знаками после запятой, исходное число должно быть кратно **0,08**. Выясним, почему это так: 0,08 * 0,625 = 0,05 (ровно два знака).

Следовательно, наша задача сводится к тому, чтобы округлить цену (увеличенную на 10%) до ближайшего числа, кратного 0,08. Посмотрим на универсальную формулу для 1С:

Цел(([БазоваяЦена] * 1.1) / 0.08) * 0.08

Или, используя функцию округления:

Окр(([БазоваяЦена] * 1.1) / 0.08, 0) * 0.08

Применяя этот подход, мы гарантируем, что любая итоговая цена при делении на 1,6 даст ровное число без бесконечных дробей и лишних знаков. Это самый точный метод, исключающий погрешности, возникающие при стандартном округлении до копеек.

Метод 3. Массовое изменение через документ «Установка цен номенклатуры»

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

  1. Создадим новый документ Установка цен номенклатуры.
  2. Выберем виды цен, которые хотим изменить (например, «Розничная»).
  3. Воспользуемся кнопкой Изменить цены и выберем вариант Рассчитать по формуле от другого вида цен.
  4. В открывшемся окне выберем наш базовый вид цены и введем одну из формул, предложенных выше. Например: Окр(РозничнаяЦена * 1.1 / 0.08, 0) * 0.08.
  5. Нажмем кнопку Рассчитать. Система автоматически пересчитает все позиции в табличной части.

Важно помнить, что в 1С тип данных для хранения цены — ДенежнаяСуммаНеотрицательная — имеет точность 2 знака. Система в любом случае отсечет все, что меньше копейки. Поэтому предварительное округление по формуле критически важно для корректности ваших последующих отчетов.

Метод 4. Работа через Excel (для версий, где нет конструктора формул)

Если по каким-то причинам настройка видов цен в вашей конфигурации ограничена или вы не обладаете правами доступа к справочнику Виды цен, рассмотрим альтернативный вариант через выгрузку в таблицу. Вопреки распространенному мнению, в «1С:Розница» (начиная с версий 2.2 и выше) есть возможность загрузки данных из внешних файлов.

Разберем этот процесс по шагам:

  1. В документе Установка цен номенклатуры заполните список товаров (кнопка Заполнить — Подобрать товары или Добавить по отбору).
  2. Нажмите кнопку Выгрузить в Excel (или воспользуйтесь стандартной функцией сохранения таблицы Ctrl+S).
  3. В файле Excel примените формулу ко всем ячейкам с ценой. В Excel формула будет выглядеть так: =ОКРУГЛ(A1*1,1/0,08;0)*0,08, где A1 — ячейка со старой ценой.
  4. Сохраните файл.
  5. Вернитесь в 1С и в этом же документе нажмите Загрузить из внешнего файла. Программа предложит сопоставить колонки (Номенклатура, Цена).

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

Технические нюансы и рекомендации

Проанализируем несколько важных моментов, которые помогут избежать ошибок при массовой переоценке:

Регистр сведений: Помните, что цены в 1С не меняются «внутри» карточки товара, они записываются в регистр Цены номенклатуры с привязкой к дате. Если вы ошиблись с формулой, не паникуйте — достаточно найти и пометить на удаление созданный документ Установка цен номенклатуры, и система вернет цены, действовавшие до него.

История цен: Рекомендуем устанавливать дату документа на 00:00 следующего дня. Это позволит спокойно провести переоценку в конце рабочего дня, чтобы утром кассы начали работать по новым ценам. При этом старые цены сохранятся в истории, что важно для формирования аналитической отчетности.

Психологическое округление: Если вам нужно, чтобы цены заканчивались, например, на 90 копеек или 9 рублей, вы можете настроить Правила округления в самом виде цены. Однако будьте осторожны: любое «психологическое» округление после применения нашей формулы может нарушить условие кратности 0,08, и при делении на 1,6 снова появятся лишние знаки после запятой. Поэтому для вашей задачи лучше использовать строгое математическое округление до 0,08.

Таким образом, мы выяснили, что задача решается либо через тонкую настройку формул в Видах цен, либо через внешнюю обработку данных в Excel. Использование кратности 0,08 является наиболее профессиональным и точным решением для соблюдения условий деления на 1,6.

← На главную