Форум компании Кронос-Информ
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi
Конференции для пользователей >> CronosPRO: формулы >> Поиск наибольшего и наименьшего значений
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?num=1625562288

Сообщение написано cocos в 06.07.2021 :: 13:04:48

Заголовок: Поиск наибольшего и наименьшего значений
Создано cocos в 06.07.2021 :: 13:04:48
Создал Банк Данных – Системный журнал.
При этом добавил 2 Поля:  Месяц и Год, которые по формуле заполнил из поля Дата. Это были соответственно СЖ8 и СЖ9.
При этом очень удобно выполнять отчеты за месяц и за период  по Запросам по проверке, скажем, Лиц, используя эти Поля.
Так вот, как в заголовке Статотчета  указать период выполнения отчета по Запросам. Другими словами, по какой формуле нужно локализовать наименьшие и наибольшие значения Месяцев (СЖ8 - цифра), найденных при выполнении Запроса, чтобы использовать  их в заголовке  Статотчета при помощи формулы.?  В отчете за Месяц проблем не возникает, в Статотчете даже вместо цифры Месяца (СЖ8) по формуле в Распределении указывается его название.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 06.07.2021 :: 13:43:19
Без создания дополнительных полей удобно пользоваться поиском в интервале дат ОТ СЖ01 4 ВИ 01.01.2021 30.06.2021. Более гибкие возможности.
А Вы сделали СЖ8 словарным полем?

Наибольшие и наименьшие значения удобно находить преобразовав значения дат в число (функция DATE) поместив в массив и используя функции MAXVAL  и MINVAL ( Массив ).

 

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 06.07.2021 :: 15:50:45
Поле СЖ8 у меня не Словарное. Просто в распределении я прописал формулу соответствия значения поля СЖ8 (цифры) соответствующим Месяцам. Где у меря в Распределении указан Месяц, я прописал Формулу:
IF(СЖ8 = 1)THEN(@A := "Январь");
IF(СЖ8 = 2)THEN(@A := "Февраль");
IF(СЖ8 = 3)THEN(@A := "Март");
IF(СЖ8 = 4)THEN(@A := "Апрель");
IF(СЖ8 = 5)THEN(@A := "Май");
IF(СЖ8 = 6)THEN(@A := "Июнь");
IF(СЖ8 = 7)THEN(@A := "Июль");
IF(СЖ8 = 8)THEN(@A := "Август");
IF(СЖ8 = 9)THEN(@A := "Сентябрь");
IF(СЖ8 = 10)THEN(@A := "Октябрь");
IF(СЖ8 = 11)THEN(@A := "Ноябрь");
IF(СЖ8 = 12)THEN(@A := "Декабрь");
@RET := @A
Что касается функций MAXVAL  и MINVAL , то я с ними тоже поработал, но результата не получил.
Наверное сказалось 10-ти летнее отсутствие активной работы с Кроносом.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 06.07.2021 :: 15:59:21
Тут я, правда, пытался найти эти числа из СЖ8, а не из СЖ4, поле которой и есть Дата.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 06.07.2021 :: 17:56:34
В общем то это легко сделать в самом запросе по образцу. Можно сделать поиск в интервале дат и присвоить значение глобальной переменной, которую потом выводить формулой в ячейке отчета. Можно интервал дат задавать формулой и передавать в поисковое значение.

Обсуждалось:
1
2
3
и в других местах.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 06.07.2021 :: 19:14:08
Я сделал так, но все равно не получилось.
@A := "Количество Запросов с ";
@B := СЖ9;      /* Год   */
@C := СЖ8;      /* Месяц */
@I := 0;
A:;
@I := @I + 1;
IF((@C = @I))THEN(GOTO B;) ELSE(GOTO A);      /*Минимальное значение Месяца  */
B:;
@J := 13;
@D := СЖ8;
C:;
@J := @J - 1;
IF((@D = @J))THEN(GOTO D;) ELSE(GOTO C);      /*Максимальное значение Месяца  */
D:;
@RET := @A<<@C<<" по "<<@D<<"."<<@B

