powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Система с изменяющимися алгоритмами расчета.
159 сообщений из 159, показаны все 7 страниц
Система с изменяющимися алгоритмами расчета.
    #32192739
Повторю крайне интересный для меня вопрос из этой ветки, заданный \r
sparrow \r
"...Сопровождаю OLTP систему, в которой заказчик периодически основательно меняет алгоритмы расчета некоторых величин, причем алгоритмы сложны и используют данные из ~ полусотни таблиц. Для перерасчетов необходимо использовать методики, действовавшие в соответствующие периоды. Еще алгоритмы зависят от типа и состояния сущностей, для которых производится расчет. Вообще то это типичная для Росси, с её динамично изменяющимися законами и бизнесом, ситуация. То есть проблема должна быть у всех. " далее автор приводит свои варианты и вопрошает "Может кто-нибудь решил сходную проблему и прошел путь дальше или по-другому. Какие мнения? Расскажите."
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32193176
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем последнем проекте "Расчет заработной платы", который еще кстати продолжает писаться, используется примерно такая же модель. Если вкратце, то БД логически состоит из 4 частей - входящие данные, описание расчетных обьектов, кэши состояния расчетов текущего месяца и архивные расчетные данные. Часть, описывающая расчетные обьекты, хранит информацию по расчетным обьектам системы, которые могут быть входящими данными, промежуточными расчетами, начислениями, удержаниями и налогами. Каждый обьект может иметь один или множество алгоритмов. Каждый алгоритм за определенный период времени ссылается на хранимую процедуру расчета, причем в понятие периода времени входит 2 даты - дата действия расчета алгоритма и дата его ввода в действие, т.е. фактически поддерживается ввод реализации алгоритмов задним числом. Так же на период действия реализации алгоритма расчетного обьекта описываются его отношения к другим расчетным обьектам, что позволяет построить иеархию расчетных обьектов, определить их правильный порядок расчета и регулировать состояние кэшей (это отдельная система, позволяющая упростить доступ к сложным структурам входящих данных, ускорить расчеты, проводить расчет по требованию и облегчить получение информации для отчетов). Теперь об расчетных ХП, на которые ссылаются алгоритмы - каждая ХП отвечает за расчет одного или нескольких расчетных обьектов, все они имеют некий одинаковый набор входных параметров и обязаны считать по реализуемому алгоритму всех сотрудников, указанных в расчетном буфере (содержит в себе на момент расчета список всех затребованных к расчету сотрудников), у которых этот алгоритм еще не посчитан и заносить результаты расчета в расчетный кэш. Ну и есть центральная ХП, которые вызывает системные ХП, отвечающие за компиляцию изменившихся состояний и взаимоотношений обьектов в специальные карты статусов расчетов, подготавливает расчетный буфер, организует цикл по периодам, подлежащим расчету (текущий месяц, плюс предыдущие периоды, которые необходимо пересчитать задним числом), вызывает ХП, отвечающие за актуальность информации кэша входящих данных, вызывает по подготовленным картам статусов в нужном порядке ХП алгоритмов расчетных обьектов, ну и много чего еще (проверка ошибочных входящих данных, ведение лога расчета, трассировка выполнения расчета и т.д.) Благодаря кэшам такой движок расчетов всегда точно знает, что надо считать, поэтому если повторно запустить расчет, ничего не поменяв в БД, он просто выйдет. Если после проведения расчета на базе 1000 сотрудников поменять у одного сотрудника оклад, то при вызове расчета на всех сотрудников в расчетном буфере окажется только этот сотрудник и ему будет только пересчитанны начисления по окладу, все начисления которые зависят от нач. по окладу и подоходний налог.

Вот вкратце такая система, все к сожалению не опишешь, слишком много всего в ней, но все эти навороты по идее должны будут гарантировать ее легкое сопровождение (все таки целый модуль настройки системы), очень высокую скорость расчетов, облегченный доступ к информации для отчетов и легкость изменения расчетной части при новом изменении законодательства. Я конечно понимаю, что все предусмотреть нельзя, но в принципе система достаточно устойчива к нашим условиям динамики изменения законов.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32193555
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,
А я почему-то думал, что расчет зарплаты - одна из самых простых задачек. Оказывается, это не так, раз в этом деле такие идеи исполььзуются.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32193797
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже так почему то думал, пока не взялся за проект. Тихий кошмар - сплошные исключения из правил, действует принцип - что в законодательстве не оговорено, значит разрешено, несколько видов алгоритмов расчетов одного и того же начисления в зависимости от условий, для расчетов используются данные как текущего периода, так и с начала года, прошлого года или определенного периода, причем тоже в зависимости от условий. Задним числом могут изменяться не только входящие данные, но и даже алгоритмы расчетов. Плюс куча собственных видов начислений индивидуально для каждого клиента (в моем проекте есть даже спец. движок, позволяющий юзерам добавлять в расчет собственные начисления по библиотеке специальных системных алгоритмов), ну и в каждой отрасли еще свои заморы расчета зп. Если бы я писал сам расчет зп на клиенте, то выглядило бы это как сплошное дикое ветвление. Проект пишется как тиражный, изначально ориентированный на крупные промышленные предприятия и различные отрасли, поэтому так и приходится его наворачивать, в первую очередь учитывая 2 важных характеристики - скорость и гибкость. Естественно все это пишется не для какой-нибудь конторки до 50 сотрудников, где расчет зп сводится к элементарному расчету зп Оклад * Дней.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32193928
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,
Заметно, что Вы хорошо разобрались в вопросе. У меня к Вам как к профессионалу вопрос - какие теоретические знания Вам помогали решать такую непростую задачу? На какие понятия Вы реально опирались в своей работе? Или в таких условиях надо быть просто "свободным художником" и творить, "не на что не глядя"?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194200
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Присоединяюсь к wara. Плюс еще пара вопросов, хотя бы вкратце, если не секрет, конечно. На чем пишется система, как разбивается обработка/хранение данных между SQL сервером/файлами настройки/промежуточным слоем/клиентом?

Мы пытались разрабатывать зарплату для одного конкретного предприятия, там такие проблемы, что об обобщении на произвольное предприятие мне даже подумать страшно. К счастью проект сыграл в ящик до внедрения по независящим от нас причинам. Использовалась ASA6, PB6, C. Зарплата считалась отдельным сишным модулем. Но алгоритмы были статическими, никаких интерпретаторов. Поэтому интересно, где и как лучше держать данные для интерпретаторов, например формулы расчета. В частности имеет ли смысл разбивать их и складывать в каком-то реляционном виде, или же все гамузом в BLOB-ы, а уже потом разбираться.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194600
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых у меня перед глазами была постановка старой задачи Расчет ЗП, написанной еще аж на Досовом доисторическом MS Си. Постановка для этой задачи была разработанна очень профессионально, она до сих пор эксплуатируется в различных отраслях - больницах, МЧС, больших заводах, стояла и т.д. Сам проект конечно в силу ограничения используемого инструментария не мог все учитывать, но сама его постановка во многом была удачной. Проект работает более 10 лет, еще остались в конторе люди, пусть и не имеющие прямого отношения к его разработке и постановке, но тем не менее постоянно с ним работающие и сопровождающие его. Такие плюсы помогли мне более менее четко определиться с постановкой задачи, выявить что в старом проекте было удачно, где не очень и самое главное - что не хватает.

Во вторых в технологическом плане построения сложных расчетов у меня имеется достаточный опыт построения систем с сложными или динамически изменяющимися алгоритмами обработки информации (порядка 12 лет) - я писал проекты под зернозаготавливающую и энергетическую отрасли. Начиналось все конечно же с FoxPro на файл-серверных технологиях. В нынешнем проекте используется 2-звенная архитектура клиент-сервер с акцентом всей тяжести логики на сервере - все делает сервер, клиент только обязан организовывать наглядный и удобный интерфейс, с частичной реализацией проверки бизнес-правил достоверности ввода информации там, где это решается примитивным путем. Несмотря на проверку истинности введенной информации на клиенте, сервер всегда реализует полную логику проверки достоверности информации (реализованно в виде ХП - клиент полностью изменяет и удаляет информацию только через ХП посредством кэшированных изменений). Такая модель двойной проверки логики на клиенте и сервере на первой взгляд может показаться избыточной, но на самом деле это позволяет контролировать клиентскую часть, которая пишется не только мной и гарантировать 2 вещи - примитивные ошибки пользователя отсекаются клиентской частью, что не приводит к лишнему обращению к серверу, а ошибки программистов клиентской части отлавливаются серверной частью, что гарантирует истинную целостность БД.

Насчет самого движка - зарплата - продукт, действительно имеющий уникальные, сложные и динамически изменяющиеся алгоритмы расчетов. Наработки у меня уже были, для личных нужд я делал Макрогенератор скриптов SQL, позволяющий писать серии SQL скриптов, в которых допускалось использование макрокоманд управления их сборкой (поддержка команд обьявления и управления переменными, ветвлений, циклов, вставок скриптов, обработка ошибок и т.д.). Однако этот продукт все таки был создан для его работы с клиентской части (написан в виде серии компонент на Delphi, которые реализовали не только само ядро, но и позволяли достраивать язык путем дописания своих компонент команд). Можно конечно было бы встроить макрогенератор в серверную часть, но я решил его в проекте не использовать, так как это привело бы к очевидным неудобствам (хранение скриптов в BLOB-ах со всеми вытекающими отсюда последствиями - необходимость написание собственного инструментария для работы с ними, сложность отладки и т.д.).

Продолжу в следующем сообщении, чтобы легче было читать ... :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194606
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для движка расчетов я использовал 3 самые элементарные вещи любого порядочного SQL сервера - хранилище данных, хранимые процедуры и динамический SQL. Можно сказать, была разработана обьектная модель расчетов, где любое начисление, удержание или налог приравнивается к обьекту, имеющего один или несколько алгоритмов расчета, способных изменяться во времени, а сами скрипты алгоритмов расчетов (решения) хранятся в виде ХП. Далее в БД зарплаты была описана модель хранения метаинформации этих обьектов и соответствующие ХП, можно сказать внутри БД проекта существует внутрення модель БД движка расчетов. Имея соответствующую полную информацию об иеархии обьектов и ссылки на используемые ХП не составило труда написать ХП, организующую курсор по иеархии и вызывающую через динамический SQL необходимые в ходе расчетов ХП, согласуясь с информацией расчетных обьектов. Фактически получилось, что весь расчет - от и до полностью идет на сервере, клиент вызывает ХП расчета, просто ждет и ходом расчетов он никак не управляет.

Естественно при таком подходе сами принципа расчета не совпадали со старым проектом, в котором применялась горизонтальный расчет, по принципу:
Получается информация по договору
Считаются в зависимости от условий начисления, налоги и удержания
Берется следующий договор ...


В моей схеме сам расчет выглядит так (условно назовем его вертикальным расчетом):
Получается информация по метаструктуре расчетных обьектов (в том числе и по ХП, которые действительны для расчетных алгоритмов на текущий расчетный месяц)
Считаются методом вызова соответствующих ХП по уровню возрастания в иеархии обьектов начисления, налоги и удержания для всех договоров, к которым они применимы.


Сами ХП зависят от сложности расчетных обьектов - например ХП расчета ночных сводится до уровня insert ... select ... , а ХП расчета налога с физ. лица уже посложнее и при работе использует вызовы промежуточных ХП, отвечающих за построение кэшей нарастающих с начала года, налоговых вычетов и материальных скидок. Кстати почти все промежуточные или входящие данные ложатся в специальные таблицы (кэши), хранящие денормализованные текущие входящие или промежуточные расчетные данные. Это делается по 4 причинам:
1. Заполнение и очистка таких кэшей контролируется отдельными ХП, что немаловажно, так как некоторыми промежуточными расчетными данными могут пользоваться более одного расчетного обьекта.
2. Кэши автоматически заполняются и дополняются информацией при их затребовании расчетом и автоматически обнуляются при изменении входящей информации по соотвествующим сотрудникам. Иеархия обьектов позволяет проводить обнуление всех дочерних расчетных обьектов. Все это здорово влияет на скорость расчетов - просчитав данные кэши избавляют сервер от необходимости расчитывать их снова, пока их входящая информация не изменилась.
3. Храня "разжеванную" информацию кэши позволяют алгоритмам расчетных обьектов более легко описывать скрипты расчета, а клиентской и отчетной части элементарным select-ом получать любую интересующую их информацию по входящим и расчетным данным текущего расчетного месяца. Конечно клиент или отчетник перед обращению к кэшу должен вызвать процедуру расчета, которая возможно достроит кэши и досчитает все не расчитанные расчетные обьекты на затребованных сотрудников, но это элементарно решается путем написания для клиента ХП, в которой сначала вызывается проц. расчета, а потом возвращаются нужные данные. Для случаев, когда отчетнику необходимо получить доступ по многим таблицам кэшей, делается одна ХП, которая вызывает расчет, возвращает первый набор данных и блокирует в share-режиме до конца соединения все таблицы кэшей, которые будут использоваться в отчете, позволяя отчетнику далее простыми select-ами получать нужную информацию и гарантировать, что пока отчет не будет достроен, данные кэшей не смогут измениться.
4. Помимо расчетных обьектов в метаинформации системы расчетов еще описываются входящие и промежуточные объекты БД, которые не могут иметь собственных алгоритмов и скриптов расчетов, но на которые могут ссылаться как на родительские расчетные обьекты, что не маловажно для организации правильной очистки кэшей в случае изменения их входящей информации в БД. Что еще более важно, введя в систему расчетов обозначение не только расчетных, но и входящих и промежуточных обьектов, я смог организовать полную расшифровку проводимых расчетов. Такие обьекты имеют собственные ссылки на ХП возврата их состояния в текущем расчетном месяце, что позволяет мне используя иеархию обьектов показать не только суммы начислений, удержаний и налогов, но и значения всех входящих и промежуточных данных, которые были использованны при расчете.

Продолжу в следующем сообщении, чтобы легче было читать ... :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194608
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ASCRUS
Пять баллов за правильный подход к проектированию такой сложной проблемы, как ЗП. На мой взгляд, в российских условиях это самая трудная задача.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194610
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очистка кэшей ложится опять же на плечи специализированных ХП, вызывается она естественно из тригеров таблиц, действую примерно по след. схеме:
1.Изменение входящей информации
2. Вызов из тригера соответсвующей ХП
3. Очистка необходимых входящих кэшей
4. Вызов специальной ХП, отвечающей за очистку обьектов в расчетных кэшах, зависимых от указанного обьекта

Так как расчет зп состоит из вызова многих скриптов и работы с множеством таблиц, то он был сделан монопольным - в один момент времени может на сервере выполнятся только один расчет, что абсолютно верно, так как конкуренция в расчетах немыслима, а с учетом использования кэшей, любой вызываемый расчет на момент времени, когда уже запущен другой расчет должен дождаться его завершения и возможно все затребованные к расчету сотрудники будут уже рассчитаны и считать ничего не придется. Все это было реализованно посредством блокировок, где все кэша блокируются в share-режиме, что гарантирует их целостность на момент расчета и блокирует изменение входящей информации, влияющей на расчет, но не ограничивает просмотр данных кэшей. Специальная таблица (лог выполнения и ошибок расчетов) блокируется в exclusive режиме до конца расчета, что гарантирует, что любой другой запущенный позже расчет будет ждать конца текущего, пытаясь ее заблокировать.

Серверная часть изначально писалась на MSSQL 2000, но где то на середине пути (уже когда была готова расчетная часть) по многим причинам была переведена на Sybase ASA 8, о чем я честно говоря не только не жалею, но до сих пор очень и очень радуюсь, опять же по многим причинам.

Клиентская часть изначально начала писаться на Delphi 5, очень я честно говоря очень и очень жалею по многим причинам, но в принципе так как в ней используется множество собственных наработанных компонент, то более менее программировать клиента легко. Так же в клиента встроена вся часть по управлению движком расчетов зп и изменение и редактирование всей его метаинформации.

С учетом того, что сам расчет зп полностью автономен от клиента и написан на ХП, то написание скриптов расчетов ведется с обычного ISQL, в нем же проводится и запуск расчетов и их отладка.

Также был написан тестовый генератор данных, более менее правдаподобно заполнивший базу сгенерированными разнородными и сложными входящими данными о 1000 сотрудниках.

Первый (некешированный) расчет зп за месяц для 1000 сотрудников сейчас занимает на Athlon XP1500 порядка 8 секунд. Последующие вызовы расчетов по времени зависят только от степени изменения входящих данных и колеблются от 0 (все посчитано) до 3 сек (частичный пересчет недостающих данных).

Вот вроде и все о системе. Не смотря на то, что у меня при такой модели проектирования БД нашлось немало скептиков, утверждающих, что при таком сложности и ветвлении расчетов их можно реализовать только на клиенте или 3-звене, можно сказать я им доказал, что любой современный SQL сервер при правильном подходе и проектировании БД может полностью и самостоятельно проводить всю обработку информации. Думаю если все будет нормально и мне ничто не помешает дописать и запустить свой проект, наработок в копилку опыта построения сложных систем прибавиться и может быть мне удастся все таки отойти от бухгалтерии и заняться более интересными делами, например разработки собственной системы абстрактного моделирования данных, благо теорию по ходу написания зп прорабатываю и тестирую на конкретно пишущемся проекте ;)

P.S. Ну и тем кто дочитал все это до конца, приношу извинения за грамматические ошибки и запутанные обьяснения - писал долго, ночь на дворе и голова уже плохо варит :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32194658
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возьмите к себе в команду...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195076
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно ли я понял, что кэши содержат частично расчитанные данные, связанные с входн. и когда напр., кол-во рабочих дней у сотрудника меняется, вызывается триггер, который очищает в кэше только эту запись?
Использование триггеров было связано именно с этим?
Одно из основных ограничений при таком подходе, - как я понимаю - это необходимость унификации вх./вых. параметров пр-дур. До сих пор все алгоритмы легко ложились в принятые вами пр-ры? Или приходлось по ходу дела что-то переделывать?

А чем не понравилась D5?

Вообще же, хотя расчетом зарплаты никогда не занимался, подобная задача и подходы мне близки. Читать было интересно.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195323
andy_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому интересно - могу сказать как все это реализовано в системе Scala с точки зрения админа (не программиста) .. очень кратко.
Там есть так называемое понятие "Тип зарплаты", Каждое начисление-удержание - отдельный тип зарплаты , необходимые ТЗ включаются в модель рассчета. При появлении нового (изменении старого) начисления-удержания программируется (именно программируется..) новый ТЗ. ТЗ состоит из набора
ассемблерного вида комманд типа : <оператор> <ячейка > <значение>
или <оператор> <метка> или еще куча других форматов.
Например, загрузить значение "01" в ячейку 02 : L 01,02
Cоответственно при измененнии например ставки какого либо налога,
надо изменить его значение в команде ТЗ, или изменить его значение
в статической таблице (при условии что значение читается из таблички)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195380
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag
Угу, Вы все поняли правильно. На каждый входящий обьект в модели БД существует одна или серия обычных нормализованных таблиц, хранящих входящие данные, с которыми и ассоциируется этог обьект. Плюс на каждый входящий обьект существует собственные ХП очистки и заполнения соотвествующего кэша. В итоге при изменениях в модели данных БД вызываются тригера, которые заполняют соотвествующую темповую таблицу с перечислением изменившихся данных, далее вызывается ХП очистки соотвествующего кэша, в которой очищается завязанные на входящем обьекте кэши и вызывается универсальная ХП очистки расчетного кэша, в которую передается Имя обьекта (помимо ID все обьекты системы имеют уникальное имя - например Ставка, График, Табель, НалогВычет и т.д.) и список сотрудников, у которых состояние обьека было изменено . Сама процедура по иеархии обьектов вычисляет все зависимые от изменившегося расчетные обьекты и удаляет из из расчетного кэша. В итоге при следующем пересчете удаленные с кэшей данные будут автоматически пересчитаны.

При таком подходе унификации параметров процедур для обработки входящих и межрасчетных кэшей не требуется, так как вызываются они вручную с тригерров и ХП расчетных обьектов. Сами же ХП расчетных обьектов действительно идентичны по принимаемым параметрам, так как вызываются из динамического SQL в цикле курсора, причем имеют параметры общего плана - расчетный месяц, текущий расчитываемый месяц (на случай расчета задним числом), код обьекта и алгоритма, к которому принадлежит ХП и флаг отладки (для вывода трассировки командой Print). Все остальное делает сама ХП алгоритма расчетного обьекта, фактически являясь автономной от расчета. Единственное что ей требуется для запуска - это вышеперечисленные параметры и заполненные расчетные буфера, содержащие на момент расчета список затребованных к расчету сотрудников. В кач-ве примера привожу скрипт ХП расчета подоходнего налога (написано на WatcomSQL):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
create procedure sp_Calc_Object_20020101_20020101_ПодоходНалог (
  in @SaveDate date,
  in @CalcDate date,
  in @CalcDateLast date,
  in @CalcObject_id smallint,
  in @CalcAlgorithm_id int,
  in @IsCurrent tinyint,
  in @IsDebug tinyint
)
 -- Расчет подоходнего налога
 
 -- Дата оплаты: 20020101
 
 -- Расчетный месяц: 20020101
 
 -- Задействованные обьекты: НалогТаблица
 
 -- Задействованные маски: ПодоходНалог
 
begin
  declare @CalcMask_id smallint;
  declare @R_Scale_id smallint;
  declare @N_Scale_id smallint;
  declare @FirstDate date;

   -- Определяем код маски подоходнего налога
 
  set @CalcMask_id = fn_CalcMask_id('ПодоходНалог');

   -- Заполняем кэш начислений по маске подоходнего налога
 
  call sp_Calc_Build_ManInc (@SaveDate, @CalcDate, @CalcMask_id);

   -- Вычисляем сумму налоговых вычетов
 
  call sp_Calc_Build_ManDeduct (@SaveDate, @CalcDate, @CalcMask_id);

   -- Получаем код налоговой таблицы для резидентов
 
  set @R_Scale_id = fn_Scale_id('ПодоходНалогРезидент');

   -- Получаем код налоговой таблицы для нерезидентов
 
  set @N_Scale_id = fn_Scale_id('ПодоходНалогИностр');

   -- Получаем первый месяц года
 
  set @FirstDate = fn_FirstDateYear(@CalcDate);

   -- Вычисляем и сохраняем в кэш удержаний подоходний налог расчетного месяца
 
  set $SaveDate = @SaveDate;
  set $CalcDate = @CalcDate;

  insert into T_CalcValue_Dec (CalcDate, Man_id, CalcObject_id, IsCurrent, Value)
    select @CalcDate, v.Man_id, @CalcObject_id, @IsCurrent,
      convert(numeric( 15 ,  2 ), (n.Value - IsNull(s.LimitValue,  0 )) /  100  * s.PercentValue) +
                               IsNull(s.IncValue,  0 ) - IsNull(sum(mc.Value),  0 )
    from pv_Scale s  -- Значения налоговой таблицы
 
     inner join
        -- Вычисляем запись налоговой таблицы для каждого сотрудника в зависимости
 
        -- от его гражданства и лимита таблицы
 
      (select n.Man_id, s.Scale_id, max(IsNull(s.LimitValue,  0 )) as LimitValue
       from pv_Scale s,  -- Действующие налоговые таблицы
 
            pv_Man_Rezident r,  -- Резиденство граждан
 
            v_Cur_CalcValue_NalogBasa n  -- Налогооблагаемая база с начала года
 
       where r.Man_id = n.Man_id and
             r.Man_id in (
               select Man_id
               from T_Calc_Man  -- Расчетный буфер требуемых к расч. сотрудников
 
               where CalcDate = @CalcDate and
                     SPID = @@SPID) and
             n.CalcDate = @CalcDate and
             ((r.IsRezident =  1  and s.Scale_id = @R_Scale_id) or
              (r.IsRezident =  0  and s.Scale_id = @N_Scale_id)) and
             IsNull(s.LimitValue,  0 ) < n.Value
       group by n.Man_id, s.Scale_id) as v on v.Scale_id = s.Scale_id and
                                              IsNull(v.LimitValue,  0 ) = IsNull(s.LimitValue,  0 )
      -- Налогооблагаемая база с начала года
 
     inner join v_Cur_CalcValue_NalogBasa n on n.Man_id = v.Man_id and
                                               n.CalcDate = @CalcDate
      -- Удержанный налог с начала года
 
     left join T_CalcValue_Dec mc on mc.Man_id = n.Man_id and
                                     mc.CalcObject_id = @CalcObject_id and
                                     mc.CalcDate >= @FirstDate and
                                     mc.CalcDate < @CalcDate
    group by v.Man_id, n.Value, s.LimitValue, s.PercentValue, s.IncValue;
