Форум » [x]Harbour » ANN: Вышел релиз FastReport for [x]Harbour (продолжение) » Ответить

ANN: Вышел релиз FastReport for [x]Harbour (продолжение)

Sergey Spirin: Здравствуйте. Рад сообщить, что вышел релиз FastReport for [x]Harbour. Как всегда, информацию можно посмотреть: http://www.paritetsoft.ru/frh.htm Возможным русскоязычных покупателей лучше контактировать со мной напрямую по email. Цена для оплаты в рублях банковским переводом по выставленному счету- 9999 рублей. -- Спирин Сергей. Компания "Паритет Софт". FRH sales: http://www.paritetsoft.ru/frh.htm FRAX sales: http://www.hotsoft.ru/ALASKA/frax_eng.htm

Ответов - 268, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

PSP: Sergey Spirin пишет: если вы хотите работать только по алиасу, то всегда обнуляйте WorkArea, ставьте 0 Да. Так все нормально. Большое спасибо. При отдавании приоритета алиасу надо не забыть обнулить WorkArea. Теперь буду помнить...

Andrey: Сделал я "мастер-детальную связь" ! Работает нормально ! Можно посмотреть "пример 1". Начал дальше развивать эту тему, но столкнулся с проблемой: Пример 2 - не работает "мастер-детальная связь" Делаю также как и в Примере 1, а он все равно не работает.... По NN=2048 (это первый адрес - красный цветом, База Мастер) выскакивают все записи базы-деталь (синяя NN - первая строчка) ! Итак по всей Мастер-базе... Разъясните мне пожалуйста в чем тут дело ? Ссылка для скачки демо-примера: http://files.mail.ru/G9W6H8

Sergey Spirin: Andrey пишет: По NN=2048 (это первый адрес - красный цветом, База Мастер) выскакивают все записи базы-деталь (синяя NN - первая строчка) ! Итак по всей Мастер-базе... Компилить ваш пример я не буду. Поэтому пойдем последовательно. Во-первых, для начала, уберем все лишнее. // Установить СВЯЗЬ БД-Мастер с БД-Деталь по полю SELECT BASE_TITLE SET RELATION TO NN INTO BASE_ROOMS Это что? Зачем? Думаю, что RELATION вполне может конфликтовать с Мастер-Детэйл. Убрать! Далее: M->FrPrn:SetMasterDetail( aMasterDetail[nI,1], aMasterDetail[nI,2], aMasterDetail[nI,3] ) //? nI, aMasterDetail[nI,1], aMasterDetail[nI,2], Valtype(aMasterDetail[nI,3]), M->FrPrn:SetResyncPair( aMasterDetail[nI,1], aMasterDetail[nI,2] ) Это что за SetResyncPair()? Ну я же в прошлых постах говорил, что SetResyncPair НЕ НУЖЕН при MasterDetail. Убираем, смотрим. ----- Ну и главное, поймите, что такое MasterDetail, не вообще, а как реализовано. MasterDetail - это отношение, при котором любое изменение текущей записи Master-таблицы приводит к вызову такого кода для Detail-таблицы: DbSetScope(soScope_Both, Результат переданного блока кода) То есть, идет вызов чисто Харбурной функции. Ваша задача понять, почему, собственно, Scope не устанавливается.


Andrey: Sergey Spirin пишет: Это что за SetResyncPair()? Ну я же в прошлых постах говорил, что SetResyncPair НЕ НУЖЕН при MasterDetail. Это случайно осталось.... Убрал раньше. Учел ваши замечания ! Все равно не работает ! Что-то хХарбор "барохлит" ... Как мне подсказал знакомый Дельфист: У тебя, всё-таки, внутри харбора не установлена мастер-детальная связь я добавил событие отсеивающее ненужные записи: procedure DetailData1OnBeforePrint(Sender: TfrxComponent); begin DetailData1.Visible := <BASE_ROOMS."NN"> = <BASE_TITLE."NN">; end; оно заработало. но нужно что-то подобное делать снаружи отчета, внутри харбора. только не так как у меня, конечно, а при переходе с записи на запись в таблице MasterHouse, ставить фильтр на таблицу Rooms вроде NN = 2048, где "2048" - текущее значение NN из HouseMaster Действительно заработало. Во вкладке CODE пишем этот код и Sergey Spirin пишет: Ваша задача понять, почему, собственно, Scope не устанавливается. Я так и не понял, почему этот Scope не устанавливается ....

Sergey Spirin: Andrey пишет:  цитата: Это что за SetResyncPair()? Ну я же в прошлых постах говорил, что SetResyncPair НЕ НУЖЕН при MasterDetail. Это случайно осталось.... Убрал раньше. А relation убрали? Andrey пишет: Учел ваши замечания ! Все равно не работает ! Что-то хХарбор "барохлит" ... Как мне подсказал знакомый Дельфист: У тебя, всё-таки, внутри харбора не установлена мастер-детальная связь я добавил событие отсеивающее ненужные записи: procedure DetailData1OnBeforePrint(Sender: TfrxComponent); Не надо ничего выдумывать со знакомым дельфистом!!! Master-Detail для фаста устанавливается методом :SetMasterDetail(). Все, точка. Если не работает, то надо разбираться почему, а не выдумывать. Придуманная же фильтрация может быть накладна на больших объемах. Andrey пишет: Я так и не понял, почему этот Scope не устанавливается .... Так, добавьте в пример bat-ник, чтобы я мог его компилировать и я разберусь, в чем там у вас дело. Жду.

Andrey: Sergey Spirin пишет: А relation убрали? Убрал конечно ! Все ваши рекомендации выполнил. Не работает. Sergey Spirin пишет: Так, добавьте в пример bat-ник, чтобы я мог его компилировать и я разберусь, в чем там у вас дело. Жду. Bat-ник уже есть в проекте. Запуск С:\xHarbour\bin\hbmake Frx-Dbase.bc , т.е. Харборовская утилита hbmake.exe сама проверяет и компилирует этот проект.

Sergey Spirin: Andrey пишет: Bat-ник уже есть в проекте. Запуск С:\xHarbour\bin\hbmake Frx-Dbase.bc , Угу. Кроме того что path надо прописывать, еще терминалы какие-то Я в этих терминалах как ... C:\Borland\BCC55\BIN\ilink32 @makefile.lnk Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Unable to open file 'WVTGUI.LIB'

Andrey: Sergey Spirin пишет: Угу. Кроме того что path надо прописывать, еще терминалы какие-то Извиняюсь, не учел этого. Это по терминологии Аляски - гибридный терминал. Собирается дополнительно из CONTRIB'ов... Удалил и переделал на стандартный... Ссылка для скачивания: http://files.mail.ru/N4KZC3

Sergey Spirin: Гм... Пересобрал, ничего не менял, все работает без единого изменения Что делать будем?

Sergey Spirin: Ан нет, это у вас фильтр не удален в отчете..... Счас буду смотреть.

Sergey Spirin: Фу, Андрей, ну надо же быть внимательным, елы-палы!!!!!! USE HOUSES\Rooms ALIAS BASE_ROOMS NEW AADD( aAlias , ALIAS() ) ; AADD( aSelect , SELECT() ) // Добавить в массив для иниц. в FastReport И // Мастер-детальная связь для FastReport AADD( aMasterDetail, { "BASE_TITLE", "BASE_ROOM", {||BASE_TITLE->NN} } ) Сиди тут, опечатки ищи под дебаггером Ясно, что фаст просто не нашел детальную таблицу, надо: AADD( aMasterDetail, { "BASE_TITLE", "BASE_ROOMS", {||BASE_TITLE->NN} } ) Давайте, внимательней! А то, из-за банальных опечаток рождаются фантазии с другом дельфистом

Sergey Spirin: Кстати, если бы вы заглянули в FastRepH.prg, то увидели бы, что метод :SetMasterDetail() возвращает True-False успешности действия. В вашем случае он честно возвращал False "в никуда" Поэтому может имеет смысл вам написать так: [pre]IF M->FrPrn:SetMasterDetail( aMasterDetail[nI,1], aMasterDetail[nI,2], aMasterDetail[nI,3] ) == .f. Alert("Проверь правильность написания мастера и детали, то что они не равны друг другу, и то что они были уже добавлены методом SetWorkArea") ENDIF[/pre] Ну, а другу дельфисту поясните, что между, собственно, Фастом и Харбур-приложением написано достаточно много моего кода. Иначе бы они друг друга никак не поняли бы. В этот код входит и дельфийский харбур-датасет, эти датасеты фаст и принимает, и ему абсолютно все равно откуда эти датасеты "притащили" данные, из Харбур-приложения ли, или с сервера Oracle, например. Это несколько отличается от клипперного RDD-понимания, но суть та же, только универсальней и шире. В сторону Харбор-приложения датасет работает только харборными методами и реализует все необходимое для работы с данными, в том числе стандартную для Дельфи связь Master-Detail.

Andrey: Sergey Spirin пишет: Фу, Андрей, ну надо же быть внимательным, елы-палы!!!!!! Каюсь... Ну что поделаешь, такие вещи встречается иногда... Причем как не заработал код в моей большой системе, так этот код перетащил в отдельный пример. Так эту же ошибку перетащил тоже... В следующий раз буду внимательней ! Sergey Spirin пишет: SetMasterDetail() возвращает True-False успешности действия. А за это спасибо тоже, учту и применю у себя.

Andrey: Спасибо большое ! С меня коньяк ! Где пересечемся ?

Dr. Oldwarez: Наконец-то, после серьёзного разговора с шефом, дошли-таки до необходимости покупки FastReport. Пока гоняю тестовую версию. На MINIGUI Extended она залинковалась, а вот на OOHG почему-то ведёт себя очень странно: [pre2] fastreph.prg: In function HB_FUN_CALL_FUNC_CICCCCCCCC_I fastreph.prg:173: warning: passing arg1 of pointer to fucntion discards qualifiers from pointer target type [/pre2] Подскажите, пожалуйста, в чём может быть проблема?

Sergey Spirin: Andrey пишет: Спасибо большое ! С меня коньяк ! Где пересечемся ? Ну, может, когда и пересечемся. Я в Москве живу

Sergey Spirin: Dr. Oldwarez пишет: fastreph.prg: In function HB_FUN_CALL_FUNC_CICCCCCCCC_I fastreph.prg:173: warning: passing arg1 of pointer to fucntion discards qualifiers from pointer target type Подскажите, пожалуйста, в чём может быть проблема? Разные компиляторы, наверное. Только Варнинги? Ошибок нет? Собирается, работает?

Andrey: Sergey Spirin пишет: Я в Москве живу Да я тоже рядом, в ближнем Подмосковье ! В спальном районе Москвы. Несколько раз за месяц езжу в Москву. Так что можно пересечься ....

Dr. Oldwarez: Sergey Spirin пишет: Разные компиляторы, наверное. Только Варнинги? Ошибок нет? Собирается, работает? Собираться-то оно собирается, даже дизайнер вылазит. Но почему-то ни одной строчки в отчётах.

Sergey Spirin: Dr. Oldwarez пишет: Собираться-то оно собирается, даже дизайнер вылазит. Но почему-то ни одной строчки в отчётах. Ok. Так, какой там Харбур/хХарбур используется, какой С компилятор? Ну, и где эту штуку можно скачать, дайте ссылку.

Dr. Oldwarez: Качать отсюда FastReport for Harbour Используется последняя версия OOHG, самый последний Харбор и компилятор MinGW 5.1.06

Sergey Spirin: Dr. Oldwarez пишет: Качать отсюда FastReport for Harbour Э... Ну фаст то у меня есть Dr. Oldwarez пишет: Используется последняя версия OOHG, самый последний Харбор и компилятор MinGW 5.1.06 Меня интересует откуда это качать - OOHG с MinGW 5.1.06

Петр: Dr. Oldwarez пишет: Используется последняя версия OOHG, самый последний Харбор и компилятор MinGW 5.1.06 Очень условное понятие "последняя версия". Самый последний Харбор - ото официальный релиз или код с SVN? Компилятор MinGW 5.1.06 - такого еще нет. 5.1.16 - это не версия компилятора. Скорее всего у вас установлен gcc версии 3.4.5 Для определения версии пользуйтесь harbour -build gcc -v

Andrey: Приветствую ! Это опять я с предыдущим отчетом.... Как можно сделать, чтоб АДРЕС и СПИСОК КВАРТИР не разрывались ? А то если на странице нет места, то АДРЕС остается на одном листе, а СПИСОК КВАРТИР уходит на другой лист. Вот так:

Sergey Spirin: Andrey пишет: Как можно сделать, чтоб АДРЕС и СПИСОК КВАРТИР не разрывались ? У бэндов мастера и детали поставьте свойство KeepTogerther в True. KeepTogerther - по русски это "держаться вместе".

Dr. Oldwarez: Итак: Harbour 2.1.0 build 14130 gcc 3.4.5 Попробовал я перейти на ноутбук с Borland Console Compiler и xHarbour. И, о, чудо! Это заработало!!! Так, что виноват, судя по всему MINGW. А компьютер придётся пока сменить, потому что на нём Borland выдаёт какие-то криптические LME279 LME347. На ноутбуке же тот же Builder работает и не глючит!

Sergey Spirin: Dr. Oldwarez пишет: Итак: Harbour 2.1.0 build 14130 gcc 3.4.5 Скачал с "sourceforge.net/projects/oohg", развернул у меня дает: Harbour Build Info --------------------------- Version: Harbour 2.0.0beta3 (Rev. 12452) Compiler: MinGW GNU C 3.4.5 (32-bit) Ладно, думаю, дело в gcc, поэтому не так принципиально. А что, вообще, это за компилятор gcc?

Sergey Spirin: Dr. Oldwarez пишет: Собираться-то оно собирается, даже дизайнер вылазит. Но почему-то ни одной строчки в отчётах. Ну не знаю, что у вас не получается. Варнингов конечно море, но у меня все работает. Например взял пример из \oohg\samples\browse_3\browse1.prg. Добавил в OpenTables(): FrPrn := frReportManager():new() FrPrn:SetWorkArea("Test", Select("Test")) FrPrn:DesignReport() Вот результат: Так что конкретней говорите, что значит "почему-то ни одной строчки в отчётах"? А насчет варнингов, давно собираюсь сесть и по возможности причесать код так, чтоб "нравился" всем компиляторам

Pasha: Sergey Spirin пишет: А что, вообще, это за компилятор gcc? Это, наверное, mingw. А насчет предупреждений - у этого компилятора более строгие правила по типизации данных, вот он и выдает варнинги, которые в bcc такими не рассматриваются. Но предупреждение - не ошибка, должно работать.

Sergey Spirin: Pasha пишет: А насчет предупреждений - у этого компилятора более строгие правила по типизации данных, вот он и выдает варнинги, которые в bcc такими не рассматриваются. Но предупреждение - не ошибка, должно работать. Не... "Виноват" оказался не gcc, а харбур, точнее харбур2. Дело в том, что в двойке возврат функции hb_parc поменялся с char * на const char * (вот куролесят как тут обойдешься без варнингов на всех версиях всего). Поэтому придется явно приводить. Замените по всему текcту FastRepH.prg все вхождения hb_parc на (char *)hb_parc После такой замены нет ни одного варнинга В общей сборке я на выходных поменяю.

Sergey Spirin: PSP пишет: Warning W8075 FastRepH.prg 80: Suspicious pointer conversion in function HB_FUN_CALL_PROC_C Warning W8075 FastRepH.prg 86: Suspicious pointer conversion in function HB_FUN_CALL_PROC_IC Warning W8075 FastRepH.prg 92: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CC Warning W8075 FastRepH.prg 92: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 124: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_C_I Warning W8075 FastRepH.prg 136: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_IC_I Warning W8075 FastRepH.prg 142: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CC_I Warning W8075 FastRepH.prg 142: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CC_I Warning W8075 FastRepH.prg 148: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCC_I Кстати, и "Ваша" проблема похоже растет оттуда же. Сделайте такую замену, которую я описал выше и попробуйте.