Буду думать дальше, если, конечно, это возможно из найденных в результате поиска значений "вырвать" максимальные и минимальные значения нужных полей.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 06.07.2021 :: 20:24:21
Эта формула употребляется в ячейке распределения?
С какими поисковыми условиями осуществляется запрос по образцу?
Непонятна цель этого запроса.
Может оказаться так, что один год принадлежит к одной группе месяцев, т.е. 2019 1, 2, 3, а другой к следующему кварталу, 2020 4,5,6. Минимальный месяц 1, а максимальный 6.
Если Вы хотите получить распределение запросов по месяцам, то лучше что-нибудь другое применить.
Насколько я понял, требуется выяснить в каких месяцах максимальное кол-во запросов, а в каких минимальное?

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 07.07.2021 :: 09:39:00
Эта формула предназначена для формирования  заголовка в файле Excel .
В начале я делаю поиск Минимального значения Месяца (@C), после того, как нашел перехожу на поиск Максимального значения (@D). Далее формирую заголовок Excel-а (последняя строка формулы).
Запрос по Месяцам, как правило, проводится по одному году, в нашем случае за 2021-й год.  Никто не будет указывать в запросе Года внутри интервала, скажем, с 2020 по 2021, поэтому проблема принадлежности Месяцев к разным Годам отпадает.
Распределение Количества Запросов для каждого Пользователя по Месяцам для конкретного Года работает корректно и отношения к этой формуле, естественно, не имеет.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 07.07.2021 :: 13:32:49
С какими поисковыми условиями осуществляется запрос по образцу?
Оттуда можно взять месяца, если они фигурируют в запросе.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 08.07.2021 :: 15:19:36
Как и обычно:


ZP.GIF (103 KB | 106 )

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 08.07.2021 :: 15:39:11
По большому счету, чтобы не "париться", можно заголовок таблицы Excel сделать "ручками". Это не принципиально. Тут важна сама идея: можно ли из найденных по запросу данных что-то (точнее, что нам нужно) найти?
Я уже создавал и глобальную переменную (массив данных), куда по признаку наличия знамения добавлял эти значения, а далее по поиску минимальных и максимальных значений в этом массиве создавал другие переменные (@X), которые и подставлял в последнюю формулу для создания заголовка Excel. Но все равно без результата.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 08.07.2021 :: 16:51:38
Т.е. по факту получается с января по месяц, предшествующий текущему.
Формула вывода заголовка
[code]@MON:="январь"<<_fm<<"февраль"<<_fm<<"март"<<_fm<<"апрель"<<_fm<<"май"<<_fm<<"июнь"<<_fm<<"июль"<<_fm<<"август"<<_fm<<"сентябрь"<<_fm<<"октябрь"<<_fm<<"ноябрь"<<_fm<<"декабрь"
@CURM:=SUBSTR(@CURRENTDATE,4,2)
@CURY:=SUBSTR(@CURRENTDATE,7,4)
@RET:="Количество запросов за период январь - "<<(@MON(@CURM-1))<<" "<<@CURY[/code]

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 09.07.2021 :: 09:34:14
В моем случае данная формула формирования Заголовка таблицы Excel не заработала, да и не могла по определению (в работе с Демо Банком Primer  я задал Запрос на поиск Лиц за Июль и Август 2021г. – в заголовке Excel-я были указаны Месяцы – Январь и Июнь).
Показанный мною рисунок создания Сложного Библиотечного Запроса (кстати, туда также можно добавить и конкретного Пользователя) является универсальным:
1.      Можно манипулировать Месяцами или же одним Месяцем, изменяя значения Месяцев (1-12 за Год или  5-5 – за Май и т.д.).
2.      Вставив в Запрос и Пользователя (при проектировании Запроса), можно манипулировать и Пользователями (указав конкретного – выдает значения для конкретного за Период, удалив в Запросе Пользователя – выдает значения для ВСЕХ Пользователей и т.д.)
Так вот, вопрос мой состоял в том, что какую формулу можно использовать, чтобы программа могла «вытащить» нужные мне значения (для моего случая Месяцы – СЖ8) из числа уже отобранных за указанный период  (Месяцы и Год – СЖ8 и СЖ9)?

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 09.07.2021 :: 12:02:41
С самого начала и пытались прояснить, как выполняется запрос, какие его цели.
Решение по созданию полей месяц и год не очень хорошее. Запрос с ноября 2020 по февраль 2021 уже вызовет затруднения.

