powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение последны измененные данные
25 сообщений из 26, страница 1 из 2
Получение последны измененные данные
    #38650850
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Дайте мне идея!
Есть таблица учет товара. В нем:
Код: html
1.
data, time, amount_kredit, sum_kredit, amount_debet, sum_debet, total_amount, total_sum



здесь кредит расход и дебет приход.

Таким образом: Как можно следит за остатками?

Заранее Всем спасибо!
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650852
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я написал вот такой триггер:

Код: sql
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.
CREATE OR ALTER TRIGGER TOTAL_BI0 FOR TOTAL
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable max_total_amount integer;
declare variable max_total_sum integer;
begin
  if (not (new.amountk is null)) then
  begin
   max_total_amount = (select max(total_amount) from total);
   max_total_sum = (select max(total_sum) from total);

   if (max_total_amount is null) then
   begin
     new.total_amount = - (new.amountk);
     new.total_sum = - (new.sumk);
   end
   else
   begin
     new.total_amount = max_total_amount - new.amountk;
     new.total_sum = max_total_sum - new.sumk;
   end
  end

  if (not (new.amountd is null)) then
  begin
   max_total_amount = (select max(total_amount) from total);
   max_total_sum = (select max(total_sum) from total);

   if (max_total_amount is null) then
   begin
     new.total_amount = new.amountd;
     new.total_sum = new.sumd;
   end
   else
   begin
     new.total_amount = max_total_amount + new.amountd;
     new.total_sum = max_total_sum + new.sumd;
   end
  end
end
^


SET TERM ; ^



Мне кажется это не вариант!
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulovздесь кредит расход и дебет приход.
Дизайнеру базы руки оторвать по самую задницу.

AlimkulovКак можно следит за остатками?
Код: sql
1.
SUM(sum_debet)-SUM(sum_kredit)


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650857
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДизайнеру базы руки оторвать по самую задницу.


Что вы имеете в виду?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650859
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovDimitry SibiryakovДизайнеру базы руки оторвать по самую задницу.
Что вы имеете в виду?
Что они (руки) у него (дизайнера базы) из этой самой задницы и растут.

Насколько я понимаю, именно ты спроектировал это убожество. Можешь обосновать выбор такой
странной структуры таблицы? Ты, кстати, даже не сказал что это за таблица.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650861
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlimkulovпропущено...

Что вы имеете в виду?
Что они (руки) у него (дизайнера базы) из этой самой задницы и растут.

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


Теперь не Вы, а Ты! Следи за словом! Ну если не так проектировал, это не значить что 'Что они (руки) у него (дизайнера базы) из этой самой задницы и растут.'

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

Насчет таблица, эта таблица движения товаров в firebrid.
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650867
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovНасчет таблица, эта таблица движения товаров в firebrid.
И в каком бизнес-процессе ты нашёл, что товар движется в обеих направлениях одновременно?

В чём глубинный смысл хранения даты и времени в отдельных полях?

Зачем нарушать вторую НФ хранением полной суммы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650869
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Как будет вообще правилно? Ты можеш дать вариант?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650877
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovТы можеш дать вариант?
Сначала ответь на вопросы выше. Кто ж знает что у тебя там за ТЗ и что за БП...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650878
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovDimitry Sibiryakov,

Как будет вообще правилно? Ты можеш дать вариант?
Пристрелить,не выживет.
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650892
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
БД в firebrid.
Есть таблица товаров:
Код: sql
1.
2.
3.
4.
5.
6.
7.
 CREATE TABLE SYS101 (
    ID                      integer,            -- id товара
    ISFOLDER            varchar(1),       -- статус, группа или нет
    FOLDERID            integer,            -- id группа
    NAME                 varchar(50),      -- наименование
    SYS114              integer,             -- id ед.изм.
 );



Приход товара осуществляется с помощью документа приходного акта, a расход с помощью документа расходного акта. Это всем понятно.
Существует таблица докуметов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE DOC100 (
    ID                 ID_INTEGER,    -- ID докумета
    NUMBERDOC    VARCHAR10,   -- Номер документа
    DATADOC       DATE,            -- Дата документа
    SYS113          integer,          --ID поставщик 
    SYS116          integer,          --ID договор
    SYS118          integer,          --ID склад
    DATEINVOICE  DATE,             --Дата инвойса
    DESCRIPTION  VARCHAR50,     --Комментарий
    NUM_INVOICE  VARCHAR10,     --номер инвойса
    SUMMA          NUMERIC(15,2)  --сумма документа
);



И есть таблица остатка товаров

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE TOTAL (
    ID                       INTEGER,              
    IDDOC                 INTEGER,          -- id документа
    IDGOODS             INTEGER,          -- id товара
     _DATE                DATE,              -- дата проводки
    AMOUNTK            NUMBER(10,2),   -- кол-во кредит
    SUMK                  NUMBER(10,2),   -- сумма кредит
    AMOUNTD            NUMBER(10,2),   -- кол-во дебет
    SUMD                  NUMBER(10,2),   -- сумма дебед
    TOTAL_AMOUNT   NUMBER(10,2),    -- всего количество
    TOTAL_SUM         NUMBER(10,2)    -- всего сумма
);