PSP: Sergey Spirin пишет: Сделайте такую замену, которую я описал выше и попробуйте. Я один раз компилю в obj и потом просто его линкую. Меня варнинги сейчас не беспокоят. Подожду изменений в общей сборке. Спасибо.

Dr. Oldwarez: Я попробовал заменить, но у меня саму среду, судя по всему, переставлять надо. Я над ней слишком уж много экспериментов делал. Жду свежей сборки. ИМХО, версия на BCC xHarbour работает быстрее, чем на MinGW Harbour. Извините за холивор, если что.

Andrey: Sergey Spirin пишет: У бэндов мастера и детали поставьте свойство KeepTogerther в True. KeepTogerther - по русски это "держаться вместе". Спасибо БОЛЬШОЕ !!!

Sergey Spirin: Пересобрал FRH с версией 4.9.48. У меня просьба, если у кого-то будут варнинги или хинты на каких-то комбинациях компиляторов, то сообщайте, плиз, сюда об этом.

Andrey: Протестировал на хХарборе 1.0.0 и Harbour 2.0.0 и MiniGui 1.7 , все под BCC . Нормально, нет варнингов. А нельзя название "FrSystH.dll" в файле FastRepH.prg перенести наверх и сделать типа: #define FR_NAMEFILEDLL "FrSystH.dll" А то я библиотеку называю другим именем и каждый раз менять приходиться ? Забываешь, приходишь к заказчику и облом... Формы не печатаются....

PSP: Все чисто (Harbour 2 и BCC). Спасибо.

Sergey Spirin: Andrey пишет: Протестировал на хХарборе 1.0.0 и Harbour 2.0.0 и MiniGui 1.7 , все под BCC . Нормально, нет варнингов. Ok. Спасибо. Но появятся новые версии Харбуров и варнинги опять полезут Не забудьте тогда сообщить Andrey пишет: А нельзя название "FrSystH.dll" в файле FastRepH.prg перенести наверх и сделать типа: #define FR_NAMEFILEDLL "FrSystH.dll" А то я библиотеку называю другим именем и каждый раз менять приходиться ? Забываешь, приходишь к заказчику и облом... Формы не печатаются.... Андрей, вы в "своем репертуаре". Значит правите FastRepH.prg, исправляете "FrSystH.dll" на свое? Ну а что там в этом месте написано то? [pre2]METHOD Init( cOptionalPath ) class frReportManager LOCAL oError IF ::frSystHandle == 0 cOptionalPath := IF(cOptionalPath <> NIL, cOptionalPath, "FrSystH.dll") ::frSystHandle := FrLoad(cOptionalPath) [/pre2] То есть, "FrSystH.dll" подставляется только тогда, когда :Init() вызывается без параметра! У себя в коде вызывайте не: FrPrn := frReportManager():new() a: FrPrn := frReportManager():new(MY_DLL_NAME) Вот и все И не надо сторонние prg править, это плохая практика.

Andrey: Sergey Spirin пишет: И не надо сторонние prg править, это плохая практика. Вот спасибо, а то я пробовал делать что-то подобное, но у меня не получилось. Спасибо большое...

Andrey: Периодически сталкиваюсь с такой проблемой: Нельзя ли обойтись без "QUIT", а то пользователь вылетает из программы, а я репу чешу, что-там случилось..... ? Они (пользователи) смекалистые... И на них управу не найти.... Конечно, можно проверять - есть ли файл на диске, а он может быть в другой папке и т.д. И еще бы проверку версий сделать !!! Т.е. чтоб можно было бы получить НОМЕР ВЕРСИИ сборки FrSystH.dll !!! Очень нужно !!!

Sergey Spirin: Andrey пишет: Нельзя ли обойтись без "QUIT", а то пользователь вылетает из программы, а я репу чешу, что-там случилось..... ? Они (пользователи) смекалистые... И на них управу не найти.... Конечно, можно проверять - есть ли файл на диске, а он может быть в другой папке и т.д. Ну не знаю, все-таки это ошибка - целой либы нет на месте, сперли Как-то одним алертом здесь обходится ... не кудряво. Поэтому ошибку и генерю. Если у вас такие проблемы, то вам лучше просто самому ошибку обрабатывать. И все. Andrey пишет: И еще бы проверку версий сделать !!! Т.е. чтоб можно было бы получить НОМЕР ВЕРСИИ сборки FrSystH.dll !!! Очень нужно !!! Ну, это пожалйста: FrPrn:GetProperty("Report", "Version") Интересно, а зачем нужно?

Andrey: Sergey Spirin пишет: Интересно, а зачем нужно? Обновлять библиотеку нужно под новые формы. А так забудешься и облом.... Сделаю проверку у себя в программе и при старте буду проверять версию DLL-ки. А уж пользователь сам мне потом будет сообщать что у него старая DLL-ка....

Sergey Spirin: Andrey пишет: Обновлять библиотеку нужно под новые формы. А так забудешься и облом.... Сделаю проверку у себя в программе и при старте буду проверять версию DLL-ки. В смысле? Вы, что, думаете, что отчет сделанный, например, в дизайнере 4.9.x, не будет работать под 4.7? Почему вы так решили? Вообше-то, версия на то и версия, что в течении ее формат стабилен. Актуально это будет с выходом 5-ки, который ожидается осенью.

Andrey: Sergey Spirin пишет: Вы, что, думаете, что отчет сделанный, например, в дизайнере 4.9.x, не будет работать под 4.7? Не будет ! У меня версия 4.5 раньше стояла и сейчас стоит у многих ! А в 4.7 появились новые функции, а 4.8 еще и это: FrPrn:SetTxtDataSet("MyText", "C:\MyText.txt") и т.д. А как балбесу пользователю объяснить, что нужно обновить версию DLL ? Не буду же я записывать размер файла, дату создания DLL куда-нибудь в массив и при открытии каждый раз сравнивать существующий файл с массивом даты..... и т.д. А так запросил НОМЕР ВЕРСИИ DLL и выдал сообщение, если нужно обновить ! И все....

Sergey Spirin: Andrey пишет: Не будет ! У меня версия 4.5 раньше стояла и сейчас стоит у многих ! А в 4.7 появились новые функции, а 4.8 еще и это: FrPrn:SetTxtDataSet("MyText", "C:\MyText.txt") и т.д. А, ну да, про собственный добавляемый функционал я подзабыл А как так получается, что пользователь может обновить отчеты, не обновив при этом либу? Он, что, руками отдельные файлы обновляет?

Andrey: Sergey Spirin пишет: А как так получается, что пользователь может обновить отчеты, не обновив при этом либу? Да кто ж его знает.... У меня были умельцы, как они это делают ? И вдобавок ко всему мужики, настройщики компьютеров.... Ставят последнее обновление, а потом откуда-то вытаскивают старые обновления... Вот так-то !

Sergey Spirin: Привет! Почему-то у буржуйских пользователей FRH, один из "самых спрашиваемых вопросов" это - как печатать этикетки... В конце концов сделал пример, если у кого-то есть подобные вопросы, то можете скачать посмотреть. Качать с главной FRH-страницы: http://www.paritetsoft.ru/frh.htm

Dr. Oldwarez: Вот скачал и установил демоверсию. У меня дома на стационарном компьютере и на ноутбуке (Dell D400) всё нормально работает. А у шефа почему-то на некоторых компьютерах начинает выдавать вот такую ошибку: [pre2]Error FRH/2012 Can not load FRH library FrSystH.dll Called from FRREPORTMANAGER:INIT(478) Called from FRREPORTMANAGER:NEW(0) Called from MAIN(15)[/pre2] Самое интересное, что эта ошибка выдаётся только в сетевом режиме и только при загрузке в первый раз за сессию работы на компьютере. Если потом, на этом же компьютере запустить эту же программу - ОНА ЗАРАБОТАЕТ! Сеть у меня на работе, правда, ещё та - Нетварь 4. Поначалу я на неё грешил. Но, сегодня я на свой ноутбук поставил клиент Нетвари и подключил его к серверу шефа. Представьте себе - заработало. Операционные системы у меня и у шефа одинаковые - Windows XP SP3, так что тут тоже не придерёшься. На другом компьютере у шефа моя программа почему-то "тянет" при загрузке, хотя его компьютер более быстродействующий, чем мой ноутбук.

Sergey Spirin: Dr. Oldwarez пишет: У меня дома на стационарном компьютере и на ноутбуке (Dell D400) всё нормально работает. А у шефа почему-то на некоторых компьютерах начинает выдавать вот такую ошибку: цитата: Error FRH/2012 Can not load FRH library FrSystH.dll Called from FRREPORTMANAGER:INIT(478) Called from FRREPORTMANAGER:NEW(0) Called from MAIN(15) Просто копируйте аккуратно файлы НЕ ЗАБЫВАЯ файл FrSystH.dll. FrSystH.dll - это основной и единственный файл FRH. Он должен находится в той же папке, что и ваш EXE-файл. Приведенная вами ошибка возможно только тогда, когда FrSystH.dll нет на месте, либо файл "битый". Сеть здесь, вообще, никаким боком не причастна... Ну если только пофантазировать, что Винда, не найдя FrSystH.dll, пошла искать его в сеть, и таки нашла где-то, что объясняет долгую загрузку... Но это так, догадки. Нормально копируйте FrSystH.dll и проблем у вас не будет. При загрузке dll она ищется в следующем порядке: 1. The directory from which the application loaded. 2. The current directory. 3. Windows 95: The Windows system directory. Use the GetSystemDirectory function to get the path of this directory. Windows NT: The 32-bit Windows system directory. Use the GetSystemDirectory function to get the path of this directory. The name of this directory is SYSTEM32. 4. Windows NT: The 16-bit Windows system directory. There is no Win32 function that obtains the path of this directory, but it is searched. The name of this directory is SYSTEM. 5. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory. 6. The directories that are listed in the PATH environment variable.

Dr. Oldwarez: В том-то и дело, что всё нормально копируется и при последующих запусках. А как сделать, чтобы программа запускала эту FrSystH.dll только из своей корневой директории? (п.2 поиска сделать п.1)

Sergey Spirin: Dr. Oldwarez пишет: В том-то и дело, что всё нормально копируется Ошибка, которую вы привели, это ошибка загрузки dll на уровне Windows OS. Dr. Oldwarez пишет: А как сделать, чтобы программа запускала эту FrSystH.dll только из своей корневой директории? (п.2 поиска сделать п.1) Пункт 1 это и есть директория, в которой расположен EXE-файл. Пункт 2 это текущая директория. Dr. Oldwarez пишет: А как сделать, чтобы программа запускала эту FrSystH.dll только из своей корневой директории? Загружать с полным путем, тогда это будет единственный вариант, например: FrPrn := frReportManager():new("С:\МуDir\FrSystH.dll")

Dr. Oldwarez: Спасибо! А какая в Харборе функция определяет букву текущего диска. Потому, что у меня она может быть, как С: (локальный), так и Е: (сетевой)

Петр: CurDrive() или hb_CurDrive()/CurDrive(), в зависимости от того, что вы определяете словом Харбор. Но этот вопрос никакого отношения к FastReport не имеет.

