|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
2 trdm_ Спасибо за ответ. Но не совсем могу согласиться с Вашим утвержением, что: авторЯ бы не стал консультироваться у Андрея по этим вопросам. Он закоренелый технарь и находится слегка в плену DOSовской парадигмы программирования Все таки структура и схема БД программы не совсем зависит от того, на какой ОС программирует человек. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 15:58 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Last1Cmen вы не поняли сути проблемы а именно сокращение времени для "закрытия периода" для того чтобы система функционировала актуально происходящим процессам а не по истечении нескольких месяцев "выравнивать" что либо нет конечно абсолютно во всех аналитических разрезах контролировать ввод данных нет необходимости но хоть какой-то хотябы на уровне текущего остатка просто обязан быть Каким образом закрытие периода связано с контролем ввода данных и актуальностью процессов? У нас есть дополнительно оперативные остатки по товарам в разрезе складов, которые используются для ускорения расчетов. Остальные параметры считаются от ближайших зафиксированных остатков (границы закрытого периода). Например, чтобы получить текущий долг контрагента, в открытом периоде читаются все документы, влияющие на взаиморасчеты с ним. Обычно это несколько записей в базе данных, получить которые составляет доли секунды. Last1Cmen при построении системы на одних документах (наборах данных движения объектов) без механизма получения и хранения данных о остатках и вспомогательной информации служащей для отслеживания актуальности и "правильности" состояния БД мы рискуем получить продукт не только не помогающий в работе но ещё и наткнуться на проблему "автоматизации ради автоматизации" Как раз все наоборот. Любой актуальный параметр можно сохранять в базе данных, затем брать оттуда, а можно рассчитывать динамически. В первом случае всегда существует проблема актуальности сохраненных значений. Например, в вашей парадигме (судя по нику), после корректировки прихода задним числом потребуется перепроведение всех последующих документов, чтобы получить актуальное значение наценки с продаж. В альтернативном варианте значение наценки всегда остается актуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 17:27 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
FinSoft Каким образом закрытие периода связано с контролем ввода данных и актуальностью процессов? время на эту процедуру как правило обратнопропорционально наличию оперативного контроля FinSoft У нас есть дополнительно оперативные остатки по товарам в разрезе складов, которые используются для ускорения расчетов. Остальные параметры считаются от ближайших зафиксированных остатков (границы закрытого периода)... вот видите - они же есть (какова реализация - предмет другой темы не менее интересной) но это вы сказали только сейчас... а по первому посту который я и комментировал выходило так что этого механизма либо нет либо он не задействован FinSoftНапример, в вашей парадигме (судя по нику), после корректировки прихода задним числом потребуется перепроведение всех последующих документов не всегда но бывает - это так называемое понятние "последовательности" FinSoftЛюбой актуальный параметр можно сохранять в базе данных, затем брать оттуда, а можно рассчитывать динамически. В первом случае всегда существует проблема актуальности сохраненных значений. да конечно но тут палка о двух концах при "динамическом" подходе будем иметь проблемы при большой транзакционной нагрузке при "статическом" - проблемы с той же последовательностью регистрации событий т.е. дело в разумном балансе этих подходов к учетным задачам НО в любом случае какие-то статические даные для контроля будут присутствовать... нельзя сказать что фиксируя только движения наборов учетных объектов можно построить толковую систему... только накопительную для неких анализов основанных восновном на оборотах - возможно а остальное - врядли вот как-то слабо себе представляю рабочую систему в момент фиксации изменения состояния взаиморасчетов получающую всю необходимую аналитику за несколько лет с момента начала ведения отношений с контрагентом и по последний существующий факт ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 18:01 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
PrimaryPro, похожая ситуация... заказчику писали склад для позаказного производства. В итоге пришли к тому, что помимо производства они занимаются, купи – продай. В итоге, написали модуль «Счета» выставляемые поставщиками. Счета указываются в ожидаемых поставках на склад. Ожидаемая поставка, на основании ее номера делается приход. Расход со склада по той же схеме в обратную сторону. Ожидаемая поставка к приходу на склад 1:М По счетам бухгалтерия делает отметки – дата и номер платежного поручения. Отчет по сверке показывает всю картину взаимоотношений. Все!) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 18:35 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Добрый вечер господа! автор"живая" тема, несмотря на выходные дни :)… у мну на все дела одна таблица - проводок, в ней суммы приходов, отгрузок, списаний, оплат и перекрытий и всех прочих хоз.операций Привет тёзка. Вы демонстрируете один из подходов – и он имеет «право на жизнь», но замечу, что обычно делят операции по типам для достижения «логичности» системы и структуры хранения информации. Ваша идея подходит, если пытаться создавать некую «платформу» информационной системы, но здесь явно не хватает таблицы типа (так называемых «метаданных»): 1. код_операции 2. поле_1/структура информации … х. поле_х/структура информации авторFinSoft. У нас одна из главных "фишек" - работа без проведения документов. Проведение – это просто термин , означающий попадание операции в «отчёты». В КИС Lack – это «распределение» для накладной, «ввод даты оплаты» для финансового документа. Что бы «опера» не испортили «отчётность бухгалтерии» в КИС имеются ограничение доступа к действиям пользователям (что решает проблемы озвученные Last1Cmen): 1. Запрет документа к изменению или удалению; 2. Запрет ввода операций «задним числом». авторTrdm. Я бы не стал консультироваться у Андрея по этим вопросам. Он закоренелый технарь и находится слегка в плену DOSовской парадигмы программирования. С момента последней нашей «тёрки» система КИС Lack переделана (на уровне исходных текстов) под мультиплатформенную парадигму и должна легко «собираться» под dos, windows, linux, macOS, PocketPC. На сайте имеются исходные текста и сборка системы УС Land под Win32 и если: 1. Вам «не влом»; 2. Хотя бы на «поверхностном» уровне знаете какой нибудь Free компилятор ANSI C; 3. Научились настраивать FireFox. То без проблем пересобирёте систему под любой ПК платформой. ОС в задаче ТС абсолютно не важна, м.б. какое-то значение имеет механизм доступа к данным: 1. Навигационный 2. Реляционный. Хотя и это не влияет на структуры хранения информации (таблицу БД). авторPrimaryPro 1. Я так понял, что создается журнал финансовых документов (отдельно от журнала складских документов), где каждому финансовому документу привязывается один или несколько документов из журнала складских документов (или не привязывается, если фин. документ не связан с дурнадом складских документов)? 2. Как вести отдельно наличные фин.документы (касса) и безналичные фин.документы (банк) с позиции разработчика? Вы всё правильно поняли – достаточно «факультативной» ссылки на уникальные код документа «журнала складских документов». Все механизмы «привязок» подробно описаны на страничке e-book: технологии и отчёты по финансовым документам. Для примера приведу структуру таблицы «кассовых документов» из описания laks_dbf.doc комплекса документации системе (можно взять на сайте): Код: 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.
автор3. В товарной накладной имеется реквизит "отсрочка платежа". Для чего? В принципе спецы уже ответили, но в основном: 1. Анализ дебиторкой или кредиторской задолжности; 2. Выявление «просроченных» оплат; 3. Инфа для контрагента и торгового представителя о сроках оплат. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 19:02 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Last1Cmen при "динамическом" подходе будем иметь проблемы при большой транзакционной нагрузке при "статическом" - проблемы с той же последовательностью регистрации событий может я не правильно понимаю, но при динамическом подходе как раз транзакций (операций записи информации в разные таблицы) меньше , чем при статическом. Одно дело записать информацию об операции, другое - одновременно еще и обновить различные остатки (как ни крути - пока не закончилась одна транзакция, другая такого же типа не стартует). При большом количестве пользователей - теряем скорость ввода Last1Cmen вот как-то слабо себе представляю рабочую систему в момент фиксации изменения состояния взаиморасчетов получающую всю необходимую аналитику за несколько лет с момента начала ведения отношений с контрагентом и по последний существующий факт а в чем здесь проблема? При динамическом подходе фиксировать изменение состояния взаиморасчетов не нужно. Просто фиксируется очередная операция (платеж, отгрузка...). А состояние считается, на любую дату и за любой период. Времени это занимает больше, но не смертельно... Зато точно, и по простым алгоритмам. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 22:59 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Андрей Ж. Привет тёзка. Вы демонстрируете один из подходов – и он имеет «право на жизнь», но замечу, что обычно делят операции по типам для достижения «логичности» системы и структуры хранения информации. Ваша идея подходит, если пытаться создавать некую «платформу» информационной системы, но здесь явно не хватает таблицы типа (так называемых «метаданных»): 1. код_операции 2. поле_1/структура информации … х. поле_х/структура информации Привет. Все примерно так и есть. Только метаданных нет. В каждую проводку можно поставить некоторое количество кодов аналитики (каждый связан со своим справочником, обычно в нем два поля - только код и название, некоторые имеют много - справочник клиентов, например). В разрезе этих кодов и вычисляются на ходу все нужные остатки и анализируются обороты. Я может бы и завел таблицу с остатками на начало месяца, но сложно предположить, в каком разрезе захочет получать отчет пользователь. А если проводить анализ взаиморасчетов в динамике (с шагом, например, 7 дней) - готовые остатки не реально держать на каждую дату. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 23:21 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
может я не правильно понимаю, но при динамическом подходе как раз транзакций (операций записи информации в разные таблицы) меньше , чем при статическом. Одно дело записать информацию об операции, другое - одновременно еще и обновить различные остатки (как ни крути - пока не закончилась одна транзакция, другая такого же типа не стартует). При большом количестве пользователей - теряем скорость ввода - возьмите сто объектов с тремя параметрами и запишите их - потом возьмите и перед транзакцией получите остатки по тем же 100 объектам агрегируя пару - - десятков тыс. строк движений (т.к. не используем статические показатели) - потом возьмите сделайте сначала одно потом сразу же другое - потом умножьте на 100 пользователей после этого продолжим разговор про статику\динамику а в чем здесь проблема? При динамическом подходе фиксировать изменение состояния взаиморасчетов не нужно. Просто фиксируется очередная операция (платеж, отгрузка...). А состояние считается, на любую дату и за любой период. Времени это занимает больше, но не смертельно... Зато точно, и по простым алгоритмам. да... с последним соглашусь эта схема применима к тем ситуациям когда задержка констатации факта неприменима и за это расплачиваемся временем потраченным на "разбор полетов" из-за ошибок ввода перед "закрытием периода" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 00:42 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Last1Cmen FinSoftЛюбой актуальный параметр можно сохранять в базе данных, затем брать оттуда, а можно рассчитывать динамически. В первом случае всегда существует проблема актуальности сохраненных значений. да конечно но тут палка о двух концах при "динамическом" подходе будем иметь проблемы при большой транзакционной нагрузке при "статическом" - проблемы с той же последовательностью регистрации событий Отнюдь. Вернемся к предыдущему примеру с изменением в приходной накладной. Сколько записей в базе данных вам придется удалить/создать/изменить? Даже при проведении одной накладной в торговой системе счет будет на десятки и сотни, причем нужно не только сохранить накладную и сделать проводки в регистры, но и пересчитать остатки по каждому товару на конец каждого последующего месяца и оперативные. И т.д. В нашем случае это будет изменение 3 записей - строка накладной, оперативный остаток по товару и лог. Сами понимаете, что займет это доли секунды и никак не отразиться на работе других пользователей. Чтение же информации из кэша сервера при формировании отчетов выполняется очень быстро, при этом пользователи не блокируют работу друг друга. Конечно, структура базы данных заранее оптимизируется для возможности быстрого доступа к данным. Чтобы было понятно, приведу еще один пример. Чтобы получить карточку движений товара в вашей системе вы предварительно делаете проводки в регистр, который упорядочивается по ссылке на товар и периоду операции. Затем при формировании отчета вы уже можете быстро отобрать все движения, относящиеся к этому товару за период. Сами строки накладной можно получить лишь в контексте накладной. У нас наоборот, можно напрямую работать со строками документов. Ссылка на товар там всегда есть, а период (дата и время) всегда устанавливается равным периоду в шапке накладной (денормализация). В результате мы получаем ту-же последовательность (товар+период операции), но без проведения документа. При построении карточки товара будут считаны только те записи, которые к нему относятся, ничего более - отчет будет сформирован практически мгновенно. Last1Cmen т.е. дело в разумном балансе этих подходов к учетным задачам НО в любом случае какие-то статические даные для контроля будут присутствовать... нельзя сказать что фиксируя только движения наборов учетных объектов можно построить толковую систему... только накопительную для неких анализов основанных восновном на оборотах - возможно а остальное - врядли вот как-то слабо себе представляю рабочую систему в момент фиксации изменения состояния взаиморасчетов получающую всю необходимую аналитику за несколько лет с момента начала ведения отношений с контрагентом и по последний существующий факт Динамические расчеты выполняются в открытом периоде и частично в закрытом, кроме случаев ресурсоемких отчетов. Я с вами согласен, что обработка всех движений за период может сильно просаживать производительность (причем именно обработка, а не чтение из базы). Только обычно это относится к товародвижению, а не расчетам с контрагентами. Поэтому в закрытых периодах у нас используются сводные итоги в некоторых разрезах. Например, для быстрого получения информации по наценке сохраняются итоги в разрезах товар+склад, товар+поставщик, товар+покупатель, а также итоговые наценки в разрезе накладных. Структурно это напоминает регистры в вашей системе, но записи там итоговые за период, их намного меньше, формируются они при закрытии периодов и их обновление никак не тормозит работу других пользователей. Если отчет далее будет формироваться по нескольким периодам, то программа выполнит декомпозицию, где можно, возьмет готовые итоги, где нельзя (открытый период или неполный закрытый) пересчитает динамически, результаты объединит. В результате, к примеру, отчет по движению всех товаров за год будет сформирован в пределах 1-2 минут со всеми сортировками и группировками. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 08:41 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
FinSoft Чтобы было понятно, приведу еще один пример. Чтобы получить карточку движений товара в вашей системе вы предварительно делаете проводки в регистр, который упорядочивается по ссылке на товар и периоду операции. Затем при формировании отчета вы уже можете быстро отобрать все движения, относящиеся к этому товару за период. Сами строки накладной можно получить лишь в контексте накладной. У нас наоборот, можно напрямую работать со строками документов. Ссылка на товар там всегда есть, а период (дата и время) всегда устанавливается равным периоду в шапке накладной (денормализация). В результате мы получаем ту-же последовательность (товар+период операции), но без проведения документа. При построении карточки товара будут считаны только те записи, которые к нему относятся, ничего более - отчет будет сформирован практически мгновенно. Динамические расчеты выполняются в открытом периоде и частично в закрытом, кроме случаев ресурсоемких отчетов. Я с вами согласен, что обработка всех движений за период может сильно просаживать производительность (причем именно обработка, а не чтение из базы). Только обычно это относится к товародвижению, а не расчетам с контрагентами. Поэтому в закрытых периодах у нас используются сводные итоги в некоторых разрезах. Например, для быстрого получения информации по наценке сохраняются итоги в разрезах товар+склад, товар+поставщик, товар+покупатель, а также итоговые наценки в разрезе накладных. Структурно это напоминает регистры в вашей системе, но записи там итоговые за период, их намного меньше, формируются они при закрытии периодов и их обновление никак не тормозит работу других пользователей. Если отчет далее будет формироваться по нескольким периодам, то программа выполнит декомпозицию, где можно, возьмет готовые итоги, где нельзя (открытый период или неполный закрытый) пересчитает динамически, результаты объединит. В результате, к примеру, отчет по движению всех товаров за год будет сформирован в пределах 1-2 минут со всеми сортировками и группировками. На мой взгляд вариант "получать остатки налету из документов" конечно же имеет право на жизнь. Все же есть недостатки, из которых лично для меня этот способ неприемлим: 1. И основное. Ограниченная производительность системы. Все хорошо когда у нас только расходные и приходные накладные и возвраты - можно делать документы на одной таблице, или собирать в процедуре расчета остатков, всего таблички прошерстить. Далее появляются инвентаризация, акты оприходывания и списания, потребление в производство, выход товара из производства. Переписываем процедуру расчета остатков. Сколько ж у нас табличек в запросе будет? А потом (не дай бог!) введем резервирование при вводе строк документов (разумеется с проверкой актуальных остатков и резервов на непроведенные документы) - сколько ж такая процедура работать будет? С клиентами (например проверка просроченной задолженности) при наличии десятка типов документов - та же беда. 2. Вытекает из первого. Сложность поддержки - всегда нужно помнить какой документ как влияет на остатки - это если писать код оптимально, либо писать код универсально и генерить мегапроцедуры по расчету остатков. 3. Достаточно сложно отследить нарушения целостности учета, к примеру при удалении приходной накладой или смене даты проведения (это ведь так просто! - считаем все по документам) могут возникнуть запрещенные отрицательные остатки, товар отгрузился раньше чем произвелся ну и тому подобные казусы. В Вашем посте радует последний абзац - Вы уже пришли к пониманию необходимости регистров хотя бы в закрытых периодах. Осталось сделать решающий шаг - отказатся от динамического расчета по документам и построить все систему на регистрах :). Я лично придерживаюсь системы: Документ->Журнал Учета-Регистр. Журналы учета (и только они) пишут в регистры, документы могут писать только в журналы учета и их проводить. Регистров и журналов немного (товарный, складской, по клиентам, по поставщикам, по банкам, финансовых операций), но код по проверке и занесению в них данных из журналов достаточно изощренный, документов больше на порядок, код по их проведению сводится к заполнению и проведению журналов учета. Общий смысл - разделить мух и котлет, документы от ядра системы - регистров. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 11:51 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Ага[quot FinSoft] На мой взгляд вариант "получать остатки налету из документов" конечно же имеет право на жизнь. Все же есть недостатки, из которых лично для меня этот способ неприемлим: 1. И основное. Ограниченная производительность системы. Все хорошо когда у нас только расходные и приходные накладные и возвраты - можно делать документы на одной таблице, или собирать в процедуре расчета остатков, всего таблички прошерстить. Далее появляются инвентаризация, акты оприходывания и списания, потребление в производство, выход товара из производства. Переписываем процедуру расчета остатков. Сколько ж у нас табличек в запросе будет ? А потом (не дай бог!) введем резервирование при вводе строк документов (разумеется с проверкой актуальных остатков и резервов на непроведенные документы) - сколько ж такая процедура работать будет? С клиентами (например проверка просроченной задолженности) при наличии десятка типов документов - та же беда. 2. Вытекает из первого. Сложность поддержки - всегда нужно помнить какой документ как влияет на остатки - это если писать код оптимально, либо писать код универсально и генерить мегапроцедуры по расчету остатков. 3. Достаточно сложно отследить нарушения целостности учета, к примеру при удалении приходной накладой или смене даты проведения (это ведь так просто! - считаем все по документам) могут возникнуть запрещенные отрицательные остатки, товар отгрузился раньше чем произвелся ну и тому подобные казусы. 1-2: А стоит ли заводить таблички на каждый вид операции (вид документа)? Можно хранить все в одной таблице приходов-расходов (кол-во с плюсом - приход, кол-во с минусом - расход), и алгоритм расчета остатка прост: простой select с нужным group by 3:Защита от таких безобразий одинакова при любом подходе - проверка и запрет. Но если операция корректна, то в "динамике" она выполнится моментально (поменяли дату документа в одной таблице), а в "статике" - ? Лично я использую оба подхода, но статику реже. И для товара, например, держу не текущие остатки, а на начало дня (недели, месяца) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 12:12 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
FinSoft я не углубляюсь пока в технологические аспекты пересчета т.к. это отдельная тема я заострил внимание что он (пересчет или промежуточная фиксация итога) должен быть а уж какая у него реализация это дело другое мы удалились от сути проблемы которая заключается в том что в любом случае контроль в том или ином виде при оперативной работе должен присутствовать а он уже в свою очередь требует для своей приемлимой скорости неких статических показателей (т.к. безусловно "считать из БД" это не "рассчитать по данным БД") т.е. говорить о том что система построенная только фиксациях фактов изменения показателей наборов объектов применима для учетных систем с необходимостью ведения остатка нецелесообразно Чтобы получить карточку движений товара в вашей системе вы предварительно делаете проводки в регистр, который упорядочивается по ссылке на товар и периоду операции. Затем при формировании отчета вы уже можете быстро отобрать все движения, относящиеся к этому товару за период. Сами строки накладной можно получить лишь в контексте накладной. У нас наоборот, можно напрямую работать со строками документов. Ссылка на товар там всегда есть, а период (дата и время) всегда устанавливается равным периоду в шапке накладной (денормализация). В результате мы получаем ту-же последовательность (товар+период операции), но без проведения документа. При построении карточки товара будут считаны только те записи, которые к нему относятся, ничего более - отчет будет сформирован практически мгновенно. если касательно 1С то там возможно разное построение построение регистра фиксации и самое главное почему изначально не рекомендуется использование документов в качестве источника данных для отчетов то это методология того что сам документ - не более чем удобная форма ввода информации данные в которой не обязательно должны совпадать с фактически необходимой структурой хранения по этому и иной раз построить отчет "по документам" либо не представляется возможным либо не является рациональным а так в принципе получить аналитику по строкам не заходя в сам документ - не проблема... но эксплуатация этого механизма не всегда целесообразна (в 1С из-за особенностей хранения таблиц самих документов) Если отчет далее будет формироваться по нескольким периодам, то программа выполнит декомпозицию, где можно, возьмет готовые итоги, где нельзя (открытый период или неполный закрытый) пересчитает динамически, результаты объединит. В результате, к примеру, отчет по движению всех товаров за год будет сформирован в пределах 1-2 минут со всеми сортировками и группировками. ну во-первых время работы довольно сравнительный показатель чтоб им оперировать ну а во-вторых сложная "композиция" временных интервалов (с точки зрения трудозатрат и всего вытекающего) существенно утяжеляет разработку одновременно теряя гибкость решения... а это время и деньги как на саму разработку так и на сопровождение для сложных отчетов (даже не отчеты а аналитические обработки) я использую отдельные БД с иными конфигурационными структурами... да есть проблемы с синхронизацией но это допустимая жертва по разделению транзакционной и аналитической нагрузок ну все таки мне кажется мы несколько уходим от темы ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 12:16 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
[quot vill_ager] 1-2: А стоит ли заводить таблички на каждый вид операции (вид документа)? Можно хранить все в одной таблице приходов-расходов (кол-во с плюсом - приход, кол-во с минусом - расход), и алгоритм расчета остатка прост: простой select с нужным group by [quot] Ну примерно так у меня и устроены регистры. Строки же документов многообразны - в инвентаризации нет цены, зато есть расчетное количество и количество по инвентаризации, в строках покупок и продаж есть цены, расчет НДС и прочее относящееся к бух. учету и фискальному учету. Наверно все можно пихнуть в одну таблицу, но я слабо представляю как :). [quot vill_ager] 3:Защита от таких безобразий одинакова при любом подходе - проверка и запрет. Но если операция корректна, то в "динамике" она выполнится моментально (поменяли дату документа в одной таблице), а в "статике" - ? [quot] Согласен с методикой защиты - вопрос в том сколько будут выполнятся проверки (к примеру простой расчет наличия товара с учетом зарезервированного). Далее, если операция корректна в статике ее перепроведение/отмена разумеется будет выполнятся дольше. Я все же рассмотрел вопрос под немного другим углом: чем больше загружен сервер - проверками при вводе документов и отчетами или проведением/распроведением документов. Вопрос о там как отследить корректна операция или нет (к примеру смена даты проведения) Вы видимо сознательно обошли стороной :), по моему опыту с системой а-ля "собираем по документам" это выливается в головняк похуже написания алгоритмов проведения документа. Кроме того не стоит забывать про периодически выполняемые задания, к примеру расчет себестоимости (в общем случае может идти до закрытия периода) , расчет курсовых разниц - куда писать результаты работы этих процедур в случае системы "считаем по документно" для меня остается загадкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 15:22 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Ага На мой взгляд вариант "получать остатки налету из документов" конечно же имеет право на жизнь. Все же есть недостатки, из которых лично для меня этот способ неприемлим: 1. И основное. Ограниченная производительность системы. Все хорошо когда у нас только расходные и приходные накладные и возвраты - можно делать документы на одной таблице, или собирать в процедуре расчета остатков, всего таблички прошерстить. Далее появляются инвентаризация, акты оприходывания и списания, потребление в производство, выход товара из производства. Переписываем процедуру расчета остатков. Сколько ж у нас табличек в запросе будет? А потом (не дай бог!) введем резервирование при вводе строк документов (разумеется с проверкой актуальных остатков и резервов на непроведенные документы) - сколько ж такая процедура работать будет? С клиентами (например проверка просроченной задолженности) при наличии десятка типов документов - та же беда. Все документы складского учета у нас собраны в две таблицы - шапки и строковые части. Точнее сказать три, но это другая тема. Новые документы вводятся достаточно редко, чаще модифицируются существующие. Например, один вид документа "Списание" используется и для списания товаров/материалов на затраты, и для перемещения материалов производство. В этих случаях несколько различается набор реквизитов заголовка документа, но с точки зрения движений материалов на складе операция одинаковая. Аналогично с приходом из производства и т.п. По поводу резервирования ситуация следующая. Вначале был сделан динамический расчет. На сервере это работало без каких-либо заметных проблем. Затем потребовалась поддержка работы по сети, сделали все-же оперативные остатки. В данном случае их использование оправдано, т.к. текущий остаток нужно показывать много где, в подборе, строках документов и т.п. Надо заметить, что текущие остатки не являются проводками, это фиксированные записи в разрезе товар+склад. К вопросу о производительности - сколько записей в секунду будет выбирать из кэша современный сервер? И сколько записей нужно просмотреть для получение всех операций с заданным контрагентом? Получаем доли секунды. Ага 2. Вытекает из первого. Сложность поддержки - всегда нужно помнить какой документ как влияет на остатки - это если писать код оптимально, либо писать код универсально и генерить мегапроцедуры по расчету остатков. Поработав с системами обоих видов, я пришел к другому мнению. Дин. расчеты, касающиеся какого-то аналитического среза (регистра) собираются в одной/двух процедурах. В принципе, объем кода приблизительно одинаков, только в системах с проведением он размазан по документам, в нашем случае - по расчетным процедурам. Все остальное производно. Когда что-то меняется в расчете, все равно придется проверять работу разных отчетов, с ним связанных. Так как затащить все в регистры проблематично и обращение к документам все равно происходит в том или ином виде. Могу сказать, как организовано у нас. Проект разрабатывается на уровне методанных и к каждому диалогу или расчету можно приписать набор "тем", которые он затрагивает. Например, складской учет или взаиморасчеты. Что-то поменяли, скажем, во взаиморасчетах, формируем список мест, где эта тема задействована, и проводим дополнительные тесты. Еще у нас существуют автотесты, в которых выполняется автоматическое сравнение некоторых контрольных показателей разных расчетов. Посмотрите на вопрос с другой точки зрения. Предположим, нужно ввести новый функционал или уточнить старый, а это затрагивает информацию, сохраненную в регистрах при проведении. У нас такого нет в принципе, мы просто делаем новый расчет или уточняем старый, и это будет работать во всех периодах. Как быть в случае с проводками? Перепроводить все в большинстве ситуаций не выход, придется делать какие-то дополнительные служебные документы и т.п. А затем учитывать их использование во всех расчетах. Далее, вы никогда не мониторили количество звонков на суппорт по поводу того, что клиент что-то поменял не по порядку и не понимает, что произошло? Ага 3. Достаточно сложно отследить нарушения целостности учета, к примеру при удалении приходной накладой или смене даты проведения (это ведь так просто! - считаем все по документам) могут возникнуть запрещенные отрицательные остатки, товар отгрузился раньше чем произвелся ну и тому подобные казусы. Если разрешены корректировки задним числом, то мы никуда от этого не уйдем в обоих случаях. Вопрос цены исправления ситуации - лопатить кучу данных в базе или исправить одну-две записи. Для описанной ситуации применительно к движению товаров у нас используется понятие "фиктивный приход". Все расходы, образующие отрицательный остаток, не повисают в воздухе, а относятся к этим "фиктивным приходам". Специальная процедура контроля товарных операций позволяет легко их обнаружить и исправить, а в отчетах, где нужно, такие позиции тоже визуально выделяются. Ага В Вашем посте радует последний абзац - Вы уже пришли к пониманию необходимости регистров хотя бы в закрытых периодах. Осталось сделать решающий шаг - отказатся от динамического расчета по документам и построить все систему на регистрах :). Итоги по периодам не то-же самое, что проводки. Как я написал, это сводные данные в некоторых разрезах, используемые для ускорения работы. Иными словами, программа будет работать и без них (кроме начальных остатков после среза базы данных), а их расчет не приводит к блокировке работы других пользователей. Скорость сохранения итогов за месяц обычно занимает не более минуты, отмена итогов выполняется мгновенно (изменения статуса заглавной записи). Сколько по времени будут перепроводиться накладные за месяц? PS. От систем с проведением документов был сделан сознательный уход лет 7 назад, к сводным итогам за период пришли года 4 назад. Главная мотивация - это беспроблемность техподдержки клиентов. Это совсем разные вещи - протестить код расчетной процедуры или копаться с базой данных клиента, который что-то сделал не так, не в том порядке, либо мы и не думали, что он такое может как-то сделать, либо мы сами допустили ошибку, а клиент успел накопить неверные результаты в базе и т.п. ... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 16:46 |
|
Как учитываются в складской программе денежные средства?
|
|||
---|---|---|---|
#18+
Last1CmenFinSoft я не углубляюсь пока в технологические аспекты пересчета т.к. это отдельная тема я заострил внимание что он (пересчет или промежуточная фиксация итога) должен быть а уж какая у него реализация это дело другое С этим я вполне согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2010, 16:48 |
|
|
start [/forum/topic.php?fid=33&msg=36699615&tid=1548273]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 158ms |
0 / 0 |