end


Как видно, в самой процедуре управления транзакциями нет, так как она запускается из центрального расчета, который их и организует и отслеживает. Так же нет и обработки ошибок (в MSSQL 2000 была), так как в ASA существует механизм Exception-ов, позволяющий в ходе выполнения транзакции на автопилоте осуществить откат транзакции и прерывание выполнения процедуры. В центральной ХП расчета стоит блок отлова ошибок - exception, позволяющей ей обрабатывать и логировать возникающие при расчете ошибки (в ASA это реализуется через атомарный блок).

При написании скриптов расчетов различных начислений, удержаний и налогов проблем не возникло, все отлично вписалось в существующую схему работы. Даже больше того - такая схема расчета и хранения данных текущего расчетного месяца в кэшах позволила мне довольно элементарно решить не самую легкую в зп часть - организацию межрасчетных выплат и аванса, которые могут выдаваться сотрудникам до окончательного расчета зп и несмотря на это могут ссылаться на данные расчетов. Например в середине месяца необходимо выдать всем сотрудникам начисленную премию, которая расчитывается как 50% от отработанного времени (то есть от реально посчитанной суммы начисления по окладу, а не самого оклада) и заодно удержать с нее подоходний налог. Далее при окончательном расчете все это тоже должно быть учтено, что премия уже выдана, что часть налога снята. Или же еще более забавный случай - сотруднику выдают аванс, потом межрасчетной выплатой премию, далее он сразу уходит в отпуск и неплохо бы досрочно посчитать окончательный расчет и выдать ему все оставшиеся деньги на руки. При окончательном расчете, когда сотрудник уже будет отдыхать на море все будет учтено и на руки ему пойдет сумма 0.00 . Со всеми этими наворотами движок прекрасно справился и режим межрасчетных выплат и аванса был сделан всего за 4 дня (серверная и клиентская часть).

Про Delphi 5 лучше ничего говорить не буду. Обычное RAD средство, глюков правда многовато. В принципе не намного лучше или хуже аналогичных сред. Пожалел я в другом плане - что под клиента не выбрал Power Builder, на котором клиентская часть писалась бы гораздо легче, безглюкавей и ее было бы в последствие легче сопровождать. Но к сожалению когда я стартовал этот проект (январь 2002 года), PB я только увидел (к стыду своему) и естественно не зная насколько он хорош и рисковать не мог. Поэтому и была взята Delphi 5, раз уж я на Delphi порядка 8 лет программировал, имел кучу компонент и наработок. Сейчас конечно, когда я уже достаточно изучил PB, поделал на нем мелкие проектики, наработал собственные решения, очень жалко, что я его никогда не видел раньше, так как мое личное мнение, что при правильном подходе проектирования программ PB является на текущий момент самой перспективной и удачной средой разработки клиентских приложений.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195400
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
так почему вся логика в ХП ?
скорость ?

ведь имея ее на мидл тиер, нет проблем что за база в низу т.е. что делаете если у заказчика оракл, а сайбэйз ему ненада ?

да и что будете делать если нада будет интегрировать с внутреней системой (workflow) предприятия ? типа через какие-нибудь веб сервисес (CORBA, SOAP ..) или еще интересней через файлы фокспра?

даже если мидл тиер вдруг оказался медленее, положим раз в 100 ... 800 секунд погоды ведь не делают.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195486
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так поэтому все и в ХП, что 3-звено для такой задачи абсолютно бесполезно. Я вот в своей жизни много раз слышал, какое это все таки замечательное 3-звено, как на нем все красиво и удобно и какие замечательные возможности оно открывает. Только вот ни разу не видел, чтобы приложения с 3-звеном действительно были так не требовательны к серверам и действительно позволяли играючи перевести работу с одного сервера БД на другой. Зато я достаточно насмотрелся на лишнюю дублирующую работу, запутанность со временем классов 3-звена и способы его работы методом курсорных переборов записей. Если Вы думаете, что на 3-звене сможете быстро и легко реализовать расчет зп, который будет иметь изменяющиеся со временем алгоритмы расчетов и все это будет быстро работать, то очень и очень сильно верите в эффективность 3-звена. Думаю мои 8 секунд расчета 1000 сотрудников выйдут Вам на 3 звене не меньше 3 часов машинного времени. Для сомневающихся достаточно запустить любую курсорную зп, ту же 1С и посмотреть, как быстро все считается.

Насчет вывода зарплаты в WEB это оригинально - наверное полезная фича для печати в интернете данных по зп сотрудников. В текущей постановке задачи я такого требования не видел.

Интеграция с другими системами очень даже элементарна - думаю ODBC и ADO никто не отменял и любая система может получать доступ к данным БД и вызывать сооствествующие ХП. То же относится и к обратной связи - ASA спокойно может подключать удаленные сервера и работать с их таблицами и ХП. Причем тут файлы "фокспра" я не очень Вас понял. Если Вы не о DBF, то желательно уточнить о чем речь.

Ну и последнее - в кач-ве сервера СУБД используется Sybase ASA 8, с 1 лицензией стоящий порядка 500 долларов и требующий в минимальной конфигурации Pentium-1 166 и 4 MB RAM. Ну очень хочется посмотреть на заказчиков, которые одному-двум бухгалтерам расчетчикам зп будут ставить зарплату на Оракле, чтобы наверное потом легче было сопровождать и администрировать :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195546
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
нуу ... давай так - конторы типа "Рога&Копыта" с 486ми нам не интересны, они другой софт юзают :) вы ж наверно тоже не картошкой торгуете ? берем совершенно сдандартное "предприятие", совершенно стандартная черная бехгалтерия, а еще лучше пирамида обыкновенная :) 2-х процесорные спарки типа докучи.
то чо мы выдаем гордо именуем зарплатой, воздух - товаром и ... считаем не для тысячи, и не для 10ти :)
где руководство никто не знает, данные на кипре (зачем - глупый вопрос). веб интерфейс тут оказывается весьма к стате.

а теперь допустим эту самую зарплату нам нужно еще и на карточки зачислять ?

Если Вы думаете, что на 3-звене сможете быстро и легко реализовать расчет зп, который будет иметь изменяющиеся со временем алгоритмы расчетов и все это будет быстро работать, то очень и очень сильно верите в эффективность 3-звена

ну ... чесно говоря расчетная часть на чистом С на отдельном сервере мне показалась будет побыстрей чем интерпритирумые процедуры бд.
ну кривизна мидл тиер ... ну эт тяжело коментировать, я ж не предлагаю брать нечто типа ораклового AS, да эт для зарплаты наверно лишнее :)

ту же 1С и посмотреть
думаю не стоит эт файл-серверное чудо инжернерной мысли смотреть, сравнение с ним вам на пользу не пойдет.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195577
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS

Да, впечатляет. Чуть попозже еще разок перечитаю. Единственная проблема, которой я бы опасался - сложность отладки СКЛ кодов (ХП). Из-за этого в основном мы и строили сишный модуль расчета зарплаты. Но наверное цепочку С<->ОДБС<->СКЛ-сервер отлажиывать даже сложнее.

Абсолютно согласен насчет ПБ - отличный продукт. Готов делиться опытом. В чстности имеется конвертор простой_язык_доступный_для_бухгалтеров->SQL, который используется для фильтрации данных для DW. Исходники - у чингиза на странице: http://users.i.com.ua/~agp1/software/mkSql.tar.gz. Кстати начиная с седьмой версии в ПБ была введена поддержка интернет приложений, я правда не использовал, ничего не могу сказать. Там вроде есть какая-то проблема с лицензиями.

А вообоще полноценный клиент в WWW бровзере идея красивая, но по-моему нереальная. Будет куча дополнительных проблем, например с сессиями. HTML убог в сравнении с "обычными" языками, т.е. очень скоро будете вынуждены перейти на жабу и апплеты или что-то аналогичное. Если вдруг когда-нибудь решишься, то посмотри http://terra-informatica.org, это в чстности попытка создания алтернативы апплетам.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195590
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS
Может я недопонял, но как поддерживается изменение алгоритмов расчета, т.е. собственно сабж. Основные идеи. Я сам в полной мере никогда не реализовывал такое, а проблема актуальная, так что очень интересно.

2 Gt_
Врядли на сях считать быстрее получится, там же все данные из БД тянутся. В кэш складывать тоже может получится недешево и очень проблемно. А потом ведь ХП не совсем интерпретируемые.
Вот если интерпретатор формул писать, то на сях может будет быстрее работать, а главное удобней.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195592
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ASCRUS
C большим интересом прочитал твои топики. Узнал много нового, особенно в части использования расчетных кэшей. И вообще о использованной архитектуре. Хочу задать вопрос о масштабировании системы. Расчет заработной платы 1000 сотрудниках за 8 секунд (в худшем случае), конечно, удовлетворит всех. Что будет если придется обсчитывать 100 000 объектов - время расчета возрастет линейно до 800 секунд, или может, займет 8000 сек. Такие тесты выполнял?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32195968
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c127
Изменение алгоритмов расчета поддерживается на довольно простом и элементарном уровне - в метаинформации системы расчетов на каждый алгоритм за определенный период времени указанна ХП, которая реализует для данного периода алгоритм расчета. То есть из примера ХП, что я привел, ее название sp_Calc_Object_20020101_20020101_ПодоходНалог можно расшифровать так:
Имя обьекта: ПодоходНалог
Дата ввода в действие: 2002/01/01
Дата начала периода действия: 2002/01/01


Соотвествующе со следующего года у нас изменился расчет подоходнего налога, т.е. не процент или налоговая таблица, что в справочниках можно поменять, а именно сам алгоритм. Пишем новую процедуру sp_Calc_Object_20030101_20030101_ПодоходНалог , что означает:
Имя обьекта: ПодоходНалог
Дата ввода в действие: 2003/01/01
Дата начала периода действия: 2003/01/01


Далее все просто - текущий расчетный месяц декабрь, все считается по первой ХП, перешли на январь - по второй ХП. Но ... например в январе происходит сторнирование декабря у сотрудника (что то изменили задним числом). Что получается - система для данного сотрудника сначала посчитает декабрь, причем налог будет считаться по 1 ХП, далее будет расчитан тек. месяц январь, где налог уже считается по 2 ХП и к нему прибавлена разница между декабрем что было и что стало в результате пересчета.

Более интересный пример - существует ХП, отвечающая за расчет отпуска и действующая с 2002/01/01 . Все по ней прекрасно считается до июня 2003 года, когда выходят изменения в трудовом кодексе, гласящие, что с 1 января 2003 года отпуск считается совсем по другому. Пишем новую ХП по расчету отпуска на нач. периода действия 2003/01/01 и датой ввода в действие с 2003/06/01. Что получилось - входящие данные БД не изменились, однако изменение задним числом алгоритма расчета отпуска приведет к тому, что все сотрудники, ушедшие в отпуск с января по июнь будут пересчитаны задним числом.

Насчет отладки SQL-кода - опасения напрасные. Каждая процедура расчета довольно таки автономна и вызвав соотетствующую процедуру заполнения расчетного буфера я спокойно могу их запускать отдельно, вне расчета и смотреть на результаты выполнения. Существует в Sybase ASA 8 и отладчик, который по удобству и возможностям ничем не уступает отладчикам современных языков программирования. Однако пользоваться им как то особо не приходится. Select в отладчике и останется Select-ом, с учетом того, что у меня дополнительно в БД куча вьюверов и кэшей, облегчающих доступ к сложной информации БД, то select-ы на самом деле неплохо читабельны. Еще в ASA есть довольно замечательный profiler, который позволяет мне фиксировать вызовы ХП, их общее время выполнения и процентное соотношение во времени, позволяя детализировать ХП прямо по ее листингам, по строчкам показывая, что и сколько времени выполнялось. Так что узкие места в расчете ASA показывает очень в удобном и наглядном виде.

sparrow
8 секунд на самом деле моя гордость :) Ни в одной зп так быстро считься не будет, время будет всегда измеряться в минутах только по той самой простой причине, что у меня расчеты выполняются вертикально по расчетным обьектам, а не горизонтально, по сотрудникам, что и реализовано в большей части зарплат. Тесты с 100 000 сотрудников я конечно не делал, так как таких больших контор с таким кол-вом сотрудников в России я себе вообразить не могу. Но думаю, что говорить о линейном возрастании времени при увеличение кол-ва сотрудников стоит только в отношении горизонтальных, ну или проще сказать курсорных расчетов. Доказать очень легко - в курсорном расчете увеличение кол-ва сотрудников приведет к увеличению выполняемого цикла расчета по сотрудникам. В моем варианте длина цикла равняется не кол-ву сотрудников, а кол-ву расчетных обьектов. Сколько бы мы сотрудников не имели, у нас как было например 50 начислений и 10 удержаний, так и осталось. Получается выполняется 60 не сложных SQL скриптов, пользующиеся разжеванными данными из кэшей по принципу:
Код: plaintext
1.
2.
3.
4.
insert into [Расчетный кэш]
  select [Формула расчета]
  from [Входяшие данные и данные из кэшей]
  where [Для сотрудников, указанных в расчетном буфере] and
           [Для всех сотрудников, у кого еще не посчитано]


Думаю увеличение кол-ва записей в select-ах не приводит к линейному увеличению времени выполнения запросов в любом SQL сервере. А с учетом кэшей проблема отпадает сама собой. Постоянно работая с сотрудниками, вызывая многие режимы и отчеты даже до окончательного расчета расчетчики зп неявным образом очень часто для клиентской части строят кэши и вызывают неявные расчеты по требованию клиентской части. Так что получается во многом в фоновом режиме система на автопилоте строит свои кэши и производит расчеты, что конечно же увеличивает скорость выполнения окончательного расчета. Так что если я Вам покажу расчет зп 100 000 сотрудников за секунду, не верьте мне, что ASA супер-быстрый - просто кэши полные :)

Кстати насчет супер-быстый - парадоксально, но факт - после перевода БД с MSSQL 2000 на Sybase ASA 8 теже самые запросы и ХП на тех же самых данных стали выполнятся как минимум в 3 раза быстрее. Это при том, что больше 8 мб РАМа ASA у меня не кушает. Такой вот SQL сервер для рабочих групп :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32196644
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gt_
Обдумал вот на досуге, решил ответить.

Насчет начальства на Кипре это зря - зарплата закрытая система и никто кроме расчетчиков бухгалтеров, кстати своей шкурой отвечающих по всей строгости закона за ее расчет, ничего там смотреть и уж боже упаси менять не может. Если предприятие большое, то отделы прикрепляются к определенным расчетчикам и они и только они уже могут работать с информацией расчитываемых ими отделов. Так что никакого WEB-а однозначно. Вся информация с зп все равно потом естественным образом экспортируется в бух. системы, вот оттуда общие цифры начальству и требуется поглядеть. Но это уже не проблемы зарплаты. Ну а черную зп если наша контора и решится прилепить к системе, то только отдельным модулем, и пусть хоть с Кипра ее все смотрят, если на то пожелание клиента будет. Тем более что расчет черной зп элементарен - берем сумму, оговоренную начальством, отнимаем от нее сумму на руки, полученную в зп, остаток денег и есть черная зп сотрудника. Это и калькулятором при желании сделать бухгалтеру не долго. А вот отпусные, больничные или соц. налоги калькулятором не посчитаешь, раньше наверное свихнешься.

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

Еще вариант, в котором использование 3-звена может быть оправдано - это удаленная работа пользователей с данными. Для данного проекта этого быть не может - зп всегда считают в одном месте, если у конторы есть филиал, то там будет и свой расчетчик зп и опять же на месте он будет ее считать. Пересекаться БД конторы и филиала не будут - у каждого своя отчетность, своя налоговая и частенько свой банк.

Теперь насчет Си и его быстроты. Чуть выше у меня в кач-ве примера приведен SQL скрипт ХП расчета подоходнего налога, не очень кстати сложный и большой. Если Вы сможете на Си реализовать логику, которая будет позволять делать то же, но быстрее, чем запрос на ASA (движок кстати которого делали Watcom-овцы), в котором не кислый оптимизатор запросов, то значит Вам пора давно работать в командах по разработке SQL движков. Если Вы будете перелопачивать на 3 звене данные курсорами, то просто загрузите компрьютер, сеть и сам сервер БД сотнями запросов к БД и циклами переборов записей. Быстрее не будет - это уж точно :) Если же Вы на 3 звене вызовите скрипт, аналогичный моему с ХП, взятый откуда нибудь из BLOB-а, то возникает закономерный вопрос - а зачем тогда это 3-звено нужно, если и ХП прекрасно справляется с той же задачей, вернее даже лучше справляется, так как посылая скрипт с 3-звена на сервер Вы получите дополнительным бонусом время компиляции плана выполнения этого скрипта на сервере, а ХП уже лежит откомпиленная, да еще и со статистикой.

Еще одна приятная особенность использования всей логики в пределах БД - автономность. Чтобы запустить расчет, получить нужные данные, произвести некоторые действия над данными или же экспортить или импортить их куда то мне требуется только СУБД. Ни клиент, ни 3-звено, ничего не нужно. Заходим в ISQL, пишем call sp_Calc_Object_All ( 0, 1 ) и запускам расчет по всем сотрудникам с трассировкой хода выполнения. Очень удобно кстати для разработки и отладки.

Думаю все понятно. Конкретных и весомых причин для использования 3-звена и в данном проекте я не нашел. Честно говоря, сколько я не видел программистов, нахваливающих 3-звено, частенько на поверку оказывались люди, которые не сильно знают SQL и предпочитают по старинке курсорчиком все данные перелопачивать. Конечно это не обо всех, кто пишет на 3-звене, но вот многовато я проектов видел с использованием 3-звена, для применения которого я в этих проектах обоснования, кроме как незнания SQL систем не видел.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32196693
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS

Да, спасибо, дошло. Теперь я понял даже зачем в имени ХП даты.

Единственный известный мне разумный аргумент в пользу трехзвенки - легче перейти на другой SQL сервер. Я даже однажды прочитал в интернете о таком переходе.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197010
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
Если же Вы на 3 звене вызовите скрипт, аналогичный моему с ХП, взятый откуда нибудь из BLOB-а, то возникает закономерный вопрос - а зачем тогда это 3-звено нужно

то что для подобных задач хп будет быстрей - беспорно, гораздо - еще вопрос, но суть не в том. в той хп если я правильно понял запускаются некие хп, которые меняют состояние кеша, а потом обыкновенный sql с прибиндиными переменными, так ? не вижу никаких проблем с запуском обыкновенного sql из мидл тиер ... разница будет в долях секунды - пересылка по сети ... хотя если уж так важно ставим мидл тиер на ту же машину.

то просто загрузите компрьютер, сеть и сам сервер БД сотнями запросов к БД и циклами переборов записей.

проблемс с 3-м звеном - пройти по громадному курсору и выполнить сложную логику, которую в sql не запихнуть. но тут я вижу лишь сеть - тонким местом, ведь разница с хп только в том что запросы будут пересылатся через сеть. еще раз - если хп может обойтись sql, без циклов - то же самое делаем на мидл тиер. зато на мидл тиер у нас больше памяти (не нада с СУБД делится) и процессор посвободней.

ХП уже лежит откомпиленная, да еще и со статистикой

сдесь не понял ... а какие планы у хп ? я правда только с ораклом работал ... но мне казалось планы и оптимизатор - фича sql запросов, откуда они приходят из хп или с клиента СУБД неважно.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197083
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gt_
не вижу никаких проблем с запуском обыкновенного sql из мидл тиер
А зачем запускать sql-скрипт из 3 звена, если он прекрасно из ХП запускается ?

еще раз - если хп может обойтись sql, без циклов - то же самое делаем на мидл тиер. зато на мидл тиер у нас больше памяти (не нада с СУБД делится) и процессор посвободней
Добавляем сюда опять же вышенаписанный вопрос, плюс еще вопрос - о какой памяти и процессоре идет речь, если 3-звено будет просто посылать запрос SQL серверу ? Это так много памяти кушает и занимает процессорного времени ?

сдесь не понял ... а какие планы у хп ? я правда только с ораклом работал ... но мне казалось планы и оптимизатор - фича sql запросов, откуда они приходят из хп или с клиента СУБД неважно
Хех - признайтесь честно, Вы наверное с Ораклом тока с 3-звена работали :) Вообще то у любого сервера СУБД план выполнения ХП или вьювера сохраняется в БД, чтобы его не компилить каждый раз, кстати для очень длинных ХП, которые еще часто и вызываются это очень актуально. Плюс еще есть статистика по таблицам, в которой содержится среднее процентное попадание данных по индексам и без нее нормальный план оптимизатор не построит и ХП при создании плана на нее ориентируется, что опять же для обычного запроса будет занимать каждый раз время.

пройти по громадному курсору и выполнить сложную логику, которую в sql не запихнуть
Да - согласен, есть логика, которую в SQL прокручивать бестолку, например сложные мат. расчеты или вычисления. К бух. системам это конечно отношения никакого не имеет, но ведь на СУБД не только бух. системы пишутся. Но и тут прекрасно можно без 3-звена обойтись - на данный момент любой СУБД поддерживает расширенные ХП, на которых эти мат. расчеты организовать и можно. К примеру ASA полностью интегрирован с Java, достаточно создать свои классы, написать там обработку любых сложных расчетов и спокойненько пользоваться этими классами, прямо из ХП. Если же у Вас не только сложные расчеты, но и так же хранятся сложные данные, не подходящие для хранения в релляционном виде, то никто не мешает написать классы с нужным функционалом, которые сами данные и хранят и спокойно в таблице организовать поле с типом написанного на Java класса. Далее все делает ASA - хранит экземпляры класса, позволяет обращаться к ним из SQL скриптов и ХП, позволяет вызывать методы класса. Если захочется сделать распределенные вычисления, так никто RMI в Java не отменял :) Расчеты можно и на другом компьютере с запущенной Java-машиной производить.
По моему вполне достаточно, чтобы реализовать функционал любой сложности.

P.S. Кстати насколько я слышал, в ASA 9 таким же образом будет интегрированна еще и с .NET, так что по идее все желающие смогут катать свои ХП на том множестве языков, которое предоставляет .NET (хе хе - ХП на Фортране). Хотя честно говоря не видел и не знаю - правда это или нет.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197084
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
а теперь просто флейм :)

о кипре вы не поняли - задача чтоб кто не нужно не мог физически получить данные, а кто чо там имеет не имеет право, решает начальство .. а решается уровнями привелегий.

Печатаем нужные ведомости, отвозим их в банк.
ну конечно тоже вариант :) а экспортировать - кто этим будет заниматся ? а банку такое нада ? у банка есть xml-gateway и грит на работай, нехошь не работай ...

так что пока я вижу, что 3 тиер будет поедленей, но не в разы (!) зато
а) мой любимый язык
б) он ООП
с) я на нем могу все, а что немогу мне помогут ... а вот спецов по ораклу ...
д) независимость от бд
е) эт не панацея, криво написать на чем угодно ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197168
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
на счет планов хп, можно какие-нибудь кейвордс я поищу, а то терзают смутные сомнения.
компилирование хп - эт немного другое, это просто код хп компилируется в байт-код ... как при этом может помочь статистика пока не вижу. ну болтается в памяти субд этот байткод, а как это помогает плану оптимизатора ? что он такого может узнать ?
вроде то же самое и с sqlями - они парсятся и болтаются в памяти, опять же разницы кто их потом пускает хп или клиент - нет.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197184
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо - немного флейма в данном деле не повредит :)

Буду Вас разбивать по пунктам:
а) мой любимый язык
личные предпочтения в работе недопустимы

б) он ООП
ООП хорош для работы с иеархиями обьектов, но вот для работы с множествами он скатывается до примитивных алгоримов.

с) я на нем могу все, а что немогу мне помогут ... а вот спецов по ораклу ...
я на очень многих философиях программирования могу все, начиная от машинного кода, ООП и SQL ... но лучше все такие при выборе руководствоваться целесообразностью применения технологии. Избитая фраза, но к месту - на ассемблере тоже можно все ... но вот сколько труда то ...

д) независимость от бд
достигается только в одном случае - поддержка только стандарта ANSI SQL 92. В итоге БД используется только как "чистое" хранилище БД и вся тяжесть поддержки целостной ссылочности данных и их обработки ложится на плечи 3-звена, что опять скатывается до примитивных алгоритмов перебора записей.