Dr. Oldwarez: Большое спасибо! Попробовал FrPrn := frReportManager():new(CURDRIVE()+":\"+CURDIR()+"\FrSystH.dll") У меня пока идёт. Скоро опять к шефу. Надеюсь, что и у него всё работать будет.

Dima: Dr. Oldwarez пишет: У меня пока идёт. Скоро опять к шефу. Надеюсь, что и у него всё работать будет. Все будет нормально и у шефа

Andrey: Можно ли узнать (вернуть в Харбор) отправлен ли документ на печать или только его посмотрели и не печатали ? Это нужно для того что бы вести журнал напечатанных документов !

Sergey Spirin: Andrey пишет: Можно ли узнать (вернуть в Харбор) отправлен ли документ на печать или только его посмотрели и не печатали ? Можно. Поставьте обработчик на событие OnAfterPrintReport. Смотрите метод :SetEventHandler().

Andrey: Можно ли в Дизайнере посмотреть значение полей в БД ?

Sergey Spirin: Andrey пишет: Можно ли в Дизайнере посмотреть значение полей в БД ? Гм... Бросить мастер-дату, на нее поля, и нажать F9... В чем вопрос? P.S. C OnAfterPrintReport то получилось?

Andrey: Sergey Spirin пишет: C OnAfterPrintReport то получилось? Нет не получается....

Sergey Spirin: Andrey пишет: Нет не получается.... Что не получается? Что делаете?

Sergey Spirin: Собрал 4.9.79, добавил часто спрашиваемую встроенную функцию: function LoadImageFromHbRes(Picture: TfrxPictureView; HbResName: string; IsBitmap: Boolean): Variant; Загружает картинку из ресурсов exe-шника. Если IsBitmap = True, то грузится RT_BITMAP иначе RT_RCDATA. Пример: procedure ReportHOnStartReport(Sender: TfrxComponent); begin LoadImageFromHbRes(Picture1, 'MYJPEG', False); end; P.S. Хотел отвертеться от желающих советом использовать [x]Harbour-средства, а затем LoadImageFromHbVar, не прокатило

Andrey: Вопрос удобства ! Взял свою готовую форму (было 2 базы). Удалил ненужную БАЗУ, АЛИАС тоже удалил. По всем полям прошелся, нет на экране ПОЛЕЙ удаленной базы. Вызываю просмотр, высвечивается ошибка: Набор данных "ХХХХ" не найден ! Ну я его же удалил. КАК ИСКАТЬ ЭТУ фигню УДАЛЕННУЮ на форме ??? Когда мало полей еще ничего, а если много то ....

Dr. Oldwarez: И ещё один вопросик. Как сделать так, чтобы в FastReport строка выпечатывалась только при определённых условиях, например, если заполнено одно из полей даты? Как сделать, чтобы Visible было не только TRUE и FALSE, но и условное, например !(EMPTY(DATAFIELD)) Подскажите пожалуйста.

TimTim: Dr. Oldwarez пишет: Как сделать так, чтобы в FastReport строка выпечатывалась только при определённых условиях, например, если заполнено одно из полей даты? Как сделать, чтобы Visible было не только TRUE и FALSE, но и условное, например !(EMPTY(DATAFIELD)) IMHO проще всего передать FRH уже проиндексированную БД по !(EMPTY(DATAFIELD)) Если хочется управлять параметром Visible в дизайнере, то надо создать событие OnBeforePrint для Masterdata, а затем в коде написать что-то типа [pre2]procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin MasterData1.Visible := True; if ( bla bla bla ) then MasterData1.Visible := False; end;[/pre2]

Andrey: Наверно эта ветка закрыта до окончания отдыха ? Приятного отдыха Sergey !!!

Sergey Spirin: Andrey пишет: Наверно эта ветка закрыта до окончания отдыха ? Все. Вернулся я Смотрю, вопросов особенно не накопилось - Как найти поле, в котором ошибка? Ну, вообще, когда происходит ошибка, то указывается имя объекта, в котором она произошла. Ну а найти этот объект всегда можно в дереве объектов. - Относительно фильтрации на стороне FRH, то TimTim все верно ответил, единственное, незачем Visible присваивать 2 раза Достаточно: MasterData1.Visible := ( bla bla bla ); P.S. Dr. Oldwarez, у вас шефа случайно не Timm Sodtalbers зовут? (Компания Sodtalbers IT). Просто покупка FRH из Германии чрезвычайно редкий случай (в отличие от FRAX). А тут приезжаю - есть такая, сразу вас вспомнил

Sergey Spirin: И, кстати, говоря: Выпуск FastReport VCL 5 намечен на осень 2010. Вот далеко не полный перечень тех нововведений, которые будут в FastReport VCL 5: Улучшенный движок: - улучшенный механизм смещения; - объединение дублирующихся значений; - новые агрегатные функции; - улучшенный CrossTab; - изменения в XML формате(запись коллекций в виде XML); - улучшенное наследование отчетов; - печать иерархий; - водяной знак/ заливка объектов градиентом; - улучшенные линейные штрих коды; - улучшенные интерактивные отчеты: OnMouseEnter/OnMouseLeave события; - детализированные отчеты; - многостраничный предпросмотр для детализированных отчетов; Новые объекты: - двухмерные штрих коды: DataMatrix и PDF417; - Объект таблица; - Cellular text; - Zip Code; Новые экспорты: - BIFF XLS экспорт - PPTX экспорт; - XLSX экспорт; - DOCX экспорт; И пара скриншотиков (сравните с FastReport.Net): http://www.fast-report.com/ru/products/fastreport-vcl-5-screenshots.html

Andrey: Sergey Spirin пишет: - Как найти поле, в котором ошибка? Ну, вообще, когда происходит ошибка, то указывается имя объекта, в котором она произошла. Ну а найти этот объект всегда можно в дереве объектов. Нет нельзя ! Сделайте сам и поймете в чем дело ! Берем готовую форму, подключаем ДРУГУЮ базу, правим поля в форме на новую базу и ИМЕЕМ те ошибки о которых я писал. И невозможно найти ПОЛЯ на какие выдаются ошибки... Т.е. переменная Memo20 выдается на ней ошибка, смотришь ее - НАПИСАНО ПРАВИЛЬНО !!! Лезешь в форму Far'ом и там в конце свойства прописаны другого поля из ДРУГОЙ базы, которую уже убрали ! Это я только потом допер что за фигня появляется !!! Вопрос остается открытым: КАК НАЙТИ и УБРАТЬ ошибку: Набор данных "ХХХХ" не найден !

Sergey Spirin: Andrey пишет: Вопрос остается открытым: КАК НАЙТИ и УБРАТЬ ошибку: Набор данных "ХХХХ" не найден ! Достаточно просто Если в отчете сменился набор датасетов, то, очевидно, что упоминания об "утраченном" датасете в отчете остались, однако в глобальном списке его уже нет. Чтобы обновить ссылки зайдите "Отчет"->"Данные" и просто нажмите "Ok" (даже,если не делаете там изменений). Ссылки обновятся, и ошибки "по Мемам" станут более осмысленными.

Andrey: Sergey Spirin пишет: Чтобы обновить ссылки зайдите "Отчет"->"Данные" и просто нажмите "Ok" (даже,если не делаете там изменений). Ссылки обновятся, и ошибки "по Мемам" станут более осмысленными. Спасибо ! Еще один вопрос по языкам ! Мне нужны формы на русском и украинском языках ! Если я переключаюсь на украинский язык, то все суммы остаются в русском языке (руб.коп). А как можно сделать переключение на украинский, чтоб суммы были на украинском (гривны) ? Самый простой выход держать 2 формы: на русском и украинском ! Но у меня порядка 50 форм, не хотелось бы раздувать кол-во файлов !

Sergey Spirin: Andrey пишет: Если я переключаюсь на украинский язык, то все суммы остаются в русском языке (руб.коп). А как можно сделать переключение на украинский, чтоб суммы были на украинском (гривны) ? Вообще говоря, все региональные настройки по умолчанию считываются из настроек Windows. Поэтому у вас рубль и остается так как все на русской Винде. Будет украинская - появится гривна. Вообще, как в любом delphi приложении менять их можно, но их многовато, чтобы сделать отдельные методы для каждой настройки, вот некоторые например: var CurrencyString: string; CurrencyFormat: Byte; NegCurrFormat: Byte; ThousandSeparator: Char; DecimalSeparator: Char; CurrencyDecimals: Byte; DateSeparator: Char; ShortDateFormat: string; LongDateFormat: string; TimeSeparator: Char; TimeAMString: string; TimePMString: string; ShortTimeFormat: string; LongTimeFormat: string; ShortMonthNames: array[1..12] of string; LongMonthNames: array[1..12] of string; ShortDayNames: array[1..7] of string; LongDayNames: array[1..7] of string; SysLocale: TSysLocale; TwoDigitYearCenturyWindow: Word = 50; ListSeparator: Char; Вообще же говоря, в вашем случае, по уму у вас в программе должен определяться тип валюты и он должен в отчетах использоваться - это наиболее грамотно.

Andrey: Использую формат вывод сумм %2.2m ! При переключении на украинский язык все равно печатает руб. А если Windows будет украинская, то будет печатать гривны ! Понятно ! А как быть если установлена Windows русская, а нужно печатать гривны ? Можно ли завести свой формат печати ? Я конечно могу завести свою функцию в программе, и выводить через нее... Блин но столько переделывать форм... Есть ли еще другие варианты ?

Sergey Spirin: Andrey пишет: А как быть если установлена Windows русская, а нужно печатать гривны ? Можно ли завести свой формат печати ? Ну, на данный момент надо пойти в "Пуск"->"Панель управления"-> "Язык и региональные стандарты" и поменять там валюту Andrey пишет: Я конечно могу завести свою функцию в программе, и выводить через нее... Блин но столько переделывать форм... Есть ли еще другие варианты ? Ну, можно в принципе добавить еще один метод в frReportManager. Ладно, добавлю на днях.

Andrey: Sergey Spirin пишет: Ну, можно в принципе добавить еще один метод в frReportManager. Ладно, добавлю на днях. Спасибо большое !!! Жду !

Sergey Spirin: Добавил метод :SetFormatSettings(nSetting, xValue) Андрей! Перекомпилил пока только вашу копию и жду тестирования для выкладывания в общую сборку! :) Возможные значения для nSetting пока только такие и описаны в FastRepH.ch (ваш случай frxCurrencyString): #define frxCurrencyString 1 #define frxCurrencyFormat 2 #define frxNegCurrFormat 3 #define frxThousandSeparator 4 #define frxDecimalSeparator 5 #define frxCurrencyDecimals 6 #define frxDateSeparator 7 #define frxShortDateFormat 8 #define frxLongDateFormat 9 #define frxTimeSeparator 10 #define frxTimeAMString 11 #define frxTimePMString 12 #define frxShortTimeFormat 13 #define frxLongTimeFormat 14 #define frxShortMonthNames 15 #define frxLongMonthNames 16 #define frxShortDayNames 17 #define frxLongDayNames 18 #define frxTwoDigitYearCenturyWindow 20 #define frxListSeparator 21 Описание всех вариантов: { Currency and date/time formatting options The initial values of these variables are fetched from the system registry using the GetLocaleInfo function in the Win32 API. The description of each variable specifies the LOCALE_XXXX constant used to fetch the initial value. CurrencyString - Defines the currency symbol used in floating-point to decimal conversions. The initial value is fetched from LOCALE_SCURRENCY. CurrencyFormat - Defines the currency symbol placement and separation used in floating-point to decimal conversions. Possible values are: 0 = '$1' 1 = '1$' 2 = '$ 1' 3 = '1 $' The initial value is fetched from LOCALE_ICURRENCY. NegCurrFormat - Defines the currency format for used in floating-point to decimal conversions of negative numbers. Possible values are: 0 = '($1)' 4 = '(1$)' 8 = '-1 $' 12 = '$ -1' 1 = '-$1' 5 = '-1$' 9 = '-$ 1' 13 = '1- $' 2 = '$-1' 6 = '1-$' 10 = '1 $-' 14 = '($ 1)' 3 = '$1-' 7 = '1$-' 11 = '$ 1-' 15 = '(1 $)' The initial value is fetched from LOCALE_INEGCURR. ThousandSeparator - The character used to separate thousands in numbers with more than three digits to the left of the decimal separator. The initial value is fetched from LOCALE_STHOUSAND. A value of #0 indicates no thousand separator character should be output even if the format string specifies thousand separators. DecimalSeparator - The character used to separate the integer part from the fractional part of a number. The initial value is fetched from LOCALE_SDECIMAL. DecimalSeparator must be a non-zero value. CurrencyDecimals - The number of digits to the right of the decimal point in a currency amount. The initial value is fetched from LOCALE_ICURRDIGITS. DateSeparator - The character used to separate the year, month, and day parts of a date value. The initial value is fetched from LOCATE_SDATE. ShortDateFormat - The format string used to convert a date value to a short string suitable for editing. For a complete description of date and time format strings, refer to the documentation for the FormatDate function. The short date format should only use the date separator character and the m, mm, d, dd, yy, and yyyy format specifiers. The initial value is fetched from LOCALE_SSHORTDATE. LongDateFormat - The format string used to convert a date value to a long string suitable for display but not for editing. For a complete description of date and time format strings, refer to the documentation for the FormatDate function. The initial value is fetched from LOCALE_SLONGDATE. TimeSeparator - The character used to separate the hour, minute, and second parts of a time value. The initial value is fetched from LOCALE_STIME. TimeAMString - The suffix string used for time values between 00:00 and 11:59 in 12-hour clock format. The initial value is fetched from LOCALE_S1159. TimePMString - The suffix string used for time values between 12:00 and 23:59 in 12-hour clock format. The initial value is fetched from LOCALE_S2359. ShortTimeFormat - The format string used to convert a time value to a short string with only hours and minutes. The default value is computed from LOCALE_ITIME and LOCALE_ITLZERO. LongTimeFormat - The format string used to convert a time value to a long string with hours, minutes, and seconds. The default value is computed from LOCALE_ITIME and LOCALE_ITLZERO. ShortMonthNames - Array of strings containing short month names. The mmm format specifier in a format string passed to FormatDate causes a short month name to be substituted. The default values are fecthed from the LOCALE_SABBREVMONTHNAME system locale entries. LongMonthNames - Array of strings containing long month names. The mmmm format specifier in a format string passed to FormatDate causes a long month name to be substituted. The default values are fecthed from the LOCALE_SMONTHNAME system locale entries. ShortDayNames - Array of strings containing short day names. The ddd format specifier in a format string passed to FormatDate causes a short day name to be substituted. The default values are fecthed from the LOCALE_SABBREVDAYNAME system locale entries. LongDayNames - Array of strings containing long day names. The dddd format specifier in a format string passed to FormatDate causes a long day name to be substituted. The default values are fecthed from the LOCALE_SDAYNAME system locale entries. ListSeparator - The character used to separate items in a list. The initial value is fetched from LOCALE_SLIST. TwoDigitYearCenturyWindow - Determines what century is added to two digit years when converting string dates to numeric dates. This value is subtracted from the current year before extracting the century. This can be used to extend the lifetime of existing applications that are inextricably tied to 2 digit year data entry. The best solution to Year 2000 (Y2k) issues is not to accept 2 digit years at all - require 4 digit years in data entry to eliminate century ambiguities. Examples: Current TwoDigitCenturyWindow Century StrToDate() of: Year Value Pivot '01/01/03' '01/01/68' '01/01/50' ------------------------------------------------------------------------- 1998 0 1900 1903 1968 1950 2002 0 2000 2003 2068 2050 1998 50 (default) 1948 2003 1968 1950 2002 50 (default) 1952 2003 1968 2050 2020 50 (default) 1970 2003 2068 2050 }

Andrey: Sergey Spirin пишет: Возможные значения для nSetting пока только такие и описаны в FastRepH.ch (ваш случай frxCurrencyString): ......... и т.д. Блин... Столько строчек я сегодня не переведу... И как все это компоновать ? А покороче нельзя ? Или пример ? А то я еще неделю буду в этом разбираться....

Sergey Spirin: Andrey пишет: Или пример ? В вашем конкретном случае : FrPrn:SetFormatSettings(frxCurrencyString, "GRIVNA") "GRIVNA"- понятно что условно, я уж не знаю как она там отображается. Про остальное, что сможете

Andrey: Sergey Spirin пишет: FrPrn:SetFormatSettings(frxCurrencyString, "GRIVNA") "GRIVNA"- понятно что условно, я уж не знаю как она там отображается. А если я $ захочу отображать ? или фунты ?

Sergey Spirin: Andrey пишет: А если я $ захочу отображать ? или фунты ? FrPrn:SetFormatSettings(frxCurrencyString, "$") FrPrn:SetFormatSettings(frxCurrencyString, "£") Андрей, вы меня все больше и больше удивляете Уже даже предчувствую, пытаюсь "разжевать": Sergey Spirin пишет: "GRIVNA"- понятно что условно, я уж не знаю как она там отображается. донести, что "GRIVNA" - это я так написал, как правильно напиши давай сам.... В результате, по логам сервера вижу, что ничего еще не скачивал, значит и не пробовал, а уже ничего ему непонятно (!) Андрей, ну что за детский сад? Специально погуглил сайты с ценами в гривнах, обычно пишут "грн.", поэтому: FrPrn:SetFormatSettings(frxCurrencyString, "грн.") Если нужно по-другому, то так и пишите: FrPrn:SetFormatSettings(frxCurrencyString, "как я хочу так и обзову!") Предвидя вопрос - "как знак доллара поставить слева": FrPrn:SetFormatSettings(frxCurrencyFormat, 0) Варианты значений в справке, которую я привел: 0 = '$1' 1 = '1$' 2 = '$ 1' 3 = '1 $'

Andrey: Sergey Spirin пишет: Уже даже предчувствую, пытаюсь "разжевать": Спасибо большое за понимание ! Коньяк за мной !

Sergey Spirin: Andrey пишет: Спасибо большое за понимание ! Спасибо, это хорошо. А проверить, как работает и работает ли?

Andrey: Сижу делаю ! Сегодня же сообщу....

Andrey: Sergey Spirin пишет: Спасибо, это хорошо. А проверить, как работает и работает ли? Сделал тестовый пример ! Отправил вам на почту ! Вроде работает без проблем. Пере собрать проект на хХарборе - команда hbmake.exe Frh-Lang.bc

Sergey Spirin: Пересобрал с версией 4.9.98 общую сборку. Включен, обсуждавшийся выше новый метод - :SetFormatSettings(nSetting, xValue).

Andrey: Sergey Spirin пишет: Пересобрал с версией 4.9.98 общую сборку Спасибо большое. Скачал, буду подключать к своей системе !

Dr. Oldwarez: И ещё один вопрос по FastReport, очень важный. Как сделать чтобы сводная таблица разбивалась на несколько подтаблиц по группам. При этом реквизиты группы должны выпечатываться сверху, как в обычном табличном отчёте. Но нужно анализировать цену, которую требуют за задание несколько фирм. Сверху группировка по проектам и родам работ (сантехник, электрик и т.д. и т.п.) И чтобы в строку вылазили не все фирмы, а только те фирмы, которые отвечают за данный род работ. Чтобы было всё как в обычном отчёте, но с повторяющейся парой фирма-цена в одну строку несколько раз. Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку.

Andrey: Dr. Oldwarez пишет: Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку. Ну блин, Хотабыча нашли .....

Sergey Spirin: Dr. Oldwarez пишет: Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку. Так о чем просишь то? Я что-то не понял. Нужен отчет, так давай, пробуй, ваяй Судя, правда по мутному описанию, ничего сложного нет. Только группировки? Ну так, смотри простой пример с группами в демо, да и вперед Пробуй, спрашивай конкретику, если что не понятно. Ну, и естественно, не надейся, что кто-то что-то сделает за тебя

Dr. Oldwarez: Сложность в том, что на элемент DBCrossTab не действуют внешние группировки. Так если кладешь DBCrossTab на полосу MasterData, а сверх того даёшь группировку в полосе GroupHeader, то никакого дополнительного разбиения по группам в перекрёстной таблице не происходит. Можно в самой DBCrossTab делать Subtotals, но при этом условия группировки печатаются сбоку, а число фирм в строке зашкаливает, поскольку на один род работ фирм от силы 5-6, а всего их сотня.

Sergey Spirin: Dr. Oldwarez пишет: Сложность в том, что на элемент DBCrossTab не действуют внешние группировки Я бы делал без КроссТаба. И все-таки, конкретика, сколько каких таблиц участвуют в отчете? Какие между ними отношения? И т. д.

Dr. Oldwarez: Отношения между таблицами - многоуровневая иерархия, и, соответственно, многоуровневая группировка. На самом верхнем уровне - таблица проектов (капремонт, модернизация и т.д.) по тому или иному зданию. Дальше идёт группировка по профилю работ (сантехник, электрик и т.д. и т.п.) Основная таблица - таблица выполненных работ и расходных материалов. Например: сантехник - замена ванной. Ну и к ней подтаблица - различные фирмы и цены, которые они берут за ту или иную работу. Выбираем минимальную. А сложность заключается в том, что несколько пар фирма-цена нужно выпечатать В ОДНОЙ СТРОКЕ PROJEKT PROFIL_RABOT ==================================================================== POS_NUM POS_TEXT1 FIRMA FIRMA FIRMA .................................... POS_TEXT2 PRICE PRICE PRICE ....................................