Цитировать:
я задал Запрос на поиск Лиц за Июль и Август 2021г
Вы хотите, чтобы в заголовке было тоже Июль и Август, или если месяц еще не наступил, то его игнорировать и анализировать по фактическому наличию запросов? 0 - не выводить в заголовок.
Как уже упоминалось выше лучше использовать интервал СЖ4.

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 10.07.2021 :: 12:41:40
Наконец я «добил» эту Формулу, хотя правильнее сказать Формула «добила» меня.

@A := "Количество Запросов с ";
@B := СЖ9;      /* Год   */
@C := СЖ8;      /* Месяц */
IF((@C = "01"))THEN((@@D :=INSERTVAL(@@D,1,1)));
IF((@C = "02"))THEN((@@D :=INSERTVAL(@@D,1,2)));
IF((@C = "03"))THEN((@@D :=INSERTVAL(@@D,1,3)));
IF((@C = "04"))THEN((@@D :=INSERTVAL(@@D,1,4)));
IF((@C = "05"))THEN((@@D :=INSERTVAL(@@D,1,5)));
IF((@C = "06"))THEN((@@D :=INSERTVAL(@@D,1,6)));
IF((@C = "07"))THEN((@@D :=INSERTVAL(@@D,1,7)));
IF((@C = "08"))THEN((@@D :=INSERTVAL(@@D,1,8)));
IF((@C = "09"))THEN((@@D :=INSERTVAL(@@D,1,9)));
IF((@C = "10"))THEN((@@D :=INSERTVAL(@@D,1,10));)
IF((@C = "11"))THEN((@@D :=INSERTVAL(@@D,1,11)));
IF((@C = "12"))THEN((@@D :=INSERTVAL(@@D,1,12)));
@E := MINVAL(@@D);
@F := MAXVAL(@@D);
@RET := @A<<@E<<" по "<<@F<<"."<<@B<<" г."

Запрос -  'Запрос с ноября 2020 по февраль 2021 – никто не собирается делать. Нет смысла.
Всегда  требуется делать  Запрос по Месяцам  для одного конкретного Года (для отчета).

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 10.07.2021 :: 12:44:15
При вводе произошла маленькая ошибочка:

@A := "Количество Запросов с ";
@B := СЖ9;      /* Год   */
@C := СЖ8;      /* Месяц */
IF((@C = "01"))THEN((@@D :=INSERTVAL(@@D,1,1)));
IF((@C = "02"))THEN((@@D :=INSERTVAL(@@D,1,2)));
IF((@C = "03"))THEN((@@D :=INSERTVAL(@@D,1,3)));
IF((@C = "04"))THEN((@@D :=INSERTVAL(@@D,1,4)));
IF((@C = "05"))THEN((@@D :=INSERTVAL(@@D,1,5)));
IF((@C = "06"))THEN((@@D :=INSERTVAL(@@D,1,6)));
IF((@C = "07"))THEN((@@D :=INSERTVAL(@@D,1,7)));
IF((@C = "08"))THEN((@@D :=INSERTVAL(@@D,1,8)));
IF((@C = "09"))THEN((@@D :=INSERTVAL(@@D,1,9)));
IF((@C = "10"))THEN((@@D :=INSERTVAL(@@D,1,10)));
IF((@C = "11"))THEN((@@D :=INSERTVAL(@@D,1,11)));
IF((@C = "12"))THEN((@@D :=INSERTVAL(@@D,1,12)));
@E := MINVAL(@@D);
@F := MAXVAL(@@D);
@RET := @A<<@E<<" по "<<@F<<"."<<@B<<" г."

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 10.07.2021 :: 12:45:58
При вводе произошла ошибка в написании.

