Выборка и расчёт из одной таблицы по условию записи другой
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Выборка и расчёт из одной таблицы по условию записи другой
Привет всем!
Clarion 8.0.9661 Windows 7 SP1 Русский
Требуется получить выборку и расчёт по условию из данных, содержащихся в одной таблице по условию записи другой таблицы:
Пример условия:
Исходная таблица Account.tps
Дата Приход Расход
Date Arrival Expense
15.01.2013 10000 3000
01.04.2013 7000 2000
27.05.2013 2000 3000
21.07.2013 12000 7000
Таблица условия Period.tps
Дата Начальная Дата Конечная
DateBegin DateEnd
01.04.2013 30.06.2013
Таблица расчёта Balance.tps
Дата начала Дата окончания Входящий остаток Исходящий остаток
DateBegin DateEnd OpeningBalance ClosingBalance
01.04.2013 30.06.2013 7000 4000
Отчёт
Период Входящий остаток Исходящий остаток
01.04.2013 - 30.06.2013 7000 4000
Очень необходимы Source, Wizard или Templates эффективно и быстро (без замедления работы остальных пользователей) реализующие выборку и расчёт по условию из исходных таблиц баз ISAM и SQL большого объёма (более 1Gb) без вызова Window Browse Box Behavior -> Totalling и Forms при расчёте.
Результат должен заноситься в локальные переменные и после просмотра в Forms в таблицу (строку записи) соответствующие структуре таблице расчёта или непосредственно в переменные отчета Report.
Прошу участников форума поделиться решениями или подсказать о наличии таких Source, Wizard, Templates для ISAM и SQL и ответить, в каких типах баз (ISAM или SQL) данная задача решается наиболее быстро и эффективно при больших объёмах исходных баз.
С Уважением, Developer, cfwdeveloper@gmail.com
Clarion 8.0.9661 Windows 7 SP1 Русский
Требуется получить выборку и расчёт по условию из данных, содержащихся в одной таблице по условию записи другой таблицы:
Пример условия:
Исходная таблица Account.tps
Дата Приход Расход
Date Arrival Expense
15.01.2013 10000 3000
01.04.2013 7000 2000
27.05.2013 2000 3000
21.07.2013 12000 7000
Таблица условия Period.tps
Дата Начальная Дата Конечная
DateBegin DateEnd
01.04.2013 30.06.2013
Таблица расчёта Balance.tps
Дата начала Дата окончания Входящий остаток Исходящий остаток
DateBegin DateEnd OpeningBalance ClosingBalance
01.04.2013 30.06.2013 7000 4000
Отчёт
Период Входящий остаток Исходящий остаток
01.04.2013 - 30.06.2013 7000 4000
Очень необходимы Source, Wizard или Templates эффективно и быстро (без замедления работы остальных пользователей) реализующие выборку и расчёт по условию из исходных таблиц баз ISAM и SQL большого объёма (более 1Gb) без вызова Window Browse Box Behavior -> Totalling и Forms при расчёте.
Результат должен заноситься в локальные переменные и после просмотра в Forms в таблицу (строку записи) соответствующие структуре таблице расчёта или непосредственно в переменные отчета Report.
Прошу участников форума поделиться решениями или подсказать о наличии таких Source, Wizard, Templates для ISAM и SQL и ответить, в каких типах баз (ISAM или SQL) данная задача решается наиболее быстро и эффективно при больших объёмах исходных баз.
С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Выборка и расчёт из одной таблицы по условию записи друг
Пишем конкурента 1С
.
Скажу про себя. Такого рода задача у меня в разделе "Аналитика". Делаю запрос к базе (работаю уже довольно давно только с SQL), принимаю его в очередь, отображаю в стандартном листе. Если пользователю нужна печать (что не очевидно, часто хватает посмотреть на экране), выгружаю в WinWord. Можно, наверно, кинуть в стандартный Report.

Скажу про себя. Такого рода задача у меня в разделе "Аналитика". Делаю запрос к базе (работаю уже довольно давно только с SQL), принимаю его в очередь, отображаю в стандартном листе. Если пользователю нужна печать (что не очевидно, часто хватает посмотреть на экране), выгружаю в WinWord. Можно, наверно, кинуть в стандартный Report.
We are hard at work… for you. 

Re: Выборка и расчёт из одной таблицы по условию записи друг
Kreator, попал точно в цель! Спасибо за отклик!
Высказанная идея мне в общих чертах понятна, однако пока не хватает знаний и практического опыта программирования в Clarion.
Поэтому и прошу участников форума помочь с Source, Wizard или Templates на данную тему.
Для меня сейчас, пока нет опыта, подойдут любые решение связанные с выборкой и расчётом по условию в базах ISAM и SQL.
Пока использую драйвер баз TPS, но для больших размеров баз, вынужден буду использовать драйвер SQL.
Всё методы, которые лучше LOOP UNTIL EOF готов рассмотреть. Но желательны конкретные примеры или ссылки на них.
С Уважением, Developer, cfwdeveloper@gmail.com
Высказанная идея мне в общих чертах понятна, однако пока не хватает знаний и практического опыта программирования в Clarion.
Поэтому и прошу участников форума помочь с Source, Wizard или Templates на данную тему.
Для меня сейчас, пока нет опыта, подойдут любые решение связанные с выборкой и расчётом по условию в базах ISAM и SQL.
Пока использую драйвер баз TPS, но для больших размеров баз, вынужден буду использовать драйвер SQL.
Всё методы, которые лучше LOOP UNTIL EOF готов рассмотреть. Но желательны конкретные примеры или ссылки на них.
С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
-
- Старожил
- Сообщения: 280
- Зарегистрирован: 11 Февраль 2009, 8:41
- Откуда: г. Анапа
- Поблагодарили: 3 раза
Re: Выборка и расчёт из одной таблицы по условию записи друг
Вряд ли какой-нибудь Визард сделает лучше, чем руками.
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Выборка и расчёт из одной таблицы по условию записи друг
Если есть TPS и не хочется писать пока руками, можно воспользоваться темплэйтом PROCESS. Там настраиваешь VIEW, её ORDER, FILTER и обрабатываешь каждую запись (ну, допустим, сваливаешь итоги в переменные REAL, а движуху по счетам в QUEUE). К сожалению, никто не придумал ничего другого как идти в цикле по каждой записи для TPS. Да и в SQL тоже почти так - на VIEW накладывается prop:SQL и VIEW обрабатывается в цикле.
We are hard at work… for you. 