Sergey Spirin: Dr. Oldwarez пишет: А сложность заключается в том, что несколько пар фирма-цена нужно выпечатать В ОДНОЙ СТРОКЕ Ну если владеть инструментом, то ничего особенно уж сложного в этом отчете нет. Во-первых, группировок, по крайней мере в фастовском понимании здесь нет. Здесь типичный Master-Detail-SubDetail: PROJEKT - это мастер. PROFIL_RABOT - детэйл. Как установить MasterDetail отношение, надеюсь, труда не составит. И третий уровень, который будет вычисляемым - subdetail. Итак, третий уровень. Насколько я понимаю, пар "фирма-цена" нужно напечатать конечное количество? Например не более 3-х самых дешевых, это так? Просто в одну строку нельзя же напечатать неопределенное количество информации (вернее, это уже другой тип отчета с вертикальными бэндами). Если все так, то определим UserDataSet для третьего уровняЖ [pre]FrPrn:SetUserDataSet("Третий уровень", "POS_NUM;POS_TEXT1;POS_TEXT2;FIRMA1;PRICE1;FIRMA2;PRICE2;FIRMA3;PRICE3",; {|| PrepareData())} ,; {|| PrepareData())},; {|| },; {|| CheckEOF()},; {|cField| GetDSValue(cField)}) [/pre] Идея понятна? Заведем массив из 9 элементов. Пишем функцию PrepareData() в которой этот массив текущей записи будем заполнять. Пишем функцию GetDSValue(), которая просто по имени поля будет отдавать соответствующий элемент массива. И CheckEOF() которая будет решать, пора ли переходить к следующей записи PROFIL_RABOT или есть еще что "поколбасить" на текущей. Надеюсь, что идея понятна, и не столь сложна в реализации

Andrey: Sergey Spirin пишет: Как установить MasterDetail отношение, надеюсь, труда не составит. Пример работы с MasterDetail http://files.mail.ru/C8IUGH Делай там отдельную папку, записывай базы и можно будет конкретно помочь - разбирая отдельный пример !

Dr. Oldwarez: Я так и думал, что всё сведётся к пользовательскому массиву и заполнению его данными на каждой строке. Число элементов на одну строку отчёта формата А4 всё равно жёстко ограничено. Цена имеет формат 10DEC2, плюс зазор в одну строку. А если учесть что длина главной таблицы достигает 5 тыс строк :LOL: то 5 тыс. раз опрашивать постороннюю таблицу - очень замедлит работу. Не проще ли сделать дополнительно поля FIRM1,FIRM2,FIRM3,... и, соотвестственно, PRICE1,PRICE2,PRICE3,.... Иногда ДЕнормализация имеет смысл. Есть ещё такая база данных -4D. Названа так, поскольку помимо классических двухмерных таблиц, поддерживает также вложенную таблицу SUBTABLE. Часто это бывает необходимо. Больше 5 цен всё равно не поместится, поскольку нужно ещё указать реквизиты задания. Печать бисером - не у всех хорошее зрение. ЗЫ. А вот про вертикальные бэнды я бы хотел поподробнее. Интересно, интересно.

Andrey: Sergey Spirin пишет: Пересобрал с версией 4.9.98 общую сборку. Включен, обсуждавшийся выше новый метод - :SetFormatSettings(nSetting, xValue). Собрал со своей системой ! Работает, только одна непонятка, не критичная, но думаю опять пальцем тыкать будут меня ! Переключаюсь на украинский язык, отображается нормально: А в дизайнере, нет такого формата, только (руб.) ! Как исправить ?

Sergey Spirin: Andrey пишет: А в дизайнере, нет такого формата, только (руб.) ! Это вопрос к украинским локализаторам Это просто статичная строка в файле локализации. Смотри файл Ukrainian.frc, Значение ключа "fkNumber4", почему-то они решили оставить рубль Видимо тоскуют по Союзу

Sergey Spirin: Dr. Oldwarez пишет: Я так и думал, что всё сведётся к пользовательскому массиву и заполнению его данными на каждой строке. Число элементов на одну строку отчёта формата А4 всё равно жёстко ограничено. Цена имеет формат 10DEC2, плюс зазор в одну строку. А если учесть что длина главной таблицы достигает 5 тыс строк :LOL: то 5 тыс. раз опрашивать постороннюю таблицу - очень замедлит работу. Дорогой, все в твоих руках, и это главное Как ты сделаешь доступ к этим данных в этой записи, так и будет. Сделаешь так, что будет тормозить, то виноват будешь только ты, а не FR Разговор же про 5 тысяч строк, которые будут тормозить - слышать смешно, хотя, чего только кривые ручки не добивались Dr. Oldwarez пишет: ЗЫ. А вот про вертикальные бэнды я бы хотел поподробнее. Интересно, интересно. Ну смотри, например: http://www.reportingfor.info/ru/news.php?extend.33.4

Dr. Oldwarez: Так, был у шефа, шеф мне объяснил, что пока будет по другому и cross-table выпадает за ненадобностью. Впоследствии будет по-другому - с вертикальной группировкой главной таблицы. Так, что извините за ложную тревогу. А пока что один небольшой вопросик. Можно суммировать по группе, можно суммировать по странице, но при переходе на новую страницу сумма обнуляется. Как сделать, чтобы был перенос, т.е. сумма по всем строкам, печатаемая один раз в конце страницы, а потом, ещё раз - в начале следующей страницы то же значение. Не печатать его только на последней странице группы.

Sergey Spirin: Dr. Oldwarez пишет: Как сделать, чтобы был перенос, т.е. сумма по всем строкам.... Там опция такая есть в диалоге агрегатов "Нарастающим итогом", в выражение подставляет двоечку третьим параметром. Ну и если нужно еще запоминать и на след. странице печатать, то просто запоминать в своей переменной, типа: [pre]var MySum: Variant; procedure Memo14OnAfterPrint(Sender: TfrxComponent); begin MySum := Memo14.Value; end; [/pre]

Andrey: Добрый вечер ! Подскажите как сделать отчет такого типа:

Sergey Spirin: Andrey пишет: Подскажите как сделать отчет такого типа: Ну уж подскажите тогда в чем сложность то возникла? Какие проблемы?

Andrey: Sergey Spirin пишет: Ну уж подскажите тогда в чем сложность то возникла? На картинке я не совсем правильно отобразил. На листе нужно размещать только 4 записи из базы ! Т. № заявки, дату, фио и т.д. А как такие формы делать я не знаю ?

Sergey Spirin: Ну, во-первых, сколько наборов данных? Выполненные работы, что, не печатаются? Если печатаются сколько их там может быть? Andrey пишет: На листе нужно размещать только 4 записи из базы ! Начните с изучения колонок Колонки есть у страницы (Page) - вертикальные, и у бэнда - горизонтальные. Определитесь какие вам нужны.

Andrey: Sergey Spirin пишет: Начните с изучения колонок Пример дайте посмотреть ! Или где посмотреть ? Или мне пример сделать, а вы на форме покажите как выводить ?

Sergey Spirin: Andrey пишет: Пример дайте посмотреть ! Или где посмотреть ? Колонки - по Columns. В демке колонки страницы используются в отчете "UserDS and Dialogs". Andrey пишет: Или мне пример сделать, а вы на форме покажите как выводить ? Ну сделайте. И на вопросы ответьте все-таки: Sergey Spirin пишет: Ну, во-первых, сколько наборов данных? Выполненные работы, что, не печатаются? Если печатаются сколько их там может быть?

Andrey: Sergey Spirin пишет: Ну, во-первых, сколько наборов данных? Выполненные работы, что, не печатаются? Если печатаются сколько их там может быть? Набор данных один ! Выполненные работы - отдельная песня ... Это наверно мне самому придется через функцию делать ... Потом буду делать ! Делаю пример. Скорее всего завтра будет готов. Сейчас пока другую работу доделываю.

Andrey: Сделал пример ! Качать отсюда http://files.mail.ru/M8Y9EC Напоминаю, для сборки под хХарбором нужна команда: hbmake.exe frh-4recno.bc ! Жду ответа !

Sergey Spirin: Andrey пишет: Сделал пример ! Ну, смотрите колонки: http://www.paritetsoft.ru/zaivka6c.fr3 Хотя, предлагаю сразу подумать о "выполненных работах" Если их количество будет произвольным, то выдержать 4 наряда на страницу будет проблематично просто исходя из здравого смысла

Andrey: Sergey Spirin пишет: Если их количество будет произвольным, то выдержать 4 наряда на страницу будет проблематично просто исходя из здравого смысла Хорошо, я подумаю над этим ! Спасибо большое ! Форма СУПЕР ! Еще раз убеждаешься, что FastReport - это ВЕЩЬ !!! С ходу не понял пока, как задается Overlay: Overlay1 ?

Sergey Spirin: Andrey пишет: С ходу не понял пока, как задается Overlay: Overlay1 ? Это просто "бэнд" как и остальные, например MasterData По русски он зовется "Фоновый бэнд". То есть бэнд, который печатаетяс под всеми остальными фоном.

Dr. Oldwarez: Подскажите, пожалуйста, как сделать, чтобы в поле RichView выводился rtf-документ, а то там настройки только на поля базы данных, будто все хранят и правят memo-поля в формате RTF. В простом Text я решил эту проблему с помощью CALLHBFUNC('MEMOREAD',['TEXTFILE.TXT'])

Sergey Spirin: Dr. Oldwarez пишет: Подскажите, пожалуйста, как сделать, чтобы в поле RichView выводился rtf-документ, а то там настройки только на поля базы данных, будто все хранят и правят memo-поля в формате RTF. В простом Text я решил эту проблему с помощью CALLHBFUNC('MEMOREAD',['TEXTFILE.TXT']) Скриптом. Просто LoadFromFile() это метод, а не свойство: [pre]// для rtf procedure Rich1OnBeforePrint(Sender: TfrxComponent); begin Rich1.RichEdit.Lines.LoadFromFile('C:\shablon.rtf'); end; // для простой мемы procedure Memo2OnBeforePrint(Sender: TfrxComponent); begin Memo2.Lines.LoadFromFile('C:\my.txt'); end; [/pre] И кстати, совет. Когда в редакторе набрал имя объекта и точку, например Memo2. то нажми Ctrl+Space, будет подсказка что можно писать дальше..

Andrey: Смотри пример http://slil.ru/29531611

Sergey Spirin: Andrey пишет: Смотри пример http://slil.ru/29531611 Андрей, а зачем rtf грузить в OLE-объект?

Dr. Oldwarez: Sergey Spirin пишет: Скриптом. Просто LoadFromFile() это метод, а не свойство: // для rtf procedure Rich1OnBeforePrint(Sender: TfrxComponent); begin Rich1.RichEdit.Lines.LoadFromFile('C:\shablon.rtf'); end; // для простой мемы procedure Memo2OnBeforePrint(Sender: TfrxComponent); begin Memo2.Lines.LoadFromFile('C:\my.txt'); end; И кстати, совет. Когда в редакторе набрал имя объекта и точку, например Memo2. то нажми Ctrl+Space, будет подсказка что можно писать дальше.. ОГРОМНОЕ СПАСИБО! ПО-ЛУ-ЧИ-ЛОСЬ Ещё, пожалуйста, функцию сброса Page#, потому, что у меня, после того, как я установил печать RTF-документа в отчёте (ReportTitle), начали сначала съезжать заголовки страниц, что было устранено установкой символа "Разрыв страницы" в OpenOffice, потом нумерация стала вести себя странно: Первая страница данных нумеруется как 1, дальше - как 3 и далее всё как обычно.

Sergey Spirin: Dr. Oldwarez пишет: Ещё, пожалуйста, функцию сброса Page#, потому, что у меня, после того, как я установил печать RTF-документа в отчёте (ReportTitle), начали сначала съезжать заголовки страниц, что было устранено установкой символа "Разрыв страницы" в OpenOffice, потом нумерация стала вести себя странно: Первая страница данных нумеруется как 1, дальше - как 3 и далее всё как обычно. Ну, тут по описанию понять трудно, что там у вас "разъехалось". Сделайте, что-ли пример, как Андрей делает, посмотрю.

Andrey: Sergey Spirin пишет: Андрей, а зачем rtf грузить в OLE-объект? Так я хотел редактировать файл ! т.е. чтоб был предпросмотр документа, а потом если надо по кнопочке редактировать можно. Но так и не получилось....

Andrey: Sergey Spirin пишет: Ну, смотрите колонки: http://www.paritetsoft.ru/zaivka6c.fr3 Можете описать как делаются такие формы ? Хотя бы кратко... У меня новая форма не получается...

Sergey Spirin: Andrey пишет: Можете описать как делаются такие формы ? Хотя бы кратко... Да длинно и не получится Колонки для страницы сделать - просто у страницы (Page) поставьте свойство Columns = 2. Или двойной клик по странице - "Прочее" - "Колонки" - "Количество". Бэнд Overlay добавляется точно также как любой другой.

Andrey: Спасибо ! Поменял в форме http://www.paritetsoft.ru/zaivka6c.fr3 формат листа с альбомной на портретную. Теперь 5 записей печатается на странице.... Внизу еще ОДНА добавляется ... Как убрать ? Т.е. где задается высота и ширина печати колонок ? Новая программа здесь: http://slil.ru/29535904 - второй пункт меню ! По хелпу не нашел как сделать !

Sergey Spirin: Andrey пишет: Теперь 5 записей печатается на странице.... Внизу еще ОДНА добавляется ... Как убрать ? Т.е. где задается высота и ширина печати колонок ? Да..... Удивлять вы продолжаете ... Андрей, ну вы что газет никогда в жизни не читали? Что такое колонка? Про колонки в Word-е я уже не спрашиваю.. Какая у колонки может быть высота? Может еще глубину потребуете! Ширина же колонок задается в том же диалоге "Настройка страницы".

Andrey: Sergey Spirin пишет: Может еще глубину потребуете! Глубина в речке или бассейне.... А пример вы так и не смотрели ....

Dima: Andrey Мне просто стало интересно :) А русскоязычной документации к FastReport for [x]Harbour , нет ?

Andrey: Dima пишет: А русскоязычной документации к FastReport for [x]Harbour , нет ? Да нет ! Есть на Аляску++ ! Но я спрашиваю про отчеты, которые не описаны. Мне бы даже на английском пример бы показали, я бы разобрался. Да и то готовый пример хорошо, я где что устанавливать - тоже загадка... Как в моем случае ! Сам можешь на моем примере поковырятся, где что установить, чтоб заработало ???? 2-ой пункт меню не доделан !

Sergey Spirin: Dima пишет: Мне просто стало интересно :) А русскоязычной документации к FastReport for [x]Harbour , нет ? Дока к FastReport for [x]Harbour описывает взаимодействие FastReport с [x]Harbour, как ни странно Дока для просто FastReport (работа с дизайнером типа) конечно на русском как первоисточник. Но... вряд ли там идет речь о том что 2*2=4... Дим, как ты думаешь, если текст на странице располагается в несколько колонок, то какова будет высота колонки?

Sergey Spirin: Andrey пишет: Глубина в речке или бассейне.... Глубина колонки текста в станице Andrey пишет: А пример вы так и не смотрели .... Посмотрел. Вижу, что догадавшись увеличить высоту наряда, удалось вытолкнуть проклятый пятый наряд на следующую страницу Горд за ученика P.S. Overlay то адекватно поправьте.

Sergey Spirin: Andrey пишет: Но я спрашиваю про отчеты, которые не описаны. Мне бы даже на английском пример бы показали, я бы разобрался.