е) эт не панацея, криво написать на чем угодно ...
полностью согласен - но в любой задаче формула успеха заключается не сколько в отличном знании одного инструмента, сколько в правильном выборе средства реализации конкретной задачи и ее правильном проектировании.

Насколько я понимаю основные различия разработчика проектов и кодера как раз и заключаются именно в том, что разработчик проектирует задачу, потом кодеры с соотвествующей уровню сложности задачи и выбранными инструментами реализовывают ее части. Я параллейно курирую проект "Дизайнер моделей обуви". В данном случае в нем задействованны люди, ничего не знающие об SQL, но очень хорошо плавающие в ООП и графическом моделировании обьектов. Но подключить к своему проекту я бы их не смог по той простой причине, что ничего о принципах релляционных БД они не знают, их знания заканчиваются на уровне SQL92 и ограничиваются простыми запросами. И я не сомневаюсь, как бы они стали писать проект.


о кипре вы не поняли - задача чтоб кто не нужно не мог физически получить данные, а кто чо там имеет не имеет право, решает начальство .. а решается уровнями привелегий.

>>>Печатаем нужные ведомости, отвозим их в банк.
ну конечно тоже вариант :) а экспортировать - кто этим будет заниматся ? а банку такое нада ? у банка есть xml-gateway и грит на работай, нехошь не работай ...


Все в одну корзинку ... любой проект не может писаться по принципу "возможно все". Каждая логическая часть функционала проекта должна быть обоснованна и спроектированна с учетом постановки задачи. Делается по разному, но в любом случае описание бизнес-процессов проекта необходимо (хоть ручками, хоть в BPWIN). Рядышком кстати в этом форуме такая тема живет и процветает :) Нельзя решить задачу без четкого описания и понимания ее сути. В моей ЗП по постановке задачи четко и явно разграничиваются права и привелегии пользователей, кто что может видеть и делать. То же относить и к банкам - без ведомости с подписью главбуха банки не имеют права выдать по счету зп организации деньги или же перевести их на кредитные карточки. Так же как например и организация не имеет права хранить полученные от банка деньги на выплату зп более 3 дней. Не выдали - значит обязаны сдать обратно в банк, опять же с соотвествующими бумажками. Все описано и регулируется законодательством РФ, вот когда оно поменяется, тогда будет выпущена новая версия продукта с новой реализацией соотвествующей логики.

Ну а Вам лично - может стоит все таки "подружиться" с SQL поближе ;) Честно скажу - ни одна красиво разработанная иеархия классов в ООП ни сравниться с тем удовольствием, которое получаешь от правильно спроектированной БД, а уж тем более от написания запроса, который один делает то, что на алгоритмических языках нужно долго и нудно кодировать. ООП - это все таки ближе к кодированию по сравнению с SQL, несмотря на то, что понятия проектирования классов там тоже очень имеют важное место.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197373
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Отличные постинги. Большое спасибо за подробное объяснение своего ноухау. Это действительно ценный пример как надо нестандартно подходить к решению плохо формализованных задач. Что-то подобное написано в "Жемчужинах программирования" :)

Уважаемый Gt_, ты не совсем прав здесь.
Одно то, что ты считаешь "д) независимость от бд" преимуществом многоуровневого подхода выдаёт не очень опытного в этом вопросе человека (без обид). IMHO третий уровень (и последующие) необходимы на 99% для того, чтобы сделать систему более масштабируемой. Это подход MTS в Oracle.
Но как и MTS этот подход тяжело реализуется и имеет ограниченную область применения.
Что касается "независимости от бд", то это иллюзорно. Об этом неоднократно писал Том Кайт, надеюсь, он признанный авторитет для тебя. Дело в том, что универсальный подход не только нивелирует достоинства отдельных реализаций БД, но и просто может вести к ошибкам. Например, то, что Oracle использует версионную модель изоляции транзакций, а Sybase/MS SQL - блокирование, приводит к тому, что один и тот же третий уровень будет умирать на том или другом сервере (или на обоих), а то и выдавать некорректные результаты. Кайт писал это с примерами в своей книге.
И ещё он писал что знание устройства машины БД must be для разработчика приложения, работающего с этой БД. Иначе получаются уродцы типа 1С на MSSQL.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197502
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
ну тут уже философия и религия пошла :)
у нас разные подходы к решению задач да и требования ... вы пытаетесь решить конкретную задачу максимально эфективно по ТЗ. если меняется ТЗ - изменения вносятся подпорками типа внешних процедур или печатать и отнести т.к. есть большая вероятность того что нехватит возможностей хп (всякие карточки, xml-gatewayи и т.д.)
не имею ничего против т.к. у вас вероятность изменения ТЗ наверно маловата, а у кого-то она побольше. выбрать узский инструмент - страшно ... вот и ищем компромис :)
а скорость - кормить толпу прораммеров дорого ... а процессор дешевый :)

на счет MTS - эт разве не MS Transaction server ??? эт чуть другое ...

а то что нада знать с чем работаешь, эт бесспорно (хотя я люблю с порно), но когда правильно созданы бизнес объекты - они не меняются (от смены бд), меняется лишь методы их взаимодействия с бд. конечно оракловый select for update не канает в mssql, конечно система блокировок будет другая, но на бизнес объекты это не влияет.

а уродцы не от 3-го уровня появляютя .. а от ошибок днк, я вот например плакал - инсерчу запись - там тригер, запускает каскадно еще 3, те еще по 2. половина из них кидают ексепшаны ... пол базы изменилось, разобратся что к чему без пол литра не возможно.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197537
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gt_

> ну тут уже философия и религия пошла :)
Отнюдь. Это чистой воды практика правильного программирования.

>вы пытаетесь решить конкретную задачу максимально эфективно по ТЗ. если меняется ТЗ - изменения вносятся подпорками типа внешних процедур
Как раз в данном случае ASCRUS показал как можно эффективно (и эффектно) решить задачу с непрерывно меняющимся ТЗ.

>а скорость - кормить толпу прораммеров дорого ... а процессор дешевый :)
Да-да, подход Java и Co...
Сначала бьёмся за повышение производительности процессора на 20-30% и платим за это килобаксы, ставим спарки и т.п., а потом вешаем на всё это хозяйство Java и получаем downgrade в разы. Комментарии излишни.
Да, забыл ещё - для минимизации издержек можно толпу студентов первого курса кулинарного техникума нанять.

>на счет MTS - эт разве не MS Transaction server ??? эт чуть другое ...
Ой... Даже не знаю что сказать. А с термином dedicated server знаком?

>а то что нада знать с чем работаешь, эт бесспорно (хотя я люблю с порно), но когда правильно созданы бизнес объекты - они не меняются (от смены бд), меняется лишь методы их взаимодействия с бд.
Тебе бы надо в манагеры идти - это их любимые речи про EJB и J2EE как панацеи, про освобождение программистов от кодирования системного кода в пользу написания только бизнес-логики, про 100% pure код, который однажды написан работает везде, про получение информации где угодно и т.д. и т.п.
Ты про XML-гейты наверно не зря написал?

>конечно оракловый select for update не канает в mssql, конечно система блокировок будет другая, но на бизнес объекты это не влияет.
Очень влияет. Потому что всё равно SQL запускать они будут.
Почитай всё-таки Кайта.
Или просто сходи на asktom.oracle.com

>а уродцы не от 3-го уровня появляютя ..
Я не про третий уровень там говорил, а про "независимость от бд".
1С как раз яркий пример - написана для dbf, также перенесена на MSSQL. Как результат, файл-серверная логика на клиент-серверной машине.

>а от ошибок днк, я вот например плакал - инсерчу запись - там тригер, запускает каскадно еще 3, те еще по 2. половина из них кидают ексепшаны ... пол базы изменилось, разобратся что к чему без пол литра не возможно.
И про это Кайт тоже пишет. Одно изменение - одна транзакция. Что-то не так, откатил и всё.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197635
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю флейм насчет 3-звена надо закрывать. Лучше я, если будет время, еще парочку решений сюда напишу, применяемых мной впервые, если кому интересно. Это реализация поддержки и обработки деревьев иеархии в БД, на которых держаться сами расчетные обьекты, плюс поддержка множественного наследования, на этом принципе сделаны расчетные маски, которые обозначают группу начислений и могут наследоваться от одного или нескольких родителей масок. Плюс могу описать реализацию хранения фактических отклонений значений обьектов от плановых значений - таким образом у меня реализована схема хранения учета табельного времени сотрудника, которая позволяет вместо того, чтобы на каждый день хранить информацию о сотруднике (что делал, сколько работал), хранить только отклонения от установленного ему плана работы, что приносит довольно таки ощутимую экономию пространства БД (к примеру допустим на 1 000 сотрудников храним 30 дней месяца: 1 000 * 30 = 30 000 записей в месяц, в моем варианте график для работы этих сотрудников расписан на 30 дней - 30 записей в кэше графиков, из 1 000 сотрудников 100 имели отклонения от плана работы, например бастовали 5 дней, вместо того, чтобы работать - в итоге 100 * 5 = 1000 записей). Результат на лицо. Причем для всех частей системы, в том числе клиентской и отчетной через ХП и вьюверы будут возвращаться полная раскладка дней их работы в месяце. Ну и еще много наверное чего в кач-ве паттернов сюда пописать можно ... было бы время и желание :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32197937
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Было очень интересно.
Ждем продолжения...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32198941
Фотография Циничный Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS \r
\r
Все это (вышеописанное) конечно очень интересно и познавательно, но... Главный вопрос - а работает???...\r
\r
Почему я его задаю - читаем тут:\r
/topic/38191\r
\r
\r
\r
... проект, на который за полтора года только на зп уже и так не мерянно выкинуто денег, просто пойдет полностью им в убыток, не смогут они осилить по деньгам "поднять" не дописанный проект. Плюс еще постоянные изменение в законодательстве, которые приводят к тому, что крупные проекты, напрямую от него зависящие, по любому будут затягиваться, не зависимо от того, насколько полно было предусмотренны ситуации изменения постановки во время его разработки... \r
\r
\r
"...А основной функционал занимает 80% от всего обьема проекта. На данный момент как раз половина основного функционала и реализована..." \r
\r
\r
Я вот чего не понимаю - если мы имееем дело с полностью адаптивной системой, заточенной под любые мыслимые (вернее, под 99% мыслимых) изменениях в законодательстве, то почему тогда этот проект будет сильно затягиваться при оных изменениях? Если же изменения вызывают необходимость существенной переделок проекта - тогда вся прелесть того, что было описано, меркнет. Мы имеем кучу наворотов, от которых в результате непонятно какая польза.\r
\r
Касательно сроков проекта - я верю в то, что все программисты - оптимисты. Потому привык для получения достоверных оценок умножать предлагаемые сроки на 2-3. Что мы имеем в результате???... 5-летний проект, который к своему сроку окончания придется переписывать заново. По причинам вполне прозаичным.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32198980
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Браво, ЦК. ИМХО, классический безнадежный проект, причем виноваты в нем не только заказчики (руководство), но и исполнители.
Из соотв. книжки по безнадежным проектам, проекты сроком на 2 года при недостаточном бюджете и сроках на 90% провалены с самого начала.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32198990
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну просто куда ни плюнь - всюду фанатики 3-х звенки лезут... :)

2 Циничный Кот
На самом деле, постинги читают ведь разработчики и проектировщики - которых интересует именно архитектурные и технологические решения. А не внедрение проекта, которое, кстати, может провалиться по разным причинам - необязательно из-за плохой архитектуры. А вот описанием технологии и архитектурных решений у ASCRUS полный порядок - логично, грамотно и понятно.

2 ASCRUS
Немного в сторону - а есть в вашей системе поддержка истории данных? Т.е., не аудит, а именно ведение истории. Напр., была Иванова, вышла замуж - стала с такого-то числа Сидоровой. Но в отчетах до этого числа - должна быть ФИО Иванова. Все известные мне пути решения (полноценного решения) довольно сложны и трудоемки.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199010
Навеяло...

Лет 12 назад, програмируя на Сях, я зафигачил нечто подобное по смыслу. Я в структуру добавлял элемент(ы)-ссылку(и) на функцию(и), которая(ые) принимала(и) в качестве аргумента ссылку на эту же структуру. И я вызывал функцию обращаясь по ссылке нечто типа (сорри - сейчас не помню)

Код: plaintext
Имя_структурой_переменной -> метод (параметры)  //вам это ничего не напоминает? 


Смысл был в том, что в разные моменты времени или для разных структур это могли быть разные функции. Но вызов был по ссылке. И я точно так же делился радостью с друзьями програмерами и все говорил - оооо! как это круто. И это работало. И в то время это действительно было круто.

А с появлением С++ , с его виртуальными методами и поздним связыванием , мои изыски оказались ненужным и неуклюжим бредом, служащим единственно(!) для преодоления ограниченности инструмента , служащего для создания информационной модели ....мммм....предметной области.

Почему это и то подобно по смыслу? Да потому, что структура - это данные, функция - это действие над этими данными. Идея в том, что, по большому счету то, что сделал я, и то, то делается здесь может быть обозвано "полимрфизмом" - данные близки или одинаковы, точка входа - одна, но в разных случаях проводятся разные вычисления.

Эй, ООБД - где вы?....
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199020
Фотография Циничный Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aag

А вот описанием технологии и архитектурных решений у ASCRUS полный порядок - логично, грамотно и понятно.

Я с этим не спорю. Обратите внимание, что я просил уточнить некоторые вполне конкретные моменты, касающиеся гибкости и адаптивности системы.


Хотя. Хотя.

Имхо. Плох тот проектировщик/архитектор, который выпадает из контекста. Мне непонятно, зачем проектировать такую систему, которую априори полноценно не удастся реализовать. Причем с оговоркой - либо реализуем все (>80%), либо незачем и заморачиваться. Кстати, я еще ни разу не видел идеальных систем. Кто видел - поделитесь.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199047
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с ЦК. Попытки создать идеальный продукт еще ни у кого успехом не заканчивались.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199113
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот я и добрался до дома :) Бум отвечать по порядку.

aag
Ведение истории есть. По ФИО не ведется, так как в самой постановке задаче это не востребованно. В тех же частях, от которых зависят расчеты и отчетная часть история обязательная часть проекта (например история изменения тарифной сетки, подоходнего налога, налоговых вычетов, учета табельного времени, наименования и значения кодов дохода и т.д.). Там, где данные могут изменяться задним числом история ведется с учетом изменения задним числом. Как ни странно, но по постановке фактически в 80% случаев требуется история изменения информации, из них 50% с учетом изменения задним числом. Причем в некоторых случаях даже смешно получается - например как оказалось дата увольнения задним числом сотрудника очень даже часто встречающаяся вещь в мире расчетчиков зп. Проект я бы не сказал, что сильно усложнен, так как на ведение истории на любую часть данных и особенно задним числом, я очень тщательно взвешивал все за и против, консультируясь с постановщиками, сопровожденцами и клиентами и анализируя все случаи уникальных отклонений от постановки. То есть грубо говоря при проектировке я старался задействовать только общие случаи, чтобы реализовать частный случай какого то усложнения в системе народу приходилось очень долго мне обьяснять и доказывать, что он востребован. Далее с учетом архитектуры БД если отклонение было единичным случаем в практике сопровождения старого проекта заработной платы и при желании его всегда можно было дописать в систему, не изменяя архитектуры, я фиксировал у себя как возможно не решенную проблему дополнительного характера и пропускал ее реализацию. Иначе проблема приравнивалась к блоку основного функционала, проектировалась и реализовывалась в архитектуре БД. Для поддержки в системе данных с историей существует 2 типа вьюверов - возвращающие информацию на текущий расчетный месяц и возвращающие информацию на указанный расчетный месяц (в MSSQL эту функцию выполняли UDF, в ASA UDF не могут возвращать набор данных, зато есть поддержка глобальных переменных и вьюверы могут на них ссылаться. Я их для удобства называю параметризированными вьюверами).

Пример вьювера, возвращающего последние значения тарифных ставок (последние, потому что в течение месяца ставка может поменяться и плюс ставка может измениться задним числом) , действующие на текущий расчетный месяц:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ALTER view v_SalaryValue_Current ()
 -- Вернуть текущие значения окладов и тарифов
 
as
  select sv.Salary_id, sv.WorkDate, sv.SalaryValue, sv.TarifValue
  from SalaryValue sv
    inner join (
      -- получаем последние даты действия
 
      select svw.Salary_id, svw.WorkDate, Max(svw.SaveDate) as MaxSaveDate
      from SalaryValue svw
        inner join (
          -- получаем последние даты изменения
 
          select Salary_id, Max(WorkDate) as MaxWorkDate
          from SalaryValue
          where SaveDate <= @@CalcDate and
                WorkDate <= @@CalcDateLast
          group by Salary_id
        ) as svs on svs.Salary_id = svw.Salary_id and 
                        svs.MaxWorkDate = svw.WorkDate
      where svw.SaveDate <= @@CalcDate
      group by svw.Salary_id, svw.WorkDate
    ) as svm on svm.Salary_id = sv.Salary_id and 
                     svm.MaxSaveDate = sv.SaveDate and 
                     svm.WorkDate = sv.WorkDate

Такой вьювер стабильно вернет последние значения всех действующих ставок на текущий расчетный месяц, учитывая момент, что они могли быть изменены задним числом. Поле WorkDate означает начало действия тарифа, SaveDate месяц его ввода, в кач-ве конца этих дат выступают более старшие по времени даты. @@CalcDate и @@CalcDateLast - глобальные переменные, доступные в любой сессии к БД и хранящие первый и последний день текущего расчетного месяца (глобальных переменных в БД много и они автоматически инициализируются сразу при подключении соединения на уровне СУБД. Есть даже переменные флаги признака наличия супервизорских прав или отладочного режима для текущего соединения).

Такие вьювера служат в основном для быстрого доступа к истории с клиентской и отчетной части. В скриптах расчетов они не участвуют, так как информацию требуется во многих расчетных алгоритмах и их постоянный вызов привел бы к накладным расходам. Для расчетов как я уже и писал выше вся входящая информация, к которой доступ из за реализации ее хранения затруднен, осуществляется через кэши.

Вообще можно немножко смело сказать, что на самом деле архитектура БД, с учетом того, что уже исходя из постановки задачи, история ведется почти на все и по многому ведутся перерасчеты задним числом, фактически позволяет проводить расчеты на любой период давности, в не зависимости от изменения законодательства и условий постановки в дальнейшем при сопровождении проекта.

Далее больше пойдет для Циничный Кот
Меня можно обвинить в усложние постановки, однако изначально задача ориентировалась как тиражный продукт, распостраняемый по многим уголкам страны (есть очень крупные заказчики на Севере, есть в Москве, есть и на Юге). Согласитесь при таких условиях изначально к проекту предьявлялись следующие требования: скорость из за крупности многих заказчиков, многофункциональность из за различной специфики работы во многих отраслях и легкость в сопровождении из за географической удаленности клиентов.

Если бы меня наняли делать калькулятор для расчета зп в мелких конторах с численностью до 500 человек, то я бы просто на такой проект и не согласился по той причине, что написано их предостаточно и ничего интересного в кач-ве опыта проектирования БД я бы для себя не приобрел.

Теперь насчет изменения в законодательстве. Проект планируется написать и начать производить запуск с начала следующего года. Изменения в налоговом законодательстве проект затронут по любому, я и не утверждал кстати нигде что это универсальный проект. Расчетная часть не изменится вообще по той простой причине, что принимается решение снизить ставки соц. налогов для легализации официальной зарплаты, как Вы знаете, а такие вещи у меня вместе с историей храняться в налоговых таблицах и проекту не страшны даже возврат к расчету налогов по "планкам", так как там все это реализовано. Другое дело что по графику работ именно сейчас разрабатываются налоговые ведомости, так как это последний шаг к выпуску бета-версии программы и началу ее пробных запусков на клиентах (планируется в начале осени). Нет никакой гарантии, что отчетность останется преждней из за изменениях в законодательстве и в следующем году не придется переписывать отчеты, а заодно и ХП, которые строят для них данные. Это не смертельно, но сбивает график работ, так как именно в это время планируется создания экспорта данных в существующие бух. системы и конверторов перевода данных с других зарплат (в том числе и старой), что фактически означает выход финальной версии зп и массивному распостранению ее среди клиентов. Далее по идее можно будет начать реализовывать дополнительный функционал системы (северные коэффициенты, премии КТУ, и т.д.). Однако сбитие графика работ может привести к отсрочке запуска проекта на полгода по самой простой причине - началу весны, а значит отчетной поры, в которую клиентов будет бестолку пытаться куда то пересадить. Кстати некоторые отчеты вызывают благовейный ужас, используя в кач-ве информации почти всю расчетную информацию БД в течении года и имея довольно сложную структуру отчета (как раз особенно по соц.налогам). Так что тут мои переживания думаю довольно понятны.

Varivan
Книжек про безнадежные проекты читал не мало и кстати имею опыт в построении сложных систем, даже с недостаточной постановкой или ограничением ресурсами. Всего мной за 12 лет работы было написано 3 крупных проекта, каждый писался порядка 2 лет и прошу заметить они все до сих пор работают без моего личного участия. В той ветке форума я высказал опасения действиями своего руководства, игнорирующими изменения в условиях написания проекта. Проект я не могу считать безнадежным по следующим причинам:
1. Не смотря на нежелание выделить дополнительные ресурсы для форсирования проекта, фирма кровно заинтересована в его написании, так как старый расчет зп написан на ДОСовом Си, работает у кучи клиентов, использует для работы 640 кб (ох и времечко веселое было :) ), уже сложно поддается сопровождению и постоянно висит угроза увольнения программиста, его сопровождающего, так как рано или поздно все это ему надоест.
2. Фирма работает еще в другой отрасли и дела там пошли не самым лучшим образом (потери крупных клиентов), наверное из за излишней самоуверенности руководства, что означает востребованность в конторе достаточного крупного и перспективного проекта в кач-ве тыла.
3. Не смотря не на что мы пережили смену руководства, деньги нам платят исправно, желание писать проект не остыло.

Фактически если дословно привести сообщения с форума Работы я в соотвествующем форуме заметил, что мои работодатели явно странные люди, если видя что их основной на данных момент проект рушиться, вместо того, чтобы форсировать разработку запасного варианта, забирают у меня сотрудника, который отвечал за разработку отчетов и начинают перекидывать все материальные и людские ресурсы на гибнущий проект, периодически все таки выхватывая людей из команды зп на свои нужды. В итоге их проект поглощает все как черная дыра и продолжает исправно тонуть по той простой причине, что писался по той формуле, которой тут многие и советовали - сляпать за полгода основной функционал, запустить и потом дорабатывать. Так все и было - за полгода было сляпано нечто, изначально с не продуманной архитектурой, что потом в течении 4 лет исправно обрастало притыками и заплатками. Теперь условия постановки изменились, плюс я бы сказал был достигнут некий критический предел, когда приткнуть там уже новую функциональность не куда и проект при попытке его переработке просто "рухнул". Я бы на такие проекты вешал табличку - "Не трогай, а то упадет". Сразу вспоминается анекдот про отца-программиста, сына и солнце.

Лично я могу поручится за любую часть проекта, что она спроектирована правильно, с учетом постановки задачи и стоит на золотой середине между фунциональностью и универсальносью. Может с точки бизнеса, как кстати думают многие, в том числе и мое руководства, главное чего то впихнуть клиенту, а потом драть деньги и латать систему, заставляя сопровождающих ее людей совершать героические поступки под крики "Срочно, но я как разработчик проектов стараюсь помнить о том, что после того, как я его напишу и запущу, на нем долго и кропотливо будут работать его сопровождающие программисты и мне не хотелось бы, чтобы они вспоминали меня и мою мать, я же не Билл :)

P.S. Кстати для справки - официально я занимаю должность ведущего разработчика, а не руководителя проекта, в роли которого себя считает начальство, так что обвинять меня как плохого руководителя бестолку - я им не был и не хочу быть. Если мне и приходится предпринимать какие то действия в "политике" предприятия, то они обуславливаются только моим желанием успешно дописать и запустить проект, и фактически осуществляются только благодаря моему "авторитету" на фирме и важностью проекта.

Уф, ей богу - хватит политики. Будем надеятся, что все будет хорошо и проект успешно начнет работать, приносить деньги фирме, уверенность клиентам и легкость в сопровождении программистам. Ну а мне будет достаточно соотвествующей галочки в резюме :)

Завтра постараюсь описать вышеобещанные мною реализации частей проекта, если конечно время позволит. Спасибо за участие и критику тоже (только желательно конструктивную) :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199128
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

