:: Visual Foxpro, Foxpro for DOS
мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Доброго дня всем!

Случалось ли кому сталкиваться с такой историей:
в деталях отчета частично "съедается" информация. Например, типовой отчет типа "счет", наименование товара может может занять от 1 до 4-х строк. До 2-х включительно все хорошо. Но если 4-ре строки, то начинается мистика:
в документе, где много наименований (товаров), часть информации просто на полуслове теряется. Те же наименования в том же отчете, но в документе с 2...3 товарами, отображаются корректно.



Исправлено 1 раз(а). Последнее : DmitryKn, 05.11.22 17:35
Ratings: 0 negative/0 positive
Re: мистика в отчетах
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
У контрола выводящего текст надо проставить сюсекбокс strech with overflow, вроде так называется.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 05.11.22 17:50
Ratings: 0 negative/0 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
PaulWist
У контрола выводящего текст надо проставить сюсекбокс strech with overflow, вроде так называется.

Это сделано, причем, эти же наименования в другом документе, этот же отчет, корректно выводятся.
Опять же, теряется не целая строка, а прям на полуслове, полстроки. Например, фраза "товар такойто из оттуда" выводится типа "товар та", этот же товар в другом документе выводится корректно.



Исправлено 1 раз(а). Последнее : DmitryKn, 05.11.22 17:58
Ratings: 0 negative/0 positive
Re: мистика в отчетах
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
А вы остановите программу прямо перед выводом мистического отчета, и затем выложите для всех сам репорт и текущие данные (минимальный набор таблиц и содержимого, убрав всё лишнее или секретное), приводящие к этой мистике.
Если у меня эта ошибка тоже будет проявляться, то попробую найти, в чем дело.

Вряд ли здесь кто-то вылечит пациента без того, чтобы его осмотреть и потрогать.
Ratings: 0 negative/0 positive
Re: мистика в отчетах
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
А что лежит в курсоре-таблице из которой выводится отчет, возможно уже там обрезано из-за select-a.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
так, отчеты тут не причем.
Это так курсор заполняется, тоже не очень понятно, что происходит.