Andrey: Sergey Spirin пишет: если текст на странице располагается в несколько колонок, то какова будет высота колонки? Да догадываюсь я, что высота колонки будет зависеть от количества строк в колонке. Только увеличение строк в "MasterData" не приводит к печати 4-записи на лист, уходит запись, остаются 3-записи на листе ! Вместо хи-хи дали бы четкое указание, какие параметры от чего зависят .... Я уже все их передергал... Можно было бы проконсультироваться и у других, но сейчас лето, пора отпусков... А людям форма нужна, а у меня не получается... Сами же на сопровождении сидите, знаете как это бывает ! А вы все хи-хи...

Sergey Spirin: Andrey пишет: Да догадываюсь я, что высота колонки будет зависеть кол-ва строк в колонке. На вопрос сколько будет 2*2 ОТВЕТ (догадка) ДАН НЕПРАВИЛЬНЫЙ! Все-таки, думать! Уж больно элементарна проблематика.

Sergey Spirin: Andrey пишет: Вместо хи-хи дали бы четкое указание, какие параметры от чего зависят .... Я уже все их передергал... Ого! Andrey пишет: А людям форма нужна, а у меня не получается... Сами же на сопровождении сидите, знаете как это бывает ! Гм.. А не страдать косноязычаем это получиться может? Если да, то я готов помогать, иначе же это бред сивой кобылы, в котором что-то понять - увольте...

Andrey: Sergey Spirin пишет: А не страдать косноязычаем это получиться может? Какой есть, такой есть.... В другой жизни другим буду ....

Andrey: Размер А4 альбомная: высота 29 (29,7) и ширина 21 (см) Для печати 2 листков в высоту (4-х на странице) имеем - в высоту: 0,5 край листа сверху и снизу: 29 - 0,5*2 = 28 ! Что меня интересовало. 28/2 = 14, значит в "MasterData" параметр "Height" (Высота объекта) устанавливаем в 14,0 ! Вот и все.... А написано то было .... В ширину имеем: 21 - 0,5*2 = 20 ... 20/ 2 листка = 10 см - ширина одного листка. Для сведения другим, как устанавливать:

Sergey Spirin: Andrey пишет: Размер А4 альбомная: высота 29 (29,7) и ширина 21 (см) Для печати 2 листков в высоту (4-х на странице) имеем - в высоту: 0,5 край листа сверху и снизу: 29 - 0,5*2 = 28 ! Что меня интересовало. 28/2 = 14, значит в "MasterData" параметр "Height" (Высота объекта) устанавливаем в 14,0 ! Вот и все.... А написано то было .... Ну так это высота чего? Неужели колонки? Андрей, все мои "хи-хи" преследуют одну цель - заставить вас думать. И, кстати, о доке. Кто-то на какое-то отсутствие жаловался? А вот кто-то не жалуется... А именно: Rene Flores (известный разработчик) полностью перевел мою доку на испанский (!), и сейчас сообщает, что они заканчивают перевод общей доки по дизайнеру... И, совсем неожиданно, вчера получил от "нашего" Темура его полный перевод моей доки на русский!! Вот так вот. Так что, Андрей, просите у Темура доку, и не забудьте ему проставиться И, надеюсь, отсылок на отсутствие доки больше не будет.

Andrey: Sergey Spirin пишет: Так что, Андрей, просите у Темура доку, и не забудьте ему проставиться Доку эту уже читал ! Там нет про "Дизайнер" ничего толком. А проставиться ему всегда рад. С земляками легче всего договориться, да я его знаю еще по Вычислительному центру Академии наук Таджикистана ! Свои замечания по этой доке я ему уже выслал. Нужна дока работы с дизайнером... Ну это на будущее, когда очередной раз нужно будет новую "изысканную" форму делать...

Andrey: Dima пишет: Andrey Мне просто стало интересно :) А русскоязычной документации к FastReport for [x]Harbour , нет ? Доку к Дизайнеру брал с форума http://fast-report.com/ru/forum/index.php?s=603e0a63fa7cad87322776a618847f4d&showtopic=4703 Или можешь скачать отсюда http://slil.ru/29538142 Сравнение FastReport c новым "Визуальный дизайнер отчетов для конечных пользователей в Visual Studio 2010" Автор пишет: "В общем, с точки зрения репортинга от моего любимого FastReport они отстали лет на пять, если не больше. Это ещё в 2000-м под Delphi было." Читать здесь: http://www.reportingfor.info/ru/news.php?extend.82.4

Sergey Spirin: Andrey пишет: Доку эту уже читал ! Там нет про "Дизайнер" ничего толком. А проставиться ему всегда рад. С земляками легче всего договориться, да я его знаю еще по Вычислительному центру Академии наук Таджикистана ! Свои замечания по этой доке я ему уже выслал. Нужна дока работы с дизайнером... Ну это на будущее, когда очередной раз нужно будет новую "изысканную" форму делать... У меня уже смех переходит в истерический Чем вас не устраивает текущая дока по дизайнеру? 246 страниц текста и картинок на самом, что ни на есть русском языке????? [url=http://fast-report.com/pbc_download/FR4.6.UserManual-ru.pdf ]Дока по дизайнеру и разработке отчетов!!![/url] Чего не хватает то? Именно эту доку Rene пыхтит, переводит на испанский. Еще раз. Моя дока - это дока по работе с FRH, то есть, описывается вся [x]Harbour-специфика. По дизайнеру, разработке отчетов и т.д. моя дока отсылает к основной Фастовской, которой какой только нет, и которая вся есть нам РУССКОМ языке. Фу...

PSP: Сергею Спирину. Сегодня скачал архив FRH. Увидел свежую дату (29.08.2010) модификации файлов. Что интересного добавилось/изменилось?

Sergey Spirin: PSP пишет: Сегодня скачал архив FRH. Увидел свежую дату (29.08.2010) модификации файлов. Что интересного добавилось/изменилось? Привет. Именно эта сборка (111-я) связана с исправлениями в FRAX (баг с полем типа Timestamp) а не в FRH А вообще, существенные изменения, фиксы и т.д. отражаются с моей стороны в: http://www.paritetsoft.ru/frh_ver.html А со стороны FastReport Inc в: http://fast-report.com/ru/versions/index.php?changes=2903 Если ничего нового не написали, а номер сборки вырос, значит были незначительные изменения, корректировки и т.д. Кстати, в 4-ке, каких-то новых интересностей ждать уже не стоит. Осенью-зимой ждем пятерку с двухмерными штрих-кодами, Ribbon-интерфейсом, многостраничным предпросмотром, новыми объектами и т.д.

PSP: Привет! Еще вопрос. Искал, но не нашел... Можно ли объединить два (или более) отчета в ран-тайме в Харборе? А потом уже просматривать/печатать объединенный отчет?

Sergey Spirin: PSP пишет: Можно ли объединить два (или более) отчета в ран-тайме в Харборе? Можно: FrPrn:LoadFromFile(RepDir + "1.fr3") FrPrn:PrepareReport() FrPrn:LoadFromFile(RepDir + "4.fr3") FrPrn:PrepareReport(FR_NOTCLEARLASTREPORT) FrPrn:ShowPreparedReport()

Dr. Oldwarez: А теперь вопрос на больную тему перекрёстных таблиц DBCrossTab. Нужно, чтобы по строке выводился минимум, а по столбцу - сумма. Как это сделать? Если я ставлю одну аггрегирующую функцию - минимум, то и по строкам и по столбцам выходит только минимум. А если дополнительно добавляю сумму, то число столбцов удваивается, что недопустимо. ФИРМА1 ФИРМА2 ФИРМА3 МИНИМУМ 001 Задание1 120,00 240,00 300,00 120,00 002 Задание2 100,00 200,00 250,00 100,00 ================================== ИТОГО 220,00 440,00 550,00 220,00

PSP: Sergey Spirin, огромное мерси! :)

PSP: Dr. Oldwarez, я бы поиск минимума сделал до формирования отчета, а отчете использовал бы уже готовые значения.

Dr. Oldwarez: PSP пишет: я бы поиск минимума сделал до формирования отчета, а отчете использовал бы уже готовые значения. А где хранить эти минимумы? Извините, но я ещё новичок в перекрёстных таблицах. Как-то до этой задачи не приходилось с ними работать...

PSP: Dr. Oldwarez пишет: А где хранить эти минимумы? Либо в dbf, либо в переменных (массиве). А в отчете можно легко их достать либо из dbf, либо из переменной(ых)/массива.

Dr. Oldwarez: Дык, элемент DBCrosstab не позволяет вставлять в перекрёстную таблицу сторонние данные. Только одна таблица с горизонтальной группировкой.

Sergey Spirin: Dr. Oldwarez пишет: Дык, элемент DBCrosstab не позволяет вставлять в перекрёстную таблицу сторонние данные. Только одна таблица с горизонтальной группировкой. Честно говоря, так получилось, что никогда не использовал КроссТабы, поэтому имено про них ничего не подскажу.

Dr. Oldwarez: Sergey Spirin пишет: Честно говоря, так получилось, что никогда не использовал КроссТабы, поэтому имено про них ничего не подскажу. Блин, я тоже не использовал. А теперь на-а-а-а-до!!! Ну просто позарез надо!!!

PSP: Dr. Oldwarez пишет: Дык, элемент DBCrosstab не позволяет Извините, не вник сразу.

Sergey Spirin: PSP пишет: Блин, я тоже не использовал. А теперь на-а-а-а-до!!! Ну просто позарез надо!!! Ну чтож, пришлось мне почитать за вас доку, ту самую, на отсутствие которой Андрей наш так сетовал. Ладно, смотрите: А это скрипт: [pre2]var MyMin: Variant; procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant); begin if not Cross1.IsGrandTotalColumn(ColumnIndex) then begin if (ColumnIndex = 0) then MyMin := Memo.Value else if (MyMin = 0) or ((Memo.Value < MyMin) and (Memo.Value > 0)) then MyMin := Memo.Value; end else Memo.Text := Format('%m', [MyMin]); end; [/pre2]

Andrey: Sergey Spirin пишет: ту самую, на отсутствие которой Андрей наш так сетовал. Я сетовал на отсутствие доки по моему примеру. Не надо передергивать ! А по своему примеру, пришлось методом тыка делать !

Sergey Spirin: Andrey пишет: Я сетовал на отсутствие доки по моему примеру. Это как? Под ваши примеры уже дока должна быть готова? Заранее? Использование же колонок документировано, о них идет речь и в разделе 1.6 Параметры страницы, и более подробно в разделе 2.19 Печать этикеток.

Andrey: Sergey Spirin пишет: Использование же колонок документировано, о них идет речь и в разделе 1.6 Параметры страницы, и более подробно в разделе 2.19 Печать этикеток. Эта информация уже не нужна (устарела). Так как пример уже сделан ! Ну на будущее, может и пригодится.

Sergey Spirin: Andrey пишет: Эта информация уже не нужна (устарела) Это информация о том, что вам надо сесть и просто прочитать "Руководство пользователя" полностью, с 1-ой по 246-ю страницу. Иначе, в будущем помощь может и не прийти... Так как вопросы по синтаксису, уточнению понятий, прояснению концепций - это одно. А вопрос - "А чего это оно куда то не туды", это совсем, совсем другое.

Dr. Oldwarez: Sergey Spirin пишет: А это скрипт: var MyMin: Variant; procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant); begin if not Cross1.IsGrandTotalColumn(ColumnIndex) then begin if (ColumnIndex = 0) then MyMin := Memo.Value else if (MyMin = 0) or ((Memo.Value < MyMin) and (Memo.Value > 0)) then MyMin := Memo.Value; end else Memo.Text := Format('%m', [MyMin]); end; Огромное спасибо за скрипт! Я попробовал - получилось! Но шеф усложнил задачу и теперь нужно дополнительно выводить столбец количества позиций (не участвующий в группировке, а принадлежащий к той же группе, что и номер позиции) и дополнительно в простых клетках выводить цену, а в сумме внизу - сумму общих цен (цена*количество)

Sergey Spirin: Dr. Oldwarez пишет: Я попробовал - получилось! Но шеф усложнил задачу и теперь нужно дополнительно выводить столбец количества позиций (не участвующий в группировке, а принадлежащий к той же группе, что и номер позиции) и дополнительно в простых клетках выводить цену, а в сумме внизу - сумму общих цен (цена*количество) Привет. Ну что сказать. Как выводить все что угодно "клетках" кросстаба я показал. Конечно, если все устраивать на скрипте, то это уже не так красиво... Все-таки, вы определились с количеством столбцов? Если оно статично или варируется в разумных известных пределах, то может удобней сделать без кросстабов? Еще есть варианты соединять кросстабы по горизонтально, если это подойдет... Короче, задачу надо лучше понимать, чтобы что-то посоветовать.

Andrey: Что за остатки полей на форме ? Взял старую форму, MasterData был BookAbon. Подключил к другой базе, поменял нужные мне поля. И все равно остались "остатки" предыдущей БД в этой новой форме !!! Как их удалить ? И как вообще правильно использовать мои готовые формы для других случаев ? Т.е. порядок подключения формы к другим MasterData ? Заранее спасибо за ответ. Увеличить И еще один вопрос. Делаю вывод (в качестве примера) на форму "Сумму прописью". CallHbFunc('SUMMAPROPIS',[<ABONENT."DOLG_2008">,True]) - работает нормально. Усложнил пример для показа другим... SummaPropis( <ABONENT."DOLG_2008"> ,True) ] - не работает. Что-то неправильно делаю. Где ? Подскажите пожалуйста. Сама форма и пример: http://files.mail.ru/NJ3CJ0

Andrey: Как бы убрать эти кракозябы ? Вставить в коде FastReport ПРОВЕРКУ на OEM-кодировку и перевести в WIN-кодировку. И еще добавить строку вызываемой функции, а то приходиться догадки строить, где и что не работает, виноват ли Фаст или своя функция !

Sergey Spirin: Andrey пишет: Что за остатки полей на форме ? Взял старую форму, MasterData был BookAbon. Подключил к другой базе, поменял нужные мне поля. И все равно остались "остатки" предыдущей БД в этой новой форме !!! Это ж с какого интересно бодуна вы решили, что то на что указывают стрелки - это поля БД (!!!) Это объекты отчета типа TfrxMemoView и от того, что изменился набор данных для отчета, с какого лешего это они должны исчезать? Andrey пишет: Как их удалить ? Выделить и нажать Delete. Andrey пишет: И как вообще правильно использовать мои готовые формы для других случаев ? Т.е. порядок подключения формы к другим MasterData ? Заранее спасибо за ответ. Если бы можно было бы понять вопрос, то можно было бы дать и ответ. Попробуйте, напрягитесь наконец с понятийным рядом, и попытайтесь сформулировать. Andrey пишет: И еще один вопрос. Делаю вывод (в качестве примера) на форму "Сумму прописью". CallHbFunc('SUMMAPROPIS',[<ABONENT."DOLG_2008">,True]) - работает нормально. Усложнил пример для показа другим... SummaPropis( <ABONENT."DOLG_2008"> ,True) ] - не работает. Что-то неправильно делаю. Где ? Подскажите пожалуйста. Андрей, вы не пьяны были когда это писали? [pre2] ELSEIF ( FName == "SUMMAPROPIS" ) RES := Str( FParams[ 1 ], FParams[ 2 ] )[/pre2] Какая была логика? И, кстати, как можно не получить вывих мозга от следующего за этим комментария?[pre2] // --------------- без этой строчки работать не будет ---// // Так как SUMMAPROPIS() вызывает STR() то необходимо подключить // стандартную Harbour функцию !!! // --------------- без этой строчки работать не будет ---// [/pre2] Andrey пишет: Как бы убрать эти кракозябы ? Вставить в коде FastReport ПРОВЕРКУ на OEM-кодировку и перевести в WIN-кодировку. И еще добавить строку вызываемой функции, а то приходиться догадки строить, где и что не работает Гм... Вы хотите сказать, что у вас тексты харборных ошибок по-русски и в OEM-кодировке? Гм... У меня эта выглядит так как и должна: BASE/1099 Argument error: STR Но все в ваших руках. METHOD FrNotifyError(oError) class frReportManager - напишите лучше, и ЕСЛИ Петр, Паша, Григорий одобрят ваш вариант, то заменю и у себя, это не проблема.