Всего мной за 12 лет работы было написано 3 крупных проекта, каждый писался порядка 2 лет и прошу заметить они все до сих пор работают без моего личного участия

Я не знаком с Вами лично и не знаю о ваших прошлых, так и нынешних работах, что не позволяет мне судить о Ваших профессиональных качествах. Свое ИМХО я высказал только в отношении описанной Вами ситуации.

Проект я не могу считать безнадежным по следующим причинам: ....

никому здесь не видна ситуация настолько, что бы делать какие-либо серьезные утверждения. Правы вы или нет покажет время и только оно :)

что мои работодатели явно странные люди, если видя что их основной на данных момент проект рушиться, вместо того, чтобы форсировать разработку запасного варианта, забирают у меня сотрудника, к .....

эх, интересно бы узнать мнение работодателей... Наврняка они много интересного сказали бы. Мечты, мечты.....

Кстати для справки - официально я занимаю должность ведущего разработчика, а не руководителя проекта, в роли которого себя считает начальство, так что обвинять меня как плохого руководителя бестолку - я им не был и не хочу быть.

Никто Вас и не обвиняет (или кто-то есть? отзовись, я первым брошу в тебя камень!). Для того что бы судить об эффективности тех или иных решений (в т.ч. технических) нужно как минимум провести их полный аудит. А это не одна неделя работы и не забесплатно.

Еще раз подчеркну, что мое ИМХО было высказано не в отношении Вас, а в отношении описанной Вами ситуации, так как она воспринилась. ПРошу прощения, если задел Вас лично :))

Кстати и з ваших постингов можно только догадыватья: Вы делает проект "под конкретную компанию" или в софтверной фирме, которая разработанный софт потом продает?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199148
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS

Сколько человек участвует в проекте?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199159
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Varivan
Обижатся я не стал, просто уточнил, чтобы меня воспринимали с "правильной" должности. Но все равно спасибо за извинение, всегда приятно видеть на форуме людей старающихся вникнуть, тем более меня оценка этого проекта другими специалистами очень интересует. Можно сказать что этот проект для меня еще является не только хорошим повышением опыта и квалификации, но и некой готовой реализацией сложной самодостаточной и не зависимой архитектуры БД, на основе которой после запуска проекта, я хотел бы потом проверить собственные теории создания системы моделирования баз данных, основанной на абстракциях, ассоциациях и реализующую 3 модели описания БД - абстрактную, логическую и физическую. Наверное именно по этому постановка разрабатываемого проекта меня заинтересовала и я решился взяться за его разработку.

Теперь отвечу:
Проект считается тиражным продуктом, который продается и сопровождается, разрабатывается все это в софтверной компании.

Мнение работодателей мне бы тоже было интересно услышать :) У нового руководства 2 стабильных состояния, характеризуемых следующей программой действий:
1. если все хорошо то ничего не делать, зачем что то делать, когда все хорошо
2. когда все плохо начинать звонить в колокола, вкладывать деньги, привлекать людей, устраивать бег с препятствиями и т.д.
Так как в отношении меня ничего не происходит со стороны руководства, то логично сделать вывод, что у меня все хорошо.

В принципе я выяснил уже после старта проекта, что до меня на протяжении 3 лет уже предпринимались 2 попытки переписать проект, в том числе и программистом, сделавшим старый ДОСовый расчет и отлично знающим все ньансы постановки. Где то после года-полтора работы проекты умирали по причине их ступора. Я раскопал эти проекты и проанализировав их остановку пришел к выводу, что главная их ошибка была в том, что проектирование велость модульно, т.е. по ходу работы, в итоге где то как раз через год работы после разработки соотвествующих входящих форм разработчики этих проектов упирались в сам расчет заработной платы и там дело и останавливалось по причине того, что структуры БД проектировались с соотвествующих входящих данных без учета взаимодействия с расчетной частью и связи с другими частями системы. Это приводило к тому, что при такой архитектуре расчеты должны были реализовываться курсорами и ветвлением, как и в старой зп, что приводило к тормознутости системы, или же при попытке использования для расчетов SQL разработчики сталкивались с сложным доступом к данным, используемых расчетом и не имея достаточно опыта не могли написать реализацию.

Если вспомнить, что в моем проекте за те же полтора года уже реализованы основные виды начислений, введена поддержка их расширения на основе разработанной мной технологии паттернов ХП, позволяющей даже не подготовленным пользователям вводить в систему собственные довольно сложные алгоритмы премий и постоянных начислений, плюс считается подоходний налог, полностью готовы авансовые и межрасчетные выплаты, сделан описанный выше движок расчетов, позволяющий в виде ХП описывать логику расчетов ЗП, разработаны интерфейс, компоненты, и иеарии классов клиентской части для облегчения ее написания, сейчас вот дорабатываю иеархию классов отчетной части на PB, на основе которой собран генератор отчетов системы, плюс уже есть серия отчетов, то согласитесь по сравнению с моими предшественниками за указанный срок работа проведена не малая. Даже с учетом того, что на разработку в общей сложности движка расчетов БД ушло 3 месяца, ядра клиентской части порядка месяца, а ядра генератора отчетов пол-месяца овчинка стоила выделки, сейчас любой сложный режим элементарным образом реализуется в серверной, клиентской и отчетной части - причем прошу отметить, что мои решения не конфликтуют со стандартами используемых средств, а наоборот активно их используют. Также на многие замечания постановщиков и внедренцев насчет возникающих у них сейчас проблем при сопровождении и изменении старой зп и просьбой учесть это в новой зп, мне остается пожать только плечами и заявить, что сделать я это не могу, так как с учетом реализованной архитектуры БД у меня таких проблем просто не существует.

Кстати очень большое внимание в проекте было уделено контролю правильности ввода информации и это позволило снизить затраты на разработку расчетной части, гарантировать истинность информации и снизить будующие затраты на сопровождение продукта. Ипользовался тезис "Лучший способ контроля данных, это не давать совершать ошибки пользователю". Так что в системе нельзя изменить ничего за закрытые периоды, только если позволено в рамках системы задним числом. Нельзя влепить забастовку на период больничного и т.д. Например я споектировал архитектуру регистрации документов, которую начну делать после дописания генератора отчетов, контролирующую выдачу ведомостей строгой отчетности и условия участия в них сотрудников, по которым например сотрудники вошедшие в одну ведомость не имеют права входить в другую. Вроде бы явное излишество, но на самом деле такой контроль позволит программе знать реальные даты выплат и перечислений сотрудникам, плюс разгрузит режим депонирования ошибочно включенных в ведомости сотрудников и печальные походы расчетчиков зп в банк с депонируемой суммой и кучой бумажек.

Если учесть все вышесказанное, то получается, что по постановке проект реализован чуть более половины, а по разработке технологий и решений встречающихся в его постановке проблем на 80% (оставшиеся 20% это системы экспорта данных и конверторы). Так что срезать что то и уж тем более резво запустить такой проект с учетом постановки и уже реализованного функионала уже не реально. Сама архитектура БД не позволит использовать ее как БД под примитивный калькулятор и любое дописание функционала проекты по любому просто будет обязанно придерживатся разработанных нотаций и правил системы.

Ускорить разработку новыми сотрудниками можно, засчет всех применяемых решений, позволяющих в конечном счете снизить требования к знанию постановки задачи и знанию структуры БД и имея на руках готовую иеархию классов на все общие случаи.

c127
С учетом того, что у меня наглым образом отняли человека, сейчас нас два программиста, плюс 3 сопровождающих старую зп и выступающими консультантами, плюс девушка программистка со старой зп, выступающая консультантом и тестером, плюс 2 постановщика бухгалтера. Все кроме нас естественно не задействованны постоянно в проекте и привлекаются по мере надобности. Я получается являюсь головой проекта, на мне полностью БД и ядро и утверждение интерфейса клиентской части, плюс системные функции и иеархии обьектов генератора отчетов . Мой коллега держит на себе написание форм и логики клиентской части, и теперь разработку отчетности, раз нас стало двое. Вообще в общей сложности у меня "отняли" уже троих человек, причем один из них (главный постановщик и бывший программист-сопровождающий старый проект) уехал в Австралию, другой (программист) после полгода работы устроился на прекрасно оплачивуемую работу, теперь вот еще человека перевели на другой проект. Я конечно ничего против не имею, если народ решил уйти, но ведь нельзя же на освободившиеся ставки набирать сотрудников на работу в другом проекте, а потом иногда невинно у меня спрашивать - "Когда деньги то лопатой грести будем?". Я как человек честный предупреждаю конечно о возможных последствиях таких вольностей, когда общая численность старой и новой команд зп вместо бывших раньше 80% сотрудников конторы теперь занимает 5% от общего числа ее сотрудников, но все равно согласитесь не приятно, если руководство угробит фирму или проект, и мне придется делать выбор между уволиться и обьяснять на новом месте работы, что мне помешало запустить проект или же найти заинтересованных лиц и продолжать разработку проекта, раз уж так много сделано.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199162
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нда..... почитал я..... все конечно весело. но лучше бы ты куски кода не постил. :) создается впечатление о менстре с запиханой бизнесс логикой в БД. Это плохо. то, что трезвенки не работают так же быстро... я расскажу тебе одну байку которую мне рассказал препод у которого я давно-давно диплом писал. он поехал на конференцию по оптимизации алгоритмов для показа чего-то своего нового. там из зала один проффесор шутник заржал в голос и сказал что показанный алгоритм выполняет решение систмы из 5ти уравнений за 1000 итераций, а его за 27. на что евгеньич не моргнув глазом спросил за сколько его алгоритм расчитает систему из 6 и 7 уравнений? у мужика началась "рекурсия" и выяснилось что для 7 уравнений у него получалась такая "экспонента" что "уже почти ничего не решалось", а у евгеньича 7 уравнений решалось за 1004 итерации. вот и и вся байка. рассказываю я это потому что мой последний большой проект был именно так и построен. он изначально был построен так чтобы работать "медленно" сначала. медленно = отклик в районе 1 секунды через интернет при размере базы в террабайты. система распределенная. когды вы говорите что логика начинает лезть на третий уровень я так понимаю вы имеете ввиду юзер интерфейс? если это так, что я скажу, что вы просто системы проектировать наверное не умеете. не умеете делать правильного распределения между слоями. юзер интерфейс отвечает только за презентацию обычно. есть бизнес логика и есть дата логика. последняя идет в базу, первая на business logic layer (я специально написал layer = абстракция).

и дву и трезвенки имеют свои приимущества. для маленьких задач на 1000 работников с зарплатой трезвенка может и не нужна. только если сегодня у тебя 1000, а завтра 100,000 пользователей то система "приедет". все конечно решится большими деньгами за железо как всегда. но в том то и крутизна делать мощную систему из "говна" извините. вон гугл работает на 48 компутерах. вы это замечаете когда им пользуетесь? то-то....


Удачи на дорогах!
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199163
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гугл работает на 486 компутерах имеось ввиду...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199321
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
папа Карло
Ну во первых я не Буратино, чтобы так запросто переходить на ты, даже не познакомившись.

Во вторых я все таки не понимаю 3-звенщиков, которые всегда уверены, что они смогут написать сложную обработку данных быстрее, чем это реализовано на СУБД. То ли они не признанные гении, то ли просто никогда с SQL не работали. Если Вы действительно прочитали всю ветку, то правильно решили, что вообще все происходит именно в БД и от клиентской части никак не зависит. Так же можно было бы обратить внимание, что вся логика спроектирована и реализована посредством выборок, курсор в БД проекта - это исключение из правил и применяется в крайних, важно необходимых случаях. Плюс выше уже обсуждалось, что в такой задаче запросы всегда будут выполняться быстрее, так как увеличение обьема хранилища данных для выборок будет автоматически оптимизироваться на уровне СУБД, в случае же с отдельным звеном приведет к увеличению кол-ва обращений к БД и увеличению цикла расчета. И при чем тут железо не понимаю ? Зачем делать медленно для большинства заказчиков с обьемом расчитываемых данных (общий случай), чтобы потом это работало быстро на некоторых заказчиках с крупным обьемом данных (частный случай) ? Вы знаете, что те, у кого работают от 50 000 сотрудников не настолько бедны, чтобы не поставить себе нормальное железо, не заморачиваться, а заодно при желании купить и контору, сделавшую продукт в кач-ве бонуса сопровождения ?

P.S. Кстати - на вопрос данной темы я ответил полностью, раскрыв методику реализации системы с изменяющимеся алгоритмами расчетов и работающих за определенные периоды времени, реализованную с использованием только средств SQL сервера. Может быть 3-звену хватит меня критиковать и описать свои способы решения этой задачи с помощью их методологий ? Будет интересно посмотреть и сравнить, а уж полезно всей общественности, предпочитающей все равно сколько звеньев :) Так что с нетерпением жду описание реализации любой похожей на заданные условия задачи ....
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199337
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я правильно понял, что при появлении третьего уровня появляются курсоры? :) мой опыт такой. система за 20млн. юс. я делал бакэнд. курсоров практически нет (из 5000 СПшек может 20-40 имеют курсоры, и то только по тому что написаны китайцеми которые кроме бейсика ни о чем понятия не имели на тот момент). никогда большую систему не буду делать по тому принципу что сделана ваша зарплата. дело в том, что лизинг кластерного апплекейшен сервера стоит 375 доллраов в месяц, лизинг кластерного датабаз сервера с тем-же числом процов и памяти и единственным отличием raid10 стоит 3500 долларов в месяц. также надо учитывать что мы легко можем поставить произвольное число аппликейшен серваков обычно и забалансить их балансерами. обычно существует одна база (или несколько если есть партишенинг) при этом база все равно остаетс разделяемым ресурсом. теперь берем и смотрим насколько база стала медленее при переносе на нее (части) бизнесс логики. скажем на 10-30% при этом вместо 100000 оп. в минуту она будет делать 80000 операций. следовательно при наращивании мощности и нехватки производительности мне надо снова платить деньги. большие деньги за датабаз сервак и это при условии что был сделан партишенинг вначале. также известно, что увеличении прибыли идет за счет уменьшения издержек, а не зчет увеличения продаж. :) отсюда систему надо строить с минимальным ТСО и линейной стоимостью за масштабируемость.


получилось немного сумбурно.... но как есть. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199338
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на счет ты извините, плохая фидошная привычка. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199411
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу, извиняю :)

Кстати насчет абстракций - если рассматривать SQL, то абстрактней языка запросов ничего нет, так что Вы зря его называете кошмарным. Фактически я описываю на нем задачу, реализация же на выборку и обработку данных полностью ложиться на плечи СУБД. Если в новой версии СУБД производитель добавит новые технологии оптимизации обработки данных, мне ни на йоту не придется ничего переписывать и если бы в свое время производители СУБД не "поехали" в разные стороны, расширяя кто как хочет стандарт SQL, то скрипты БД были бы полностью абстрактны и в отношении любых серверов СУБД.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199446
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще дополнение - зп не большая, а сложная система. У любой системы должны быть границы. Чисто теоретически я мог бы изначально проектировать зп для расчета заработной платы всех жителей Китая, но такой задачи слава тебе господи и не ставилось :) Я же не утвержал, что всю бизнес-логику буду запихивать для биллинговых например систем. Я пытаюсь сказать другое - нельзя кидаться из крайности в крайность и проектировать задачи надо согласно фактическим требованиям системы, а не теоритическим "вот если". Если система будет большая и распределенная, то я согласен, в таких условиях по стоимости и скорости многозвенная архитектура катит. Если система со средним обьемом данных и вписывается в пределах реализации бизнес-логики на СУБД, то и не за чем огород городить. Однако у нас полно народу, которые насмерть стоят и все программируют в одном русле. Причем когда пытаешься выяснить мотивацию, то оказывается, что просто по другому программировать не умеет. Я тоже могу сказать, что не буду делать свои системы, как Вы и только по тому, что специализируюсь в своей области, а Вы в своей. Все логично и правильно - у меня хватает ума не брать проекты, которые явно требуют многозвенной архитектуры, Вы не связываетесь с проектами, где многозвенка явно не нужна. Соотвествующе и критиковать Вас или меня бестолку - у каждого своя ниша работы, обе технологии имеют право на жизнь. С другой стороны согласитесь описанный мой способ реализации расчетных алгоритмов просто и удобен и даже в многозвенной структуре при желании он может найти свое применение. Никто же не говорил, что технологии обработки данных не могут перемешиваться и обязательно должны быть чистыми.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199551
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Папа Карло

что лизинг кластерного апплекейшен сервера стоит 375 доллраов в месяц, лизинг кластерного датабаз сервера с тем-же числом процов и памяти и единственным отличием raid10 стоит 3500 долларов в месяц...

Вы себе плохо представляете уровень контор, в которых ставятся такие системы. Пятнашку за выделенный под задачу сервак это не вопрос.

что увеличении прибыли идет за счет уменьшения издержек, а не зчет увеличения продаж

Это кто Вам такую глупость сказал??? Cost Cutting вещь очень лукавая - в долгосрочной перспективе можно бизнес загубить.

И лично к Вам вопрос: вами была реализован проект расчета Российской з/п?

2 ASCRUS
.... по которым например сотрудники вошедшие в одну ведомость не имеют права входить в другую

В бытность работы на гос предприятии я получал з/п по нескольким ведомостям....
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199587
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ну просто не могу не удержаться от комментария...
Человек довольно грамотно и инженерно описывает выбранную им технологию с учетом постановки задачи. А в ответ несется - да это все фуфло, если на сто тыщ человек запустить, долго будет, а вот 3-х звенка - магическое слово! - все летать будет!!!
Как будто от одного названия уже все ускоряется. И - интересно услышать - где это у нас есть организации в которых 100 000 чел работает? Даже на Форде, кажется, порядка 40 тыс. - но это консорциум из нескольких компаний, филиалов и пр., и уж явно зарплата там не считается сразу для всех.

2 ASCRUS
Меня интересовало несколько иное. Как я понял, в описанной вами реализации, история ведется по отдельным независимым сущностям, включающим один измен. атрибут - ставка, тариф и пр. Это относительно просто. Сложнее, когда есть набор атрибутов (полей), каждое из которых может изменяться отдельно от остальных. Пример - атрибуты сотрудника - ФИО, паспортн. данные, место жительства, должность. Каждое это поле меняется независимо от др. А получать надо связанный набор. А если учесть, что поля могут менять задним числом, то вообще кавардак. Напр., у Иванова задним числом поменяли адрес, а потом - еще более ранним - паспорт. Необходимо на заданную дату вернуть правильные значения. Общим решением явлется хранение атрибутов по записям, - однако.... Это сильно усложняет.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199590
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Varivan
Угу, есть такое дело. Имелось в виду, что необязательно например в середине месяца, после выдачи приказа о начислении и выдачи межрасчетов какой то премии все сотрудники тут же попадут в ведомость и получат деньги в кассе. Нормальная ситуация, когда по мере пополнения денег в кассе они будут ее получать, причем не обязательно целыми отделами - например в тех же гос. конторах реальна ситуация, когда впервую очередь денежки получит начальство. С другой стороны человек, уже попавший в ведомость начинает считаться как деньги получивший по данной ведомости и соотвественно при дальнейшей порционной распечатке оставшихся сотрудников войти уже в такую ведомость не может, иначе бы такую ведомость пришлось бы депонировать. С другой стороны любая попытка изменения размера премии сотрудника, уже вошедшего в ведомость приведет к запросу о подтверждении аннулирования ведомости, что приведет к тому, что вся ведомость, в которой этот сотрудник входил будет считаться не действительной, и все сотрудники, которые в нее входили окажутся в статусе не получивших деньги, и при любой попытке запуска окончательного расчета система выдаст ошибку о невыдаче денег перечисленным сотрудникам и расчетчику зп придется сделать выбор между снятием межрасчетных выплат с этих сотрудников или же распечаткой требуемой ведомости. То же самое касается и окончательного расчета, пока все что должно быть распечатано не будет распечатано и все деньги не будут полностью распределены по всем потокам оплат (касса, кредитки, сбербанк, почта и т.д.), расчетчик зп не сможет закрыть текущий расчетный месяц и перейти на следующий. Однако это ограничение не повлияет на тех бухгалтеров, которые во время уже распечатали отчетные формы - в системе поддерживается ввод данных и будующим числом, так что они спокойно даже при открытом пока предыдущем расчетном месяце смогут начинать вносить входящие данные нового расчетного месяца, пока их нерасторопный коллега будет печатать отчетные формы.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199614
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag
Для меня все таки самое простое решение хранить аттрибуты в одной таблице. Все таки они все описывают изменение свойств одного обьекта и на любой промежуток времени однозначно будут его характеризовать. Т.е. у меня например на код дохода реально получается 2 таблицы:
1. Сам обьект дохода, в котором стоит его ID и логическое наименование
2. Таблица аттрибутов кода дохода, в которой на каждый ID кода может существовать запись, хранящая с указанного периода времени аттрибуты обьекта - налоговый код дохода, код материальной скидки и сумму материальной скидки. Фактически любой из этих параметров может измениться вне зависимости от остальных. Физически получается что изменение например суммы скидки приведет к появлению еще одной записи с дублирующими полями кода дохода и кода скидки и новым значением суммы скидки. Можно ли это считать денормализацией данных ? Честно говоря не знаю. Тут уже все зависит только от предполагаемого обьема данных. Для обьектов с нечасто изменяющимися аттрибутами это нормально. Указанный Вами пример тоже идеально подходит под такую модель - ФИО или номер паспорта меняются настолько редко и у малого кол-ва граждан. Если бы была постановка с частыми изменениями некоторого числа аттрибутов, то скорее всего для таких аттрибутов пришлось бы делать свои таблицы, где в каждом конкретном случае решать как их хранить - по записям или же по таблице на конкретный аттрибут.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199622
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

если честно, то почти ничего не понял :)) но к этому и не стремился :) Главное, что Вас не смутило найденное дилетантом в расчете з/п противоречие :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199673
vic123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне нравится. Попытаюсь приложить данную идею немного в другом разрезе. Есть ПО обеспечивающее несколько организаций, в каждой из которых свои особенности. Попытка сделать программу универсальной и разбежаться за счет параметризации на этапе инициализации сегодня привела к диким затруднениям на этапе сопровождения. Здесь вопрос решается на уровне запуска своего алгоритма, реализующего особенности данной организации в ПО, имеющем 90% общего программного кода.
С точки зрения сопровождения это хорошо тем, что в общую часть ПО изменения вносятся крайне редко, а отладка каждого отдельного алгоритма позволяет работать с одной организацией.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199699
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
Еще дополнение - зп не большая, а сложная система. У любой системы должны быть границы. Чисто теоретически я мог бы изначально проектировать зп для расчета заработной платы всех жителей Китая, но такой задачи слава тебе господи и не ставилось

чо то не совсем понял почему все привязалась именно к з/п предприятия ? или система не предназначена только для РФ и только для ЗАО такое-то ?? а зарплата в финансовых пирамидах, там 40 тыс участников - детство ...
ИМХО примерно то же самое я наблюдал у кабельной сети, у них там так-же куча услуг, туча клиентов которые оплачивают часть , по ценам зависещим от погоды на этой неделе со скидками от балды. может логика менее сложная но суть таже.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199720
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расчет заработной платы - вполне конкретная часть трудового кодекса РФ, регулирующего трудовые отношения между работодателями и работниками, и описывающего порядок расчетов за выполненные обьемы работ, удержания действующих налогов и соц. норм. Насколько я понимаю клиенты кабельного телевидения или же финансовые пирамиды регулируются другим законодательством, описывающим отношения на договорной основе как юридического и физического лица, со всеми вытекающими отсюда условиями. Нельзя же в самом деле тех же клиентов банка причислить к числу его сотрудников только за то, что они хранят в нем свои вклады и получают с этого проценты. Это другая постановка, соотвествующе и другая задача. При всем желании универсально сделать бы и не получилось. Наглядный пример попыток универсальной постановки можно легко наблюдать в комплексных бух. системах, в которых расчет зп всегда являлся самым слабым местом и мягко говоря расчитан на "идеальное" предприятие без отклонений от схемы "все положенное время отработал, деньги получил", только по той причине, что реализован в них расчет зп на основе движков, расчитаннных на бухгалтерию. Это конечно круто начисления и удержания хранить и обрабатывать дебетом и кредитом, но ни к чему хорошему это не приводит. Мое мнение - программа должна быть гибкой в реализации и сопровождении, но с четко описанной постановкой и областью применения.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199895
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
а я то не в РФ, что из-за этого я не могу применять твои методы для решения задач вне РФ ? ну законодательство чуть другое, ну не сотрудников а клиентов общитываю ... не вижу принципиальной разницы.

