×
Показано с 1 по 7 из 7
  1. Кодер
    Гость

    Вопрос: Эскорт+ и складские остатки.

    Подскажите, плз, как из базы данных системы "Эскорт" вытянуть количество товара на складе в данный момент?
    Если точнее - интересует сладской остаток на момент запроса для товара такого то (используется Goods.Good поле для определения товара). Запросы к базе данных организуются через SQL. Спасибо.
    Поделиться с друзьями

  2. Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    Кодер
    Я с "Эскортом" на ВЫ исключительно, просто видел пару раз, но если вы дадите форматы таблиц, то что-нибудь придумаем !

  3. Аноним
    Гость
    Исходное сообщение Aquad
    Кодер
    Я с "Эскортом" на ВЫ исключительно, просто видел пару раз, но если вы дадите форматы таблиц, то что-нибудь придумаем !
    Вот структура. Я полагаю, что в этих таблицах хранится инфа относящаяся к складским остаткам. В Rest, как я полагаю, хранится остаток на начало месяца, а движения учитываются в таблице Move (пришло-ушло и все такое). Таким образом, как я понял, ЯВНО остаток нигде не хранится? И надо делать вычисления по каждому Good`у?
    -------------------------------
    Таблица: Move - Движение ТМЦ
    Таблица рассчитывается ЦЕЛИКОМ автоматически и содержит сведения о движениях партий ТМЦ. Для каждой записи Parts
    может быть несколько записей в Move в зависимости от того, сколько партий ТМЦ использовалось при расходовании

    Имя Тип Размер
    ID Текстовый 10 уникальный код
    Vn Текстовый 10 Внутренний номер документа,для связи с Doc
    Good Текстовый 10 Код ТМЦ,дублируется из Parts
    IsIncomeТекстовый 1 Приход/расход (1/2)
    VnIncomeТекстовый 10 Код партии ТМЦ,такой же в SupGood
    PartID Текстовый 10 Код записи в PARTS,для связи с Parts
    Owner Целое 2 Фирма-владелец,дублируется из Parts
    DFrom Дата/время 8 Дата операции,дублируется из Parts
    Price Денежный 8 Текущая цена учетная партии
    PriceOutТекстовый 1 Признак привязки к партии товара
    (есть/нет привязки - 1/0) для выделения
    цветом в карточке складского учета
    Dep Текстовый 10 Подразделение,дублируется из Parts
    Fioid Текстовый 10 ФИО,дублируется из Parts
    NumIn Двойное с плавающей 8 Кол-во пришло (для IsIncome=1)
    NumOut Двойное с плавающей 8 Кол-во ушло (для IsIncome=2)
    Firm Текстовый 10 Поставщик партии
    Bal Текстовый 10 Текущий бал.счет партии
    PriceSuppДенежный 8 Начальная цена поставки партии
    Data Дата/время 8 Дата начала отчетного периода (для связи с rest)

    -------------------------------
    Таблица: Rest - Остатки ТМЦ по местам хранения и партиям Заполняется на момент внедрения, далее рассчитывается автоматически
    Имя Тип Размер
    ID Текстовый 10 уникальный код
    Owner Целое 2 Фирма-владелец
    Data Дата/время 8 Дата (всегда 1 число отчетного месяца)
    Good Текстовый 10 Код товара, материала для связи с Goods
    Dep Текстовый 10 Подразделение
    Fioid Текстовый 10 Ответственное лицо
    VnIncomeТекстовый 10 код партии поставки
    Bal Текстовый 10 Баланс.счет учета
    Price Денежный 8 Учетная цена
    NumStartДвойное с плавающей 8 Кол-во на начало месяца
    NumEnd Двойное с плавающей 8 Кол-во на конец месяца
    Firm Текстовый 10 Код поставщика
    IsFirst Текстовый 1 Признак "Остаток на момент внедрения"
    PriceSupp Денежный 8 Цена поставки
    -------------------------------

  4. Аноним
    Гость
    Предыдущее сообщение тоже мое, только имя чтото глюкнуло..

  5. Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    Аноним
    Понятно!
    Сейчас продумаю как и напишу !
    А структура чистый 1С (ну почти) !

  6. Аноним
    Гость
    Ну чтож, разобрался сам. Вот кусок кода, который считает это хозяйство. Дельфи 6, АДО, MS SQL. Может, пригодится кодящим людям.
    {
    MoveQuery
    SELECT [Goods].[Good], [Goods].[Item], [Goods].[Name], [Move].[IsIncome], [Move].[Dep], [Move].[NumIn], [Move].[NumOut], [Move].[Data]
    FROM Goods INNER JOIN Move ON [Goods].[Good]=[Move].[Good]
    WHERE (Not (IsNull([Goods].[Item])) And ([Move].[Data]>=1/4/2003) AND (((Move.Dep)='подразделение') OR ((Move.Dep)='..'))
    ORDER BY [Move].[Data];
    RestQuery
    SELECT Goods.Item, Goods.Good, Rest.Dep, Rest.Data, Rest.NumStart, Rest.NumEnd, Goods.Name
    FROM Goods INNER JOIN Rest ON Goods.Good = Rest.Good
    WHERE ((((Rest.Dep)='подразделение') OR ((Rest.Dep)='..')))AND ((Rest.Data)>=1/4/2003) AND ((IsNull([Goods].[Item]))=False));
    }

    type
    TForm1 = class(TForm)
    Panel1: TPanel;
    ADOConnection1: TADOConnection;
    RestQuery: TADOQuery;
    MoveQuery: TADOQuery;
    MoveDS: TDataSource;
    RestDS: TDataSource;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    type
    PResylt = ^TResylt;
    TResylt = Record
    Item : string;
    Good : string;
    Name : String;
    Total: Longint;
    end;


    procedure TForm1.Button1Click(Sender: TObject);
    label 1;
    var
    lRes : TList;
    i,j : LongInt;
    PRes : PResylt;
    TRes : TResylt;
    begin
    LRes := TList.Create;
    For I := 1 to RestDS.DataSet.RecordCount do
    begin
    RestDS.DataSet.RecNo :=i;
    If RestDS.DataSet.Fields[3].AsString = '01/04/2003' then
    begin
    If LRes.Count > 0 then
    begin
    for j := 0 to LRes.Count-1 do
    begin
    PRes := LRes.Items[j];
    if PRes^.Good = RestDS.DataSet.Fields[1].AsString then
    begin
    Inc(PRes^.Total,Round(StrToFloat(RestDS.DataSet.Fields[4].AsString)));
    Goto 1;
    end;
    end;
    end;
    New(PRes);
    With Pres^ do
    begin
    Item := RestDS.DataSet.Fields[0].AsString;
    Good := RestDS.DataSet.Fields[1].AsString;
    Name := RestDS.DataSet.Fields[6].AsString;
    Total := Round(StrToFloat(RestDS.DataSet.Fields[4].AsString));
    end;
    LRes.Add(PRes);
    1:
    end;
    end;
    For I := 1 to MoveDS.DataSet.RecordCount do
    begin
    MoveDS.DataSet.RecNo := i;
    If MoveDS.DataSet.Fields[7].AsString = '01/04/2003' then
    begin
    for j := 0 to (LRes.Count-1) do
    begin
    PRes := LRes.Items[j];
    If MoveDS.DataSet.Fields[0].AsString = PRes^.Good then
    begin
    Case MoveDS.DataSet.Fields[3].AsInteger of
    1: INC(PRes^.Total,MoveDS.DataSet.Fields[5].AsInteger);
    2: Dec(PRes^.Total,MoveDS.DataSet.Fields[6].AsInteger);
    end;
    end;
    Continue;
    end;
    end; // if
    end;
    For j := 0 to LRes.Count-1 do
    begin
    PRes := LRes.Items[j];
    Memo1.Lines.Add(Former(PRes^.Good,10)+' '+Former(PRes^.Item,10)+' '+Former(IntToStr(PRes^.Total),6)+' '+PRes^.Name);
    end;
    Memo1.Repaint;
    For j := LRes.Count-1 downto 0 do
    begin
    PRes := LRes.Items[j];
    LRes.Delete(j);
    Dispose(PRes);
    end;
    LRes.Free;
    end;

    Засим ваш я.
    Кодер.

    PS Обидно видеть столь много ругательных статей в сторону программистов и ни одной результативной подсказки...

  7. Фырчун Аватар для Dracosha Andrew
    Регистрация
    07.02.2002
    Адрес
    Санкт-Петербург
    Сообщений
    2,259
    Господи!, вложить зазипованный файл было никак??
    80% читателей этой ветки не пишут на Паскале.
    Всех благ!!!
    Чувелёв Андрей

    ps: Всё вышеизложенное является моим частным мнением и не может претендовать на полноту изложения.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)