Andrey: Sergey Spirin пишет: Андрей, вы не пьяны были когда это писали? Конечно пьян. Я же без бутылки не сажусь программировать !!! А по людски, этот ваш вопрос просто скотский. Просишь о помощи, то что не видишь сам, а вы с издевкой отвечаете. Что у вас никто не может ошибиться в коде ? Большое спасибо, бог вам судья.

Sergey Spirin: Andrey пишет: А по людски, этот ваш вопрос просто скотский. Просишь о помощи, то что не видишь сам, а вы с издевкой отвечаете. Что у вас никто не может ошибиться в коде ? Большое спасибо, бог вам судья. Ну, дорогой, нашел на что обижаться Ошибки, непонятки, конечно, всякие бывают, НО писать такое!!! Это же как: "Я написал 2+2=5, в чем проблема? Сиди тут гадай кто виноват Фаст или я". И как к этому относится? Так что терпи, назвать человека пьяным на Руси никогда оскорблением не было. Я вот сейчас сижу и пиво пью, и тоже пьяный. И мне все-таки дьявольски интересно, как написав: ELSEIF ( FName == "SUMMAPROPIS" ) RES := Str( FParams[ 1 ], FParams[ 2 ] ) можно надеяться, что вызовется функция SUMMAPROPIS(), как, почему? И причем здесь Str()? Ну хоть как-то объяснить это можно?

Sergey Spirin: Кстати, забыл сказать, пересобрал копии с версией 4.11, основное нововведение: + добавлен новый фильтр экспорта BIFF8 XLS Это экспорт напрямую в файл Excel, минуя OLE/COM.

Andrey: Sergey Spirin пишет: Ну хоть как-то объяснить это можно? Ну ошибся я, да неправ, тупо поставил возврат функции "XBASESTR" и не мог понять, почему CallHbFunc(SUMMA_PROPIS()) - работает, а объявленная функция нет. Я же делал раньше правильно, а здесь усталость глаза замылила. Да и ошибка Фаста вылазила в кракозябах (у меня же OEM-кодировка), а я никак не мог понять что за ошибка... Sergey Spirin пишет: Так что терпи, назвать человека пьяным на Руси никогда оскорблением не было Называйте так в своей семье и родне, а я вам не родня и нормы приличия никто не отменял.

Sergey Spirin: Andrey пишет: Да и ошибка Фаста вылазила в кракозябах (у меня же OEM-кодировка), а я никак не мог понять что за ошибка... Это мне непонятно, харбор-ошибки они латиницей... Возьми , например, любую демку, в том числе консольные, в отчете "Some functions calls.." исправь в Memo1 вызова XBaseStr() второй параметр на True/False, получаем: --------------------------- Error --------------------------- BASE/1099 Argument error: STR --------------------------- ОК --------------------------- Какая OEM, если текст английский?

Andrey: Sergey Spirin пишет: Это мне непонятно, харбор-ошибки они латиницей... Возьми , например, любую демку Демку можете не брать ! Возьмите мой пример и исправьте - будет вам такая же кракозяба ! У меня постоянно ошибки в OEM-кодировке, так как используется GTWIN или GTWVT терминал и OEM-кодировка в программе !

Sergey Spirin: Andrey пишет: Демку можете не брать ! Возьмите мой пример и исправьте - будет вам такая же кракозяба ! У меня постоянно ошибки в OEM-кодировке, так как используется GTWIN или GTWVT терминал и OEM-кодировка в программе ! Андрей, еще раз. Фраза "Argument error:" состоит из латинских буков! И в WIN и OEM она "звучит" одинаково. Каким образом получается перевод (?) на русский стандартного oError:Description? Ответьте мне как харбурист.

Pasha: Текст сообщений, в том числе для ошибок, определяется установкой hb_LangSelect( "RU866" ) Поскольку программа консольная, то эта установка и должна быть Но FastReport по-видимому выдает сообщения сам, вызовами функций Message*(), которые предполагают кодировку ansi Если хотите, введе в frh какую-то настройку для такой конфигурации, чтобы перекодировать текст вызовами hb_oemtoansi() или аналогичной дельфийской функцией

Sergey Spirin: Pasha пишет: Если хотите, введе в frh какую-то настройку для такой конфигурации, чтобы перекодировать текст вызовами hb_oemtoansi() или аналогичной дельфийской функцией Ok. Это можно. Хоть, честно говоря, удивлен, зачем тексты ошибок то переводить? Пара вопросов, можно ли автоматом определить что кодировка OEM (не обязательно RU)? hb_oemtoansi() существует во всех версиях [x]Harbour? Паш, если не трудно, взгляни на метод METHOD FrNotifyError(oError) class frReportManager, что там можно еще добавить? Номер строки ошибки это реально?

Pasha: Тексты ошибок на национальных языках завел еще Нантакет в клиппере, и в харбор они попали по наследству. Автоматом определить oem/ansi нельзя, разве что из всех кодовых страниц харбора: include\hbcpage.hbx выбрать относящиеся к OEM, ANSI и прочим Функция hb_oemtoansi() появилась в харборе изначально, но она может быть не подлинкована к приложению, так что на нее лучше не расчитывать По поводу NotifyError. Все, что можно вытащить - можно глянуть в обработчике ошибок харбора: source\rtl\errorsys.prg src\rtl\errsys.prg Можно вытащить и номера строк: см. метод и функцию ProcLine() Кстати, может быть лучше в FrNotifyError() просто вызывать стандартный обработчик ошибок харбора ? Тогда и с перекодировкой вопроса не будет Но в консольной версии в этом случае будет выскакивать не гуевое окошко, а текстовое..

Sergey Spirin: Pasha пишет: Кстати, может быть лучше в FrNotifyError() просто вызывать стандартный обработчик ошибок харбора ? Тогда и с перекодировкой вопроса не будет Но в консольной версии в этом случае будет выскакивать не гуевое окошко, а текстовое.. Нет, так не получится. Дизайнер всегда, а предпросмотр в 90% случаев жестко модальны. Поэтому и графическое окно может "не пробиться", а уж консольное так и останется за дизайнером, в задизейбленном состоянии. Поэтому здесь правильно выводить харборную ошибку именно окном FRH. Ok. Думаю сделаю так. Добавлю еще один параметр в Init() типа SystemIsOEM умолчательно .f., там же в FrLoad() протолкну его к себе. Ну и при ошибке буду на него ориентироваться. По ProcLine() и ProcName() стэк выведу, вопрос только ProcLine() и ProcName() они то всегда прилинкованы гарантировано?

Pasha: Sergey Spirin пишет: вопрос только ProcLine() и ProcName() они то всегда прилинкованы гарантировано? Не гарантированно, но практически всегда Ссылка на них есть через тот же errorsys, getsys, browse Если кто-то все это намеренно обрубил, тогда их может не быть, но это очень постараться надо

Pasha: Но на это можно не заморачиваться, просто указать их в EXTERNAL в fastreph.ch

Sergey Spirin: Pasha пишет: Но на это можно не заморачиваться, просто указать их в EXTERNAL в fastreph.ch Ok. Спасибо.

Andrey: Ну как там успехи по поводу избавлений "крокозяб" в ошибках и номерах строк ошибки ?

Andrey: Sergey Spirin пишет: + добавлен новый фильтр экспорта BIFF8 XLS Это экспорт напрямую в файл Excel, минуя OLE/COM. В ДЕМО-версии этот вариант будет ? Может пора ДЕМКУ DLL обновить ?

PSP: Sergey Spirin пишет: + добавлен новый фильтр экспорта BIFF8 XLS Сергей, посморите, пожалуйста, на скриншоты. Это в FR: А это в Excel: Косяк с числами (цены, суммы) и пустые места - в отчете Memo для формирования рамки. PS: через OLE экспортируется корректно.

Sergey Spirin: Andrey пишет: Ну как там успехи по поводу избавлений "крокозяб" в ошибках и номерах строк ошибки ? Даже в столь короткой фразе умудрился падежи, лица и числа напутать Andrey пишет: В ДЕМО-версии этот вариант будет ? Может пора ДЕМКУ DLL обновить ? Так скачай свою копию, зачем тебе демка? PSP пишет: Сергей, посморите, пожалуйста, на скриншоты. Это в FR: А это в Excel: Косяк с числами (цены, суммы) и пустые места - в отчете Memo для формирования рамки. Посмотреть не могу, запрещает турецкое правительство Пишет: 5651 sayılı yasa uyarınca katalog suçlar kapsamında yapılan teknik inceleme ve hukuksal değerlendirme sonucunda; bu internet sitesi (photo.qip.ru) hakkında Telekomünikasyon İletişim Başkanlığı'nın 25/10/2010 tarih ve 421.02.00.2010-367945 nolu kararı gereğince İDARİ TEDBİR uygulanmaktadır. (After technical analysis and legal evaluation based on the catalog crimes of the Law no 5651, Administrative measure has been taken for this website (photo.qip.ru) according to decision no 421.02.00.2010-367945 dated 25/10/2010 of "Telekomünikasyon İletişim Başkanlığı") http://www.tib.gov.tr | http://www.guvenliweb.org.tr | http://www.ihbarweb.org.tr Но в любом случае, экспорт свежий, там сейчас активно идут правки, приеду из Турции, пересоберу копии со свежей версией.

Andrey: Sergey Spirin пишет: Так скачай свою копию, зачем тебе демка? Демка нужна, чтоб не отдавать свой исходник. Да и в демке нет других функций, добавленных уже после ее создания. Пишу примеры для демонстраций тех или иных функций.

Sergey Spirin: Привет, Андрей, вот так доходчивей будет? Так будет нормально или еще что-то добавить?

PSP: Сергей, подскажи: есть ли в FR понятие тайм-аут? Т.е., есть ли возможность открытый на просмотр отчет закрыть автоматически по истечении тай-аута, если пользователь не проявляет активности?

Sergey Spirin: PSP пишет: Сергей, подскажи: есть ли в FR понятие тайм-аут? Т.е., есть ли возможность открытый на просмотр отчет закрыть автоматически по истечении тай-аута, если пользователь не проявляет активности? Забавная постановка задачи Интересно даже, где такое может быть нужно? Может, достаточно использовать немодальный предпросмотр? Штатного такого тайм-аута, конечно, нет. Но придумать можно. Надо просто использовать НЕНУЛЕВОЙ отчет. То есть, сначала :AddReport() А потом, по своему таймеру: :RemoveReport() Если непонятно - спрашивай!

Andrey: Sergey Spirin пишет: Так будет нормально или еще что-то добавить? Я думаю - в самый раз будет !

Sergey Spirin: Andrey пишет: Я думаю - в самый раз будет ! Ну тогда качай свою копию. Может быть, где-то во вторник, демку тоже перекомпилю. Не забудь про второй параметр в :Init() version 4.11 ----------- + New parameter of :Init() method is added - lSystemIsOEM. This parameter is for OEM-based systems for correct showing [x]Harbour error-messages at disigner and preview. For example: FrPrn := frReportManager():new(,.t.) Call stack information is added to error-messages. + Supports for some Extended Field Types of ADT tables is added. List of supported datatypes: -TIMESTAMP -MODTIME -IMAGE -BINARY -AUTOINC -ROWVERSION -DOUBLE -MONEY

PSP: Привет! Sergey Spirin пишет: Интересно даже, где такое может быть нужно? При отсутствии активности пользователя в течение определенного времени программа сама завершает работу. Если открыто окно отчета, то, естественно, не завершает. :) Может, достаточно использовать немодальный предпросмотр? Не подходит. Нужно останавливать программу, пока отчет открыт. И еще: если попытаться создать второй раз отчет, который уже открыт, валится по ошибке. Видимо, проблема с разделенным доступом. Не разбирался. К тому же, данные для отчетов беруться из временных динамически создаваемых таблиц. Эти таблицы удаляются после завершения функции, где формировался отчет. Наверное, возможны траблы и в этом отношении. Вобщем, немодальный режим не подходит. Надо просто использовать НЕНУЛЕВОЙ отчет. То есть, сначала :AddReport() А потом, по своему таймеру: :RemoveReport() Если непонятно - спрашивай! Я понял, о чем ты говоришь. :) Дело в том, что программа "не знает", работает ли пользователь с окном отчета или нет. Она может его закрыть раньше времени, когда отчет еще нужен. Штатного такого тайм-аута, конечно, нет. Но придумать можно. Вот это было бы отлично! Верю в положительное решение вопроса! :)

Sergey Spirin: PSP пишет:  цитата: Интересно даже, где такое может быть нужно? При отсутствии активности пользователя в течение определенного времени программа сама завершает работу. Если открыто окно отчета, то, естественно, не завершает. :) Это то понятно, непонятно зачем? Зачем это нужно то может быть? Я было подумал, что бухгалтера у вас имеет склонность засыпать перед мониторами А сальдо, например, не посчитано, типа самое время посчитать А тут нет, сразу "на выход"... Ты и комп сразу выключаешь? Энергию экономишь? PSP пишет:  цитата: Надо просто использовать НЕНУЛЕВОЙ отчет. То есть, сначала :AddReport() А потом, по своему таймеру: :RemoveReport() Если непонятно - спрашивай! Я понял, о чем ты говоришь. :) Дело в том, что программа "не знает", работает ли пользователь с окном отчета или нет. Она может его закрыть раньше времени, когда отчет еще нужен. C++ немного знаешь? Поставь Hook на текущий поток по мыше и клавиатуре. Смотри функции SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx. Про последнюю не забудь, так как Фаст для некоторых целей хуки использует. Это было бы для твоего приложения универсальным решением, мне же в FRH лишние хуки для такой экзотики тащить не хочется. Если С++ совсем не знаешь, то может быть местные Си-шники смогут помочь...

Andrey: Sergey Spirin пишет: Ну тогда качай свою копию. Спасибо.

PSP: Sergey Spirin пишет: Это то понятно, непонятно зачем? Зачем это нужно то может быть? Я было подумал, что бухгалтера у вас имеет склонность засыпать перед мониторами А сальдо, например, не посчитано, типа самое время посчитать А тут нет, сразу "на выход"... Ты и комп сразу выключаешь? Энергию экономишь? Это несколько вопросов или один? C++ немного знаешь? Поставь Hook на текущий поток по мыше и клавиатуре. Смотри функции SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx. Про последнюю не забудь, так как Фаст для некоторых целей хуки использует. Это было бы для твоего приложения универсальным решением, мне же в FRH лишние хуки для такой экзотики тащить не хочется. Если С++ совсем не знаешь, то может быть местные Си-шники смогут помочь... Спасибо. Попробую разобраться.

Sergey Spirin: PSP пишет: Это несколько вопросов или один? Да расскажи, любопытно же, для чего это нужно

PSP: Sergey Spirin пишет: Да расскажи, любопытно же, для чего это нужно Ничего особенного. Режим работы - файловый. Считаю, что не нужно держать зря открытые файлы базы данных. Приложение консольное. Никаких отдельных окон и процессов нет. Диалоги открываются один за одним. Закрытие происходит не моментально, а постепенно, в порядке обратном открытию диалогов. На каждый шаг отводится время тайм-аута. Поэтому, для пользователя это не становится неожиданностью, тем более, что в большинстве случаев в этот момент никого перед компьютером нет. Вот, вкратце. Спасибо за проявленный интерес.

Andrey: По доке есть: SendMail(<cServer>, <nPort>, <cUserField>, <cPasswordField>,; <cFromField>, <cToField>, <cSubjectField>, <cCompanyField>,; <cTextField>, <cFileNames>) Посылает письмо по электронной почте. Параметры: <cTextField> и <cFileNames> - строки с разделителями CHR (13) + CHR (10). Возвращает: если все успешно – пустую строку, иначе текст с ошибкой. Пример: cTextField := "Hello" + Chr(13) + Chr(10) + "How are you?" cFileNames := "C:\MyAttach1.bin"+ Chr(13) + Chr(10) + "C:\MyAttach2.txt" S := FrPrn:SendMail("someserver.com", 25, "MyUserName", "MyPassword", "from@xxx.ru", "to@xxx.es", "MySubject", "MyCompany", cTextField, cFileNames) IF S <> "" MsgBox(S) ELSE MsgBox("Mail is sent") ENDIF Что то у меня не получается для хХарбора. И как еще сделать БЕГУНОК отсылки письма ?