ну да ладно, дальше вижу только религиозный спор ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199909
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а кто мешает написать свою задачу, пользуясь приведенными мною решениями, если они конечно понадобятся в контексте поставленной задачи ? Насчет же распостранения проекта зп вне России я честно говоря не уверен, что может получится. Одно дело, когда просто расчеты изменяются, другое дело, когда структура входящей, расчетной и исходящей информации будет своей для каждой страны.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32199922
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот! Свет истины. :-)
Именно такую стуктуру я и пытался обрисовать. Но, недостатки данного подхода также очевидны.
Напр., сделать селект по таблице кода доходов - со всеми атрибутами. Это выливается в необходимость конструирования такой таблицы - через врем. таблицы, update полей и пр. Если нет возможности дать гранты на паблик на все треб. таблицы (а как правило ее нет) - динамический SQL невозможен.
Итого - куча кода, медленные запросы.

Поскольку в недалеком будущем это предстоит и мне, вот я и жалуюсь :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200013
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно такую стуктуру я и пытался обрисовать. Но, недостатки данного подхода также очевидны.
Напр., сделать селект по таблице кода доходов - со всеми атрибутами. Это выливается в необходимость конструирования такой таблицы - через врем. таблицы, update полей и пр. Если нет возможности дать гранты на паблик на все треб. таблицы (а как правило ее нет) - динамический SQL невозможен.
Итого - куча кода, медленные запросы.


Наверное мы все таки друг друга не поняли. Приведу пример использования справочника кодов доходов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
 -- Доходы
 
create table Income (
  Income_id int not null identity primary key,  -- id дохода
 
  Name varchar( 50 ) not null  -- наименование дохода
 
)

 -- Значения доходов
 
create table IncomeValue (
  CalcDate date not null,  -- дата начала действия
 
  Income_id int not null,   -- id дохода
 
  Income_Num int not null,  -- код дохода
 
  Dicount_Num int null,  -- код налоговой скидки
 
  Discount_Value numeric( 15 ,  2 ) null,  -- сумма налоговой скидки
 
  primary key pk_IncomeValue (CalcDate, Income_id)
)

 -- Напишем вьювер (UDF), показывающий состояние кодов дохода 
 
 -- на указанный период
 
create view pv_IncomeValue
 /*
  Используется глобальная переменная $CalcDate для указания расч. месяца
*/ 
as
  select 
    iv.CalcDate, iv.Income_id, iv.Income_Num, iv.Discount_Num, iv.Discount_Value
  from IncomeValue iv
    inner join (
      select Income_id, Max(CalcDate) as MaxCalcDate
      from IncomeValue
      where CalcDate <= $CalcDate
      group by Income_id
    ) as m on m.Income_id = iv.Income_id and m.MaxCalcDate = iv.CalcDate

 -- Занесем код дохода
 
insert into Income (Name)
values ('Суммы материальной помощи')

 -- Занесем аттрибуты кода дохода на 2003/01/01
 
insert into IncomeValue 
  (CalcDate, Income_id, Income_Num, Discount_Num, Discount_Value)
values
  ('2003/01/01',  1 ,  2760 ,  503 ,  2000 )

 -- В феврале изменился код дохода 2760 на 3000
 
set $CalcDate = '2002/02/01'

insert into IncomeValue 
  (CalcDate, Income_id, Income_Num, Discount_Num, Discount_Value)
select $CalcDate, Income_id,  3000 , Discount_Num, Discount_Value
from pv_IncomeValue
where Income_id =  1 

 -- В марте изменился код налоговой скидки 503 на 600 и 
 
 -- ее сумма с 3000 на 5000
 
insert into IncomeValue 
  (CalcDate, Income_id, Income_Num, Discount_Num, Discount_Value)
select $CalcDate, Income_id, Income_Num,  600 ,  5000 
from pv_IncomeValue
where Income_id =  1 

 -- Можно сделать ХП, реализующую изменения любого аттрибута
 
create procedure sp_IncomeValue_Set (
  in @CalcDate date,
  in @Income_id int,
  inout @Income_Num int default null,
  inout @Discount_Num int default null,
  inout @Discount_Value numeric( 15 ,  2 ) default null
)
begin
  declare @RealDate date;

   -- Получаем значения предыдущего текущего состояния кода дохода
 
  set $CalcDate = @CalcDate;

  select
    CalcDate,
    case when @Income_Num is null then Income_Num 
      else @Income_Num end,
    case when @Discount_Num is null then Discount_Num 
      else @Discount_Num end,
    case when @Discount_Value is null then Discount_Value 
      else @Discount_Value end
  into @RealDate, @Income_Num, @Discount_Num, @Discount_Value
  from pv_IncomeValue
  where Income_id = @Income_id;

   -- Если полученная дата не установлена или меньше указанной, 
 
   -- значит записи на указанный месяц нет и ее просто нужно добавить
 
  if @RealDate is null or @RealDate < @CalcDate then
    insert into IncomeValue 
      (CalcDate, Income_id, Income_Num, Discount_Num, Discount_Value)
    values
      (@CalcDate, @Income_id, @Income_Num, @Discount_Num, @Discount_Value)
  else
   -- Иначе обновляем запись
 
    update IncomeValue
    set 
      Income_Num = @Income_Num,
      Discount_Num = @Discount_Num,
      Discount_Value = @Discount_Value
    where Incomt_id = @Income_id;
  end if;
end

 -- Посредством ХП добавляем новые аттрибуты скидок кода дохода
 
 -- на апрель
 
call sp_IncomeValue_Set ('2003/04/01',  1 , null,  700 ,  6000 )

 -- Также изменяем код дохода в апреле
 
call sp_IncomeValue_Set ('2003/04/01',  1 ,  3500 , null, null)

 -- Смотрим состояние аттрибутов кода дохода на январь
 
set $CalcDate = '2003/01/01'
select *
from pv_IncomeValue
where Income_id =  1 

 -- Смотрим состояние аттрибутов кода дохода за апрель
 
set $CalcDate = '2003/04/01'
select *
from pv_IncomeValue
where Income_id =  1 


Ну и в том же духе можно продолжать писать скрипты изменения аттрибутов у множества кодов доходов, ХП, реализующих это и т.д. У меня клиентская часть посредством кэшированных изменений все проводимые изменения проводит через ХП, которые сами и решают, что, как и куда добавить, изменить или удалить.

Как видно ни о каком динамическом SQL, конструировании таблиц, и т.д. тут речи и не идет. Основными недостатоками моей модели являются избыточное хранение аттрибутов и некоторая сложность в их обработке. Однако все равно это не идет ни в какое сравнение с хранением аттрибутов по записям, где действительно все будет выглядеть, как стоп-кран в СУБД.

Предложенная мной модель не позволяет хранить обьекты с изменяющимся и неизвестным кол-вом аттрибутов, однако мое личное мнение, что если такое требование существует, то это скорее всего указывает на неправильно спроектированную архитектуру БД. Реально при описании базы данных можно редко встретить необходимость хранения обьектов с неизвестным кол-вом аттрибутов и прикручивать это на СУБД печально, так как под это релляционные СУБД не предназначенны. В основном я встречал с попытками сделать такое людей, у которых была "светлая мечта" сделать универсальный проект, не зависящий от постановки.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200017
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хех - вроде все проверил, но все равно ошибки в скрипте допустил.
После
Код: plaintext
1.
2.
 -- В марте изменился код налоговой скидки 503 на 600 и 
 
-- ее сумма с  3000  на  5000 

необходимо поставить
Код: plaintext
set $CalcDate = '2003/03/01'

Вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 -- Иначе обновляем запись
 
    update IncomeValue
    set 
      Income_Num = @Income_Num,
      Discount_Num = @Discount_Num,
      Discount_Value = @Discount_Value
    where Incomt_id = @Income_id;

Конечно же
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 -- Иначе обновляем запись
 
    update IncomeValue
    set 
      Income_Num = @Income_Num,
      Discount_Num = @Discount_Num,
      Discount_Value = @Discount_Value
    where 
      Income_id = @Income_id and
      CalcDate = @CalcDate;

Вроде больше ошибок нигде, кроме очепяток :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200045
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varivan

что лизинг кластерного апплекейшен сервера стоит 375 доллраов в месяц, лизинг кластерного датабаз сервера с тем-же числом процов и памяти и единственным отличием raid10 стоит 3500 долларов в месяц...

Вы себе плохо представляете уровень контор, в которых ставятся такие системы. Пятнашку за выделенный под задачу сервак это не вопрос.

В Российском банке мы тоже техники на поллимона покупали в год. :) На Западе не везде тратят деньги как в России. :)

что увеличении прибыли идет за счет уменьшения издержек, а не зчет увеличения продаж

Это кто Вам такую глупость сказал??? Cost Cutting вещь очень лукавая - в долгосрочной перспективе можно бизнес загубить.

Загубить можно что угодно. :) Давайте лучше посчитаем. :)

Пусть издержки на производство продукта А составляют 1000 рублей в месяц. Мы прибыльная компания и продаем на 1500 рублей в месяц. Итого мы имеем 50% прибыли от вложенных денег. Теперь представим что мы продали на одну копию больше и теперь у нас не 1500 рублей, а 1700 рублей. Итого мы получили 70% процентов от вложения наших средств. Теперь предположим что мы уменьшили издержки на ту же сумму. Т.е. теперь мы тратим 800 рублей на производство и получаем все те-же 1500. Мы получили 87% прибыли. Что в принципе далеко не плохо. :) я, разумеется, могу ошибаться. :) ко всему надо подходить с головой. при верхних расчетах подразумевается что уменьшение издержек произошло за счет изменения дизайна системы на начальном уровне. вроде вот так. теперь с примерами если можно "почему это глупость". прошу прояснить ситуация не для того чтобы спорить, просто хочу знать больше подходов и получить больше опыта.

И лично к Вам вопрос: вами была реализован проект расчета Российской з/п?

нет. в России я работал в банке но занимался другими вещами... хотя те же грабли с постоянно изменяющимяся положениями ЦБ. Переводил банк на новый план счетов и деноменированные рубли. Именно поэтому я не говорю что хорошо и что плохо в той конкретной реализации что сделана ASCRUS. Он сам кузнец мне все равно. Просто в этом треде спорят о том что лучше трезвенка или двузвенка. Ответ мой будет такой: когда как. Как я уже писАл все зависит от конкретной задачи. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200047
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag

Нет, ну просто не могу не удержаться от комментария...
Человек довольно грамотно и инженерно описывает выбранную им технологию с учетом постановки задачи. А в ответ несется - да это все фуфло, если на сто тыщ человек запустить, долго будет, а вот 3-х звенка - магическое слово! - все летать будет!!!
Как будто от одного названия уже все ускоряется. И - интересно услышать - где это у нас есть организации в которых 100 000 чел работает? Даже на Форде, кажется, порядка 40 тыс. - но это консорциум из нескольких компаний, филиалов и пр., и уж явно зарплата там не считается сразу для всех.

не надо быть таким радикальным. :) да каждый использует то, что он уже знает. знает только трезвенку будет только трезвенка. :) У меня был плохой опыт с двузвенной технологией когда был куплен софт в бан за 1млн. баксов и он не смог потянуть 150 (сто пятьдесят) операционистов. вот это был сакс. :( трезвенки пока всегда работали. следует ли из этого что трезвека лучше двузвенки? НЕТ! :) Это как в анекдоте:

- Вы любите кошек?
- Нет!
- А! Вы их просто готовить не умеете. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200086
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально при описании базы данных можно редко встретить необходимость хранения обьектов с неизвестным кол-вом аттрибутов и прикручивать это на СУБД печально, так как под это релляционные СУБД не предназначенны. В основном я встречал с попытками сделать такое людей, у которых была "светлая мечта" сделать универсальный проект, не зависящий от постановки.

есть метамоделирование и трансформация метамоделей. вот тут запросто можно получить известное число аттрибутов, то число объектов и аттрибутов у этих объектов не ограничено. а признаком хорошей метамодели является не изменении ее схемы при добавлении новых элементов.

это было так к слову. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200121
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 папа Карло

При наличии одного компьютера на сервере приложений очевидного (!) выиграша в производительности трехзвенки нет. Это по-моему, если есть - поправьте. Более того, при отсутствии правильного кеширования данных на сервере приложений будет явный проигрыш (но при наличии может быть выигрыш). Преимущества трехзвенной архитектуры в скорости (масштабируемости) неоспоримо проявляются ИМХО только при наличии параллельно работающих серверов приложений. При этом опять же, необходимо правильно спланировать кеши данных, иначе один медленный сервер БД съест весь выигрыш. Но планировать кеш на параллельных серверах, это та еще задача, покруче даже расчета зарплаты, особенно при лоад балансе. Этот кэш ведь нужно постоянно реплицировать между серверами. И потом масштаб задачи явно не тот, чтоб ставить параллельные сервера приложений. В общем большая куча дополнительных проблем, которых уважаемый докладчик счастливо избежал. Так что по-моему по архитектуре все сделано правильно.

Насчет гугла, работающего на четверках. Этот аргумент я слышал много раз. Но это же вообще другой класс задач: чистый ОЛТП, медленно меняющаяся база данных, которую можно реплицировать раз в неделю, поток данных в одну сторону - только селекты, об актуальности данных речи нет вообще, более того, никаких пользовательских сессий, прав доступа, транзакций, целостности данных и т.д. Машины гугла просто работают параллельно ничего не зная друг о друге. Вот потому и четверок достаточно, нужно только, чтоб их было достаточно много.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200685
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
При наличии одного компьютера на сервере приложений очевидного (!) выиграша в производительности трехзвенки нет.

итак у меня выделеный AS, в нем в виде объекта в памяти наш кеш. думаю этот кеш весь влезет в гиг памяти, если нет покупаем еще, благо цена памяти в районе цены мешка картошки. в крайнем случае сваливается в своп который имхо для подобной задачи более эфективен субд. dom-xml например забавно кеширует свои объекты. А в субд это у нас плоские таблицы которые нада считать с диска и преоброзовать чтобы провести вычисления.

p.s. а про гугл вы не в ту степь, во первых это не рсубд, во вторых думаю там объем такой что о репликации речь не может идти ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32200883
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> При наличии одного компьютера на сервере приложений очевидного (!)
>> выиграша в производительности трехзвенки нет.

Возьмем более сложный вариант. Два компьютера.
Имеются расчеты, которые выполнить за короткое время почему-то не удается.
Пусть даже кривые руки программиста в этом виноваты. Но такие расчеты имеются.
Что мы при этом имеем на клиент-сервере: один пользователь запускает такой расчет и идет пить кофе, а второй может спокойно составить ему компанию, потому-что радости от тормозов на сервере он явно не получит.
Что мы имеем с 3-х звенкой: один пользователь выгребает на свою тачку (где у него установлен средний слой) нужные ему данные запускает расчет и идет пить кофе, а второй продолжает работать как ни в чем ни бывало.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201161
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 папа Карло
каждый использует то, что он уже знает. знает только трезвенку будет только трезвенка
Именно поэтому, руководитель проекта должен четко представлять где, что использовать и подбирать людей с соответствующими знаниями. Хотя, по-моему, если человек знает 3-х звенку - но при этом не знает обычного клиент-сервера, это не есть хорошо.
Что касается вашего опыта - видимо, был закуплен такой удачный софт. Могу привести обратный пример - MSSQL 6.5 тянул порядка 400-500 клиентов, до 20 активных.
2 xtony
Кривые руки программиста что угодно загубят. На практике, в правильно спроектированных клиент-серверных системах, такого влияния одного расчета на всех нет.

Я не против 3-х звенки! Но данная тема переросла в споры о ней, хотя посвящена была системам с гибким алгоритмом.

2 ASCRUS
Да, в вашем случае, наверно достаточно обойтись такой реализации истории. Однако необходимость же хранения сущностей с произвольным кол-вом атрибутов весьма актуальна - если не рассматривать такую сущность как основу базу, а напр., как вспомогательный информ.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201338
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Папа Карло

Загубить можно что угодно. :) Давайте лучше посчитаем. :)

Давайте, считаем:

Пусть издержки на производство продукта А составляют 1000 рублей в месяц.

Затраты постоянные или переменные?

Мы прибыльная компания и продаем на 1500 рублей в месяц. Итого мы имеем 50% прибыли от вложенных денег. Теперь представим что мы продали на одну копию больше и теперь у нас не 1500 рублей, а 1700 рублей.Итого мы получили 70% процентов от вложения наших средств.

А это зависит от вида затрат.

Теперь предположим что мы уменьшили издержки на ту же сумму.

За счет чего?

Т.е. теперь мы тратим 800 рублей на производство и получаем все те-же 1500.

так за счет чего мы издержки снизили? А не уменьшилось ли у нас качество при этом? Не нанесли ли мы урон бренду (компании или продуктовому)? Не упадут ли у нас продажи через 3 месяца, после сокращения этих издержек?

Мы получили 87% прибыли. Что в принципе далеко не плохо. :)

Опять же зависит от вида издержек.

я, разумеется, могу ошибаться. :)

Ваш расчет верен только математически (при вычислении процентов). К реальной жизни он имеет очень слабое отношение.

теперь с примерами если можно "почему это глупость". прошу прояснить ситуация не для того чтобы спорить, просто хочу знать больше подходов и получить больше опыта.

см. выше. Если интересно развить тему с целью получения опыта - предлагаю вынести в отдельный топик.

нет. Именно поэтому я не говорю что хорошо и что плохо в той конкретной реализации что сделана ASCRUS. Он сам кузнец мне все равно....

Вопрос снят :) Значит мне показалось, что Вы слишком уж рьяно критиковали решение ASCRUS :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201388
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Varivan:

Ну как всегда! :) читаем только то, что хотим прочитать.

написал же: "при верхних расчетах подразумевается что уменьшение издержек произошло за счет изменения дизайна системы на начальном уровне"

Вы меня спрашиваете про качество итд. Ответ такой: При моделировании ситуации мы отбрасываем все не нужное, то что в рассмотрении ситуации роли не играет. Надеюсь с этим никто спорить не будет? ;) Так вот когда я "смоделировал" ту ситуацию то посчитал (принял за условие) что все остальное что не оговорено в условиях остается в том-же состоянии (это у меня по дефолту). Т.е. качество не страдает. разумеется. :) Почему качество не страдает? Ответ очевиден: у любого нормального продукта есть требования. Когда продукт отвечает тем требованиям то он качественен. Пример: по требованиям система должна иметь максимальное время запроса-ответа до 10ти секунд. Система при проектировании человеком А показывает величину 1 секунда за запрос-ответ и операционная стоимость состовляет 1000 рублей в месяц. Система при проектировании человеком Б показывает величину 1.5 секунды за запрос-ответ и операционная стоимость состовляет 800 рублей в месяц. Как Вы понимаете быджет на разработку фиксированный и равен в случае А и Б. У меня вопрос к Вам: по какому пути Вы пойдете?

Ваш расчет верен только математически (при вычислении процентов). К реальной жизни он имеет очень слабое отношение.

Так-же... примеры расчетов Вы мне так и не привели. Хотябы даже очевидных для меня. :( Где пример из жизни: типа мы снизили - получилось вот так?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201390
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Папа карло

"при верхних расчетах подразумевается что уменьшение издержек произошло за счет изменения дизайна системы на начальном уровне"

Мы вроде говорили про производства абстрактного продукта "А"? ПРичем тут дизайн системы?

Так вот когда я "смоделировал" ту ситуацию то посчитал (принял за условие) что все остальное что не оговорено в условиях остается в том-же состоянии (это у меня по дефолту). Т.е. качество не страдает. разумеется. :)

Вы поставили очень серьезное ограничение для своей модели. Издержки всегда снижаются за счет чего-то. Другое дело, что мы можем осознанно пожертвовать чем-то для снижения издержек, но каждый конкретный случай надо рассматривать отдельно. Правила тут, к сожелнию не выведешь.

Так-же... примеры расчетов Вы мне так и не привели.

посмотрите на наши (Российские) продуктовые бренды (хотя, ИМХО, сейчас ситуация меняется....). Есть период вывода бренда на рынок, когда соотношение цена/качество очень привлекательное. Когда бренд раскручивается и пользуется популярностью, резко снижают издержки (и как следствие качество) и бренд "выдаивается". Через какое-то время бренд с рынка уходит, собрав сливки и выпускается новый.

Но эта процедура вполне осознанная и просчитанная программа. А если мы снизим издержки не вовремя?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201404
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Varivan:

Удивительная способность игнорировать вопросы..... :(

так по какому пути Вы пойдете?

Для того, чтобы говорить что внутри бренда уменьшались издержки надо было там быть. Я там не был, поэтому говорить так не могу. У вас есть конкретные примеры из Вашей практики? Если есть то хотелось бы услышать "без имен" как это было, если нет, то так и скажите что то что вы говорить основано на теории и практики нет. Ну дык? Да, дабы не быть голословным можно обозначить Ваше положение в компании чтобы понять угол зрения с которого сделанны выводы.

Спасибо!
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201405
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да..... я могу снижать издержки на столько на сколько смогу в рамках бюджета и требований проекта. Т.е. я не могу перерасходовать бюджет. И могу "ухудшать" продукт в рамках требований (пример что я привел).
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201407
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Папа Карло

так по какому пути Вы пойдете?

Ваш выбор из серии "лучше быть здоровым и богатым, чем бедным и больным"

У вас есть конкретные примеры из Вашей практики? Если есть то хотелось бы услышать "без имен" как это было, если нет, то так и скажите что то что вы говорить основано на теории и практики нет. Ну дык?

Мясоперерабатывающий комбинат (достаточно известный в Москве, еще со времен СССР). Комбинат купили и новое руководство вовсю занялось cost cutting, в результате чего участились перебои с качеством на фоне агрессивного продвижения конкурентов. Как следствие - падение продаж и уменьшение доли рынка. Я лично делал анализ дистрибьютерской сети этого комбината и СВОТ анализ для нее же.

Еще одна компания (сфера услуг), новое руководство так же решило занятся снижением издержек. В результате вместо 3-х слойной туалетной бумаги стали закупать однослойную и вместо гелевых ручек шариковые всем, в т.ч. до зам директоров. Догадываетесь как после этого повысилась лояльность сотрудников?

Третья впала в другую крайность в попытках замотивироать продающий персонал. При этом система мотивации менялась раз в квартал, а то и чаще. Лучшие уже ушли....

Достаточно?

Да, дабы не быть голословным можно обозначить Ваше положение в компании чтобы понять угол зрения с которого сделанны выводы

Я консультант по построению и автоматизации системы управленческого учета для собственников и высшего руководства.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201412
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно?

Спасибо за ответы. Их достаточно. :) Как я уже говорил в этом треде: "загубить можно что угодно" и "во всем свой подход нужен". Люди не всегда умеют грамотно сделать "вещь" (thing). Например большинство писателей на вижуал бейсике уверены что нарисовать схему БД или написать СПшку это пару раз плюнуть, а то что сиквел бывает без курсоров они просто не знают. Вы, как консультант, говорили руководству чем грозят те методы что они выбрали для уменьшения затрат?

Свои примеры я приводил с точки зрения трейд-оффов возникающих на начальном этапе проекторования, когда выбрав немного не тот дизайн увеличивается ТСО продукта. Ваши примеры валидны, но немного из другой оперы. Я разделяю Ваше мнение о том, что произошло с теми компаниями в которых Вам "довелось".

Дабы быть even я senior data architect and manager в западной компании. занимаюсь анализом в области финансов. за спиной крупные (много млн юс)проекты в качестве лидера БД анализа и дизайна.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201413
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Папа Карло

Дабы быть even я senior data architect and manager в западной компании. занимаюсь анализом в области финансов.

Приятно познакомится
Наверняка Вы знакомы с Balanced Storecard (BSC). Так вот затраты - это только один из немногих показателей. Их можно и нужно(!) сокращать, но только, при прогнозируемом изменении (которое устраивает) остальных показателей BSC. Я только это и пытался сказать все это время :)
К сожалению, в реальной жизни, не часто встретишь такие оценки. По крайней мере в России.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201414
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Млин. Этого смеющегося колобка следует воспринимать как дружелюбную улыбку :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201418
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть проблемма. :( я не всегда могу сказать то что хочу нужными словами. просто забываю русский язык. :( иногда доходит до смешного... :() в целом мы с вами на одной ноге. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201420
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Balanced SCorecard?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201424
Varivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, конечно SCorecard, спасибо за поправку. У нас уже ночь :)

просто забываю русский язык

не сочтите за комплимент, но не заметно :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201425
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<offtopic state="on">

пример того как забывается язык. год назад стоял разговаривал с рисским народом о чем-то, стояли смеялись. так вот я что-то рассказывал и забыл слово "лоб" и стою, хлопаю себя по люу и спашиваю как это по-русски называется. народ выпал в осадок. смеялись над этим потом с неделю. :) слова которые не используются в активной речи постепенно вылетают.... то же самое происходит и с англ. языком.....

