Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik Ладно я умолкаю что бы советовать дальше мне нужно намного больше вникнуть в Вашу задачу. Просто у меня стойкое ощущение что что то у Вас недодумано, м.б. я ошибаюсь. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 07:55 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев Если не трудно и не жалко, киньте когда-нибудь пару примеров на тему Ваших расчетов остатков на мой e-mail: alexandr_k@baucraft.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 08:01 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 Genady К сожалению, решение данной задачи начиналось не с меня и поэтому сделать структуру заново и как надо не могу. Я ограничен лишь движениями адаптации к существующей схеме. За пожелания и советы спасибо. Думаю, нам есть о чем еще поговорить за парой кружечек пива ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 08:05 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik Примерчик постараяюсь состряпать. Если долго не будет, можно меня попинать gvu@newmail.ru Память после 30 становиться просто дырявая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 08:07 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев У меня память стала дырявой в 25 лет - с тех пор, как женился (что-то обязательно забываю из многочисленных поручений жены ) Но в данном случае я просто заинтересован не быть забывчивым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 08:14 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik. Ты затронул весьма непростую и интересную тему. Безболезненно и идеально эта проблема не решается никак. Есть какие-то "консенсусы", которые могут устраивать в той или иной ситуации, но универсального решения просто не существует. Я приведу выдержку из своей статьи двухлетней давности, лежащей тут http://nsa.chat.ru/Raznoe_About.html: .... Очевидно, что объем регистра может очень быстро расти. Типичная проблема - как достаточно быстро получить остатки по регистру на любую учетную дату, если отражается в нем только движение? Обычно регистр дробится на отрезки определенной протяженности, между которыми фиксируются промежуточные значения остатков. Фиксировать остатки после КАЖДОГО движения не рационально - слишком много в регистре будет информации, которую можно получить расчетным путем, и слишком велико потребление вычислительных ресурсов на пересчет всех остатков при проведении операций "задним числом". Однако, завязывать систему на операции "закрытия учетного периода" тоже некрасиво. В крупной системе пользователи должны иметь возможность вполне нормально работать в разных учетных периодах без каких-либо взаимных помех. Я предпочитаю, чтобы промежуточные остатки по регистру вообще не привязывались к учетному периоду. В своем проекте я привязываю их к критическому количеству прошедших по регистру движений. К примеру, промежуточные остатки могут подсчитываться после каждых 100 движений регистра с одинаковыми аналитическими признаками. В этом случае регистр сам сохранит несколько промежуточных значений остатков даже на протяжении одного дня, если по регистру "товары" за 1 день произошло около 300 движений одной номенклатуры на одном и том же складе. И в то же время по регистру "Ценные бумаги" может несколько кварталов учетного времени вообще не подсчитываться промежуточный остаток, если по этому регистру осуществляются единичные движения. Для получения остатков на запрошенную пользователем дату система извлекает из регистра ближайший к запрошенной дате промежуточный остаток (хранящийся в регистре), добавляет приход и вычитает расход за период до запрошенной даты и расчетным путем получает остаток на запрошенную дату. Технология расчета промежуточных остатков через 100 записей гарантирует, что при этом будет просмотрено не более 100 записей, и время ответа системы будет приемлемым. .... К сказанному добавлю, что с момента написания статьи у меня взгляды на проблему несколько изменились. Расчет текущих остатков при плавающей границе веьма непрост и сам по себе требует существенных ресурсов. Я пришел к выводу, что наиболее оптимально иметь набор фиксированных интервалов и статистику. Например, остатки могут дробиться: по дням, по неделям, по месяцам, по кварталам, по годам. Конкретный интервал дробления выбирается по статистике оборотов с тем, чтобы между двумя соседними остатками оборотов было, скажем не больше 1000. Можно написать скрипты, которые по ночам или по выходным будут оптимизировать структуру хранения остатков. 2 Глеб. Это действительно очень сложная проблема. Если существует понятие "закрытие учетного периода", то это действительно решает проблемы бустродействия. НО! Это добавляет проблем, если нужно внести изменения в тот период, который закрыт. У нас, к примеру, закрывать вообще нельзя никакие периоды, такова специфика. Получение остатков не сводится к простому суммированию приходов и вычетанию из них расходов. Представьте, что регистр учета товара ведется по множеству разрезов: - По филиалам - По складам - По кладовщикам - По номенклатуре - По номеру приходной партии ... и т.д. Остатки можно хранить с разблюдовкой по всем аналитикам, а на вопрос "сколько у нас такого-то товара на всех складах?" получать агрегированием остатков по всем остальным аналитикам. Но если аналитических разрезов много, и на каждом из них много значений аналитик, то ответ на поставленный вопрос может занять довольно много времени. Подобные проблемы решаются в системах аналитической обработки (OLAP). В кубах данных сохраняются все комбинации промежуточных остатков, включая самые свернутые и самые развернутые. При этом процесс расчета всех комбинаций промежуточных агрегатов - весьма долгая процедура. OLAP - это системы разлядывания мертвеца - они очень инертны. В данном случае речь идет об OLTP, но с одновременным решением задач, которыми обычно занимаются OLAP. В этом-то и проблема. Вариант с динамическим подрасчетом - весьма напоминиает схему работы с OLAP, и в нем действительно есть рациональные зерна. Конкретно же нужно субъективно (а как же еще ) нужно оценить объемы и скорость модификации, оценить вероятность и частоту залезания в прошлые периоды, выбрать оптимальные интервалы, схему обновления. Короче, вопрос этот требует медитации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2001, 13:57 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 Garya Буду очень рад и далее узнавать о Ваших мыслях по этому поводу (мой e-mail Вы знаете). Да, это действительно очень сложный вопрос и на данный момент я принял решение о параллельной разработке нескольких механизмов расчета остатков для выявления наиболее оптимального из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2001, 06:40 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
Сегодня реализовал следующий механизм расчета остатков: 1) Остатки формируются в разрезе номенклатурных позиций, складов и дат. 2) Добавление новой записи в таблицу остатков происходит при появлении нового документа движения. Например, 20.06.01 на складе было 100 тракторов, с тех пор движения не было. Актуальным остатком по тракторам считается остаток на 20.06.01. Вчера у нас купили 10 тракторов, в остатках появляется новая запись на 20.08.01 - 90 тракторов. Сегодня мы закупили 5 тракторов, соответственно, на 21.08.01 - 95 тракторов. 3) Параллельно с расчетом остатков считаются средневзвешенные учетные цены. 4) При появлении нового документа движения или аннулировании оного, если дата его совпадает с датой последнего расчета остатков, то запускается процедура расчета, в которой к последнему остатку по выбранным позициям товара добавляется (вычитается) количество оприходованного (отгруженного) товара в данном документе. Новая запись либо корректирует старую (если совпадает с ней по дате), либо добавляется в таблицу остатков. 5) При корректировке старого документа движения или добавлении нового документа задним числом, запускается процедура расчета остатков, в которой удаляются все остатки по выбранным позициям товара сверх той даты, на которую произошло корректирующее движение, после чего добавляются результаты нового расчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2001, 11:14 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 AlexUnik 5-й пункт можно несколько соптимизировать. Скорее всего будут изменения, которые могут не затрагивать остатки по счетам или затрагивать, но не за все даты(например документ меняет дату задним числом). Для ускорения можно ввести ввеменную таблицу, в которую записывались бы только изменения и с основной таблице менять только те записи, которые были действительно изменены. Например у несть есть количество некого товара по датам: 1 10 2 20 3 30 4 40 5 50 Но допустим изменение 2-го числа сделано неправильно, нам надо его сделать 3-м. Т.е. получить: 1 10 3 30 4 40 5 50 Вместо того чтобы как бы стирать документ и вводить его заново, мы сначала копим изменения во временной таблице 2 -10 как бы стирание 3 -10 как бы стирание 4 -10 как бы стирание 5 -10 как бы стирание 3 +10 как бы вставка 4 +10 как бы вставка 5 +10 как бы вставка Если мы теперь это сгруппируем по дате, то получим: 2 -10 3 0 4 0 5 0 Отсюда видно что мы должны апдейтить не 7 записей(4 раза как бы удалить и 3 как бы вставить), а только одну. На самом деле конечно всё получается сложнее, но принцип надеюсь понятен. С приветом Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2001, 12:38 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 SergSuper OK! Принцип понятен. Попробую реализовать. Моя беда в том, что все это время я пытался в пределах одной SP реализовать одновременно и расчет остатков и расчет учетных цен товара. Если использовать временную таблицу, все получится гораздо проще. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2001, 13:51 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
>5) При корректировке старого документа движения или добавлении нового документа задним числом, запускается процедура расчета остатков, в которой удаляются все остатки по выбранным позициям товара сверх той даты, на которую произошло корректирующее движение, после чего добавляются результаты нового расчета. А зачем удалять, запускать процедуру пересчета? Допустим у Вас есть остатки (возьмем пример SergSuper): 1 10 2 20 3 30 4 40 5 50 И априори предположим что не бывает операций изменения документа товародвижения - только вставка и удаление (то есть проведение и откат - редактировать проведенный нельзя, редактировать непроведенный можно, но он не влияет на остатки) Тогда откатываем документ (расход) от 2 го числа с количеством допустим 5 - тебе всеголишь необходимо увеличить на 5 все остатки начиная со второго числа и позже! UPDATE QNT SET QNT=QNT+5 FROM tblRemains WHERE [Date]>=2 Аналогичная схема с добавлением - допустим исправляешь в этом документе кол-во на 10 и проводишь его, надо выполнить операцию уменьшения остатков: UPDATE QNT SET QNT=QNT-10 FROM tblRemains WHERE [Date]>=2 И всё... Кстати если нужен жесткий минус-контроль - он изумительно решается путем создания триггера на табл. остатков запрещяющего вставлять записи с QNT<0 ! В системе 2-х проц. Pent 900 с хорошим RAID массивом _дневное_ товародвижение в условиях онлайнового пересчета остатков (таблица остатков уже более 1 000 000 записей) пересчитывается за 30-60 секунд (это порядка 5000 товарных строк)! То есть один документ при повседневной работе проводится практически мгновенно (если проводить задним числом конечно время немного увеличивается, но такие документы редкость, да и не намного оно увеличивается ) И остатки на любую дату. Другое дело, что если хранить запись в табл. остатков только на дату, в которой было товародвижение, то для того чтобы посмотреть остатки на произвольную дату надо найти сначала для каждого товара эту дату, а потом сделать выборку со связкой Товар, Дата. Запрос, который предлагает SergSuper (с коррелированным подзапросом) тормозит неимоверно! Легче в таблице остатков хранить тогда и обороты и их суммировать - намного быстрее получается... Ну либо на каждую дату не зависимо от движения хранить остатки - тогда увеличивается кол-во записей в ней, усложняется логика пересчета... Так что вот... (а с учетными ценами это конечно отдельный разговор...) С уважением, Андрей Митин ICQ:38607432 http://am.rusimport.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2001, 09:28 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 am (a_mitin) Не потрудитесь объяснить, что такое "коррелированный подзапрос", который я якобы предлагаю и почему он будет тормозить? А то мне сдуру всё время казалось, что чем меньшее количество записей апдейтиться, тем быстрее будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2001, 12:04 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2SergSuper: >Не потрудитесь объяснить, что такое "коррелированный подзапрос", который я якобы предлагаю и почему он будет тормозить? Прошу прощения у глубокоуважаемого SergSuper за то что сразу не указал про какой запрос идет речь... Цитирую: 'начало цитаты -------------------------------------------------------------------------------- Replied Message: -------------------------------------------------------------------------------- RE:T-SQL: Простой запрос подскажите pls. Posted by SergSuper (sergsuper@mail.ru) on 02 Jul, 2001 17:09:07 а тут надо лапцами писать: select Товар, Цена from tbl t1 where НаДату=(select max(НаДату) from tbl t2 where t1.Товар=t2.Товар) 'конец цитаты... А коррелированный - это тот подзапрос в котором есть ссылка на внешний запрос ( t1. Товар=t2.Товар) > А то мне сдуру всё время казалось, что чем меньшее количество записей апдейтиться, тем быстрее будет работать. Абсолютно согласен Речь шла о получении остатков на день из таблицы, где остатки храняться только на те дни, где были обороты... Т.е. 1 10 3 15 То остатки на 2-е число тоже 10... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2001, 12:17 |
|
||
|
Нужна ли блокировка в следующем случае?
|
|||
|---|---|---|---|
|
#18+
2 am (a_mitin) >А зачем удалять, запускать процедуру пересчета? К нам довольно часто приходят документы движения с удаленных складов, по которым, как я уже упоминал, также расчитываются остатки Помимо всего прочего, в процедуре расчета остатков я предусмотрел обработку конфликтных ситуаций, типа расход>прихода на какую-то дату, нам совсем не нужны отрицательные остатки в отчетности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2001, 13:31 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32012324&tid=1825696]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 351ms |

| 0 / 0 |
