Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть еще варианты? [D6, IB6.x]


Mike Kouzmine ©   (2004-05-19 17:25:00) 

Задача. Под одной крышей несколько организаций у каждой свой склад, но есть табличка в которой указано какие склады (других организаций) она дополнительно видит. При выписке счета они могут цеплять не только свой товар, но и чужой (если разрешено).
Получается типа
Заголовок
СЛД  НОМЕР  ОРГАНИЗАЦЯ
1        1   Рога и Копыта
Содержание
СКЛ   НОМЕР    АРТ      НАЗВАНИЕ                        
1        1     345     Тра-та-та
3        1     222     Пам-па-ра        

У организации с номером склада 3 должен сформироваться запрос на товар
Заг.
1        1    Рога и Копыта
Содержание
3        1     222     Пам-па-ра

Сейчас делаю через ХП с ограничением по датам перебором. Или можно (нужно) как-то иначе?


Mike Kouzmine   (2004-05-19 18:12:00) [1]

Все написал. Все нормально, всем спасибо.


Mike Kouzmine   (2004-05-19 18:01:00) [2]

Вопрос снят. Сейчас допишу и пусть будет так.


Mike Kouzmine   (2004-05-19 17:58:00) [3]

Курдль ©   (19.05.04 17:54) [12] Вопрос не об этом.
Соловьев ©   (19.05.04 17:44) [6] Примерно так
begin
 FOR SELECT STATUS, MOVE, DAT_CREATE, NUM, ORG, TUSER FROM HEADERS
  WHERE SCLAD = :SCLAD AND VID = 2 AND DAT_CREATE BETWEEN :DAT_OT AND :DAT_DO
  INTO :STATUS, :MOVE, :DAT_CREATE, :NUM, :ORG, :TUSER DO
    BEGIN
      SELECT COUNT(*) FROM MOVE
         WHERE MOVE.NUM = :NUM AND MOVE.SCLAD <> :SCLAD INTO :RECCOUNT;
      if (RECCOUNT > 0) then
        BEGIN
          Дальнейшая обработка
          SUSPEND;
        END
    END
end


-SeM-   (2004-05-19 17:54:00) [4]


> А что здесь нечеловеческого
> со своего склада выписал чужой товар
> у каждой своя бухгалтерия и свой склад


[8]


Курдль   (2004-05-19 17:54:00) [5]


> А что здесь нечеловеческого.

Да даже названия! Если есть компании - вполне логично завести таблицу "КОМПАНИИ". Несколько складов, причем, как я понимаю, у одной компании может быть не один склад - значит таблица "СКЛАДЫ", имеющая отношение "много-к-одному" к т."КОМПАНИИ". Если есть какой-то товар - пусть себе хранится в таблице "СПРАВОЧНИК_ТОВАРОВ", а к складам привязывается ассоциативной таблицей "ЕСТЬ_НА_СКЛАДЕ".
Ну и т.д.


Mike Kouzmine   (2004-05-19 17:48:00) [6]

Курдль ©   (19.05.04 17:45) [8] А что здесь нечеловеческого. Группа компаний под одной крышей, но у каждой своя бухгалтерия и свой склад.


Mike Kouzmine   (2004-05-19 17:46:00) [7]

Соловьев ©   (19.05.04 17:44) [6] Сейчас корябую. Да не думаю, что будут проблемы. Вопрос в чем, может быстрее будет запросом одним получить заголовки?


Курдль   (2004-05-19 17:45:00) [8]

Может все-таки убедить того, кто придумал такую структуру сделать все по-человечески? Или это не реально?


Соловьев   (2004-05-19 17:44:00) [9]


> Сейчас делаю через ХП с ограничением по датам перебором.
> Или можно (нужно) как-то иначе?

что уже сделал? покажи


Mike Kouzmine   (2004-05-19 17:44:00) [10]

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

Ты со своего склада выписал чужой товар. По правилу 1 необходимо: чужая организация возвращает товар поставщику, затем он оприходуется на тебя и происходит отгрузка


Соловьев   (2004-05-19 17:43:00) [11]


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

если есть условия то только ХП.


Курдль   (2004-05-19 17:41:00) [12]