Re: Выборка и расчёт из одной таблицы по условию записи друг
Kreator, большое спасибо за ответ! Пока разбираюсь.....
Подскажи пожалуйста, как после выполнения шаблона Process передать значение переменной (переменных) которое было вычислено в Expression в другую процедуру, в частности в процедуру Update. Поле Return Value не доступно в Properties.
Или если сформулировать вопрос по простому: Посчитал к примеру Process сумму за период, как эту сумму передать прямо (с отображением этого значения как будто оно было введено вручную) в поле ввода процедуры Update?
Вариант выполнения Process для каждого поля в самой процедуре Update подходит, но лучше пакетная обработка по всем полям выборки.
Если есть возможность, пожалуйста, ответь поподробнее. Заранее благодарен!
С Уважением, Developer, cfwdeveloper@gmail.com
Подскажи пожалуйста, как после выполнения шаблона Process передать значение переменной (переменных) которое было вычислено в Expression в другую процедуру, в частности в процедуру Update. Поле Return Value не доступно в Properties.
Или если сформулировать вопрос по простому: Посчитал к примеру Process сумму за период, как эту сумму передать прямо (с отображением этого значения как будто оно было введено вручную) в поле ввода процедуры Update?
Вариант выполнения Process для каждого поля в самой процедуре Update подходит, но лучше пакетная обработка по всем полям выборки.
Если есть возможность, пожалуйста, ответь поподробнее. Заранее благодарен!
С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Выборка и расчёт из одной таблицы по условию записи друг
Да всё просто. Описываешь в процедуре процесса Prototype - (*REAL, *REAL, *REAL), в Actions пишешь - (*REAL Summa1, *REAL Summa2, *REAL Summa3). В Embeds процесса TakeRecord после Parent Call пишешь -
Не забываешь обнулить переменные либо до входа в процесс, либо при входе.
Вызов из формы тогда один раз - Process1(LOC:Summa1, LOC:Summa2, LOC:Summa3).
Код: Выделить всё
Summa1 += FIL:Summa1
Summa2 += FIL:Summa2
Summa3 += FIL:Summa3
Не забываешь обнулить переменные либо до входа в процесс, либо при входе.
Вызов из формы тогда один раз - Process1(LOC:Summa1, LOC:Summa2, LOC:Summa3).
We are hard at work… for you. 

Re: Выборка и расчёт из одной таблицы по условию записи друг
Kreator, большое спасибо за ответ! Process работает!
Однако, есть вопросы:
1)Возможно ли выполнять обработку по нескольким полям таблицы по условию, не используя Embeds в шаблоне Process
а использовать возможности самого шаблона Process?
2)Ускорит ли выборку применение In-Memory Database Drive (IMDD)?
И как его подключить только к этому процессу на период выполнения?
3)Есть ли описание (на русском или английском языках) поставляемых вместе с дистрибутивом Clarion-a стандартных шаблонов
и примеры работы с ними?
Заранее благодарен!
С Уважением, Developer, cfwdeveloper@gmail.com
Однако, есть вопросы:
1)Возможно ли выполнять обработку по нескольким полям таблицы по условию, не используя Embeds в шаблоне Process
а использовать возможности самого шаблона Process?
2)Ускорит ли выборку применение In-Memory Database Drive (IMDD)?
И как его подключить только к этому процессу на период выполнения?
3)Есть ли описание (на русском или английском языках) поставляемых вместе с дистрибутивом Clarion-a стандартных шаблонов
и примеры работы с ними?
Заранее благодарен!
С Уважением, Developer, cfwdeveloper@gmail.com
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Выборка и расчёт из одной таблицы по условию записи друг
1) Process может сделать три акции - Put, Delete и No Action. И всё. Поэтому используем его как я посоветовал.
2) IMDD служит для возможности рвботать с очередями как с таблицами (файлами), т.е. пользоваться стандартными броузам, редактированием по месту и т.д. В нашем случае он ни к чему.
3) В принципе всё есть и даже на русском языке. Но тут дело не в шаблонах, а скорее в классах. Потому что шаблон - это то что тебе позволено в IDE. Сгенерил, например броуз и всё. Что не устраивает? Настраиваемые параметры - в Actions. А вот свойства и методы броуз класса это да. Но и описание классов и примеры есть на русском языке, смотри на фтп.
2) IMDD служит для возможности рвботать с очередями как с таблицами (файлами), т.е. пользоваться стандартными броузам, редактированием по месту и т.д. В нашем случае он ни к чему.
3) В принципе всё есть и даже на русском языке. Но тут дело не в шаблонах, а скорее в классах. Потому что шаблон - это то что тебе позволено в IDE. Сгенерил, например броуз и всё. Что не устраивает? Настраиваемые параметры - в Actions. А вот свойства и методы броуз класса это да. Но и описание классов и примеры есть на русском языке, смотри на фтп.
We are hard at work… for you. 