Вот такая схема.
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650895
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovВот такая схема.
Теперь повторяю вопросы медленно:
1) Один и тот же товар ДЕЙСТВИТЕЛЬНО по одному и тому же документу может как
поступить на склад так и уйти с него? Т.е. в таблице TOTAL поля AMOUNTD и AMOUNTK могут
быть не нулевыми одновременно?
2) В чём причина нарушения второй НФ в виде хранения TOTAL_AMOUNT?
3) В чём проблема "следить за остатками" с помощью запроса, приведённого в первом же ответе?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650902
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlimkulovВот такая схема.
Теперь повторяю вопросы медленно:
1) Один и тот же товар ДЕЙСТВИТЕЛЬНО по одному и тому же документу может как
поступить на склад так и уйти с него? Т.е. в таблице TOTAL поля AMOUNTD и AMOUNTK могут
быть не нулевыми одновременно?
2) В чём причина нарушения второй НФ в виде хранения TOTAL_AMOUNT?
3) В чём проблема "следить за остатками" с помощью запроса, приведённого в первом же ответе?


По приходному акту записывается на AMOUNTD (Дебет), а по расходному записывается на AMOUNTK (Кредит)

TOTAL_AMOUNT = Предедуший остаток +/- AMOUNT(D/K) (Дебет или кредит).
Найти Предедуший остаток.
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650903
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

Что означает твой НФ?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650905
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Что означает твой НФ?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650910
VerLeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице документов как минимум не хватает признака что это - приход или расход. Возможно это определяется по внешним ссылкам, но зачем?
Таблица остатков в таком виде дублирует таблицу документов, да еще и плохо дублирует - в таком виде она вообще не нужна
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650911
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovTOTAL_AMOUNT = Предедуший остаток +/- AMOUNT(D/K) (Дебет или кредит).
Не надо так делать. Выкинь это поле вообще. Поля AMOUNTD и AMOUNTK объедини в одно, где
храни положительное количество для поступлений товара и отрицательное - для отгрузки.

AlimkulovЧто означает твой НФ?
На лекциях о проектировании БД вам не рассказывали о Нормальных Формах?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650914
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VerLeonТаблица остатков в таком виде дублирует таблицу документов
Ага, я тоже сначала думал, что TOTAL это у него таблица остатков, но, судя по ссылке на
документ, это всё же спецификация накладной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650921
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovVerLeonТаблица остатков в таком виде дублирует таблицу документов
Ага, я тоже сначала думал, что TOTAL это у него таблица остатков, но, судя по ссылке на
документ, это всё же спецификация накладной.


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

Dimitry SibiryakovНе надо так делать. Выкинь это поле вообще. Поля AMOUNTD и AMOUNTK объедини в одно, где
храни положительное количество для поступлений товара и отрицательное - для отгрузки.


С этим я согласен. Теперь как найти сальдо на конец периода?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650929
VerLeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovVerLeonТаблица остатков в таком виде дублирует таблицу документов
Ага, я тоже сначала думал, что TOTAL это у него таблица остатков, но, судя по ссылке на
документ, это всё же спецификация накладной.


Да, что-то невнимательно посмотрел, думал что заголовок и спецификация объединены в одну таблицу DOC100. А так да - TOTAL - это спецификация с кучей избыточных полей.
Тогда ты во всем прав:
1. TOTAL - это спецификация документа. Убрать оттуда дебит-кредит, оставить количество и сумму. нарастающие итоги - и подавно убить. Да и переобзвать в что-то похожее на истинное предназначение таблицы.
2. В DOC100 желательно добавить признак вида документа. Хотя если база небольшая, то можно и без этого, но я бы в любом случае это сделал (пусть и в нарушение 1 НФ)
3. Если нужна таблица остатков - сделать другую таблицу. Дата - товар - остаток (количество и если реально нужно - сумма).
Таблица ведется на триггерах, меняется при проведении документа. Но надо еще подумать - нужна ли она вообще.

Как бэ общие принципы для любой системы учета товародвижения :)
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650932
VerLeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alimkulov, Пляши от логики всегда. Что ты хочешь получить от таблицы остатков? Количество (и возможно сумму) остатка конкретного товара на дату? Тогда она должна быть дата-товар-остаток (количество и сумма, если надо). Общую сумму товара на складе - тода дата-сумма (количество уже не интересно)
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650943
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovТеперь как найти сальдо на конец периода?
SQL запросом SELECT с использованием агрегатной функции SUM() и условием выборки всех
движений, предшествующих концу периода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650983
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Dimitry Sibiryakov]
AlimkulovTOTAL_AMOUNT = Предедуший остаток +/- AMOUNT(D/K) (Дебет или кредит).
Не надо так делать. Выкинь это поле вообще. Поля AMOUNTD и AMOUNTK объедини в одно, где
храни положительное количество для поступлений товара и отрицательное - для отгрузки.

Думал что, буду использовать этого таблицу на документе акт внутренные перемещения.
Тогда например со склада №1 на склад №2 перемещаем товар в количестве 10 шт.

проводко

AMOUNTD (склад №2) = 10;
AMOUNTK (склад №1) = -10;

Вот почему я розделил на 2 части.
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650985
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

а если количество складов возрастёт до 50?
...
Рейтинг: 0 / 0
Получение последны измененные данные
    #38650996
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovДумал что, буду использовать этого таблицу на документе акт внутренные
перемещения.
Не сможешь. Для этого в ней нет идентификации склада.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение последны измененные данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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