@A := "Количество Запросов с ";
@B := СЖ9;      /* Год   */
@C := СЖ8;      /* Месяц */
IF((@C = "01"))THEN((@@D :=INSERTVAL(@@D,1,1)));
IF((@C = "02"))THEN((@@D :=INSERTVAL(@@D,1,2)));
IF((@C = "03"))THEN((@@D :=INSERTVAL(@@D,1,3)));
IF((@C = "04"))THEN((@@D :=INSERTVAL(@@D,1,4)));
IF((@C = "05"))THEN((@@D :=INSERTVAL(@@D,1,5)));
IF((@C = "06"))THEN((@@D :=INSERTVAL(@@D,1,6)));
IF((@C = "07"))THEN((@@D :=INSERTVAL(@@D,1,7)));
IF((@C = "08"))THEN((@@D :=INSERTVAL(@@D,1,8)));
IF((@C = "09"))THEN((@@D :=INSERTVAL(@@D,1,9)));
IF((@C = "10"))THEN((@@D :=INSERTVAL(@@D,1,10)));
IF((@C = "11"))THEN((@@D :=INSERTVAL(@@D,1,11)));
IF((@C = "12"))THEN((@@D :=INSERTVAL(@@D,1,12)));
@E := MINVAL(@@D);
@F := MAXVAL(@@D);
@RET := @A<<@E<<" по "<<@F<<"."<<@B<<" г."

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано cocos в 10.07.2021 :: 12:50:16
Тут при вводе произошла ошибка в написании.

@A := "Количество Запросов с ";
@B := СЖ9;      /* Год   */
@C := СЖ8;      /* Месяц */
IF((@C = "01"))THEN((@@D :=INSERTVAL(@@D,1,1)));
IF((@C = "02"))THEN((@@D :=INSERTVAL(@@D,1,2)));
IF((@C = "03"))THEN((@@D :=INSERTVAL(@@D,1,3)));
IF((@C = "04"))THEN((@@D :=INSERTVAL(@@D,1,4)));
IF((@C = "05"))THEN((@@D :=INSERTVAL(@@D,1,5)));
IF((@C = "06"))THEN((@@D :=INSERTVAL(@@D,1,6)));
IF((@C = "07"))THEN((@@D :=INSERTVAL(@@D,1,7)));
IF((@C = "08"))THEN((@@D :=INSERTVAL(@@D,1,8)));
IF((@C = "09"))THEN((@@D :=INSERTVAL(@@D,1,9)));
IF((@C = "10"))THEN((@@D :=INSERTVAL(@@D,1,10)));
IF((@C = "11"))THEN((@@D :=INSERTVAL(@@D,1,11)));
IF((@C = "12"))THEN((@@D :=INSERTVAL(@@D,1,12)));
@E := MINVAL(@@D);
@F := MAXVAL(@@D);
@RET := @A<<@E<<" по "<<@F<<"."<<@B<<" г."

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 10.07.2021 :: 13:04:17
А как будет с апреля по апрель?

Заголовок: Re: Поиск наибольшего и наименьшего значений
Создано Zuluss в 10.07.2021 :: 13:18:33
А разве не получится заменить блок кода

Code (]IF((@C = "01"))THEN((@@D :=INSERTVAL(@@D,1,1)));
IF((@C = "02"))THEN((@@D :=INSERTVAL(@@D,1,2)));
IF((@C = "03"))THEN((@@D :=INSERTVAL(@@D,1,3)));
IF((@C = "04"))THEN((@@D :=INSERTVAL(@@D,1,4)));
IF((@C = "05"))THEN((@@D :=INSERTVAL(@@D,1,5)));
IF((@C = "06"))THEN((@@D :=INSERTVAL(@@D,1,6)));
IF((@C = "07"))THEN((@@D :=INSERTVAL(@@D,1,7)));
IF((@C = "08"))THEN((@@D :=INSERTVAL(@@D,1,8)));
IF((@C = "09"))THEN((@@D :=INSERTVAL(@@D,1,9)));
IF((@C = "10"))THEN((@@D :=INSERTVAL(@@D,1,10)));
IF((@C = "11"))THEN((@@D :=INSERTVAL(@@D,1,11)));
IF((@C = "12"))THEN((@@D :=INSERTVAL(@@D,1,12)));[/code):

строчкой
[code]@@D(-1):=@C;

Форум компании Кронос-Информ » Powered by YaBB 2.5.2!
YaBB © 2000-2009. Все права защищены.

Localization by mySOPROMAT.ru