Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически)
Текущее время: 22.11.2024 09:40

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 16.02.2016 13:03 
Не в сети

Зарегистрирован: 21.01.2016 13:42
Сообщения: 8
1. Итак встал вопрос получения развернутого баланса по клиенту -
таблица вида "дата операции" "содержание операции" "сумма операции" "статус" "Сумма нарастающим итогом" и .т.д.(еще пяток полей)
табличка строится на основании нескольких таблиц, данные из которых выбираются по условию "код клиента". Данный вопрос отлично решается параметризирированным select-ом (where KlientID="параметр код клиента") - можно создать табличную функцию которая все посчитает по указанному коду либо использовать напрямую параметризированный запрос. НО тут встает вопрос - программа совершенно не умеет это делать.
Необходимо чтобы была возможность строить в подчиненных таблицах напрямую запросы, например: "select список полей from .... where KlientID=<ID>" или select список полей from "ТабличнаяФунция(<ID>)". Существующие методы позволяют привязать только полную таблицу или представление (строить балансы по 50к клиентов и прицеплять подчиненное представление с полумилионом записей ну как то совсем не...да и строится оно очень долго)
2. Добавить в программу человеческие типы данных Date, и Numeric - мне совершенно не нравится отслеживать по программе все операции с датами с целью отследить дабы туда не влезло время и во всех представлениях конвертить датувремя в дату. Относительно Numeric - во первых это потеря точности данных во вторых при хранении в риал мне нафик не нужен в расчете НДС знак после 6 а в ценах так и два знака... а при использовании реал я вынужден приводить их нужному типу при суммировании и сравнении дабы у меня не вылазила 1 миллионная копейка в долге клиенту и т.д.

Заранее спасибо за обоснованный и развернутый ответ


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16.02.2016 19:08 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
1. Смотрите в демо БД "Учет клиентов", там есть представление "Баланс клиентов" (qdfClientBalance).
Поля-подзапросы select в скобках позволяют запрашивать данные из других таблиц, связь по ClientID.
Нарастающий итог тоже реализуется через подзапросы select в скобках и сравнению по ID.


Вложения:
Pic1.JPG
Pic1.JPG [ 176.85 КБ | Просмотров: 45691 ]

_________________
2B OR NOT 2B = TRUE
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16.02.2016 19:40 
Не в сети

Зарегистрирован: 21.01.2016 13:42
Сообщения: 8
Это не то, мне надо не одно значение посчитанное по ключу, а выборка с нным количеством записей, например:
"Код клиента" "Дата" "Тип операции" "Сумма Операции" "Сумма нарастающим итогом"
1 01.01.2016 приход денег 100,00 100
1 01.01.2016 расход денег -50.00 50
1 02.01.2016 отгрузка 1000.00 -950,00
1 03.01.2016 оплата 950.00 0
...... и т.д.
и это должна быть подчиненная таблица построенная по принципу в данном примере "Select список полей from qdfBalans Where KlientID=1" или "Select список полей from ТабличнаяФункция(1)"
я могу прицепить подчиненную таблицу qdfBalans НО я не хочу что бы она считала балансы по всем клиентам и затем я их связывал по ключу (посчитать 20-30 строк либо пересчет полумилиона строк), мне надо передать в подчиненную таблицу/фунцию значение ключа и получить данные ТОЛЬКО про ключу а не строить связь мастер-детаил. Это в разы ускорит работу программы.

и напоследок, хотелось бы переделать в программе построение фильтров не через команду FORMAT(поледатывремя, 'ГГ-ММ-ДД')='ГГ-ММ-ДД' (это не корректно, так как формат возвращает строку и идет строчное сравнение и FORMAT является locale зависимой функцией) а через CONVERT(Date,поледатывремя,112)='ггггммдд', либо прямой вызов проверки даты как 'ггггммдд' так как этот вызов форматонезависим и сравнивает даты и работает в разы быстрее на 500к записей формат отрабатывет около 2000мс а конверт 14мс

Еще раз спасибо за уделенное внимание и ответы


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16.02.2016 20:24 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
На данный момент, как вариант, вы можете создать отдельную хранимую таблицу, которую очищать и тут же заполнять по триггеру "При перемещении по записям" в главной.
Функция FORMAT реализована на уровне СУБД в UDF-функциях в MS SQL Server. Вы можете дописать/переписать ее в т.ч. с использованием CONVERT. Но, конечно, это всегда останется UDF-функцией с ее скоростью работы.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17.02.2016 17:24 
Не в сети

Зарегистрирован: 21.01.2016 13:42
Сообщения: 8
Ivan писал(а):
На данный момент, как вариант, вы можете создать отдельную хранимую таблицу, которую очищать и тут же заполнять по триггеру "При перемещении по записям" в главной.
Функция FORMAT реализована на уровне СУБД в UDF-функциях в MS SQL Server. Вы можете дописать/переписать ее в т.ч. с использованием CONVERT. Но, конечно, это всегда останется UDF-функцией с ее скоростью работы.

Спасибо за ответ,
НО купить программу и затем ПЕРЕПИСЫВАТЬ ms sql server под программу...это как то даже...
Прошу Вас добавить в программу в триггеры по таблицам 2 действия
1. "обновить данные во всех подчиненных таблицах"
2. "обновить данные в текущей/активной подчиненной таблице"
Это событие выполнит выполнит Close,Open либо всех таблиц (1) либо активной подчиненной таблицы(2). Разнести необходимо именно в два пункта, так как подчиненных таблиц может быть несколько и перечитывать все мне не надо
3. Вариант с получением данных во временную таблицу на первый взгляд неплох, но к сожалению при любом аварийном закрытии программы там останутся хвосты... да и просто необходимо как то чистить хвосты после закрытия таблицы (соответствующего триггера я как то не увидел - есть триггер "при открытии таблицы" а триггера "при закрытии таблицы" нет) да и завязываться на connectID не хотелось бы...


Тема поднималась пользователем Wados 17.02.2016 17:24.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB