Страница 1 из 1
Выборка и расчёт из одной таблицы по условию записи другой
Добавлено: 16 Февраль 2013, 18:10
Developer
Привет всем!
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
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 25 Февраль 2013, 10:04
kreator
Пишем конкурента 1С

.
Скажу про себя. Такого рода задача у меня в разделе "Аналитика". Делаю запрос к базе (работаю уже довольно давно только с SQL), принимаю его в очередь, отображаю в стандартном листе. Если пользователю нужна печать (что не очевидно, часто хватает посмотреть на экране), выгружаю в WinWord. Можно, наверно, кинуть в стандартный Report.
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 25 Февраль 2013, 22:05
Developer
Kreator, попал точно в цель! Спасибо за отклик!
Высказанная идея мне в общих чертах понятна, однако пока не хватает знаний и практического опыта программирования в Clarion.
Поэтому и прошу участников форума помочь с Source, Wizard или Templates на данную тему.
Для меня сейчас, пока нет опыта, подойдут любые решение связанные с выборкой и расчётом по условию в базах ISAM и SQL.
Пока использую драйвер баз TPS, но для больших размеров баз, вынужден буду использовать драйвер SQL.
Всё методы, которые лучше LOOP UNTIL EOF готов рассмотреть. Но желательны конкретные примеры или ссылки на них.
С Уважением, Developer,
cfwdeveloper@gmail.com
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 25 Февраль 2013, 22:52
gromov
Вряд ли какой-нибудь Визард сделает лучше, чем руками.
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 26 Февраль 2013, 10:58
kreator
Если есть TPS и не хочется писать пока руками, можно воспользоваться темплэйтом PROCESS. Там настраиваешь VIEW, её ORDER, FILTER и обрабатываешь каждую запись (ну, допустим, сваливаешь итоги в переменные REAL, а движуху по счетам в QUEUE). К сожалению, никто не придумал ничего другого как идти в цикле по каждой записи для TPS. Да и в SQL тоже почти так - на VIEW накладывается prop:SQL и VIEW обрабатывается в цикле.
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 03 Март 2013, 20:58
Developer
Kreator, большое спасибо за ответ! Пока разбираюсь.....
Подскажи пожалуйста, как после выполнения шаблона Process передать значение переменной (переменных) которое было вычислено в Expression в другую процедуру, в частности в процедуру Update. Поле Return Value не доступно в Properties.
Или если сформулировать вопрос по простому: Посчитал к примеру Process сумму за период, как эту сумму передать прямо (с отображением этого значения как будто оно было введено вручную) в поле ввода процедуры Update?
Вариант выполнения Process для каждого поля в самой процедуре Update подходит, но лучше пакетная обработка по всем полям выборки.
Если есть возможность, пожалуйста, ответь поподробнее. Заранее благодарен!
С Уважением, Developer,
cfwdeveloper@gmail.com
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 04 Март 2013, 16:57
kreator
Да всё просто. Описываешь в процедуре процесса Prototype - (*REAL, *REAL, *REAL), в Actions пишешь - (*REAL Summa1, *REAL Summa2, *REAL Summa3). В Embeds процесса TakeRecord после Parent Call пишешь -
Код: Выделить всё
Summa1 += FIL:Summa1
Summa2 += FIL:Summa2
Summa3 += FIL:Summa3
Не забываешь обнулить переменные либо до входа в процесс, либо при входе.
Вызов из формы тогда один раз - Process1(LOC:Summa1, LOC:Summa2, LOC:Summa3).
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 05 Март 2013, 17:19
Developer
Kreator, большое спасибо за ответ! Process работает!
Однако, есть вопросы:
1)Возможно ли выполнять обработку по нескольким полям таблицы по условию, не используя Embeds в шаблоне Process
а использовать возможности самого шаблона Process?
2)Ускорит ли выборку применение In-Memory Database Drive (IMDD)?
И как его подключить только к этому процессу на период выполнения?
3)Есть ли описание (на русском или английском языках) поставляемых вместе с дистрибутивом Clarion-a стандартных шаблонов
и примеры работы с ними?
Заранее благодарен!
С Уважением, Developer,
cfwdeveloper@gmail.com
Re: Выборка и расчёт из одной таблицы по условию записи друг
Добавлено: 05 Март 2013, 17:50
kreator
1) Process может сделать три акции - Put, Delete и No Action. И всё. Поэтому используем его как я посоветовал.
2) IMDD служит для возможности рвботать с очередями как с таблицами (файлами), т.е. пользоваться стандартными броузам, редактированием по месту и т.д. В нашем случае он ни к чему.
3) В принципе всё есть и даже на русском языке. Но тут дело не в шаблонах, а скорее в классах. Потому что шаблон - это то что тебе позволено в IDE. Сгенерил, например броуз и всё. Что не устраивает? Настраиваемые параметры - в Actions. А вот свойства и методы броуз класса это да. Но и описание классов и примеры есть на русском языке, смотри на фтп.