<offtopic state="off">
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201437
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Gt_
>p.s. а про гугл вы не в ту степь, во первых это не рсубд, во вторых думаю там >объем такой что о репликации речь не может идти ...

Так и я про то. Гугл был приведен чуть выше как аргумент в пользу успешности многозвенной архитектуры вообще и в обсуждаемой задаче в частности. Я и сказал, что это аргумент не в тему.

2 Gt_ && xtony

Вы неявно делаете предположение, что кэш в среднем слое спланирован правильно т.е.: 1) хранит то что нужно и 2) не хранит лишнего. Если это условие не соблюдено, то средний слой будет постоянно лазить в БД или же в начале расчета читать все подряд, и в результате получатся те же тормоза, от короых мы пытаемся избавиться . Плюс в случае изменения алгоритмов расчетов его (кэш) возможно нужно будет препланировать, поскольку могут потребоаться новые данные, которых, если соблюдено условие 2), там скорее всего нет. А данные в БД еще меняются иногда. Это все относится и к одному и ко многим компьютерам в среднем слое.

Но такое планирование кэша представляет собой отдельную серьезную задачу, соизмеримую по сложности с решаемой проблемой. У ASCRUS -а и близко не было ресурсов для борьбы еще и со средним слоем. Так что все сделано правильно.

А еще при этом нужно помнить, что SQL сервера создавались для обработки данных и с ними конкурировать непросто.

Но вообще я согласен: выигрыш на многозвенной архитектуре получить в принципе (не всегда) можно, а на всяких хитрых задачах даже очень большой.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201439
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гугл был приведен не как пример распределенной системы. прошу понять меня правильно. "абстрактной" системы. этим примером прежде всего показывалось не приимущество что двузвенки круче трезвенок и не наоборот (изначальный спор). показывалось что существуют варианты и "говорить за всех" не правильно.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32201440
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин..... "гугл был приведен не как пример распределенной системы" читать как "гугл был приведен как пример распределенной системы"
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32202129
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 agg
>> На практике, в правильно спроектированных клиент-серверных системах, такого влияния одного расчета на всех нет.

Что-то я плохо понял ответ. Или вообще не понял.
1. Если вы считаете, что нет систем, которые производят какой-то расчет за более, чем одну секунду... Тогда я могу поставить вам такую задачу: требуется сделать так, чтобы пустой цикл исполнялся одни сутки. Дебильная задача? А может заказчику именно эта задача и нужна.
То есть, задачи, которые занимают продолжительное время есть.
2. Если вы считаете, что SQL-сервера умеют так распараллеливать запросы пользователей, что даже незаметно, работает ли там один пользователь или 1000, то почему же я иду пить кофе, когда мой напарник запускает расчет на тестинг?

2 c127
Имеется достаточно много задач, которые не решаются запросами. Очень сомнительно, что будет получен выигрыш во времени для реализации их на стороне сервера (для себя я год назад эксперименты уже проводил, может быть сейчас в серверах что-то поменялось - можно будет проверить), даже если кэш на среднем слое будет реализован хреновенько.

Еще хотелось бы заострить внимание на самой разработке.
Трассировать средний слой будет попроще, чем хранимку.
Трассирование хранимок я видел только на InterBase. На Оракле не работал, не знаю, а вот на MSSQL что-то не встречал.

Чтобы не быть оффтопиком. ;)
1. Разве нет систем, где вообще реализованы внутренние языки, на которых пользователь может реализовать свой любой алгоритм?
Это тоже системы с изменяющимися алгоритмами, сделанные на трехзвенке.
То есть, реализация изм.алгоритмов на клиент-сервере, это не панацея, а вариант реализации.
2. Где-то проскользнула фраза "в то время, когда происходит расчет на среднем слое, данные в БД могут измениться".
Я предпочитаю вытаскивать все, что нужно сразу, чтобы измененные за время расчета данные не попадали в расчет (думаю, по понятным причинам).
По-поводу "лишних" данных. Если сущность насчитывает мало объектов, то я предпочитаю выгребать все сразу. Например тарифов у меня будет на дату штук 100-200. Я даже заморачиваться не буду, чтобы смотреть кто из них нужен, а кто нет для расчета. А вот клиентов я вытащу только тех, кого нужно расчитывать - зачем мне толпа клиентов та нерасчитываемых?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32202374
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, хотел чего нибудь еще рассказать, да пока времени нет :)

Но вопросик все таки народу, работающему с 3-им звеном задам - распределенность понятно, выигрыш по кол-ву коннектов понятно, лицензии тоже понятно, еще много чего понятно. Но в кач-ве примера выигрыша среднего слоя еще многие приводят аргумент о "сложных расчетах", которые невозможно провести средствами SQL сервера. Если не сложно, не могли бы уважаемые знатоки привести примеры таких вот расчетов, которые им приходилось реализовывать в проектах и которые точно не могли бы быть реализованы с помощью средств самих СУБД. Было бы очень полезно и интересно, во всяком случае мне, чтобы иметь основные представления о проектах, реализуемых с использованием среднего звена и его целесообразности применения в каждом конкретном случае.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32202523
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но в кач-ве примера выигрыша среднего слоя еще многие приводят аргумент о "сложных расчетах", которые невозможно провести средствами SQL сервера.

с помощью скл сервера можно производить любые расчеты. даже если прикинуть что транзакт сиквел ущербен, то мы можем писАть расширенные СПшки, что покрывает все остальное. Но! ....хмм всегда есть но..... СКЛ Сервер хорошо работает с реляционными операциями и для всего остального он менее эффективен. Как известно расчеты не всегда реляционные. Мы можем использовать реляционную структуры для хранения (важное слово) но описывать бизнес на транзакт сиквеле не всегда правильно. Почему?

Как известно основныи задачами БД является хранить информацию и обеспечивать ее целостность. Когда мы помещаем, кроме дата логики, бизнесс-логику в БД то мы должны отдавать себе отчет в том, что мы уменьшаем производительность ДБ серсера (число транзакций которые он может выполнить). При этом стоимость транзакции растет. Как известно БД это shared (какое русское слово?) ресурс. Т.е. в больших системах с большой конкуренцией и большим объемом данных перфоманс системы может просесть до нуля только из-за того что скл сервер вместо аппликейшен сервака выполняет бизнес логику. Если так-же принять что масштабировать средний слой много проще и главное дешевле чем БД....

Двузвенка с логикой в БД может дать приимущество перед распределенной системой только на маленьких проектах (зарплата например).

Можно делать двузвенку с логикой на клиенте, но если безопасность системы играет роль (например интернет решение), то размещать логику на клиенте себе дороже. :) Получается возвращаемся в базу с логикой или на аппликейшен layer. Что выбрать? Для меня персонально приходят автоматически распределенная система и кешами.

===
Безотносительно к теме:

Дураки учаться на соих ошибках
Умные на ошибках дураков
Мудрые ошибки предвидят.

Удачи на дорогах! :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32202569
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Как известно основныи задачами БД является хранить информацию и обеспечивать ее целостность.

Скорее так: хранить, обрабатывать и обеспечивать целостность. А то select получается непонятно зачем в скл введен.

>Когда мы помещаем, кроме дата логики, бизнесс-логику в БД то мы должны отдавать себе отчет в том, что мы уменьшаем производительность ДБ серсера (число транзакций которые он может выполнить).

Если под транзакцией понимать внутреннюю транзакцию, то число транзакций остается постоянным. Это важно. Если под транзакцией понимать обработку запроса клиента (время отклика клиенту), то да, уменьшается, а время отклика соответственно увеличивается. Но во-первых увеличивается число таких транзакций, а во-вторых в роли клиента в многозвенке выступает средний слой, который еще должен эти данные обработать, поэтому в случае одного компьютера в среднем слое совершенно неизвестно, уменьшится ли время отклика всей системы.

Никто же не спорит, что на каких-то задачах трехзвенка (или толстый клиент) может дать значительный выигрыш, но давайте вернемся к конкретной обсуждаемой задаче - расчет зарплаты. ИМХО есть только два весомых аргумента в пользу среднего звена на данной задаче это удобство отладки и удобство языка программирования. Но ASCRUS говорит, что сайбейз ASA предоставляет неплохие средства для отладки, а Watcom-SQL достаточно удобный и мощный язык, так что вроде бы и тут все в порядке.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32202907
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS
Помнишь задачку трехлетней давности по расчету пени, где следующее значение зависело от расчета предыдущего? Помнится без курсора мы ее не смогли решить.

2 папа Карло
>> shared (какое русское слово?)
Русское слово - "расшаренный".

2 с127
>> поэтому в случае одного компьютера в среднем слое...
Экстремальничаем? Один компьютер в системе?
Я, к сожалению (или к радости), с таким не встречался с тех пор, как перестал работать с парадоксовскими табличками.

>> давайте вернемся к конкретной обсуждаемой задаче - расчет зарплаты
Почему же тогда тема называется "Система с изменяющимися алгоритмами расчета", а не "Расчет зарплаты"?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32203143
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtony
Насчет пени помню :) Только 3 года назад не стоит забывать experience у меня в SQL был пониже, СУБД были попроще :) Сейчас например у меня в проекте одним запросом рассчитывается на любой месяц график посменной работы, по установленному юзером алгоритму работу (например сутки-выходной-выходной), причем у него есть дата начала действия, которая может "сбиваться" (например график вел отсчет с 1 января и по идее 1 марта должен быть выходной, но ему поставили, что теперь с 1 марта он пойдет считать смены заново). Так что и расчет пенит сейчас я думаю одним парочкой запросов можно было бы и обойтись. На самом деле у меня в проекте очень мало мест, где встречаются курсоры, причем в таких местах идет не какая то обработка данных, а обычно некоторые процессы системы расчетов (например перебор в курсоре алгоритмов по дереву иерхии обьектов и последовательный вызов через динамический SQL связанных с алгоритмами ХП).

c127
Скорее так: хранить, обрабатывать и обеспечивать целостность
Полностью согласен насчет этого высказывания. Иначе зачем тогда вообще СУБД, если их использовать только как примитивные, но надежные хранилища данных. Для такой цели и в файловой системе можно все хранить и 3-звеном все вытаскивать оттуда, обрабатывать и записывать.

папа Карло
Вопрос как специалисту - сейчас в СУБД идет тенденция расширения возможностей с помощью интеграции с ООП средствами. Например тот же Sybase ASA позволяет сейчас подключать Java и использовать расширенные хранимые процедуры, написанные на ней, внутри ХП обьявлять переменные Java классов и работать с ними, даже есть возможность хранить экземпляры обьектов в полях таблиц и работать с их свойствами и методами в запросах. По идее такие "навороты" должны позволить решать "нерешаемые" и вышеперечисленные здесь проблемы - хранение произвольного кол-ва аттрибутов, деревьев, графов, проведение сложных с точки зрения релляционной модели данных расчетов и т.д. Как Вы думаете - такие возможности реально использовать в вышеперечисленных задачах или же это тупиковое направление и единственный выход, когда на SQL не получается - все реализовывать на 3-ем звене ?

У меня например лежит почти готовый проект, который просто надо перевести на Java, макрогенератора, который позволяет обрабатывать SQL скрипты с макрокомандами и генерить на выходе "чистый" SQL. Такая штука например очень полезна для замены динамического SQL, так как на уровне макрокоманд можно довольно таки мощно управлять сборкой скриптов в пакет - фактически на выходе для СУБД получается "оптимизированный" с учетом конкретных условий и состояний данных пакетный скрипт, который просто достаточно выполнить (я бы сказал получился "аналог" ASP, только под SQL). Делать такую штуку я пока не стал по простой причине, что для расчета ЗП мне хватило обычного динамического SQL и ХП, так как расчеты начислений, налогов и удержаний вызываются последовательно в зависимости от положения их в иеархии и например никаких сложных условий порядка проведения расчетов нет. Хотя возможно все таки потом напишу, когда будет свободное время - у меня уже есть там наработки в плане подключения метаинформации и превратить макрогенератор еще и в средство генерации скриптов по абстрактным макетам и подключением метаинформации БД заманчиво, можно будет автоматизировать написание однотипных скриптов, ХП, триггеров и т.д. :) Плюс не забыть сюда добавить еще возможность расширения макрогенератора собственными plug-in классами, позволяющих вводить в макроязык новые команды и способы обработки генерации скриптов и получаем для СУБД неплохой plug-in в виде макро-языка, позволяющего в некотором роде творить чудеса и управляемый прямо из SQL :)

P.S. Кстати с таким макрогенератором скриптов встроенным в СУБД тоже думаю можно элементарно организовывать системы с изменяющимися алгоритмами расчетов, если есть необходимость хранить скрипты расчетов не в ХП, а в других местах (файлах, BLOB-ах, удаленно и т.д.) или же для порядков расчетов требуется реализация какого то сложного алгоритма.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32203660
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS
>> Только 3 года назад не стоит забывать experience у меня в SQL был пониже, СУБД были попроще
Верю, верю. :)
Я бы еще с удовольствием взглянул на реализацию:
1. построения дерева по integer ParentId
2. селект всех вложенных в ноду по Id ноды
3. поиск замкнутой цепочки
В дереве могут находиться замкнутые цепочки (и это нормально) и построение ветки оканчивается при достижении конца, либо если достигнут элемент, который характеризует ветку как "замкнутую".
Третий пункт у меня год назад мозгов не хватило реализовать без курсоров.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32203734
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS

Вопрос как специалисту - сейчас в СУБД идет тенденция расширения возможностей с помощью интеграции с ООП средствами. Например тот же Sybase ASA позволяет сейчас подключать Java и использовать расширенные хранимые процедуры, написанные на ней, внутри ХП обьявлять переменные Java классов и работать с ними, даже есть возможность хранить экземпляры обьектов в полях таблиц и работать с их свойствами и методами в запросах. По идее такие "навороты" должны позволить решать "нерешаемые" и вышеперечисленные здесь проблемы - хранение произвольного кол-ва аттрибутов, деревьев, графов, проведение сложных с точки зрения релляционной модели данных расчетов и т.д. Как Вы думаете - такие возможности реально использовать в вышеперечисленных задачах или же это тупиковое направление и единственный выход, когда на SQL не получается - все реализовывать на 3-ем звене ?

как я уже говорил... за все есть своя цена. при размещении таких наворотов в БД мы (если система распределенная) нагружаем один узел. Опять-же уже говорил что масштабировать базу сложнее чем среднее звено (Вы бизнес логику называете третьим звеном? если это так, то наверное это не совсем корректно. чтобы не было конфуза давайте так: база, средний слой (бизнес логика, блл), UI (презентационный слой)). Правильно построенная система должна иметь линейную масштабируемость. Если нагрузга не распределена равномерно между узлами и у вас нет возможности "играться" ей чтобы равномерно ее распределить, то масштабируемость не будет линейной, что ведет к увеличению стоимости системы (имеется ввиду операционная стоимость).
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32203827
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 xtony

>3. поиск замкнутой цепочки
В дереве могут находиться замкнутые цепочки (и это нормально) и построение ветки оканчивается при достижении конца, либо если достигнут элемент, который характеризует ветку как "замкнутую".
Третий пункт у меня год назад мозгов не хватило реализовать без курсоров.

Не бывает в дереве замкнутых цепочек по определению: дерево - граф без циклов. Но о чем идет речь понятно.

Какой СКЛ сервер? ДБ2 и оракл имеют рекурсивные запросы, ими такие штуки можно делать. В классическом СКЛ врядли без курсоров можно обойтись. Наверное еще можно попытаться извернуться через UDF, но там могут быть проблемы с рекурсией (у MSSQL такие проблемы есть по-моему, насчет сайбейза не знаю).
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204098
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже попытаюсь свои три копейки вставить.

А почему не рассмотреть распределённые системы СУБД типа Real Application Cluster? Там ведь и механика будет более заточена под балансировку "распределённых" запросов, всяческие автоматические оптимизаторы начинают работать. То есть клиент снаружи опять работает напрямую с "сервером" БД, а за раздачу нагрузки отвечает СУБД со спецификой реляционной обработки.
Вопрос №2 - почему так ополчились на курсоры? Бывают задачи, в которых курсоры работают быстрее, чем set-oriented SQL.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204365
Фотография Циничный Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не менее безотносительно к теме

2 Папа Карло

Дураки учаться на соих ошибках
Умные на ошибках дураков
Мудрые ошибки предвидят.



Неа, не так. Это больше на правду похоже:

Умные люди учатся на чужих ошибках,
Нормальные люди - на собственных,
А дураки - ни на чем не учатся...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204457
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtony
Ну по реализациям деревьев на форумах уже не мало написано, так что при желании посмотреть как их хранить и обрабатывать можно на том же sql.ru. Также в дополнение приведу свой способ обработки деревьев, который был применен в моем проекте. Сразу оговорюсь, что такой способ хорош только для хранения деревьев с малой глубиной вложенности узлов, так как построен с использованием денормализационной структуры. Использовать буду синтаксис WatcomSQL, так как он более прост, нагляден и краток, чем TSQL. Итак для начала спроектируем таблицу, хранящую узлы дерева:
Код: plaintext
1.
2.
3.
create table Node (
  Node_Id int not null identity primary key
);

Далее спроектируем таблицу, хранящую отношения узлов дерева:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table Depend (
  Node_id int not null references Node (Node_id) on delete cascade,
  Parent_id int not null references Node (Node_id) on delete cascade,
  IsExtend tinyint not null default  0 ,
  primary key (Node_id, Parent_id),
  check (IsExtend in ( 0 ,  1 ))
);

Node_id выступает ссылкой на дочерний узел, Parent_id - на родительский. Установленные для них foreign Key с каскадным удалением гарантируют целостность данных.

Теперь обьясню смысл поля-флага IsExtend:
Если рассмотреть дерево с точки зрения взаимоотношений его узлов, то фактически получается что любой узел может иметь родителя, что соотвествующе означает, что если у родителя есть другие родители, то любой узел дерева получается дочерним по отношению к всей цепочке узлов, от его родителя до корня (т.е. узла, не имеющего родителя, или замыкающего цепочку на дочерний по отношению к нему элемент). Как известно самое сложное в обработке деревьев на РСУБД - это не их хранение, а их обработка.

С учетом того, что в моем случае хранящиеся деревья имели малый уровень сложности, я решил проблему обработки деревьев путем денормализации таблицы взаимоотношений узлов Depend. Все отношения, описываемые как входящие данные, т.е. записанные в БД из вне, хранятся в флаге IsExtend с значением 0. На эти отношения в таблицу также вписывается вся цепочка от родителя до корня с значением флага 1. Денормализация на лицо - чем глубже дерево, тем больше растет таблица.

Пример:
есть отношения родитель-дочерний
узел1 -> узел2 -> узел3

в итоге в depend на узел1 не будет ни одной записи

на узел2 запись
node_id=узел2 / parent_id=узел1 / IsExtend = 0

а на узел3 уже 2 записи:
node_id=узел3 / parent_id=узел2 / IsExtend = 0
node_id=узел3 / parent_id=узел1 / IsExtend = 1

Что это дает ? Итак получение запросом глубины вложенности узла @Node от корня:
Код: plaintext
1.
2.
3.
4.
5.
select IsNull(CountNode) +  1  as Level
from (
  select count(Node_id) as CountNode
  from Depend
  where Node_id = @Node_id ) as t;

Получение списка всех узлов от @Node до всех дочерних:
Код: plaintext
1.
2.
3.
4.
5.
select Node_id
from Depend
where Parent_id = @Node_id
union all
select @Node as Node_id;

Получение для клиента дерева:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select Node_id, Parent_id
from Depend
where IsExtend =  0 
union all
select Node_id, null as Parent_id
from Node n
where not exists(
        select *
        from Depend
        where Node_id = n.Node_id and
              IsExtend =  0 )


Ну и так далее - при желании простор для фантазий существует.

Продолжение в следующем ответе ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204464
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как видно при такой структуре хранения запросы для работы с иеархиями просты и сложностей не вызывают. Удивительно, но в принципе в отличие от некоторых других способов хранения деревьев для их обработки на SQL в данном случае так же все просто, как и в самой обработке.
На таблицу написанны триггера на добавление и удаление записей (изменение будем считать не возможным, так как оно не имеет смысла в данной реализации). Соотвествующе при добавлении в таблицу внешним процессом связи между узлом и его родителем, с установленным флагом IsExtend в 0, вызывается след. триггер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
create trigger trg_Depend_Insert
  after insert
  on Depend
  referencing new as Inserted
  for each statement
begin
  if VarExists('@@Depend_Oper') <>  0  then
    return;
  end if;

  create variable @@Depend_Oper tinyint;

   -- Добавляем связи родителей от родителей добавляемых узлов
 
  insert into Depend (Node_id, Parent_id, IsExtend)
    select t.Node_id, d.Parent_id,  1 
    from Inserted t
      inner join Depend d on d.Node_id = t.Parent_id
    where t.IsExtend =  0  and
      not exists(
        select *
        from Depend
        where Node_id = t.Node_id and 
              Parent_id = d.Parent_id);

   -- Вставляем родителями добавляемые узлы для дочерних узлов, ссылаемых на родителей
 
   -- добавляемых узлов
 
  insert into Depend (Node_id, Parent_id, IsExtend)
    select d.Node_id, t.Parent_id,  1 
    from Depend d
      inner join Depend p on p.Node_id = d.Parent_id and
                             p.IsExtend =  0 
      inner join Inserted t on t.Parent_id = p.Parent_id and
                               t.Node_id = p.Node_id and
                               t.IsExtend =  0 
    where not exists(
            select *
            from Depend
            where Node_id = d.Node_id and
                  Parent_id = t.Parent_id);

   -- Изменяем флаг родительских связей дочерних элементов на родителей
 
   -- добавляемых элементов, если есть совпадения родителей дочерних узлов и
 
   -- родителей добавляемых узлов
 
  update Depend d
  set IsExtend =  1 
  from Depend d
    inner join Inserted t on t.Node_id = d.Node_id and
                             t.IsExtend =  0 
    inner join Depend p on p.Node_id = t.Parent_id and
                           p.Parent_id = d.Parent_id and
                           p.IsExtend =  0 
  where d.IsExtend =  0 ;

  update Depend d
  set IsExtend =  1 
  from Depend d
    inner join Inserted t on t.Parent_id = d.Parent_id and
                             t.IsExtend =  0 
    inner join Depend p on p.Node_id = d.Node_id and
                           p.Parent_id = t.Node_id
  where d.IsExtend =  0 ;

   -- Вставляем родителями добавляемые узлы для всех дочерних узлов
 
  insert into Depend (Node_id, Parent_id, IsExtend)
    select d.Node_id, t.Node_id,  1 
    from Depend d
      inner join Depend p on p.Node_id = d.Parent_id
      inner join Inserted t on t.Node_id = p.Parent_id and
                               t.IsExtend =  0 
    where not exists(
            select *
            from Depend
            where Node_id = d.Node_id and
                  Parent_id = t.Node_id);

  drop variable @@Depend_Oper;

  exception
    when others then
      drop variable @@Depend_Oper;
      resignal;
end

Получается, что тригер срабатывает только на вводимые извне данные о связях и автоматически "дописывает" в таблицу всех родителей для своего родителя из той же таблицы Depend, при условии, что в Depend таких записей еще нет. Дополнительно тригер проверяет совпадения условия вставки узла между узлами ветки и соотвествующим образом так преобразует ветку, чтобы дочерние узлы, имеющие родителями узлы, которые так же имеют как родителей вставляемые узлы, стали ссылаться только на вставляемые в ветку узлы.

Продолжение в следующем ответе ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204475
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При удалении связи вызывается след. триггер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
create trigger trg_Depend_Delete
  after delete
  on Depend
  referencing old as Deleted
  for each statement