Sergey Spirin: Andrey пишет: Что то у меня не получается для хХарбора. Что не получается то? Ошибка? Что вызывается? Andrey пишет: И как еще сделать БЕГУНОК отсылки письма ? Средствами Фаста никак. Своими (харбурными) средствами выводи.

Andrey: Собираю свой тестовый пример. Не собирается, выдает ошибку: Building object module for 'obj\FASTREPH.c' using C compiler 'BCC32' as defined in 'Z:\xHARBOUR\BIN\harbour.cfg'... Exec: BCC32 -c -D__EXPORT__ -IZ:\xHARBOUR\include -d -LZ:\xHARBOUR\lib -oobj\FASTREPH.obj obj\FASTREPH.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland obj\FASTREPH.c: Error E2141 FASTREPH.PRG 177: Declaration syntax error *** 1 errors in Compile *** Компилятор xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406) FastRepH.prg из поставки ДЕМО !!!

Andrey: Sergey Spirin пишет: Что не получается то? Ошибка? Что вызывается? Собрал тест на хХарборе 1.0 Исходник здесь: http://zalil.ru/31343016 Вываливается по ошибке:

Sergey Spirin: Andrey пишет: Error E2141 FASTREPH.PRG 177: Declaration syntax error Andrey пишет: Собрал тест на хХарборе 1.0 Исходник здесь: http://zalil.ru/31343016 Вываливается по ошибке: Для начала Андрей, надо бы хоть взглянуть тебе на самое первое сообщение в этой ветке и увидеть, что первый релиз FRH был 11.03.08.... Теперь посмотреть даты FRH, который ВДРУГ ты решил использовать, и увидеть - январь 2008.... Ну что сказать тут.... Я понятия не имею, что там могло ТОГДА не работать в тестовой(!) сборке, которую я когда-то рассылал и которая ни для какой работы не предназначалась, ТЕМ БОЛЕЕ УЖ СЕЙЧАС... На текущей версии проверил, все работает нормально. Загляни в ящик.

Andrey: Sergey Spirin пишет: На текущей версии проверил, все работает нормально. Загляни в ящик. Спасибо, скомпилировалось и заработало. Если в параметре <server> пишу "mail.ru" - пишет, что все ОК - "Mail is sent !" Хотя ошибка (записываю в файл): Network is unreachable.(10051) Если в параметре <server> пишу "smtp.mail.ru" - пишет, что все ОК - "Mail is sent !" Хотя тоже ошибка: Timeout expired (60) 501 sender address must match authenticated user

Sergey Spirin: Andrey пишет: Но почта не отправляется. Если в параметре <server> пишу "mail.ru" - пишет, что все ОК - "Mail is sent !" Хотя ошибка (записываю в файл): Network is unreachable.(10051) Если в параметре <server> пишу "smtp.mail.ru" - пишет, что все ОК - "Mail is sent !" Хотя тоже ошибка: Timeout expired (60) 501 sender address must match authenticated user Так что доку нужно править !!! Ты скажи, мои 2 письма "от тебя" получил? Если нет, то увы, FRH не поддерживает сервера, требующих с SSL/HTTPS соединения, например gmail и и.д. Возможно mail.ru требует того же.... Если получил, то смотри ошибку у себя.

Andrey: Правильный синтаксис (при котором происходит отправка) подобрал опытным путем: S := FrPrn:SendMail("smtp.mail.ru", 25, "mytest94@mail.ru", "mytest99", "mytest94@mail.ru", "Кому@mail.ru",.... И то через раз происходит, но это наверно беда MAIL.RU ! Попробуйте, у кого как получиться отправлять ? Так что доку нужно править !!! Вместо "MyUserName" написать "MyUserName@xxx.ru" ! Исходник здесь: http://zalil.ru/31345964

Sergey Spirin: Sergey Spirin пишет: Ты скажи, мои 2 письма "от тебя" получил? Andrey пишет: Правильный синтаксис (при котором п Ты будешь отвечать на вопросы? С mail.ru разбирайся сам В конце концов это виртуальный SMTP. На стандартном SMTP FRH работает нормально, SSL как я сказал не поддерживает....

Andrey: Sergey Spirin пишет: Ты будешь отвечать на вопросы? Буду. Писем от вас не получал !!! Свои все получил ! Через раз работает mail.ru ! Буду пробовать через gmail.com ! Как прикрутить БЕГУНОК или таймер ? Сколько времени ждет отправки - 60 сек ? У меня через раз проходит и на ошибку не попадает !!! Попробуйте сами - увидите ! И в почтовом ящике mytest94@mail.ru нет писем в отправленных ! Можно ли как то статистику получить, или они там не отображаются ?

Sergey Spirin: Andrey пишет: Буду. Писем от вас не получал !!! Ну, наконец-то :) Хотя из из следующего поста видно, что проблема с правильностью написания логина/пароля... Andrey пишет: Свои все получил ! Через раз работает mail.ru ! Буду пробовать через gmail.com ! Противоречивое утвержднение: ВСЕ ПОЛУЧИЛ - ЧЕРЕЗ РАЗ РАБОТАЕТ MAIL.RU Еще раз - gmail.com НЕ ПОДДЕРЖИВАЕТСЯ так как требует SSL. Andrey пишет: Сколько времени ждет отправки - 60 сек ? Даю 60 сек.

Sergey Spirin: Andrey пишет: И в почтовом ящике mytest94@mail.ru нет писем в отправленных ! Можно ли как то статистику получить, или они там не отображаются ? Издеваешься? Или просто не понимаешь, что такое SMTP/POP?

Andrey: Sergey Spirin пишет: Издеваешься? Или просто не понимаешь, что такое SMTP/POP? Да не издеваюсь. Не разбирался я с этим. Вижу The Bat сохраняет, подумал, мож какой параметр включить... Нельзя, так нельзя... Sergey Spirin пишет: Противоречивое утвержднение: ВСЕ ПОЛУЧИЛ - ЧЕРЕЗ РАЗ РАБОТАЕТ MAIL.RU А у вас как работает ? Может у меня провайдер письма мои тырит...

Sergey Spirin: Andrey пишет: А у вас как работает ? Может у меня провайдер письма мои тырит... У меня, если сервер - обычный SMTP, то все проходит без исключений, а если как gmail "с наворотами", то ничего не проходит

Andrey: Возвращаюсь опять к варианту ДЕМО ! Нужна версия библиотеки, которая бы собиралась для version 4.11 Как иначе передавать другим в качестве примеров и показа работающие и не работающие программки ? Это не срочно....

Andrey: Sergey Spirin пишет: Может быть, где-то во вторник, демку тоже перекомпилю. Ждем.... Добавьте хотя бы отправку почты в старую версию....

Andrey: Как убрать диалоговое окно при отправки письма ? Не хочу чтоб он вообще появлялся... Вот код: // -------------- Построить отчет ---------------------- FrPrn:PrepareReport() // -------------- email to export ---------------------- FrPrn:SetProperty("MailExport", "FileName" , M->MyFileAttach ) FrPrn:SetProperty("MailExport", "Address" , M->MyAddresWho ) FrPrn:SetProperty("MailExport", "Subject" , M->MySubject ) FrPrn:SetProperty("MailExport.Lines", "Text" , M->MyText, .t.) FrPrn:SetProperty("MailExport", "FromName" , M->MyFrom ) FrPrn:SetProperty("MailExport", "FromMail" , M->MyFromAdres ) FrPrn:SetProperty("MailExport", "FromCompany", M->MyFromCompany ) FrPrn:SetProperty("MailExport", "Signature" , M->MySignature ) FrPrn:SetProperty("MailExport", "SmtpHost" , M->MySmtpHost ) FrPrn:SetProperty("MailExport", "SmtpPort" , M->MySmtpPort ) FrPrn:SetProperty("MailExport", "Login" , M->MyLogin ) FrPrn:SetProperty("MailExport", "Password" , M->MyPassword ) FrPrn:SetProperty("MailExport", "LogFile" , "mail_log.txt" ) // При UseIniFile = True настройки берутся с реестра, // при False - из свойств фильтра экспорта // --- взято с форума: gpi сообщение 7.10.2010, 21:26 FrPrn:SetProperty("MailExport", "UseIniFile" , .F. ) // --- не показывать диалог отправки --- FrPrn:SetProperty("MailExport", "ShowExportDialog" , .F. ) FrPrn:DoExport("MailExport") Могу выслать пример...

Sergey Spirin: Andrey пишет: Добавьте хотя бы отправку почты в старую версию.... Чего-чего? Отправка почты существует во всех релизных версиях. Это ты умудрился "поднять" аж дорелизную тестовую... Ладно, завтра как раз вторник, если руки дойдут, то пересоберу демку. Andrey пишет: Как убрать диалоговое окно при отправки письма ? Не хочу чтоб он вообще появлялся... Он - это кто? Или ты про "оно"? Andrey пишет: FrPrn:SetProperty("MailExport", "ShowExportDialog" , .F. ) Интересно Убрать доп. диалог текущего экспорта (pdf, xls и т.д. для MailExport) ты догадался, а почему тогда не догадался убрать диалог у самого MailExport? FrPrn:SetProperty("MailExport", "ShowDialog" , .F. ) ShowDialog - свойство, которое есть у всех экспортов.

Andrey: Sergey Spirin пишет: почему тогда не догадался убрать диалог у самого MailExport? Не знал. Спасибо !!! А почему окно отправки такое малюсенькое, даже короткий адрес плохо видно и вообще оно какое-то не серьезное ? Если письмо отправляется, и фокус мышки уводишь на другую программы, то программа ВИСНЕТ наглухо ! Пока не найдеш окно ошибки на экране: Наверно это окно ошибки лучше сделать МОДАЛЬНЫМ ? Чтоб юзера не терялись и не вопили.... И подписать его "FastReport: Ошибка" или "Ошибка отправки письма"

Sergey Spirin: Andrey пишет: А почему окно отправки такое малюсенькое, даже короткий адрес плохо видно и вообще оно какое-то не серьезное ? Да, фоток своих натолкать в эти диалоги разработчики FastReport явно забыли Напишите им претензию, даже интересно, насколько далеко пошлют Демку пересобрал, можно скачивать.

Andrey: Sergey Spirin пишет: Демку пересобрал, можно скачивать. Спасибо большое !

Andrey: Sergey Spirin пишет: Напишите им претензию, даже интересно, насколько далеко пошлют А куда писать то ? Как насчет этого ? Если письмо отправляется, и фокус мышки уводишь на другую программы, то программа ВИСНЕТ наглухо ! Пока не найдеш окно ошибки на экране: Наверно это окно ошибки лучше сделать МОДАЛЬНЫМ ? Чтоб юзера не терялись и не вопили.... И подписать его "FastReport: Ошибка" или "Ошибка отправки письма" Или это тоже к разработчикам FastReport ? Если у вас есть исходники на Дельфи, то наверно это окно можете сами сделать ? Чтоб удобней было для юзеров... Я уже предвижу их вопли...

Sergey Spirin: Andrey пишет: А куда писать то ? Входим логином-паролем (про то какие они, меня не спрашиваем, а ищем у себя) и нажав "Поддержка", создаем новое обращение (простите меня ребята из Fast Report Inc). Andrey пишет: Как насчет этого ? Если письмо отправляется, и фокус мышки уводишь на другую программы, то программа ВИСНЕТ наглухо ! Пока не найдеш окно ошибки на экране: Наверно это окно ошибки лучше сделать МОДАЛЬНЫМ ? Если программа "виснет" пока не нажмешь что-то в одном окне, то это окно... модально! Интересно да? Andrey пишет: Если у вас есть исходники на Дельфи, то наверно это окно можете сами сделать ? Никогда не делаю никаких правок в коде FR, нет никакого желания сопровождать эти правки при всех обновлениях.

Andrey: Sergey Spirin пишет: Если программа "виснет" пока не нажмешь что-то в одном окне, то это окно... модально! Интересно да? Если это ОКНО модально, то почему внизу на Панели задач нет этого окна ? В хХарборе есть: Мне это без разницы, но ОКНО ошибки по всему экрану искать приходиться. Пожалейте юзеров ....

Sergey Spirin: Andrey пишет: Мне это без разницы, но ОКНО ошибки по всему экрану искать приходиться. Пожалейте юзеров .... В FastReport всё, в FastReport

Andrey: Sergey Spirin пишет: В FastReport всё, в FastReport Спасибо. Подскажите пожалуйста тогда, как получить отчет в PDF и отправить этот PDF на емайл ? // -------------- Построить отчет ---------------------- FrPrn:PrepareReport() // -------------- email to export ---------------------- FrPrn:SetProperty("MailExport", "FileName" , M->MyFileAttach ) FrPrn:SetProperty("MailExport", "Address" , M->MyAddresWho ) FrPrn:SetProperty("MailExport", "Subject" , M->MySubject ) FrPrn:SetProperty("MailExport.Lines", "Text" , M->MyText, .t.) FrPrn:SetProperty("MailExport", "FromName" , M->MyFrom ) FrPrn:SetProperty("MailExport", "FromMail" , M->MyFromAdres ) FrPrn:SetProperty("MailExport", "FromCompany", M->MyFromCompany ) FrPrn:SetProperty("MailExport", "Signature" , M->MySignature ) FrPrn:SetProperty("MailExport", "SmtpHost" , M->MySmtpHost ) FrPrn:SetProperty("MailExport", "SmtpPort" , M->MySmtpPort ) FrPrn:SetProperty("MailExport", "Login" , M->MyLogin ) FrPrn:SetProperty("MailExport", "Password" , M->MyPassword ) FrPrn:SetProperty("MailExport", "LogFile" , "mail_log.txt" ) // При UseIniFile = True настройки берутся с реестра, // при False - из свойств фильтра экспорта // --- взято с форума: gpi сообщение 7.10.2010, 21:26 FrPrn:SetProperty("MailExport", "UseIniFile" , .F. ) // --- не показывать диалог текущего экспорта --- FrPrn:SetProperty("MailExport", "ShowExportDialog" , .F. ) // --- не показывать диалог MailExport --- FrPrn:SetProperty("MailExport", "ShowDialog" , .F. ) FrPrn:DoExport("MailExport") Наверно вместо // -------------- Построить отчет ---------------------- FrPrn:PrepareReport() нужно сделать ЭКСПОРТ этого отчета в PDF ? А потом как его прицепить к отсылаемому письму ? Делаю FrPrn:SetProperty("MailExport", "FileName" , M->MyFileAttach ) - в M->MyFileAttach помещаю файл с полным путем. Не помогает....

Sergey Spirin: Andrey пишет: Подскажите пожалуйста тогда, как получить отчет в PDF и отправить этот PDF на емайл ? Андрей, сначала экспортируем отчет в pdf-файл без диалогов, а потом SendMail()-ом его отправляем.

Sergey Spirin: Привет. В связи с выходом в ближайшее время FrFox (FastReport for FoxPro), перерабатываю документацию (на английском). Сейчас она уже разрослась больше чем на 60 страниц, и я понимаю, что и раньше она не была легко читаемой, сейчас становится еще менее... Нормально было бы иметь нормальный chm-файл. Но заниматься этим самому совсем не хочется, поэтому предложение: - Необходимо из doc/pdf файла сделать chm-файл. Все на английском. Необходимо также все проверить, то есть выполнить некоторую коррекцию, если что-то непонятно, то запросить доп. инфу и т.д. Цель - сделать полноценный chm, с удобным поиском, навигацией и т.д. - Взамен бесплатная лицензия FRH (или FRAX или FrFox на выбор). Если есть желающие заняться этим, то жду в почту.

Andrey: 11 июля выпущены FastReport for COM/ActiveX и FastReport for Business версии 4.9 Что нового? + формат картинок во всех экспортах изменён на PNG + добавлен экспорт в DBF формат - этот формат востребован при обмене данными модулями различных бизнес-приложений. А у нас это когда будет ? Я не тороплюсь, просто спрашиваю....

PSP: Andrey пишет: А у нас это когда будет ? Я только что скачал свою копию. Дата 11.07.11 Правда, я не вникал в суть обновления... :)

