Разработка с учетом Показателей

04.06.21

Разработка - Математика и алгоритмы

Время от времени приходится разрабатывать алгоритмы расчета с некоторыми условными значениями. Я их называю Показателями. Данная статья предлагает один из методов работы с Показателями.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Разработка с учетом Показателей.:
.cf 33,54Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Время от времени приходится разрабатывать алгоритмы расчета с условными значениями, например:

Расчет скидки для по Объему продаж:

От 0 до 10 тыс.уп. – 1 %

От 10 тыс.уп.  до 30 тыс.уп. – 2 %

От 30 тыс.уп.  до 50 тыс.уп. – 3 %

От 50 тыс.уп.  до 100 тыс.уп. – 4 %

Свыше 100 тыс.уп.  – 5 %

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

В первую очередь рассмотрим справочник Показатели. Поле Наименование содержит наиболее полное описание Показателя. В поле Код я предлагаю использовать не числовое значение, а литерал, удобный для запоминания и, соответственно, использования. Конечно же, необходимо вести контроль уникальности значения поля Код. Поле Параметр – это единица измерения входящих величин. Так как эта единица носит чисто информационный смысл, чтобы пользователю было понятно с чем мы имеем дело, то нет необходимости задействовать справочник Единиц измерения и можно обойтись символьным значение. В данном случае это не принципиально. Аналогично поле Значение – это единица измерения полученного результата. Поля Параметр и Значение используются только для отображения в шапке Документа УстановкаПоказателей. 

 

 

 

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

 

 

 

Документ УстановкаПоказателей является регистратором для регистра сведений ТекущиеПоказатели.

 

 

По ссылке на справочник Показатели, числовой величине Параметр на необходимую дату актуальности данный регистр позволит на найти необходимое значение. Например, при помощи запроса:

ВЫБРАТЬ ПЕРВЫЕ 1
	ТекущиеПоказателиСрезПоследних.Параметр КАК Параметр,
	ТекущиеПоказателиСрезПоследних.Значение КАК Значение
ИЗ
	РегистрСведений.ТекущиеПоказатели.СрезПоследних КАК ТекущиеПоказателиСрезПоследних
ГДЕ
	ТекущиеПоказателиСрезПоследних.Показатели = &Показатели
	И ТекущиеПоказателиСрезПоследних.Параметр <= &Параметр

УПОРЯДОЧИТЬ ПО
	Параметр УБЫВ 

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

 

 

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

 

&НаКлиенте
Процедура ПродажиКоличествоПриИзменении(Элемент)
	стр = Элементы.Продажи.ТекущиеДанные;
	Если не стр = Неопределено тогда
		стр.Скидка =ПолучитьЗначениеПоказателя("ОбСкидка", стр.Количество, Объект.Дата);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьЗначениеПоказателя(Показатель, Параметр, Дата) 
	лТекст = "
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	ТекущиеПоказателиСрезПоследних.Значение КАК ЗначениеПараметра
		|ИЗ
		|	РегистрСведений.ТекущиеПоказатели.СрезПоследних(&Дата, ) КАК ТекущиеПоказателиСрезПоследних
		|ГДЕ
		|	ТекущиеПоказателиСрезПоследних.Показатели.Код = &Код
		|	И ТекущиеПоказателиСрезПоследних.Параметр <= &Параметр
		|
		|УПОРЯДОЧИТЬ ПО
		|	Параметр УБЫВ
		|";

	лЗапрос = Новый Запрос(лТекст);
	
	лЗапрос.УстановитьПараметр("Код", Показатель);
	лЗапрос.УстановитьПараметр("Параметр", Параметр);

Кстати, в функцию ПолучитьЗначениеПоказателя() первым параметром, в данном случае, передается не Ссылка на Показатели, а Код. Иногда это удобнее, особенно если использовать литерал вместо числового кода. 

Функционал протестирован в 1С:Предприятие 8.3 (8.3.18.1208) Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.46.19).

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

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3655    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    8222    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3588    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    11331    8    SpaceOfMyHead    19    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4837    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3987    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9132    7    kalyaka    11    

44
Оставьте свое сообщение