begin
  if VarExists('@@Depend_Oper') <>  0  then
    return;
  end if;

  create variable @@Depend_Oper tinyint;

   -- Устанавливаем родителей дочерних узлов на родителей удаляемых узлов
 
  update Depend d
  set IsExtend =  0 
  from Depend d
    inner join Depend p on p.Node_id = d.Node_id and
                           p.IsExtend =  0 
    inner join Deleted t on t.Node_id = p.Parent_id and
                            t.Parent_id = d.Parent_id and
                            t.IsExtend =  0 
  where d.IsExtend =  1 ;

   -- Удаляем вспомогательные связи удаляемых узлов
 
  delete Depend d
  from Depend d
    inner join Deleted t on t.Node_id = d.Node_id and
                            t.IsExtend =  0 
    inner join Depend p on p.Node_id = t.Parent_id and
                           p.Parent_id = d.Parent_id;

   -- Удаляем вспомогательные связи дочерних узлов 
 
   -- по отношению к удаляемым узлам
 
  delete Depend d
  from Depend d
    inner join Deleted t on t.Node_id = d.Parent_id and
                            t.IsExtend =  0 ;

  drop variable @@Depend_Oper;

  exception
    when others then
      drop variable @@Depend_Oper;
      resignal;
end

Как видно из тригера, при удалении связей узлов, также удаляются из Depend все родители их родителей, а также связи всех родительские узлов удаляемых связей, расписанных в их "бывших" дочерних узлах. Так же тригер дополнительно проверяет совпадения условия удаления узла, имеющего дочерние узлы и преобразует ветку так, чтобы дочерние узлы стали ссылаться на родительские узлы удаляемых узлов.

P.S. Уф - думаю с такой терминологией сам запутался и всех запутал :) Ей богу, легче было бы нарисовать, чем все это пытаться обьяснить :)

Тригер на обновление ничего особенного не делает - просто следит за тем, чтобы никто ничего сам поменять не мог:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create trigger trg_Depend_update 
  before update
  on Depend
  for each row
begin
  if VarExists('@@Depend_Oper') =  0  then
    raiserror  20000  'Нельзя ручками изменять иеархию';
  end if;
end


Теперь скрипты изменения иеархии узлов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 -- Указываем, что узел 2 является дочерним по отношению к узлу 1
 
insert into Depend (Node_id, Parent_id)
values ( 2 ,  1 );

 -- Указываем что узел 3 является дочерним по отношению к узлу 2
 
insert into Depend (Node_id, Parent_id)
values ( 3 ,  2 );

 -- Вставляем узел 4 между узлом 2 и 3
 
insert into Depend (Node_id, Parent_id)
  select  4 ,  2 
  union all
  select  3 ,  4 ;

 -- Удаляем узел 4, что приведет к тому, что узел 2 станет снова 
 
 -- прямым родителем узла 3
 
delete from Depend
where Node_id =  4  and Parent_id =  2 ;
 --
 


В принципе это все. Как видно такая модель хранения иеархий расширяема вверх (например организация поверх Node хранения множества деревьев), так и вниз (например хранение на Node аттрибутов, истории их изменения, поддержка изменений задним числом и т.д.). Плюс как можно заметить такая модель данных не ограничивает хранение не только множества дочерних элементов в дереве на родительский элемент, но и множества родителей для одного дочернего элемента.

Итого имеем:
Достоинства - легкая модель хранения, простой и быстрый доступ и обработка, малое кол-во кода
Недостатки - денормализованная таблица, растущая в прогрессии в зависимости от кол-ва уровней в иеархии

У меня в проекте такая модель хранения дерева используется для хранения иеархии расчетных обьектов, с ориентировочной максимальной глубиной вложенности 6, и расчетных масок, в которых посредством этой технологии так же реализовано множественное наследование (ну или можно еще сказать множество родителей) и ориентировочной максимальной глубиной вложенности 4. Эти условия хранения иеархий вполне подходят под вышеописанную модель и я со спокойной совестью реализовал в данных случаях денормализованную структуру хранения этих иеархий.

P.S. Описанная модель является протестированной и рабочей. В принципе преобразовать с WatcomSQL на тот же TSQL думаю труда не составит, разве что могут возникнуть проблемы с рекурсивными вызовами тригеров, которые в ASA я элементарно разрешил через контроль существования глобальной переменной @@Depend_Oper.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204500
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и как концовка - в принципе имея абстрактный подход к хранению и обработке данных, на SQL можно очень многое реализовать, причем частенько решения будут менее трудоемки в коде и обгонять по скорости решения, аналогично реализованные на алгоритмических языках (например с вышеуказанной моделью хранения деревьев я спокойненько могу срезать с дерева одним запросом все уровни, удовлетворяющие какому то условию, на алгоритмических языках придется писать код, пользоваться рекурсией и т.д.). Не спорю, что приятней, когда SQL сам может обрабатывать иеархии, но в принципе у многих СУБД рекурсивные запросы уже есть, в следующей версии MSSQL я тоже слышал они появятся, что уже говорит о неком новом стандарте в SQL, думаю и ASA подтянется до своих больших братьев-конкурентов СУБД.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32204949
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 c127
>> Не бывает в дереве замкнутых цепочек по определению: дерево - граф без циклов.
Хорошо. Если в дереве не быват, то давай назовем это "замкнутое пространственно-временное дерево" или как угодно еще. Тем более, что я еще сюда не приплетал спецификации, которые у меня меняют каждый нод этого дерева (и соответственно ветки на него зацепленные) в зависимости от даты действия этой спецификации. Я может быть не совсем корректно объяснил задачу, просто хотел вложить самый минимум в вопрос. То, что есть у меня в постановке задачи мое "дерево" на идеальное дерево вряд ли тянет. В нем (как говорил ASCRUS) у родителей есть дети, но и у детей есть много родителей, то есть одна и та же ветвь может быть прицеплена на любой нод (отсюда и замкнутые цепочки). Вложенность нодов неограничена. Да и как заказчику скажешь: "А вы не вводите больше, 50 вложенностей - это в нашей программе максимум" ? Где есть 50, там будет и 51 (я в этом даже не сомневаюсь).

Я сижу на сайбейзе. Стареньком. Тут в запрос больше 16 таблиц (включая таблицы во вьюхах) не включишь. Я уже не говорю об остальном. Извращаюсь.

2 ASCRUS
Еще вот интересовал вопрос по поводу разворачивания данных "на 90 градусов". То есть вытащенные строки "развернуть" в столбцы. Только сколько строчек (соответственно столбцов) будет получено - это неизвестно.
На трехзвенке это решается достаточно легко коллекциями.
Может быть такие вещи папа Карло подразумевал как "нереляционные".
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205041
vinalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет заработной платы, не разу не видел толковой программы .
Хотелось бы узнать, может есть толковое описание экономической задачи для составления мат модели. А движок для 386 можно и на ассемблере наклепать. Все времени не хватает
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205056
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtony:

Хорошо. Если в дереве не быват, то давай назовем это "замкнутое пространственно-временное дерево" или как угодно еще.

...

В нем (как говорил ASCRUS) у родителей есть дети, но и у детей есть много родителей, то есть одна и та же ветвь может быть прицеплена на любой нод.

называть это надо сетью или графом, но никак не деревом.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205061
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 xtony

На стареньком сайбейзе без курсоров не обойтись. Или как ASCRUS предлагает - денормализованую таблицу. В таблице можно любой граф записать, поскольку граф и есть отношение (бинарное) на множестве вершин. Чтоб избавиться от рекурсии на селекте можно строить т.н. транзитивное замыкание: если (b,d) и (d,f) - ребра, то добавить (b,f) в ребра, если его там нет и поставить метку, что ребро ненастоящее или длину ребра. Аналогично при удалении, но только в обратном порядке. Это тоже рекурсия, но если строить транзитивное замыкание по мере построения графа, ее может быть удасться спрятать. Цикл тогда есть ребро, т.е. строчка в таблице, вида (b,b). Ограничения на глубину - только типы полей. Это нелегкий труд, по-моему проще курсорами. Зато селект будет летать.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205258
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtony
Разворачивать таблицы и генерить кросстабы на SQL сложно, но можно. Решения опять же в интернете выложены. Самое очевидное, что без динамического SQL не обойтись. Дальше зависит от самих возможностей СУБД. У меня пока такой задачи не стояло, так как кросстабы требовались в основном в отчетах и тот же Crystal Report или Power Builder прекрасно с этим справляются сами. Однако чисто теоретически, если такая задача потребуется, то в Sybase ASA я наверное попробую покопать в сторону агрегатной функции List, которая группирует данные в виде списка с разделителем, т.е. следующий скрипт:
Код: plaintext
1.
2.
3.
select Group_id, List(Value, ';') as Value
from Table
group by Group_id

на выходе вернет примерно следующее:
Код: plaintext
1.
2.
3.
Group_id  Value
 1           100 ; 200 ; 300 ;
 2           0 ; 0 ; 0 ;

Далее по размышлении если применить CROSS JOIN и воспользоваться возможностью ASA этот select на выходе закатать в текстовый файл с разделителеми, создать через динамический sql соотвествующую структуру темповой таблицы, то можно по идее через оператор WatcomSQL Load этот файл считать в таблицу "легким движением руки". Думаю такой метод сработает быстрее, чем пытаться данные заполнять в темповую таблицу через динамический SQL. Сам такого не пробовал, но как говорится, копать есть куда :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205525
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще есть задачка, с которой я недавно столкнулся.
Есть таблица с ParentId и TableId, которая ссылается на неограниченое количество таблиц (в моем случае их уже 12 и это количество может расти).
То есть здесь идет нереляционная связь.
Не "один ко многим", а "один ко многим таблицам".
А дальше к этой задаче мне нужно будет еще присобачить эти самые сети...
Только не такие, которые я описал - в той задаче мне только дерево из этих сетей надо было выщемить. А здесь придется по полной заморачиваться.
И расчеты по этим сетям и нереляционно связанным таблицам.
Как это делать на ООП, я себе это еще представляю.
Если я это буду писать на запросах, то месяца через два меня можно будет смело отвозить в дурку.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32205551
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это смотря какая СУБД использоваться будет. Если это для Sybase ASE, то в дурку ты гораздо раньше попадешь :) Но я так понимаю это для MSSQL 2000 и твоей задачи, так что тут вообще то все от тебя зависит, возможно есть шанс перепроектировать постановку так, чтобы задача выглядела более легко под релляционные модели данных.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206034
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2ASCRUS
Правильно ли я понимаю, что нереляционных моделей не существует?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206104
Sjfx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Серверная часть изначально писалась на MSSQL 2000, но где то на середине пути (уже когда была готова расчетная часть) по многим причинам была переведена на Sybase ASA 8, о чем я честно говоря не только не жалею, но до сих пор очень и очень радуюсь, опять же по многим причинам.
Вах, как интересно!
Не могли бы Вы осветить несколько моментов в отношении ASA8:
- Возможность внутри оператора выборки SELECT менять переменные памяти
- Возможность отключения логов для определённых таблиц
- Таблицы-переменные?
- Массивы
- Как там с UDF, интересуют:
- наличие возможности изменения внешних объектов из UDF
- зона видимости переменных - такая же?
- насколько (не)тормознуто работают курсоры, в смысле, соотношение тормознутости
курсоров и set-ориентированных операторов не отличается ли в лучшую сторону по
сравнению с MS?
- насколько WatcomSQL похож на MS-TSQL
- сколько места занимает установленный в полном объёме сервер?

К примеру ASA полностью интегрирован с Java
- Ну, полностью - это когда жаба-движок встроен так же плотно, как и WatcomSQL,
чтобы жабой можно было полностью заменить нативный язык; насколько я понимаю, такого нет ?
- UDF (не SP) на Java? Накладные расходы на вызовы жабят?
- Доступ из жава-процедур к переменным вызывающей процедуры на WatcomSQL?

в ASA UDF не могут возвращать набор данных
- а склепать временную таблицу или @Tbl table, чтоб они не удалились при выходе из UDF?

есть поддержка глобальных переменных
- а-а-а, это вещь! - менять-то их в UDF-ах можно (надеюсь) ?

Если это для Sybase ASE, то в дурку ты гораздо раньше попадешь :)
- а это как понимать? ASE вроде как продвинутее будет ?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206113
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно есть шанс перепроектировать постановку так, чтобы задача выглядела более легко под релляционные модели данных.

хехе... :) классический пример как русские девелоперы решают задачи. :) они требования меняют.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206169
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sjfx
я попробую ответить (ASA - как первая любовь :-))

- Возможность внутри оператора выборки SELECT менять переменные памяти
UDF позволяет менять переменные, при этом она может входить в оператор SELECT

- Возможность отключения логов для определённых таблиц
не знаю
- Таблицы-переменные?
Временные таблицы

- Массивы
Есть
- Как там с UDF, интересуют:
- наличие возможности изменения внешних объектов из UDF
- зона видимости переменных - такая же?

допустимы любые операторы DDL
локальные и глобальные переменные

- насколько (не)тормознуто работают курсоры, в смысле, соотношение тормознутости
курсоров и set-ориентированных операторов не отличается ли в лучшую сторону по
сравнению с MS?

не знаю

- насколько WatcomSQL похож на MS-TSQL
это другой язык, но ASA поддерживает два диалекта - WatcomSQL и TransactSQL

- сколько места занимает установленный в полном объёме сервер?
Про последние версии не скажу, дистрибутив (без инсталлятора, естественно) версии 5.5 можно было носить на дискете

про java пропущено - не знаю

- а склепать временную таблицу или @Tbl table, чтоб они не удалились при выходе из UDF?
можно

есть поддержка глобальных переменных
- а-а-а, это вещь! - менять-то их в UDF-ах можно (надеюсь) ?

можно

- а это как понимать? ASE вроде как продвинутее будет ?
ASE - это тот самый сервер, у которого общие корни :-) с MS SQL, а ASA - это детище Watcom, Sybase пока его не сильно трогает, испортить до конца не успела :-)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206171
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 папа Карло

хехе... :) классический пример как русские девелоперы решают задачи. :) они требования меняют.
Не требования, а постановку. за последние 10 лет ни разу не встречал корректной постановки задачи :-(
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206180
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок. что понимается под постановкой задачи? с примерами пожалуйста некорректной и корректной для того-же примера. :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206280
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 папа Карло

>>возможно есть шанс перепроектировать постановку так, чтобы задача выглядела более легко под релляционные модели данных.

>хехе... :) классический пример как русские девелоперы решают задачи. :) они требования меняют.

Тут наверное лучше было бы сказать не "перепроектировать", а "переформулировать" постановку задачи, т.е. сформулировать по-другому эквивалентным образом. Слово "перепроектировать" использовано не очень удачно, но о чем идет речь понятно и подход совершенно правильный. А вот настоящей классикой является то, что некоторые русские девелоперы не слушают собеседника.

2 xtony

>Еще есть задачка, с которой я недавно столкнулся.
Есть таблица с ParentId и TableId, которая ссылается на неограниченое количество таблиц (в моем случае их уже 12 и это количество может расти).
То есть здесь идет нереляционная связь.
Не "один ко многим", а "один ко многим таблицам".
А дальше к этой задаче мне нужно будет еще присобачить эти самые сети...
Только не такие, которые я описал - в той задаче мне только дерево из этих сетей надо было выщемить. А здесь придется по полной заморачиваться.
И расчеты по этим сетям и нереляционно связанным таблицам.

Не есть хорошо понимать проблема. Что такое нереляционная (или реляционная) связь? Если ты хочешь строчкам таблицы поставить в соответствие таблицы, то во-первых можно в строчки положить имя таблицы, во-вторых всегда есть системная таблица (если нет - можно завести), содержащая информацию о таблицах и их ID. Можно на нее сослаться по ID. Оба эти подходы эквивалентны, абсолютно реляционны и в результате строят искомое (если я правильно понял задачу) отношение на множестве таблиц. Это и есть твоя таблица с ParentId и TableId. Формально я не вижу проблемы вообще, другое дело что на процедурном языке может проще получится. А может и нет, смотря что потом требуется с этим всем делать.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206281
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ASCRUS

Решение с "select ... List(...)" классное. Жаль только ASA - зависимое, на ASE, MSSQL не прокатит по-моему. Буду использовать по возможности.

2 Sjfx
>- сколько места занимает установленный в полном объёме сервер?

Если нужен просто сервер, то достаточно скопировать один екзешник и пару длл, общим весом примерно 5М, прописать в пути все. Это будет абсолютно полноценный сервер, работающий в сети, но без сервисных утилит. С утилитами командной строки еще 4М нужно добавить. А если полностью с GUI и документацией, то метров 50 получится.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206756
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c127
Спасибо за переформулировку мой действительно неудачно выраженной мысли. Дело в том, что я примерно знаю, о чем пишет xtony - задача у него не из легких - расчеты потребления теплоэнергии абонентами, где существует сложное дерево подключение абонентов к теплосетям. Первое что действительно приходит на ум любому ООП программисту - считать все это дело графами. И тут конечно SQL уже не в помощь. Однако работая раньше в РАО я видел аналогичную задачу - расчет потребления электроэнергии, которую в бытность во времена Союза один программист решил без всяких графов. Работала она и на старых совестких машинах, работает прекрасно и сейчас на ДОСовом Foxpro. Не знаю как это уж назвать по научному, но расчет велся поэтажно, т.е. разом по каждому уровню глубины подключений. Это было возможно, так как следующий узел-абонент всегда зависел от показаний предыдущего узла-абонента и например самый последний уровень подключения никак не зависел в расчетах от корня. Кстати такая методика расчета прекрасно "перекладывается" на SQL, это я и имел ввиду.

Sjfx
Думаю PL99 развеял Ваши сомнения в ASA. Как меня самого не удивляет, но для сервера рабочих групп ASA слишком много всего умеет. Радует, что в отличие от MSSQL он достаточно гибок, не требователен к ресурсам и в тоже время обладает всеми качествами современного SQL сервера (развитый SQL, нормальные средства администрирования, отладка, мощный оптимизатор запросов, графический план запросов, репликация, кроссплатформенность, решения для мобильных устройств, криптография БД, поддержка работы с сжатыми БД и т.д.). С учетом того, что ASA в непрерывном развитии и даже в периодически выходящих паках не только ошибки четко и быстро исправляются, но и он обрастает новым функционалом без смены версии, лично я считаю что для задач среднего обьема (учет, бухгалтерия и т.д.) ASA гораздо приятней и удачней, чем MSSQL. Но повторюсь это мое личное мнение, так что ничего страшного против MSSQL я не говорил :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32206847
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 c127

Реляционная связь подразумевает под собой, когда много таблиц могут ссылаться на одну по ключевому полю (как на справочник, например). Что делать, когда одна таблица с полем ParentId ссылается по этому полю на много таблиц с ключевыми полями Id? Предложение ввести таблицу-посредника ни к чему не приводит (тогда на эти же таблицы начинает ссылаться таблица-посредник - получаем тоже самое, только с еще промежуточной таблицей).

2ASCRUS

Переделывать под технологию клиент-сервер нашу прогу... это даже необсуждаемо.

Кстати, вот еще одна фишка. Системы с обратной связью - знакомое название? Теория автоматического управления? Гидро-система вещь замкнутая, и начальные параметры будут корректироваться в зависимости от расчитанных результатов. Или это тоже линейная задача? Тогда зачем меня учили два года этой ТАУ? Зачем мне все эти АЧХ и ФЧХ, если все оказывается так просто?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32207657
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c127

Тут наверное лучше было бы сказать не "перепроектировать", а "переформулировать" постановку задачи, т.е. сформулировать по-другому эквивалентным образом. Слово "перепроектировать" использовано не очень удачно, но о чем идет речь понятно и подход совершенно правильный. А вот настоящей классикой является то, что некоторые русские девелоперы не слушают собеседника.

там было сказано: "шанс перепроектировать постановку так, чтобы задача выглядела более легко под релляционные модели". дело в том, что я не видел ни одного спека нормально написанного "под реляционные модели", зато видел с сотню спеков (по 100-700 страниц) писанных "как кому в голову взбредет", но всегда в каком-нибудь "определенном формате". в мои задачи всегда входило "положить это на реляционную модель". именно поэтому я так скептически и отнесся к данной фразе. :) как показывает моя жизненная практика мне всегда самомому приходилось "задавать вопросы" и делать анализ (включая бизнес на моем текущем месте).

некоторые русские девелоперы не слушают собеседника

некоторые не слушают, некоторые _слушают_ но могут не понимать что человек _донести_ хочет.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32207782
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 xtony

>Реляционная связь подразумевает под собой, когда много таблиц могут ссылаться на одну по ключевому полю (как на справочник, например).

Это называется внешний ключ (foreign key).

>Что делать, когда одна таблица с полем ParentId ссылается по этому полю на много таблиц с ключевыми полями Id? Предложение ввести таблицу-посредника ни к чему не приводит (тогда на эти же таблицы начинает ссылаться таблица-посредник - получаем тоже самое, только с еще промежуточной таблицей).

Вроде понял теперь. Эта проблема тут обсуждась пару месяцев назад, только не помню где именно. Возможное решение: создать таблицу table_id - общий первичный ключ для множества тех таблиц, на которые нужно ссылаться (например {table_NNN| 0<NNN<n}). Пусть каждая из table_NNN ссылается на table_id. Добавление записей в любую table_NNN идет через table_id (чтоб получить правильный первичный ключ). ParentId тоже будет ссылаться на table_id. Внешние ключи заводятся без проблем. Все работает, все довольны.

2 папа Карло

>... в мои задачи всегда входило "положить это на реляционную модель". ....

Все именно так и есть, вопрос снят.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32208018
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c127
2 xtony

>Реляционная связь подразумевает под собой, когда много таблиц могут ссылаться на одну по ключевому полю (как на справочник, например).
Это называется внешний ключ (foreign key).

Ссылка - еще не внешний ключ. foreign key предназначен для поддержки ссылочной целостности. Используется так же для возможности каскадного удаления. В некоторых случаях необязателен, ресурсы жрет, гад :)

>Что делать, когда одна таблица с полем ParentId ссылается по этому полю на много таблиц с ключевыми полями Id? Предложение ввести таблицу-посредника ни к чему не приводит (тогда на эти же таблицы начинает ссылаться таблица-посредник - получаем тоже самое, только с еще промежуточной таблицей).

Вроде понял теперь. Эта проблема тут обсуждась пару месяцев назад, только не помню где именно. Возможное решение: создать таблицу table_id - общий первичный ключ для множества тех таблиц, на которые нужно ссылаться (например {table_NNN| 0<NNN<n}). Пусть каждая из table_NNN ссылается на table_id. Добавление записей в любую table_NNN идет через table_id (чтоб получить правильный первичный ключ). ParentId тоже будет ссылаться на table_id. Внешние ключи заводятся без проблем. Все работает, все довольны.

Мне кажется, это не самое лучшее решение. Тут можно предложить два решения.

1. Выделить из всех таблиц поля, идентичные по назначению (Наименование, обозначение и т.п.) и объединить их в одну таблицу. Таким образом мы сможем одним запросом получить необходимые выходные данные по всем параметрам одновременно. К этой таблице привязываются другие таблицы, содержащие индивидуальные параметры, необходимые для частного описания групп.
2. Если не требуется общая картина (тогда непонятно назначение подобной структуры), то можно установить у всех частных таблиц сквозной идентификатор и делать ссылку на него (без возможности поддержки ссылочной целостности). Таким образом мы можем получить любые данные по каждой индивидуальной группе.

В обоих случаях количество групп неограничено. Есть еще один способ, но он вообще никому не нравится, считается замороченным, хотя для меня он намного лучше :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32209055
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Jinn

Не приумножай сущности без необходимости. Эквивалентно: программист должен быть ленивым. (C) не помню чьи.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32209214
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c127
Не приумножай сущности без необходимости. Эквивалентно: программист должен быть ленивым. (C) не помню чьи.

Ты хочешь сказать, что предложенное тобой решение менее геморойно? Попробуй получить общий отчет по всем table_NNN, где нас интересует только общие данные. Например поля: "Номер документа" "Наименование" "Цена", где: "Номер документа" - из таблицы DOC_TABLE, "Наименование" и "Цена" - из таблиц TABLE_NNN.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32210369
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Jinn
>Ты хочешь сказать, что предложенное тобой решение менее геморойно?

Вовсе нет. Я хочу сказать, что ты додумываешь постановку задачи.

>Попробуй получить общий отчет по всем table_NNN,...

Например, где в постановке слово "отчеты". Мы даже примерно не знаем из какой области задача, какой смысл сейчас обсуждать отчеты.

Еще я не понял чем твой вариант 1 принципиально отличается от варианта 2 и чем вариант 2 отличается от предложенного мной. Общие поля о которых ты пишешь это в моем случае первичный ключ. Только у меня еще и целостность поддерживается. Понимаю, что мы уже давно в офтопике, но проблема интересная.

2 xtony

>Переделывать под технологию клиент-сервер нашу прогу... это даже необсуждаемо.