Тогда я - пас! :(


Mike Kouzmine   (2004-05-19 17:39:00) [13]

ЗАГОЛОВКИ
TABLE HEADERS (
   SCLAD       INTEGER NOT NULL,
   VID         INTEGER NOT NULL,
   STATUS      INTEGER NOT NULL,
   MOVE        INTEGER NOT NULL,
   DAT_CREATE  DATE NOT NULL,
   DAT_OTGR    DATE NOT NULL,
   NUM         INTEGER NOT NULL,
   PARTNER     INTEGER DEFAULT 0 NOT NULL,
   ORG         INTEGER NOT NULL,
   SUMMA       NUMERIC(15,2) DEFAULT 0 NOT NULL,
   SUMMA_OPL   NUMERIC(15,2) NOT NULL,
   NDS         NUMERIC(15,7) DEFAULT 0 NOT NULL,
   ZAKAZ       INTEGER DEFAULT 0 NOT NULL,
   ZAK_STATUS  INTEGER DEFAULT 0 NOT NULL,
   TUSER       INTEGER NOT NULL,
   OWNER       INTEGER DEFAULT 0 NOT NULL,
   DAT_CREAT   DATE DEFAULT 'NOW' NOT NULL,
   LAST_EDIT   DATE DEFAULT 'NOW' NOT NULL,
   DAT_IMPORT  DATE,
   DAT_EXPORT  DATE
);
СОДЕРЖАНИЕ
TABLE MOVE (
   SCLAD       INTEGER NOT NULL,
   VID         INTEGER NOT NULL,
   STATUS      INTEGER NOT NULL,
   MOVE        INTEGER NOT NULL,
   DAT_CREATE  DATE NOT NULL,
   DAT_OTGR    DATE NOT NULL,
   NUM         INTEGER NOT NULL,
   PARTNER     INTEGER NOT NULL,
   ORG         INTEGER NOT NULL,
   MNUM        INTEGER NOT NULL,
   GROUPS      INTEGER NOT NULL,
   ARTICUL     VARCHAR(30) NOT NULL COLLATE PXW_CYRL,
   NAME        VARCHAR(80) NOT NULL COLLATE PXW_CYRL,
   ZAKAZ       INTEGER DEFAULT 0 NOT NULL,
   ZAK_STATUS  INTEGER DEFAULT 0 NOT NULL,
   CNT         NUMERIC(15,2) DEFAULT 0 NOT NULL,
   PRICE       NUMERIC(15,2) DEFAULT 0 NOT NULL,
   ITOG        COMPUTED BY (PRICE * CNT),
   FROM_SCLAD  NUMERIC(15,2) DEFAULT 0 NOT NULL,
   FROM_ZAL    NUMERIC(15,2) DEFAULT 0 NOT NULL,
   GTD         VARCHAR(50) COLLATE PXW_CYRL,
   COUNTRY     INTEGER NOT NULL,
   OWNER       INTEGER NOT NULL,
   DAT_CREAT   DATE DEFAULT 'NOW' NOT NULL,
   DAT_EXPORT  DATE,
   LAST_EDIT   DATE DEFAULT 'NOW' NOT NULL,
   DAT_IMPORT  DATE
);
ДОПОЛНИТЕЛЬНЫЕ СКЛАДЫ
TABLE SCLAD_VISIBLE (
   SCLAD          INTEGER NOT NULL,
   SCLAD_VISIBLE  INTEGER NOT NULL,
   DAT_CREAT      DATE DEFAULT 'NOW' NOT NULL,
   LAST_EDIT      DATE DEFAULT 'NOW' NOT NULL,
   DAT_IMPORT     DATE,
   DAT_EXPORT     DATE
);


Курдль   (2004-05-19 17:37:00) [14]

Ну здесь взрослые люди собрались! Можете говорить открыто:

"Есть таблицы:
ОРГАНИЗАЦИИ
ОРГ_ИД
ОРГ_ИМЯ

СКЛАДЫ
СКЛ_ИД
ОРГ_ИД
СКЛ_ИМЯ

ТОВАРЫ
ТОВ_ИД
СКЛ_ИД
"

Так?
Что нужно выбрать?


Johnmen   (2004-05-19 17:33:00) [15]

Честно говоря, не очень понял.
Можно формализовать задачу ? Структура таблиц, пример данных в них и какой НД надо получить (поля и значения).


Наверх

Титульная страница Поиск, карта сайта Написать письмо