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

Сообщение написано graffserg в 25.08.2020 :: 11:08:47

Заголовок: Сбор данных в статистический отчёт
Создано graffserg в 25.08.2020 :: 11:08:47
Добрый день, уважаемые профессионалы данного форума!!!
Столкнулся вот с такой задачей:
1. Вот структура БД:
База: Учетные данные
0|Системный номер|Ц|10|||
1|Уровень доступа|УД||||
2|Фамилия|Т|40||ИФ;АП|
3|Собственное имя|Т|40||ИФ|
4|Отчество|Т|40||ИФ|
9|Сведения об изменении ФИО|П|||МН|Л23
10|Относится к сведениям об изменении ФИО|О|||МН|Л24

База: Сведения об изменении фамилии, собственного имени, отчества
0|Системный номер|Ц|10|||
1|Уровень доступа|УД||||
2|Причина смены ФИО|С||Причина смены ФИО|ИФ|
4|Сведения об изменении ФИО|П|||МН|Л110
3|Относится к лицу|О|||МН|Л19
5|Дата внесения данных|Т|100000||НК|

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

Ранее, в базе были поля «фамилия», «прежняя фамилия» и т.д., использовал вот такую формулу:

Code (]
@fam := УД2
if УД16#"" then @fam := @fam<<@ENDOFLINE<<"("<<УД16<<")"
@name := УД3
if УД17#"" then @name := @name<<@ENDOFLINE<<"("<<УД17<<")"
@otch := УД4
if УД18#"" then @otch := @otch<<@ENDOFLINE<<"("<<УД18<<")"
@FIO:=@fam<<@ENDOFLINE<<@name<<@ENDOFLINE<<@otch<<@ENDOFLINE;
@ret:=@FIO;
[/code):

Но с учетом того, что у меня появилась промежуточная база «Сведения об изменении фамилии, собственного имени, отчества» данная формула не подходит.

Пробовал:
[code]
@fam := УД2
@ret:=CAT(УД34_У1,
[
CAT(У12_УД, @fam1 := "("<<УД2<<")"
]
))
@name := УД3
@ret:=CAT(УД34_У1,
[
CAT(У12_УД, @name1 := "("<<УД3<<")"
]
))
@otch := УД4
@ret:=CAT(УД34_У1,
[
CAT(У12_УД, @otch1 := "("<<УД4<<")"
]
))
@FIO:=@fam<<@ENDOFLINE<<@fam1<<@ENDOFLINE<<@name<<@ENDOFLINE<<@name1<<@otch<<@ENDOFLINE<<@otch1;
@ret:=@FIO;

На выходе получаю:
ИВАНОВ

Иван
Иванович
Подскажите пожалуйста как быть в данной ситуации? В формулах я не силен. Спасибо.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 25.08.2020 :: 15:27:54
Вот попробовал навоять самостоятельно:
[code]
@RET := @fam := УД2;
LOOP(УД34_У1,
CAT(У12_УД,
    @fam1:=УД2;
if @fam1#"" then @fam1 := "("<<@fam1<<")"
@ret:=@fam<<@fam1));

@RET := @name := УД3;
LOOP(УД34_У1,
CAT(У12_УД,
    @name1:=УД3;
if trim(@name)#"" then @name1 := "("<<@name1<<")"
@ret:=@name<<@name1));

@RET := @otch := УД4;
LOOP(УД34_У1,
CAT(У12_УД,
    @otch1:=УД4;
if @otch#"" then @otch1 := "("<<@otch1<<")"
@ret:=TRIM(@otch<<@otch1)));

@FIO:=TRIM(SWAP(@fam<<@ENDOFLINE<<@fam1<<@ENDOFLINE<<@name<<@ENDOFLINE<<@name1<<@otch<<@ENDOFLINE<<@otch1," ","()"));
@ret:=@FIO;
[/code]
Но все данные по человеку так и не выводятся. К примеру, если человек менял фамилию 3 раза, то выводится только текущая фамилия, а в скобках предыдущая, самая первая, а мне нужно, чтобы в скобках были отражены все предыдущие фамилии.