А зачем тогда спрашивать? И потом не технологию, а постановку задачи, не под клиент-сервер, а под реляционную структуру и не преределывать а переформулировать. Почувствуйте разницу. Никто же не агитирует тебя все на свете засовывать в РСУБД, нужно же знать меру. Но иногда полезно посмотреть (не переделывать, а просто посмотреть) на задачу под другим углом зрения.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32210505
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c127

>Ты хочешь сказать, что предложенное тобой решение менее геморойно?

Вовсе нет. Я хочу сказать, что ты додумываешь постановку задачи.

"Мишка Шизман башковит - у него предвиденье ..." (с) В.С.Высоцкий

Нормальный разработчик должен иметь опыт и смотреть дальше постановки. Именно это позволяет развивать систему без гимора, не напрягаясь. Лень матушка ... :)

>Попробуй получить общий отчет по всем table_NNN,...

Например, где в постановке слово "отчеты". Мы даже примерно не знаем из какой области задача, какой смысл сейчас обсуждать отчеты.

Еще я не понял чем твой вариант 1 принципиально отличается от варианта 2 и чем вариант 2 отличается от предложенного мной. Общие поля о которых ты пишешь это в моем случае первичный ключ. Только у меня еще и целостность поддерживается. Понимаю, что мы уже давно в офтопике, но проблема интересная.

Про отчеты - см. выше. Если данные хранятся - то потребуются для отчетов.

Про варианты - практически ничем, кроме уменьшения количества таблиц на одну. Твой вариант с таблицей - не более чем использование секвенции в оракле плюс регистрация. И нафига нам поддерживать ссылочную целостность в таблицах, которые сами являются первичными, так сказать? В моем же варианте 1 - мы можем без проблем получить некоторую первичную информацию. Например: наименование товара, код учета, номер склада. А все его параметры мы можем получить отдельным запросом.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32210693
xtony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А зачем тогда спрашивать?
Был задан вопрос, что на клиент-сервере такого есть, где без курсоров не обойтись или что там сложнореализуемо. Вот я и привожу примеры, которые, на мой взгляд, на клиент-серверной технологии решить сложно или будет проигрыш по скорости. Вопросы я задаю не по реляционной модели, а по клиент-серверу.

> Но иногда полезно посмотреть (не переделывать, а просто посмотреть) на задачу под другим углом зрения.
Да, я благодарен за ответы на мои вопросы. Для меня они ценны, так как есть задачи, с которыми я не встречался и поэтому они мне могут казаться сложнореализуемыми. Я продолжаю работать на клиент-серверной технологии, поэтому однозначно во всех ответах ищу "другие углы зрения".

Просто бывает нет смысла перепроектировать (а для меня это еще и переделывать, так как уже хранение данных запроектировано и сделано) что-то под реляционную модель, если работа происходит на среднем слое.
Поэтому я не хотел вдаваться в дискуссию, как мне чего делать в моей задаче и на "возможно есть шанс перепроектировать постановку..." ответил, что никаких переделок на рабочей программе не будет. Сори, если как-то не так объяснил.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32211580
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Jinn

>Мишка Шизман башковит...

В оригинале было: "Мишка Шифман ...". Учите матчасть.

Да о чем спор, мы же прямо тут имеем характерный пример прямо из жизни: ты старался, фантазировал насчет отчетов, а заказчик сказал: речи о перепроектировании системы быть не может. Цена твоему предвидению?

>И нафига нам поддерживать ссылочную целостность в таблицах, которые сами являются первичными, так сказать?

Так в том же и был вопрос: "Реляционная связь подразумевает под собой, когда много таблиц могут ссылаться на одну по ключевому полю (как на справочник, например). Что делать, когда одна таблица с полем ParentId ссылается по этому полю на много таблиц с ключевыми полями Id?"

Я и ответил, что делать в таком случае. Вроде все условия задачи соблюдены.

2 xtony

Пример неудачный. Проблема решается элементарно. Это как раз пример по реляционной структуре, клиент-сервер тут ни при чем. Если хочешь пример по клиент-серверу (точнее против обработки данных на сервере), то лучше брать обработку изображений. Хранить в базе можно, а обрабатывать - лучше не надо.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32213142
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c127

Да о чем спор, мы же прямо тут имеем характерный пример прямо из жизни: ты старался, фантазировал насчет отчетов, а заказчик сказал: речи о перепроектировании системы быть не может. Цена твоему предвидению?

Это уже проблемы спрашивающего. Если никакой речи о какой либо доработке нет - зачем был задан вопрос? Если вопрос теоретический, с дальнейшим прицелом, то ответ может пригодиться.

А по поводу домысливания могу сказать следующее: разработчик должен домысливать за заказчика, для избежания узких мест в дальнейшей разработке, ибо заказчик преследует конкретные, сиюминутные, цели, не подозревая о том, что ему понадобится завтра. Но проектировщик может заложить в систему дальнейшее развитие без ущерба качеству и без увеличения сроков разработки.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32213252
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,
Спасибо за ценную информацию, к сожалению, на данном этапе мне в вашей дискуссии не все понятно, но, надеюсь, что со временем я стану лучше понимать вас.
Лично меня заинтересовал следующий момент. Вы писали:
"Во первых у меня перед глазами была постановка старой задачи Расчет ЗП, написанной еще аж на Досовом доисторическом MS Си. Постановка для этой задачи была разработанна очень профессионально, она до сих пор эксплуатируется в различных отраслях - больницах, МЧС, больших заводах, стояла и т.д. Сам проект конечно в силу ограничения используемого инструментария не мог все учитывать, но сама его постановка во многом была удачной".
В связи с этим у меня имеется ряд вопросов, которые, возможно, заинтересуют еще кого-нибудь.
Что по Вашему мнению есть "хорошая постановка задачи"? Что она должна содержать и в какой форме быть выражена (текст, диаграммы или еще что-либо)? Какие положения постановки задачи были для Вас наиболее ценными (больше всего помогали при проектировании)? Фрагмент постановки задачи ( в качестве примера)?
Спасибо.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32213595
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wara
Я имел ввиду, что перед моими глазами был действующий "прототип" старой программы зарплата, с довольно удачными решениями и правильной концепцией хранения данных и порядков расчетов. Проект эксплуатируется в различных отраслях, учитывает многие специфические ньансы расчета зп каждой отрасли, в конторе работают уже с десяток лет люди, которые этот проект сопровождают и могут рассказать о динамике развития продукта и проблемах, с которыми им приходилось сталкиватся у различных клиентов. Какой то задокументированной постаноки конечно же не существовало - в нашей стране я пока вопринимаю это больше как с области фантастики. Далее имея на руках работающих прототип и людей, работающих с ним мне не составило сложности по нему расписать бизнес-процессы, структуру входящей и исходящей информации. Проведя анализ того что есть, чего не хватает, что реализовано правильно и что криво я получил на бумаге (каюсь, никаких case) примерную модель проекта, его модулей и описания их функциональных возможностей. После был проведен анализ на выявление характера изменения старого проекта и возникающих трудностей при сопровождении с учетом взаимосвязей модулей, чтобы выявить узкие места, способные при изменении условий постановки усложнить доработку проекта. Так собственно говоря и родилась схема будующего движка расчетов, в котором работает цепочка входящая информация -> входящие кэши -> аглоритмы расчетов -> движок расчетов -> расчетные кэши -> исходящая информация . Такая модель позволила заложить на неком абстрактном уровне независимую от структуры и принципов расчетов модуль расчетов. После этого уже пошла собственная реализация проекта, для начала была разработаны стандарты для клиентских и отчетных частей проекта и необходимое кол-во вспомогательных классов и компонент, чтобы СУБД полностью могла обеспечить уровень их возможностей и легко могла с ними взаимодействовать. Каждый модуль системы разрабатывается как независимая часть, перед началом разработки модуля идет углубление в его постановку, выявление частных случаев отклонения от стандартной постановки и можно сказать "демократическим" путем между мной и людьми, сопровождающими старый проект принимаются решения о необходимости расширения функциональности или же наоборот срезания явно "лишних" возможностей, присутствовавших в старом проекте. Из того, что должно быть реализовано в конкретном модуле проекта реализуется только каркас общих положений постановки, все частные случаи документируются и переносятся по реализации до лучших времен, хотя при реализации каркаса их ньансы в структуре БД учитываются изначально.

На вопрос что такое хорошая постановка ответа дать не могу - я просто не знаю честно говоря. Для меня в идеале - это наличие специалистов, отлично знающих тематику проекта, его подводные камни и умеющих в виде документов и графиков описать модель проекта. На практике что то пока все приходится делать самому, исходя из того, что есть под рукой. Это конечно же замедляет написание проекта - например люди, сопровождающие старый проект воспринимают новый проект как точную копию старого, соотвествующе и вся постановка задачи и старый проект для них есть синонимы, что приводит к очевидным трудностям при обсуждении расширения или срезания в новом проекте некоего функционала. Плюс являясь сопровожденцами, а не постановщиками, они не могут четко и ясно описать методологию работы, хотя и точно и уверенно могут ответить на конкретные наводящие вопросы, что опять же приводит к тому, что мне чтобы определится с функционалом проекта приходится сначал изучить саму тематику, далее общаясь с сопровожденцами и клиентами начать бомбардировать их серией наводящих вопросов, проясняя ситуацию с тем или иным куском проекта. Ничего хорошего в этом конечно же нет, благо не раз таким образом проекты писал и фактически просто выручает опыт написания проектов без четкой постановки и постановщиков. Хотя как бонус во всем этом можно назвать теперь мое "хорошее" знание трудового кодекса РФ и своих прав, хотя работодатели моих родных и близких уже не в восторге от таких вот "познаний" :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32214017
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS,
Спасибо за обстоятельный ответ. Поскольку из него следует, что до того, как Вы принялись за проектирование новой системы, постановки задачи в явном виде не существовало (под постановкой задачи я понимаю словесное и графическое описание предметной области и ожидаемых от системы функций, результат проведенного анализа, не основании которого можно приступать к проектированию), у меня возник еще ряд вопросов. Не означает ли это, что используемые проектировщиком данные настолько трудноформализуемы, что передавть их без потери информации возможнотолько методом "от человека к человеку" (без посредничества бумаги и каких-либо диаграмм)? Или используемая при проектировании СУБД и язык программирования оказывает столь сильное влияние, что изложение требований без привязки к ним бессмысленно в принципе? Смогли бы Вы передать свои знания (большую часть) другому человеку посредством бумаги и прочих суррогатов, или это возможно только, если этот человек "поварится в том же котле", что и Вы?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32216373
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wara
очень сложный вопрос. С одной стороны современные средства проектирования модели данных и бизнес-процессов, впрочем как и старые и проверенные временем бумага и ручка, существенно могут облегчить процесс формализации постановки задачи, с другой стороны я не верю, что даже когда я напишу, оттестирую и полностью запущу проект я смог бы всю его постановку в полном обьеме перенести на бумагу. Общие правила постановки описать легко, однако проект расчета заработной платы это сплошные исключения из общих правил, уникальность каждой части расчета и постоянная динамика изменения самой постановки во времени. Сопровождать проект и дорабатывать думаю будет легко, именно для этого он так мудрено и писался, чтобы программист мог быстро изменять и дополнять довольно таки автономные модули проекта. А вот описать все ньюансы в "чистой" постановке, чтобы по ней программист без помощи постановщика написать проект смог не получится. Попытаюсь обьяснить причины:
Полная постановка по идее должна описывать все процессы, а также всю структуру участвующей в них информации, как входящей, так и исходящей. Однако любая формализация постановки приводит к ограничению ее круга до определенных конкретных границ. Это с одной стороны хорошо, программа не может стремиться бесконечно к универсальности и неопределенности, все виденные мной успешные проекты имели четкие границы в постановке. С другой стороны такие ограничения могут привести к усложнению сопровождения проекта или даже к краху его работы в случае непредвиденного изменения в условиях постановки, противоречащей модели данных системы.

Какой из этого следует вывод - для постановки потребуется не только точное описание того, что например у меня реализовано в проекте, но и анализ динамики изменений постановки проекта за некоторый промежуток времени с целью выявления тенденций изменения его условий. Такого уже не один инструмент абстрактного моделирования данных насколько я помню предложить не может. Плюс мое личное мнение, "чистая" постановка требует полной абстракции от существующих аналогов ПО, что гарантирует не навязывание технологических концепций и идей, частенько способных на самом деле ее исказить. Получается, чтобы получить такую постановку нужно совершенное знание предметной области, истории ее развития и анализ существующих ПО с последующим выделением их реализаций в абстрактную модель базы данных. Стоит заметить, что на каждом из этих этапов обязательно будут допущены ошибки и неуточнения, что может привести к искажениям в постановке.

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

Все эти 5 пунктов для меня значат только одно - в каком бы виде постановка не была, она будет развиваться и продолжаться до тех пор, пока проект будет не запущен и не сдан в полноценную эксплуатацию. И разработчику по любому придется постоянно консультироваться с специалистами в предметной области, сканировать клиентов на поиски отклонений, анализировать другие продукты и черпать оттуда идеи.

Насчет привязок к технологиям и СУБД - я считаю, что это уже реализация, которая никак не влияет на постановку и методики ее реализации. В принципе тот же самый свой движок расчетов я мог так же реализовать и на клиенте через классы и на третьем звене и через какой то интерпретатор или макроподстановки. Суть его назначения и использования все равно осталась бы преждней, вне зависимости от выбранной мной технологии и способов его реализации на этой технологии.

Такие вот у меня идеи. Может и не правильные - я все таки не постановщик, а проектировщик, разница на самом деле большая :) Если вдруг мимо профессиональные постановщики пробегать будут, будет интересно выслушать их мнения по этому вопросу.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32218631
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARCRUS,
Спасибо, Ваша точка зрения понятна, очень интересно услышать мнение профессионала. Единственное, что меня беспокоит, это то, что Вы пишите свои тексты по ночам. Так можно и здоровье подорвать. Отдыхать тоже необходимо.
Удачи.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32229818
OldPferd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

8 секунд на самом деле моя гордость :)
Согласен, этим можно гордиться.

У меня тоже давно была идея написать з/п с расчетом на сервере, но не довелось. Да и писал я практически все сам (параллельно с поддержкой других программ, потом параллельно версии з/п под DOS и Windows), только в конце уже появился помощник
Мои "Зарплаты" так и работают на Clipper и Access 97. Я,правда, этим с прошлого года не занимаюсь, ушел, видя, как руководство гробит проект и мне там из файл-сервера не вылезти. Хотя все работает примерно в 100 организациях (в основном по Октябрьской ж/д)

достаточно запустить любую курсорную зп, ту же 1С и посмотреть, как быстро все считается
У меня скоростные характеристики на Access (файл-сервер,курсорная) были такие - 2600 работников - примерно 5 минут (Celeron 1000).
Это при том, что там расчет по работникам был просто зациклен,и алгоритм не оптимизировался, как на Clipper. Когда добился этого - дальше уже этим заниматься не стал, посчитал, что достаточно приемлемо
На Clipper скорость выше - на 486 было более 10 человек в секунду.
Раньше в DOS мы обычно разбивали базы отдельно по расчетчикам (+ объединение сводных данных после расчета). Но на нормальной технике года с 1999 стали вести общую базу - скорость была нормальной

А с другой стороны и на клиент-сервере скорость может быть невысокой Например, как-то видел зарплату на MS SQL,C++ Builder - 1000 человек по cловам расчетчицы считаются порядка 40 минут

дополнительный функционал системы (северные коэффициенты, премии КТУ)
может быть мне удастся все таки отойти от бухгалтерии

есть еще и путевые, и маршрутные листы, есть и такие предприятия, которым не хватит расчета премий по время*сумма(собранная по какому-то принципу)*КТУ, а потребуется сдельщина в полном объеме со всеми видами нарядов,своих отчетов по ним
Зарплата может "затянуть", а всех фантазий депутатов,налоговой заранее не предугадаешь. Можно лишь на этапе постановки,проектирования стараться максимально облегчить себе жизнь в будущем

Если вдруг мимо профессиональные постановщики пробегать будут
Мне кажется, что постановщиком здесь может стать только человек, пришедший в эту область со стороны "инженегров", а не бухгалтеров. Одного такого знаю. Как он рассказывал, лет 12 назад сначала пытался добиться чего-то от бухгалтеров, но потом плюнул, сел за законы, нормативные акты, + опыт внедрения - сейчас знает все лучше любого расчетчика
У меня тоже изначально был действующий "прототип" старой программы зарплата - грамотная постановка с интерфейсом начала 90-х + грамотный бухгалтер,внедряльщик + самостоятельное изучение законов, инструкций МНС
Потом при переходе к Windows перепроектировали задачу и я работал с этим постановщиком, где-то лежит его что-то типа ТЗ. Правда в полной мере ТЗ это назвать трудно,он его писал в значительной мере с учетом того, что я все уже знаю изнутри, писалось не для отчета,а для работы, без того, что мы считали само собой разумеющимся, и многое проектировалось вместе, потом туда что-то дописывалось... Когда он ушел, какое-то время пытался сам его поддерживать.

Если этот проект будет реально внедрен и эксплуатироваться, то это заслуживает высокой оценки
Успехов
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32229842
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо. Будем надеятся, что все удастся :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32230130
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, можно ли этот документ(ТЗ) посмотреть?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32230226
OldPferd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri

В выходные попробую найти. Найду - вышлю
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32230324
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
век буду обязан!
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32428098
SSvetlana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS
Хотелось бы узнать о судьбе описанного Вами проекта?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32440907
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"а в ответ - тишина...."
неужели все загнулось!????
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32441263
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, тьфу, слава богу ничего не загнулось. Проект "расчет зп" уже дописывается, к нему делается отчетная часть (тоже не самый легкий кусок в зп), сейчас ведется параллейная постановка модуля кадров, хотим реализовать веселенький документооборот между зп и кадрами, где ни смотря на то, что эти 2 модуля лежат в одной БД и являются частью целого, изменения информации в одном модуле (например выписка приказа в кадрах) не означают автоматического изменения информации в зп, а оформляются как непроведенный документ у расчетчика зп, на который ему нужно кликнуть, ознакомиться и провести, возможно внеся свои коррективы (естественно это не касается ситуаций, где кадрович и расчеткик зп одно лицо, иначе это было выглядело забавно). Так что думаю, если смены курсы партии, состава команды или еще чего страшного не будет, то все таки весь комплекс начнем полноценно запускать со следующего года. В этом году он обкатываться только по надежным клиентам и внутри самого предприятия.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #32441265
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:
Я кстати начал потихоньку многие решения, примененные в проекте, выкладывать в свою рассылку по Sybase ASA . Единственное неудобство, что все скрипты идут на WatcomSQL и с учетом особенностей этой СУБД, но сами принципы легко адаптируются под любую полноценную РСУБД.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Система с изменяющимися алгоритмами расчета.
    #33050819
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще годик - два и проект стартует :-)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33051412
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valmondЕще годик - два и проект стартует :-)
А кто сказал, что он не работает ? :) Уже к нему пишется модуль учета социальных выплат для крупных холдингов, включена система репликации обмена различными данными различных модулей между центром и филиалами, система переведена на многомодульную архитектуру, где в пределах одной БД могут существовать множество схем модулей зп, кадры и соц.выплаты - фактически ЗП теперь всего один из модулей целой платформы на базе ASA+PB+FastReport+собственные наработки :) Другое дело, что эта система пока не тянет на коробочный вариант - не хватает собственной системы администрирования, а писать времени как всегда нет - сейчас вообще не ей занимаемся, а дописываем и ведем в опытной эксплуатации еще один крупный продукт, ориентированный на крупных застройщиков и агентств недвижимости. Вот допишем и запустим недвижимость, тогда можно будет и о бакофисе для зп подумать :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33051810
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS valmondЕще годик - два и проект стартует :-)
А кто сказал, что он не работает ? :)

Я сказал, потому как

ASCRUSПроект "расчет зп" уже дописывается, к нему делается отчетная часть

А зарплата без отчетов нужна только разработчику
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33051820
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valmond ASCRUS valmondЕще годик - два и проект стартует :-)
А кто сказал, что он не работает ? :)

Я сказал, потому как

ASCRUSПроект "расчет зп" уже дописывается, к нему делается отчетная часть

А зарплата без отчетов нужна только разработчику
Гм - отчетная часть - ХП+GBT+FastReport, данные все предрасчитаны. Не понятно, что именно будет дописываться пару годиков :) Видел я проекты зп, где во время построения отчетов вживую расчет идет, как то не очень понравилось.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33413963
2 ASCRUS
После детального изложения вашей очень интерестной идеи.
Хотелось бы посмотреть на структуру БД Вашей модели.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33414092
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Богатырев Алексей2 ASCRUS
После детального изложения вашей очень интерестной идеи.
Хотелось бы посмотреть на структуру БД Вашей модели.
Вам схему БД прототипа (девелоперскую) выслать или же полную рабочую, сразу с консолидированными и удаленными узлами ? :) Извините, но патент принадлежит не мне, а организации, у меня только авторское право, так что выкладывать структуру я не могу. Если что то конкретно интересует по реализации, то могу просто поделиться опытом.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33414101
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
систему уже зарелизили?
это "коробка" или разовое внедрение?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33414143
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valmondсистему уже зарелизили?
это "коробка" или разовое внедрение?
Пока можно сказать приватное - только у себя. Сейчас идет подготовка к запуску у самых любимых клиентов. Однако с учетом того, что мы навернули с оффлайн репликациями и сейчас прикручивает еще один свой проект, завязанный на данные по зп и кадрам, то боюсь до коробки дело не дойдет - скорее всего проект будет распостраняться только по крупным холдингам и госконторам, с развлетвленной и географически удаленной структурой филиалов и большим кол-вом сотрудников. Получается выгодней иметь и сопровождать крупных клиентов, чем делать массовый тираж коробочного варианта.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33414173
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS valmondсистему уже зарелизили?
это "коробка" или разовое внедрение?
Получается выгодней иметь и сопровождать крупных клиентов, чем делать массовый тираж коробочного варианта.

Да я не к вопросу выгоды спрашивал.
Просто коробочные решения как правило разрабатываются из предположения, что не будет под рукой автора.

Кстати, факт внедрения будет отражен где-либо в прессе? Обычно крупные компании рассказывают об этом.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33414269
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valmondДа я не к вопросу выгоды спрашивал.
Просто коробочные решения как правило разрабатываются из предположения, что не будет под рукой автора.
Для этой цели существуют собственные внутренние проекты, создающие платформу быстрой разработки сложных проектов на базе ASA/PB-Delphi/FastReport, на которой однотипно и базируются все проекты. Это и система генерации SQL-скриптов или HTML-страниц по шаблонам, и система контроля версий БД для ведения синхронизации БД клиентов с БД-прототипом девелоперов, система удаленного администрирования серверов и репликаций, система фильтров по инфорамции БД и т.д. Так что даже если я уволюсь, все будет продолжать спокойно работать, правда все права на внутренние системные разработки по согласованию с фирмой принадлежат исключительно мне и для фирмы остаются только внутренними продуктами, без права их продажи без моего согласия.

valmondКстати, факт внедрения будет отражен где-либо в прессе? Обычно крупные компании рассказывают об этом.
У нас много крупных проектов запущено (к примеру из открытых крупных тиражных проектов - автоматизация застройщиков недвижимости), запускается и еще много планируется писать. Но насколько я знаю, рекламных кампаний ни на кого из них не дается, почему, не мне судить - я руковожу разработкой проектов и командой разработчиков, а не менеджментом и управлением политики фирмы :)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33947548
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что же, запустили или нет?
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33947714
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просим ознакомить общественность ;)
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33947723
valmond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверное, осталось написать 2-3 отчета и таки скомпилить все )
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33948666
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йТак что же, запустили или нет?
Много чего давно запустили ... правда уже в другом месте и другие проекты ;) Как всегда оказалось легче поменять работодателя, чем ...
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #33957855
Alexandr_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS
Вопрос не совсем в тему. Из каких пронципов исходили при выборе (смене) конкретной СУБД. Расматривался ли вариант использования бесплатных СУБД.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #34000065
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Сидор Петрович
>Повторю крайне интересный для меня вопрос ...

Думаю, что очень многие вопросы будут сняты с повестки, если сервер данных будет хранить данные и предоставлять их по требованию, а логикой обработки будут заниматься сервера приложений.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Система с изменяющимися алгоритмами расчета.
    #34000738
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классно всех на флейм завел.Ура.Всем ложись.
...
Рейтинг: 0 / 0
159 сообщений из 159, показаны все 7 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Система с изменяющимися алгоритмами расчета.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]