Sergey Spirin: Andrey пишет: 11 июля выпущены FastReport for COM/ActiveX и FastReport for Business версии 4.9 Что нового? + формат картинок во всех экспортах изменён на PNG + добавлен экспорт в DBF формат - этот формат востребован при обмене данными модулями различных бизнес-приложений. А у нас это когда будет ? Я не тороплюсь, просто спрашиваю.... А у нас это уже давно есть :) FastReport for COM/ActiveX и FastReport for Business (бывшая Студия) - это вторичные продукты по отношению к базовой FastReport VCL. В них все/всегда появляется позже. экспорт в DBF же я пока не публиковал, так как глючит он что-то пока. Фокс получаемый dbf открыть не смог, что странно. Да и зачем вам dbf? У вас своего мало?

Andrey: Sergey Spirin пишет: Да и зачем вам dbf? У вас своего мало? Да так, до кучи.... Интересно будет как таблицу с логотипом фирмы будет выгружать этот ЭКСПОРТ ?

Andrey: Разобрался я с отправкой письма через функцию отправки. Но не могу понять зачем в документации написано: S := FrPrn:SendMail("someserver.com", 25, "MyUserName", "MyPassword", "from@xxx.ru", "to@xxx.es", "MySubject", "MyCompany", cTextField, cFileNames) IF S <> "" MsgBox(S) ELSE MsgBox("Mail is sent") ENDIF При неправильных данных (адресах) всегда выходит "Mail is sent", хотя письмо не отправляется и получаю ошибку в файл: Mail is sent ! Timeout expired (60) 535 Incorrect authentication data Чего я не догоняю ? Исходник и прога здесь: http://files.mail.ru/GMDK7I

Sergey Spirin: Andrey пишет: Чего я не догоняю ? Возможно, что и разболталось за годы... Посмотрю на досуге. По задумке же, текст ошибки и должен возвращаться в S.

Andrey: Sergey Spirin пишет: По задумке же, текст ошибки и должен возвращаться в S. Тогда нужно написать: IF LEN(S) > 0 MsgBox(S) ELSE MsgBox("Mail is sent") ENDIF

Sergey Spirin: Andrey пишет: Тогда нужно написать: И в чем разница?

Andrey: Sergey Spirin пишет: И в чем разница? Тогда ошибка правильно появляется: А почему это так - это нужно спрашивать у наших Гуру ! Вопрос знатокам, в чем различие этих конструкций ? Может в строке что-то хитрое присутствует ? // --------- не работает правильно -------------- IF S <> "" MsgBox(S) ELSE MsgBox("Mail is sent") ENDIF При ошибке отправки выдает: // --------- работает правильно -------------- IF LEN(S) > 0 MsgBox(S) ELSE MsgBox("Mail is sent") ENDIF

PSP: Что возвращает SendMail? Можно ж в runtime посмотреть. PS Хотя, скорее всего все правильно. Так работает сравнение строк: http://www.ousob.com/ng/53guide/ng11a6ab.php http://www.ousob.com/ng/53guide/nge677e.php

Sergey Spirin: PSP пишет: Что возвращает SendMail? SendMail то возвращает пустую строку, если все хорошо, и текст ошибки, если все плохо. Текст ошибки примерно такой как Андрей показал, два квадратика это chr1310. Да ясно, что "проблема" с "мягким" сравнением строк Типа пустая строка часть любой строки, и поэтому равна любой строке Самое противное, что я всегда проверяю выкладываемый код. То есть, на какой-то версии [x]Harbour это работало по умолчанию по "нормальному" сравнению. То бишь есть зависимости от версий [x]Harbour... ну, что называется, эффекты "Жopen Source".

PSP: Sergey Spirin пишет: Да ясно, что "проблема" с "мягким" сравнением строк Типа пустая строка часть любой строки, и поэтому равна любой строке Режим сравнения зависит от установки SET EXACT. Нельзя заранее предугадать, какое значение у этого переключателя будет в конечном приложении. Поэтому, имхо, пустые строки лучше "ловить", к примеру, функцией Empty().

Sergey Spirin: PSP пишет: Нельзя заранее предугадать, какое значение у этого переключателя будет в конечном приложении. Я к тому, что и умолчательное значение SET EXACT менялось от сборки к сборке, так как я никогда не переопределяю умолчание в своих тестах. А кстати, для равенства есть жесткое ==, а для неравенства?

Pasha: Sergey Spirin пишет: А кстати, для равенства есть жесткое ==, а для неравенства? Для неравенства точного сравнения нет, надо пользоваться: ! (x1 == x2)

Andrey: Собрал ваш пример на Harbour 3.0: http://www.paritetsoft.ru/downloads/frh_demo_simple_console.zip Пришлось переделывать bat-ник , с тем не пошло. Наверно добавьте его отдельно: Compile_bcc-Harbour30.bat @ECHO ON @set HB_BIN_INSTALL=Z:\hb30\bin @set HB_LIB_INSTALL=Z:\hb30\lib\win\bcc\ @set HB_INC_INSTALL=Z:\hb30\include\ del FastDemo.c del FastRepH.c %HB_BIN_INSTALL%\harbour SmplDemo.prg -n -i%HB_INC_INSTALL% %HB_BIN_INSTALL%\harbour FastRepH.prg -n -i%HB_INC_INSTALL% bcc32 -O2 -d -X -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% SmplDemo.c FastRepH.c harbour-30-bcc.lib hbvm.lib hbrtl.lib hbrdd.lib hbmacro.lib hbpp.lib rddntx.lib rddcdx.lib rddfpt.lib hbcommon.lib gtwin.lib hblang.lib hbcpage.lib hbct.lib hbpcre.lib hbsix.lib hbzlib.lib hbextern.lib hbhsx.lib rddnsx.lib И функцию в Smpldemo.prg пришлось добавлять: FUNCTION CurDrive() RETURN HB_CurDrive() Размер ЕХЕ-ника небольшой вышел: 300544, правда без harbour-30.dll не запускается.... Наверно в Compile_bcc-Harbour30.bat нужно как-то это указать для малоразбирающихся...

Andrey: Исправленный демо пример (который я раньше собирал) для Harbour 3.0 вам на сайт. Для последней сборки FrSystH.dll Протестировано, работает !!! http://files.mail.ru/ZJNQ1J

Sergey Spirin: Andrey пишет: Размер ЕХЕ-ника небольшой вышел: 300544, правда без harbour-30.dll не запускается.... В соседней же ветке подсказали, что надо добавить ws2_32.lib, тогда и будет автономный exe в 2,5 мега.

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

Andrey: Подскажите как форму ПРАВИЛЬНО делать. Задача такова: есть базы с переменным количеством oplata2009.dbf , oplata2010.dbf, oplata2011.dbf (но могут быть еще и с 2000 года быть), алиасы этих баз предаю в FastReport соответственно. Выходная форма должна быть такая: http://files.mail.ru/N6DEEC Или может все базы затолкать в одну ? Как удобней сделать ?

Sergey Spirin: Andrey пишет: Или может все базы затолкать в одну ? Если "затолкать", то это самое простое - группы. Если не ""заталкивать", то тоже можно, но это динамическое создание всех MasterData.

Sergey Spirin: Andrey пишет: Как удобней сделать ? Ну или Композит по каждому году.

Andrey: Sergey Spirin пишет: Если "затолкать", то это самое простое - группы. Сделал пример. Базы объединил в одну и создал поле "YEAR" по годам. Читал в доке описание отчетов по группам, мало что понял. Подскажите пожалуйста на примере как это сделать ! Заранее спасибо за помощь. http://files.mail.ru/W5QS7U

Sergey Spirin: Andrey пишет: Читал в доке описание отчетов по группам, мало что понял Смотри http://www.paritetsoft.ru/downloads/CardYearAll.fr3

Andrey: Спасибо БОЛЬШОЕ !!!

Andrey: Какая-то непонятка. Вставляю форму в задачу - печать идет со второй страницы. Увеличить А в отдельной задаче нормально печатаеся.... Что делать ? Какой параметр нужно подправить ?

Sergey Spirin: Andrey пишет: Что делать ? Открывать дизайнер "в задаче" и смотреть почему так. На StartNewPage не похоже, скорее ReportTitle растянул на всю первую страницу.

Andrey: Странно, написал сообщение, сюда, а его здесь нет !!! Пишу еще раз. Нашел разницу. У меня в задаче DLL версии 4.9.98 (не хочется пока менять всем dll-ку) А в примере версия 4.11 !!! Форму тупо копирую (переименовав) в свою папку с "задачей" п получаю вот такой результат, как на картинке выше. Исправленная мной форма: http://zalil.ru/31559019

Andrey: Взял и перекомпилировал пример с моими личными исходниками для 4.9.98 ! Получилась такая же фигня !!! Что тогда неладно с моей библиотекой ? Перекомпилировал под версию 4.11.8 - все нормально. Придется переходить на новую версию...

Sergey Spirin: Andrey пишет: Нашел разницу. У меня в задаче DLL версии 4.9.98 (не хочется пока менять всем dll-ку) Про 4.9 мне что-то сказать сложно, может и был баг когда-то. Надо обновляться. В качестве workaround попробуй ReportTitle заменить на просто Header, может поможет, но лучше обновляться.

Andrey: Sergey Spirin пишет: Андрей, сначала экспортируем отчет в pdf-файл без диалогов, а потом SendMail()-ом его отправляем. Не получается что-то .... pdf-файл создается, а отправляется fr3 - готовый отчет. Программа и исходники здесь - http://files.mail.ru/9LLJRG Отправка письма в myFastReport.prg строка 69 и ниже. И еще вопрос: можно ли дополнительно к отчету прикрепить DOC-файл или любой другой ? По документации есть параметр: FrPrn:SetProperty("MailExport", "FileName" , cFileAttach ) За что он отвечает ? Пробовал туда добавлять список файлов, ничего не отправляет !

Sergey Spirin: Andrey пишет: Не получается что-то .... Андрей, я сейчас в Эмиратах, приеду в Москву 1-го сентября поздно вечером, посмотрю уже второго...

Andrey: Хорошо, ждем...

Andrey: Sergey Spirin пишет: Андрей, я сейчас в Эмиратах, приеду в Москву 1-го сентября поздно вечером, посмотрю уже второго... Уже 7-е сентября.... Я понимаю дел много по приезду, но может чуть-чуть времени найдется...

Dr. Oldwarez: Подскажите пожалуйста, как сделать, чтобы в RTF-файле, выводимом в заголовке отчёта, в текст можно было вставлять содержимое DBF-полей? Rich1.Richedit.Lines.LoadFromFile('PATTERN.RTF') Такое RTF выпечатывается один раз на группу верхнего уровня (фирмы) и каждый раз в него нужно вставлять реквизиты новой фирмы.

Sergey Spirin: Dr. Oldwarez пишет: Подскажите пожалуйста, как сделать, чтобы в RTF-файле, выводимом в заголовке отчёта, в текст можно было вставлять содержимое DBF-полей? Rich1.Richedit.Lines.LoadFromFile('PATTERN.RTF') Такое RTF выпечатывается один раз на группу верхнего уровня (фирмы) и каждый раз в него нужно вставлять реквизиты новой фирмы. Точно также как и в проcтом Memo. То есть, выражения дожны быть в квадратных скобках. Например: Dear [Customers."Contact"]! ....

Sergey Spirin: Andrey пишет: Уже 7-е сентября.... Я понимаю дел много по приезду, но может чуть-чуть времени найдется... Андрей, письмо твоё новое получил, естественно, сейчас я не помню, что там было. Поэтому, давай, формулируй здесь, что хочешь сделать, и главное, что не получается.

Dr. Oldwarez: Sergey Spirin пишет: Точно также как и в проcтом Memo. То есть, выражения дожны быть в квадратных скобках. Например: Dear [Customers."Contact"]! ОГРОМНОЕ СПАСИБО

Andrey: Сначала этот вопрос хотелось бы доделать. Sergey Spirin пишет: Андрей, сначала экспортируем отчет в pdf-файл без диалогов, а потом SendMail()-ом его отправляем. Не получается что-то .... pdf-файл создается, а отправляется fr3 - готовый отчет. Программа и исходники здесь - http://files.mail.ru/8Z40Z8 Отправка письма в myFastReport.prg строка 69 и ниже. И еще вопрос: можно ли дополнительно к отчету прикрепить DOC-файл или любой другой ? По документации есть параметр: FrPrn:SetProperty("MailExport", "FileName" , cFileAttach ) За что он отвечает ? Пробовал туда добавлять список файлов, ничего не отправляет !

Andrey: Смотрю отвечаете на вопросы в "FastReport for [x]Harbour, Alaska Xbase++, Visual FoxPro" <fastreport_for_x_harbour@googlegroups.com> А сюда на форум когда придете ?

Sergey Spirin: Andrey пишет: Смотрю отвечаете на вопросы в "FastReport for [x]Harbour, Alaska Xbase++, Visual FoxPro" <fastreport_for_x_harbour@googlegroups.com> Привет, Андрей. Отвечаю я на конкретные вопросы, конкретные ответы. С этим особых задержек ни на каком форуме не будет. Andrey пишет: А сюда на форум когда придете ? Я никуда и не уходил. Поэтому, напрягитесь и задайте, наконец, конкретные вопросы, если вам что-то непонятно. На такое же: Andrey пишет: Не получается что-то .... pdf-файл создается, а отправляется fr3 - готовый отчет. Andrey пишет: По документации есть параметр: FrPrn:SetProperty("MailExport", "FileName" , cFileAttach ) За что он отвечает ? Я отвечать, естественно, не буду. Это за гранью моего восприятия реальности. Как не буду искать ваши харборные ошибки или делать за вас отчеты. Так что жду от вас конкретных вопросов.

Andrey: И кто теперь будет делать нам FastReport ? Тут обнаружил нужную вещь: http://www.fast-report.com/documentation/UserManFrNET-ru/index.html?zipcodeobject.htm Теперь и спросить не у кого....

Dima: Andrey пишет: И кто теперь будет делать нам FastReport ? Спроси Елену.

Andrey: Вопрос - кто работает с ФастРепортом ? В форме Использую свою функцию: [Say_Sel_Dim(<NACHIS_ALL."KOD_UK">,'DB_UK','Name_UK',True)] Она отрабатывает нормально ! Поле "KOD_UK" в базе NACHIS_ALL равно N 5,0 Но если применяю эту функцию на другом поле: [Say_Sel_Dim(<NACHIS_ALL."KOD_PL">,'EIRC','ADRES',True)] (поле "KOD_PL" равно N 14,0) - вылетаю по ошибке: Как исправить ? Я так подозреваю, что Дельфи где-то у себя создает ошибку...

SergKis: Andrey пишет:Как исправить ? С ФастРепортом не работаю, а сообщение не говорит о переполнении ? Может где то мусор затесался или длину поля уменьшить ?

Andrey: SergKis пишет: или длину поля уменьшить ? Нельзя ! Это код плательщика (л/счет) абонента по Москве.... Скорее всего это в Дельфи тип числа другой... Я не эксперементировал, но думаю N 9-10 пройдет, а вот N 14 не проходит. Я уже на нескольуих полях попробовал, как N14, так перестает работать !

SergKis: Andrey пишет:Нельзя ! Это код плательщика (л/счет) абонента по Москве.... Скорее всего это в Дельфи тип числа другой.. FastReport - это отчеты, почему N14 не превратить C14, поле не суммируемое ?

SergKis: Andrey Превратить N14 в C14 можно не переписывая dbf функцией от Pasha из dbedit170.7z: HB_FUNC( FIELDRENAME ). FeldRename(OldName, NewName, Type [, len [, dec]])

Andrey: SergKis пишет: Превратить N14 в C14 можно не переписывая dbf функцией Спасибо за совет ! Попробую....

yukirin: объясните как (и где) можно приобрести FastReport for [x]Harbour.

Dima: yukirin Попробуй спросить по этому email spirina@paritetsoft.ru



полная версия страницы