И ещё, общий вид информации:
ИВАНОВ
(ПЕТРОВ)
Иван
()Иванович
()
Как убрать лишние абзацы, (), и пробелы, подскажите пожалуйста?

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 26.08.2020 :: 11:42:15
Получилось:

Code (]
@RET := @fam1 := [ch211):

Ä2
loop(ÓÄ34_Ó1,
Loop(Ó12_ÓÄ,
    @fam2:=ÓÄ2;
    if trim(@fam2)#"" then
      @a:=@a<<@ENDOFLINE<<"("<<@fam2<<")"
);
if trim(@a)#"" then
@RET:=@fam1<<trim(@ENDOFLINE@a));

@RET := @name1 := ÓÄ3
loop(ÓÄ34_Ó1,
Loop(Ó12_ÓÄ,
    @name2:=ÓÄ3;
    if trim(@name2)#"" then
      @b:=@b<<@ENDOFLINE<<"("<<@name2<<")"
);
if trim(@b)#"" then
@RET:=@name2<<trim(@ENDOFLINE@b));

@RET := @otch1 := ÓÄ4
loop(ÓÄ34_Ó1,
Loop(Ó12_ÓÄ,
    @otch2:=ÓÄ4;
    if trim(@otch2)#"" then
      @c:=@c<<@ENDOFLINE<<"("<<@otch2<<")"
);
if trim(@c)#"" then
@RET:=@otch2<<trim(@ENDOFLINE@c));

loop(ÓÄ22_ÃÐ,
loop(ÃÐ4_ÏÄ,
@d := ÏÄ6
@FIO:=@fam1<<@a<<@ENDOFLINE<<@name1<<@b<<@ENDOFLINE<<@otch1<<@c<<@ENDOFLINE<<@d;
@ret:=TRIM(SWAP(@FIO));
))

Но вот какая ситуация:
- если поле "Фамилия" обязательное, а человек изменил только имя, то приходится в обязательном порядке заполнять поле фамилия, а потом поле имя. В связи с чем происходит дублирование фамилии. Подскажите пожалуйста как здесь можно найти выход?
- если, к примеру, ввод осуществлять от текущей фамилии к предыдущей фамилии и т.д. (Иванова->Петрова->Сидоров), то отображается только первая предыдущая фамилия (Ивановна), а остальные теряются (Петрова и Сидорова). А если заполнять методом наполнения предыдущих фамилий (Иванова->Петрова;Сидорова и т.д.), то информация выводится корректно:
Иванова-ю
(Петрова)
(Сидорова) и т.д.
Пожалуйста помогите с данным решением.
Спасибо

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 28.08.2020 :: 16:43:13
Добрый день|вечер!
Вот, после нескольких дней проб и ошибок, получил следующее:

Code (]
@fam1 := Л12
loop(Л19_Л2,
Loop(Л24_Л1,
    @fam2:=Л12;
    if trim(@fam2)#"" then
      @a:=@a<<@ENDOFLINE<<"("<<@fam2<<")"
;
loop(Л19_Л2,
Loop(Л24_Л1,
    @fam3:=Л12;
    if trim(@fam3)#"" then
      @a1:=@a1<<@ENDOFLINE<<"("<<@fam3<<")"
;
if trim(@a)#""  &  trim(@a1)#"" then;
@RET:=@fam1<<trim(@ENDOFLINE@a)<<trim(@ENDOFLINE@a1)))));

@name1 := Л13
loop(Л19_Л2,
Loop(Л24_Л1,
    @name2:=Л13;
    if trim(@name2)#"" then
      @b:=@b<<@ENDOFLINE<<"("<<@name2<<")"
;
loop(Л19_Л2,
Loop(Л24_Л1,
    @name3:=Л13;
    if trim(@name3)#"" then
      @b1:=@b1<<@ENDOFLINE<<"("<<@name3<<")"
);
if trim(@b)#""  &  trim(@b1)#"" then;
@RET:=@name1<<trim(@ENDOFLINE@b)<<trim(@ENDOFLINE@b1))));