Делаю отбор
select ;
ALLTRIM(cfld1)+' '+ALLTRIM(cfld2) + ', ' + ALLTRIM(cfld3) + ;
IIF(!EMPTY(cfld4),', ' + ALLTRIM(cfld4),'') + IIF(lfld5 = .f.,'',IIF(EMPTY(nfld6),', текст1',', текст2' + ;
+ ALLTRIM(STR(nfld6,10,2)) + ', текст3 ' + ALLTRIM(STR(('тут вычисляем вычисления') + '%'))) as ctovar, ;
cfld7, ;
cfld8, ;
.... и так далее

и вот этот ctovar заполняется некорректно: иногда все хорошо, иногда обрывается прям посреди поля cfld4, иногда посреди текста 'текст1' или 'текст2', причем в разных местах может быть. Поле cfld4 символьное, содержит номер сертификата и дату, оборваться может на любом символе. Текст вообще в select задается...

Как такое может быть?

Вывел курсор в Browse и увидел.
Еще есть странность - если в открытом Browse курсоре поставить мышкой в конце обычной строки курсор, который экранный, то он там и моргает. А в поломанной строке на символ назад отскакивает, за последним символом никак становиться не хочет.



Исправлено 5 раз(а). Последнее : DmitryKn, 05.11.22 20:42
Ratings: 0 negative/0 positive
Re: мистика в отчетах
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
DmitryKn
курсоре поставить мышкой в конце обычной строки курсор, который экранный, то он там и моргает. А в поломанной строке на символ назад отскакивает, за последним символом никак становиться не хочет.

смотрите длину получаемых символьных полей - похоже выходите за предельный размер ctovar

для проверки например можно сделать дополнительное поле типа так:

select ;
ALLTRIM(cfld1)+' '+ALLTRIM(cfld2) + ', ' + ALLTRIM(cfld3) + ;
IIF(!EMPTY(cfld4),', ' + ALLTRIM(cfld4),'') + IIF(lfld5 = .f.,'',IIF(EMPTY(nfld6),', текст1',', текст2' + ;
+ ALLTRIM(STR(nfld6,10,2)) + ', текст3 ' + ALLTRIM(STR(('тут вычисляем вычисления') + '%'))) as ctovar, ;
LEN(ALLTRIM(cfld1)+' '+ALLTRIM(cfld2) + ', ' + ALLTRIM(cfld3) + ;
IIF(!EMPTY(cfld4),', ' + ALLTRIM(cfld4),'') + IIF(lfld5 = .f.,'',IIF(EMPTY(nfld6),', текст1',', текст2' + ;
+ ALLTRIM(STR(nfld6,10,2)) + ', текст3 ' + ALLTRIM(STR(('тут вычисляем вычисления') + '%')))) as lentovar,
;
cfld7, ;
cfld8, ;
.... и так далее



Исправлено 4 раз(а). Последнее : AndyNigmatec, 05.11.22 21:47
Ratings: 0 negative/0 positive
Re: мистика в отчетах
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Это нулевой прогон, для «обрезанного» поля надо задать длину либо cast(... as c(254)) либо padr(..., 254) либо Memo


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/2 positive
Re: мистика в отчетах
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
ctovar заполняется некорректно: иногда все хорошо, иногда обрывается прям посреди поля cfld4, иногда посреди текста 'текст1' или 'текст2', причем в разных местах может быть.
Обычное дело.
Вы-то сами при таком выражении какую длину поля ctovar ожидаете?
А на каком основании именно такую?

Задавайте длину поля явно с помощью CAST().



Исправлено 1 раз(а). Последнее : akvvohinc, 05.11.22 22:16
Ratings: 0 negative/1 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Получилось так:
самые большие значения не превышают 200
LEN считает правильное число символов, в курсоре, приводит , например, 165, это столько, сколько должно быть правильно. Однако в поле фактически может быть 115 или 103 и т.п. Т.е. LEN для одного товара всегда 165, символы в выражении подсчитываются правильно, но в поле курсора попадают не все, не во всех случаях.
Для двух документов, в составе имеющих один и тот же товар, в одном случае, ctovar содержит все 165 символов, lentovar = 165, во втором ctovar 103, lentovar = 165

Это цифры для иллюстрации, такая хрень не именно в этих документах или именно этот товар, но всегда больше 100 символов. Какой-либо закономерности не увидел.
Ratings: 0 negative/0 positive
Re: мистика в отчетах
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
все верно, вам нужно явно задать размерность (как выше и написали)

CAST( ... as c(254)) as ctovar

раз уж более 200 нет - то поместится )))

хотя обзывать товар длинной 200 символов как-то не очень.
Ratings: 0 negative/1 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
CAST() полечил, все работает.

Никогда бы не подумал, что поле курсора может принимать произвольно длину, то 103, то 115, то 165 для одних и тех же данных.

Друзья мои, большое вам человеческое спасибо, не знаю, что бы я без вас делал. Как говорят мои дети, вам плюс в карму
Ratings: 0 negative/0 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
AndyNigmatec

хотя обзывать товар длинной 200 символов как-то не очень.

все верно, не то, что не очень, а вообще г...о какое-то, сплош избыточная, и никому не нужная от слова совсем информация, но таковы требования, инструкция у нас новая (
Ratings: 0 negative/0 positive
Re: мистика в отчетах
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
нет, не так - курсор - это такая же таблица только временная, и в ней размерность каждого поля фиксирована, но в в вашем случае это поле в select-е вычисляемое и его длина зависит от этих данных. Не помню как именно фокс в таких случаях эту размерность выбирает - то ли по первому вычисленному значению, то ли еще как, но суть остается прежней - в данном случае необходимо это было явно указать.
Ratings: 0 negative/1 positive
Re: мистика в отчетах
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Это фича фокса, что бы сформировать курсор, фокс берет первую попавшуюся запись и по ней определяет размерность полей.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: мистика в отчетах
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
DmitryKn
Никогда бы не подумал, что поле курсора может принимать произвольно длину, то 103, то 115, то 165 для одних и тех же данных.
Главное в другом - размер поля не будет определяться максимальной длиной выражения, как вы, видимо, ожидали.
Ratings: 0 negative/0 positive
Re: мистика в отчетах
DmitryKn
Автор

Сообщений: 300
Дата регистрации: 06.04.2022
Опыт - великое дело. В книжке об этом не встречал.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 19 PaulWist shock19 vadpost  (Гостей: 16)

© 2000-2024 Fox Club 
Яндекс.Метрика