Рекурсия = зависимость от рекурсии от рекурсии от рекурсии от рекурсии...

19.11.15

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

А что если мы введем свои переменные?

Скачать исходный код

Наименование Файл Версия Размер
Проверка УФ
.epf 14,55Kb
3
.epf 0.0.0.0001 14,55Kb 3 Скачать

Навеяно темой «Определение порядка расчета связанных формул»

Посмотрел, почитал, подумал… а ведь это могло бы пригодиться не только для цифиръ.

Реализация автора не особо понравилась… уж слишком все сложно. Рекурсия  - медленно.

Хотелось что-то:

Переменная("a","1");
Вычисляется("b","{a}+1");

Или

Переменная("ПолныеПрава", Истина);
Переменная("МАРЬИВАННА",  яПользователь("МарьИванна"));
Вычисляется ("МогуЧтоУгодно", "{ПолныеПрава} ИЛИ {МАРЬИВАННА}");
Если ПолучитьПеременную("МогуЧтоУгодно") Тогда
Сообщить("Красавчик");
КонецЕсли;

И тут осенило!

Недавно ковыряясь в одном боте c javascript-ом, наткнулся на новое для меня понятие – «вычисление зависимых переменных».  То есть была объектная модель, по которой строилось представление. «Все ок. Это же шаблонизатор!» скажут многие, но это не так. В отличие от шаблонизатора изменения в модели сразу же приводило к изменению представления – работала так называемая реактивность.  Да 1С – не торт, но должна же быть и в нем возможность – сделать это…

Первые версии работали не ахти чтобы адекватно и быстро, да и сейчас, глядя на код, я не в большом восторге;  главное - все считалось. Началась погоня за оптимизацией: отслеживание зависимости и зависимых, обновление только при изменении данных, индексация ТЗ, устранение дорогих операций, внедрение отложенных вычислений.  

Время работы сокращалось, но и возможностей для оптимизаций становилось меньше. Последними стали манипуляции с исходными формулами: меняем буквенное наименование переменной – на номер… и всё в шоколаде.

Управляемое приложение… печаль. Ведь все, что я делал – это было на обычных формах, УФ – не прощает. Переписываю код для работы в клиентском окружении, выношу весь код в отдельную обработку, чтобы лишние переменные не мешали и было проще подключать к клиентскому коду.  Вот теперь все.

Баги остались, куда же без них, но хотелось бы выслушать мнение людей.

 

Синтаксис вычислений:

ВычислениеФормул.Переменная("Переменная", "Значение"); // Создание переменной
ВычислениеФормул.Вычисляется("ИмяПеременной", "Формула", ОтложеноеВычисление); // Создание переменной с формулой
ВычислениеФормул.Коснуться("ИмяПеременно") ;// запустится обновление связанных переменных
ВычислениеФормул.УстановитьЗначениеПараметра("Переменная", "Значение"); // установить значение переменной и обновление зависимых
ВычислениеФормул.ПолучитьОбновленныеДанные() ;// получение измененных переменных после установки значения – соответствие с данными типа: имяпеременной-ключ и новым значением
ВычислениеФормул.Get("Переменная");//получить переменную по имени

Синтаксис формул:

Имена переменных в фигурных скобочках –

"{я переменная с пробелами}*{аябезпробелов}"

Значение переменных без отслеживания – 

"|этаФормулаНеУзнаетЧтоПеременнаяПоменяласьНоЗначениеИспользует|*{АЭтуОтследитПриИзменении}"

 

Вычисления формул происходят в контексте формы встроенной обработки…но можно обмануть:

ВычислениеФормул = ПолучитьФорму("ВнешняяОбработка.ВычислениеФормул.Форма",,ЭтаФорма);
ВычислениеФормул.Вычисляется("МегоФорма", "ЭтаФорма.ВладелецФормы");
ВычислениеФормул.Вычисляется("ФункцияМегоЭкспорт", "{МегоФорма}.ЭкспортнаяФункция({ПарамПамПам})");

Придумать можно много всего...

Код основной обработки в макете с именем "Макет" =) логично

Сама обработка является примером использования вычислений переменных:

открывается недоступной - через 5 секунд заканчивается таймер и форма становится доступной, еще через 5 секунд происходит заполнение формулами таблиц и их вывод... после изменения ячейки на форме - происходит перерасчет всех подчиненных формул.

Формулы Вычисления Переменные

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

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

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

1 стартмани

30.01.2024    1870    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

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

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

19.10.2023    4662    user1959478    50    

34

Регулярные выражения на 1С

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

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

1 стартмани

09.06.2023    7652    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

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

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

1 стартмани

21.03.2022    7929    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

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

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4546    fishca    13    

36

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8934    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

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

31.08.2021    7957    dusha0020    8    

70
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. minimajack 80 19.11.15 16:26 Сейчас в теме
Комментарии приветствуются.
2. Поручик 4674 21.11.15 00:21 Сейчас в теме
Пошёл читать Ильдаровича.
3. minimajack 80 21.11.15 10:39 Сейчас в теме
(2) Поручик, вся соль в отложенных вычислениях и перерасчет при необходимости.
Это как установить видимость - но при этом знать на какие элементы повлияло изменение параметра.
Примеры:
установит значение переменной
Переменная("Переменная", СложныйЗапрос());

установит формулу в вычисляемую переменную и сразу ее расчитает:
Вычисляется ("Переменная", "СложныйЗапрос()");

установит формулу в вычисляемую переменную при этом значение вычислится только по требованию:
Вычисляется ("Переменная", "СложныйЗапрос()", Истина);


в самих функциях можно делать обращение к другим переменным и тогда при изменении этой переменной произойдет перерасчет:
Функция СложныйЗапрос()
//Запрос
Параметр.установить("Параметр", Get("ИзменяемыйПараметр"))
// Возврат результат запроса
КонецФункции
4. bulpi 215 27.11.15 01:04 Сейчас в теме
Автор, хотелось бы несколько строк на тему : на хрена все это. А то ведь мы мыслей не читаем.
5. minimajack 80 27.11.15 12:38 Сейчас в теме
(4) bulpi - код понадобится исключительно разработчикам. Там где необходимы реактивные вычисления, кеширование промежуточного результата, обновление исключительно при изменениях и т.п.
пример
Переменная("Переменная", 4.3);
Вычисляется ("Целое", "Цел({Переменная})");
Вычисляется ("Копейки", "ПолучениеКопеек({Переменная})");


и дальше в коде

Параметр.установить("Переменная", 5.3)


получаем изменения только {Переменная} и {Целое} - копейки не оповестят об изменении
Оставьте свое сообщение