@otch1 := Л14
loop(Л19_Л2,
Loop(Л24_Л1,
    @otch2:=Л14;
    if trim(@otch2)#"" then
      @c:=@c<<@ENDOFLINE<<"("<<@otch2<<")"
;
loop(Л19_Л2,
Loop(Л24_Л1,
    @otch3:=Л14;
    if trim(@otch3)#"" then
      @c1:=@c1<<@ENDOFLINE<<"("<<@otch3<<")"
);
if trim(@c)#""  &  trim(@c1)#"" then;
@RET:=@otch1<<trim(@ENDOFLINE@c)<<trim(@ENDOFLINE@c1))));

//loop(УД22_ГР,
//loop(ГР4_ПД,
//@d := ПД6
@FIO:=@fam1<<@a<<@a1<<@ENDOFLINE<<@name1<<@b<<@b1<<@ENDOFLINE<<@otch1<<@c<<@c1 //<<@ENDOFLINE<<@d;
@ret:=TRIM(SWAP(@FIO));
[/code):

Заранее прошу не кидать камнями, так как в формулах не силен. Но в то же время, прошу помощи в оптимизации данной формулы (при необходимости), так как проблема, например, с вводом данных от текущей фамилии к предыдущим (Иванова->Петрова->Сидорова) осталась.
Как я понимаю нет, своего рода, цикла. При дублировании второй части формулы
[code]
loop(Л19_Л2,
Loop(Л24_Л1,
    @fam3:=Л12;
    if trim(@fam3)#"" then
      @a1:=@a1<<@ENDOFLINE<<"("<<@fam3<<")"

Данный в статистический отчёт добавляются на столько, насколько будет продублирована данная часть формулы. :-[
Пожалуйста помогите с данным решением.
Спасибо

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 28.08.2020 :: 22:51:49
Попробуй так. Без структуры сложновато, но должно вроде работать.

Code (]@fam:=Л12
@name:=Л13
@otch:=Л14
@f:=Л19_Л2
while @f do [
                       userecord(Л2{@f}, loop(Л24_Л1,
                       if @fam#Л12 then @fam1:=@fam1<<", "<<Л12;
                       if @name#Л13 then @name1:=@name1<<", "<<Л13;
                       if @otch#Л14 then @otch1:=@otch1<<", "<<Л14;
                       @f:=Л19_Л2))
                       ):

if @fam1 then "("<<@fam1<<")"
if @name1 then "("<<@name1<<")"
if @otch1 then "("<<@otch1<<")"
@FIO:=@fam<<@fam1<<@ENDOFLINE<<@name<<@name1<<@ENDOFLINE<<@otch<<@otch1
@ret:=TRIM(SWAP(@FIO))

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 29.08.2020 :: 21:05:08
Уважаемый dron_ffk, спасибо за помощь, все сделал, формула прошла проверку, но при вызове запроса по образцу cronos выдает ошибку:
Cronos.exe caused an EXCEPTION_ACCESS_VIOLATION in module Cronos.exe at 0023:00DF8180
EAX=00000000  EBX=0113B010  ECX=00000000  EDX=01194940  ESI=08DCA518
EDI=08DCA568  EBP=0890D120  ESP=0890CCF8  EIP=00DF8180  FLG=00010206
CS=0023   DS=002B  SS=002B  ES=002B   FS=0053  GS=002B
0023:00DF8180 (0x0890D158 0x0113B010 0x08DCA478 0x00000152) Cronos.exe
0023:00740802 (0x0113B010 0x08DCA478 0x00000152 0x0890F500) Cronos.exe

Со старой формулой такой проблемы не наблюдается!!
Вот мой вариант формулы с добавлением ")" в самом конце.

Code (]
@fam:=ЛЦ2
@name:=ЛЦ3
@otch:=ЛЦ4
@f:=ЛЦ84_Л1
while @f do [
                       userecord(Л1{@f}, loop(Л13_ЛЦ,
                       if @fam#ЛЦ2 then @fam1:=@fam1<<", "<<ЛЦ2;
                       if @name#ЛЦ3 then @name1:=@name1<<", "<<ЛЦ3;
                       if @otch#ЛЦ4 then @otch1:=@otch1<<", "<<ЛЦ4;
                       @f:=ЛЦ84_Л1))
                       ):

if @fam1 then "("<<@fam1<<")"
if @name1 then "("<<@name1<<")"
if @otch1 then "("<<@otch1<<")"
@FIO:=@fam<<@fam1<<@ENDOFLINE<<@name<<@name1<<@ENDOFLINE<<@otch<<@otch1
@ret:=TRIM(SWAP(@FIO)))


Методом проб и ошибок нашел где проблема:
[code]userecord(Л1{@f}[/code], а точнее Л1{@f}.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 30.08.2020 :: 10:12:41
У Вас лишняя скобка в конце @ret:=TRIM(SWAP(@FIO)))
И мне не понятны Ваши связи с промежуточной базой. Вы сначала писали одни связи. В итоге в последней формуле уже 3 вариант.
Вот эта связь ЛЦ84_Л1 множественная? Там может быть несколько значений ФИО или нет. Или от каждой последующей идет одна связь на измененную ФИО?
Если множественное, то нужно другой цикл писать.
@f:=ЛЦ84_Л1
@arr:=valcount(@f)
@i:=1
while @arr>=@i do [
                       userecord(Л1{@f(@i)}, loop(Л13_ЛЦ,
                       if @fam#ЛЦ2 then @fam1:=@fam1<<", "<<ЛЦ2;
                       if @name#ЛЦ3 then @name1:=@name1<<", "<<ЛЦ3;
                       if @otch#ЛЦ4 then @otch1:=@otch1<<", "<<ЛЦ4;
                       @i:=@i+1))
                       ]

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 30.08.2020 :: 10:36:04

dron_ffk записан в 30.08.2020 :: 10:12:41:
У Вас лишняя скобка в конце @ret:=TRIM(SWAP(@FIO)))
И мне не понятны Ваши связи с промежуточной базой. Вы сначала писали одни связи. В итоге в последней формуле уже 3 вариант.
Вот эта связь ЛЦ84_Л1 множественная? Там может быть несколько значений ФИО или нет. Или от каждой последующей идет одна связь на измененную ФИО?
Если множественное, то нужно другой цикл писать.
@f:=ЛЦ84_Л1
@arr:=valcount(@f)
@i:=1
while @arr>=@i do [
                       userecord(Л1{@f(@i)}, loop(Л13_ЛЦ,
                       if @fam#ЛЦ2 then @fam1:=@fam1<<", "<<ЛЦ2;
                       if @name#ЛЦ3 then @name1:=@name1<<", "<<ЛЦ3;
                       if @otch#ЛЦ4 then @otch1:=@otch1<<", "<<ЛЦ4;
                       @i:=@i+1))
                       ]

Добрый день.
1. Да, эта связь ЛЦ84_Л1, множественная и значений может быть несколько, так как на данном примере я пытался проверить как будет себя вести формула, если идти от Ивановна - Петрова; Сидоров и т.д. И Ивановна - Петрова - Сидоров и т.д.
2. Насчёт связей с промежуточный базой - этот вариант у меня на домашнем пк, а предыдущий на рабочем. Принцип построения у них идентичен, отличаются лишь названиями полей.
3. Использую Cronos_PRO_5.0.11003, пробовал на Cronos PRO 7.0 DEMO результат тот же.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 30.08.2020 :: 21:55:22
Собрал банк с данными.
Добавил такую формулу
Code (]@fam:=ЛЦ1
@name:=ЛЦ2
@otch:=ЛЦ3
@f:=ЛЦ84_Л1
@arr:=valcount(@f)
@i:=1
while @arr>=@i do [
                     userecord(Л1{@f(@i)}, loop(Л13_ЛЦ,
                     if @fam#ЛЦ2 then @fam1(-1):=ЛЦ2;
                     if @name#ЛЦ3 then @name1(-1):=ЛЦ3;
                     if @otch#ЛЦ4 then @otch1(-1):=ЛЦ4)
                 @i:=@i+1)
                   ):

if @fam1 then @fam1:=swap(char(40)<<@fam1<<char(41),@valueseparator,", ")
if @name1 then @name1:=swap(char(40)<<@name1<<char(41),@valueseparator,", ")
if @otch1 then @otch1:=swap(char(40)<<@otch1<<char(41),@valueseparator,", ")
@FIO:=@fam<<@fam1<<@ENDOFLINE<<@name<<@name1<<@ENDOFLINE<<@otch<<@otch1
@ret:=TRIM(@FIO)


все работает

___.jpg (53 KB | 105 )

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 30.08.2020 :: 22:35:12
Интересно, походу у меня что-то со структурой БД!.
Уважаемый dron_ffk, я правильно понял структуру приведенного Вами примера:
1. В промежуточной БД "ОН ЖЕ" имеются поля, такие как - Фамилия, Имя, Отчество?
2. Поле ОН ЖЕ  БД "Лицо" ссылается по средствам "прямая ссылка" на поле "связи лица" БД ОН ЖЕ, а оно (поле) в свою очередь по средствам "обратная ссылка" на поле ОН ЖЕ БД "Лицо"?

У меня построение связей осуществляется согласно рекомендаций в мануале (стр. 18), а именно:
"Однако если для нас важно точно знать, кем приходятся друг другу два лица, мужем и женой или братом и сестрой и т.п., потребуется ввести дополнительную базу, предназначенную специально для связи. Т.е. база данных «Лицо» будет ссылаться сама на себя не напрямую, а через дополнительную базу «Степень родства». Между двумя этими базами будет установлено две связи. При этом база «Степень родства» будет состоять всего из трех полей: одного простого поля «Степень родства» и двух сложных.? а также рекомендаций уважаемого Zuluss:
"1. Лицо - (и работники, и их родственники, которые могут являться и работниками)
2. Связи между лицами (описываются родственные связи между лицами и может быть построена генеалогия)
3. Адрес (только не место рождения, которое только однократное и индивидуальное для каждого лица)
4. Отношение лица к адресу
Если хотите, то добавляйте Организации, которые имеют тенденцию создаваться и ликвидироваться, переименовываться.
Добавляйте Штатную расстановку и перемещения лиц в ней.
Поэтому должны появиться базы:
5. Организация
6. Подразделения организаций (для организации иерархической структуры)
7. Штат
8. Перемещения
Кроме того необходимо описание отношения лица к организации если оно не является работником, а может быть учредителем или акционером."

Возможно, я ошибаюсь в своем суждении, но вместе с тем прошу помощи.
Спасибо.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 31.08.2020 :: 21:09:21
1. В промежуточной базе "Он же" только связь с лицом и текстовое поле для дополнительной информации.
2. От лица к базе "Он же" идет прямая ссылка. От базы "он же" обратная.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 31.08.2020 :: 21:13:19

dron_ffk записан в 31.08.2020 :: 21:09:21:
1. В промежуточной базе "Он же" только связь с лицом и текстовое поле для дополнительной информации.
2. От лица к базе "Он же" идет прямая ссылка. От базы "он же" обратная.

Добрый вечер! А Вы можете сбросить свою структуру БД?
И подскажите пожалуйста, ваша структура сильно отличается от той, которая описана здесь :
У меня построение связей осуществляется согласно рекомендаций в мануале (стр. 18), а именно:
"Однако если для нас важно точно знать, кем приходятся друг другу два лица, мужем и женой или братом и сестрой и т.п., потребуется ввести дополнительную базу, предназначенную специально для связи. Т.е. база данных «Лицо» будет ссылаться сама на себя не напрямую, а через дополнительную базу «Степень родства». Между двумя этими базами будет установлено две связи. При этом база «Степень родства» будет состоять всего из трех полей: одного простого поля «Степень родства» и двух сложных.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 31.08.2020 :: 22:52:49
Список баз:
N|Название базы|Имя|Тип|Кол-во наборов|Поле кода|Кол-во записей
1|Лицо|ЛЦ|3|0||4
2|ОН ЖЕ|Л1|3|0||3

База  :Лицо
Состав полей базы
N поля| Название поля|Тип|Длина поля|Словарь|Статус|Связь с базами
0|Системный номер|Ц|10|||
1|Фамилия|Т|100||ИФ;АП|
2|Имя|Т|100||ИФ;АП|
3|Отчество|Т|100||ИФ;АП|
84|ОН ЖЕ|П|||МН|Л13



Текст формул из вых. форм:

1 - Он же

Code (]
@fam:=ЛЦ1
@name:=ЛЦ2
@otch:=ЛЦ3
@f:=ЛЦ84_Л1
@i:=1
while valcount(ЛЦ84_Л1)>=@i do [
                     userecord(Л1{@f(@i)}, loop(Л13_ЛЦ,
                     if @fam#ЛЦ1 then @fam1:=ADDVALUECHECK(@fam1,ЛЦ1);
                     if @name#ЛЦ2 then @name1:=ADDVALUECHECK(@name1,ЛЦ2);
                     if @otch#ЛЦ3 then @otch1:=ADDVALUECHECK(@otch1,ЛЦ3);
                                         @s:=ЛЦ84_Л1
                                         @a:=1
                                         while valcount(ЛЦ84_Л1)>=@a do [
                                                                       userecord(Л1{@s(@a)}, loop(Л13_ЛЦ,
                                                                       if @fam#ЛЦ1 then @fam1:=ADDVALUECHECK(@fam1,ЛЦ1);
                                                                       if @name#ЛЦ2 then @name1:=ADDVALUECHECK(@name1,ЛЦ2);
                                                                       if @otch#ЛЦ3 then @otch1:=ADDVALUECHECK(@otch1,ЛЦ3))
                                                                       @a:=@a+1)
                                                                       ):

)
                     @i:=@i+1)
                   ]

if @fam1 then @fam1:=swap(char(40)<<@fam1<<char(41),@valueseparator,", ")
if @name1 then @name1:=swap(char(40)<<@name1<<char(41),@valueseparator,", ")
if @otch1 then @otch1:=swap(char(40)<<@otch1<<char(41),@valueseparator,", ")
@FIO:=@fam<<@fam1<<@ENDOFLINE<<@name<<@name1<<@ENDOFLINE<<@otch<<@otch1
@ret:=TRIM(@FIO)


База  :ОН ЖЕ
Состав полей базы
N поля| Название поля|Тип|Длина поля|Словарь|Статус|Связь с базами
0|Системный номер|Ц|10|||
3|Связи лица|О|||МН|ЛЦ84
2|Дополнительная информация|Т|1000||ИФ|


Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 31.08.2020 :: 23:09:58
Спасибо огромное за оказание помощи!!
Вашу структуру повторил. Создал выходную форму. Все работает!

А вот когда я делаю статистический отчет с выгрузкой в excel, то cronos сразу же зависает.
Возможно ли данную формулу допилить именно для выгрузки в excel?

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 31.08.2020 :: 23:34:40
Попробовал в стат отчете. Все работает.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 00:15:56
Лови
http://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?action=downloadfile;file=FIO.zip (4 KB | 79 )

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 01:07:32
Спасибо!
Попробовал, но столкнулся вот с чем:
В Cronos_PRO_5.0.11003:
1. Когда в БД Лицо только одна фамилия (Иванов Иван Иванович), формула срабатывает (при условии, что нет распределения в ячейках), но в статистический отчет выводится только фамилия (Иванов).
2. Как только вводится вторая. третья и т.д. фамилия, то при обработке запроса по образцу сразу же выдается ошибка.
В Cronos PRO 7.0 DEMO:
1. Формула срабатывает, но выводится только фамилия.
Файл прилагаю.

Может есть другой вариант формулы??
http://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?action=downloadfile;file=FIO1.rar (11 KB | 81 )

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 21:10:42
С выгрузкой косяк "серийный номер не совпадает".
Вообще я тестировал все на версии 6.4 демо . Может что от версии зависит или у Вас в стат. отчете какие дополнительные параметры, условия стоят, которые мешают правильному выполнению формулы.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 21:17:06

dron_ffk записан в 01.09.2020 :: 21:10:42:
С выгрузкой косяк "серийный номер не совпадает".
Вообще я тестировал все на версии 6.4 демо . Может что от версии зависит или у Вас в стат. отчете какие дополнительные параметры, условия стоят, которые мешают правильному выполнению формулы.

Добрый вечер! Насчёт статистического отчёта, пробовал на Вашем примере ничего не меняя!

Я формулу, которорую я выше делал нельзя модернизировать? И как это-то косяк можно исправить?

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 21:25:47
Выгрузи без копирования серийного номера.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 21:27:59

dron_ffk записан в 01.09.2020 :: 21:25:47:
Выгрузи без копирования серийного номера.

А как? По формулам я ещё не совсем профи как Вы, Zuluss и другие.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 21:34:02
Я имел ввиду выгрузку копии банка в которой не сработал стат. отчет. Требует нужный серийный номер при восстановлении.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 22:01:50

dron_ffk записан в 01.09.2020 :: 21:34:02:
Я имел ввиду выгрузку копии банка в которой не сработал стат. отчет. Требует нужный серийный номер при восстановлении.

Сделал.

Если можно, у меня есть несколько вопросов:
1. Есть ли другой вариант написания Вашей формулы.
2. Есть ли возможность "модернизации" моей формулы.
3. Как она будет себя вести при построении БД как на рисунке?
Спасибо!



http://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?action=downloadfile;file=FIO2.rar (18 KB | 80 )

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 22:04:21
Вот еще пример построения БД и Мануала. Это к 3 вопросу.
Bez_imeni.png (35 KB | 68 )

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 22:04:56

Цитировать:
В Cronos PRO 7.0 DEMO:
1. Формула срабатывает, но выводится только фамилия.

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

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 22:07:31
Да, в 7  версии у меня формула срабатывает, но выдается только фамилия и то при условии, что нет распределения, а как только ставлю распределение, то сразу же возникает ошибка.
Но я в основном 5.1. осваиваю.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 01.09.2020 :: 22:17:22
В 5 версии наверное некорректно работает функция USERECORD попробуй через VIEWRECORD.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 01.09.2020 :: 22:23:16

dron_ffk записан в 01.09.2020 :: 22:17:22:
В 5 версии наверное некорректно работает функция USERECORD попробуй через VIEWRECORD.

Попробовал, но увы результат тотже :-[ :-[ :-[
Попробовал на 7, работает как без распределения, так и с распределением, но увы - это не мой вариант >:(

Попробовал в строе кода
[code]while valcount(@f)>=@i do [/code]
@f заменить на @@f
Формула стала работать, но выдает только текущую ФИО, а в случае изменения ФИО данные не выводятся. :-/

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 03.09.2020 :: 00:25:20
Доброго всем вечера/дня!
Заново сформировал БД по примеру как предложил уважаемый dron_ffk и тому, что приведен в мануале (изображение выше).
Вот снова мои методы "научного тыка" при использовании функций USERECORDVIEWRECORD и CAT (по данной формуле уважаемый Zuluss писал http://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?num=1270007942/2#2):
1. Все работают изумительно, при условии, что в БД введены ФИО только единожды (Иванов Иван Иванович).
2. Как только осуществлен ввод данных, например, от фамилии (Иванов->Петров->Сидоров и т.д.), при выполнении запроса по образцу cronos виснет.
3. Как только осуществлен ввод данных, например, в нарастающем порядке (Иванов->Петров;Сидоров и т.д.), при выполнении запроса по образцу cronos виснет.
4. Если заполнены только первоначальные ФИО (Иванов Иван Иванович) - все работает.
5. [code]while valcount(@f)>=@i do [ [/code]
Если в данной строке кода ЛЦ84_Л1 заменить на @@f, то срабатывает, но информация касается только первоначальных ФИО (Иванов Иван Иванович), а остальная связь теряется.
Подскажите пожалуйста, есть ли решение данной проблемы именно в cronos младших версий, если нет, то как можно данную проблему обойти стороной?
Надеюсь на понимание.
Спасибо!

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 03.09.2020 :: 21:54:26

Цитировать:
5. Код:
while valcount(@f)>=@i do [ 


Если в данной строке кода ЛЦ84_Л1 заменить на @@f, то срабатывает, но информация касается только первоначальных ФИО (Иванов Иван Иванович), а остальная связь теряется.


Ничего там не срабатывает, так как Вы пишете глобальную переменную с пустым значением, вместо переменной в которой присваиваются системные номера записей и срабатывает цикл. В данном случае цикл не срабатывает, а пропускается и функции USERECORD или  VIEWRECORD не срабатывают, которые в данном случае вызывают ошибку работы формулы именно в статистическом отчете, в версии Cronos_PRO_5.0.11003.
Данная версия cronos скорее всего у Вас "подлеченная", скаченная с просторов интернета и имеет свои подводные камни в работе. В частности с работой некоторых функций в стат. отчете.
Если Вам нужно проводить тестирование формул и других функции cronos в домашних условиях, то пользуйтесь тестовыми версиями с 6.4 и выше, где многие недостатки в работе программы уже исправлены.

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 03.09.2020 :: 22:12:55
Добрый вечер! Уважаемый dron_ffk, ещё благодарю за Вашу помощь.
Подскажите пожалуйста, а есть ли какой-то другуй путь в написании данной формулы?
Спасибо.

Заголовок: Re: Сбор данных в статистический отчёт
Создано dron_ffk в 03.09.2020 :: 23:09:55
[code]@fam:=ЛЦ1
@name:=ЛЦ2
@otch:=ЛЦ3
loop(ЛЦ84_Л1,loop(Л13_ЛЦ,
                  if @fam#ЛЦ1 then @fam1:=ADDVALUECHECK(@fam1,ЛЦ1);
                                   if @name#ЛЦ2 then @name1:=ADDVALUECHECK(@name1,ЛЦ2);
                                   if @otch#ЛЦ3 then @otch1:=ADDVALUECHECK(@otch1,ЛЦ3);
                                   loop(ЛЦ84_Л1,loop(Л13_ЛЦ,
                                                                       if @fam#ЛЦ1 then @fam1:=ADDVALUECHECK(@fam1,ЛЦ1);
                                                                       if @name#ЛЦ2 then @name1:=ADDVALUECHECK(@name1,ЛЦ2);
                                                                       if @otch#ЛЦ3 then @otch1:=ADDVALUECHECK(@otch1,ЛЦ3);
                                                                       loop(ЛЦ84_Л1,loop(Л13_ЛЦ,
                                                                                                     if @fam#ЛЦ1 then @fam1:=ADDVALUECHECK(@fam1,ЛЦ1);
                                                                                                     if @name#ЛЦ2 then @name1:=ADDVALUECHECK(@name1,ЛЦ2);
                                                                                                     if @otch#ЛЦ3 then @otch1:=ADDVALUECHECK(@otch1,ЛЦ3)))))))
if @fam1 then @fam1:=swap(char(40)<<@fam1<<char(41),@valueseparator,", ")
if @name1 then @name1:=swap(char(40)<<@name1<<char(41),@valueseparator,", ")
if @otch1 then @otch1:=swap(char(40)<<@otch1<<char(41),@valueseparator,", ")
@FIO:=@fam<<@fam1<<@ENDOFLINE<<@name<<@name1<<@ENDOFLINE<<@otch<<@otch1
@ret:=TRIM(@FIO)
[/code]

Заголовок: Re: Сбор данных в статистический отчёт
Создано graffserg в 03.09.2020 :: 23:27:13
Еще раз спасибо!
Проверил вроде все работает. ::)
Завтра протестирую более внимательно и попробую подогнать под свои нужды.
Спасибо! :D

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

Localization by mySOPROMAT.ru