функция расчета остатков по складу товаров на дату
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: функция расчета остатков по складу товаров на дату Author: Плешивцев ЕвгенийLocation: Плешивцев Евгений PostPosted: 21 May 2007 10:31
    —
1. добрый день, коллеги. Существует ли в БЭСТ-4+ оформленная в виде функции процедура расчета остатка по складу на дату.
Для патионного учета? Для сортового учета?
Нужно получить количество указанного товара на указанном складе на выбранную дату.
2. Может быть кто то писал сам? Поделитесь пожалуйста...

#2:  Author: BehemothLocation: Новиков Алексей Юрьевич PostPosted: 21 May 2007 10:52
    —
Добрый день.

Сама по себе процедура расчёта проста как 2 копейки.
Требуется только определить граничные условия применения подобной процедуры. То есть, какие входные параметры этой процедуры, и каким образом, будут влиять на выборку данных.
Хотя, можно, конечно, вырезать кусок из "формирования отчётов", но, сдаётся мне, проще написать заново.

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 21 May 2007 11:55
    —
Сколько писал таких задач - написанные самостоятельно работали быстрее готовых. Дело в том что в БЭСТ-4 не просто функция, а
механизм расчета с учетом кучи вариантов выбора пользователем
значений во множестве различных параметров.
Вам же нужна узкая задача, под которую Вы можете подобрать
наиболее благоприятные для решения оной индексы или вообще их
отключить для сборки данных....
А само по себе решение действительно очень не сложное

#4:  Author: Плешивцев ЕвгенийLocation: Плешивцев Евгений PostPosted: 24 May 2007 16:11
    —
может кому понадобится:
Code:
Function OstTov(cSclad, cGrup, cNNum, dDat)
// остаток товара на складе товара на указанную дату
// без учета партий
// в основных ед. измерения
// -> вход:
// cSclad - код склада
// cGrup  - код группы товара
// cNNum  - номенклатурный номер
// dDat   - дата на которую расчитывается остаток
// <- выход
// nOst   - количество товара на дату

Local nOst:=0
Local nBegin:=0
Local nPrih:=0
Local nRash:=0
Local dDat0:=ctod('  /  /  ')

NetUse("Umdocm",loadpath()+"sclad\mdocm.dbf")

// начало расчетного периода
dbPush('user','user','',{'UPPER(USER+FORM+IDENT)', upper('          '+'MAIN'+'SCL_BEG   ')})
  user->(dbgotop())
  if user->(!eof())
    dDat0:=ctod(alltrim(user->(xVal)))
  endif
dbPop()

// остаток товара на начало
dbPush('mkart','mkart_sn','',{'UPPER(STATUS+SCLAD+GRUP+NNUM)',upper(' '+cSclad+cGrup+cNNum)})
  mkart->(dbGoTop())
  if mkart->(!Eof())
    nBegin:=mkart->kol0
  endif
dbPop()

// поступление / выбытие товара
dbPush('umdocm','mdocm_k','',{'UPPER(SCLAD+GRUP+NNUM+PARTIA+DTOS(DATE))', upper(cSclad+cGrup+cNNum+'     '+dtos(dDat0)), upper(cSclad+cGrup+cNNum+'     '+dtos(dDat))})
umdocm->(dbgotop())
if umdocm->(!Eof())
  do while umdocm->(!eof())
    nPrih += iif(umdocm->vid='1', umdocm->kol, 0)
    nRash += iif(umdocm->vid='2', umdocm->kol, 0)
    umdocm->(dbSkip())
  enddo
endif()
dbPop()
umdocm->(dbclosearea())

// итого
nOst:= nBegin + nPrih - nRash

Return nOst

#5:  Author: nordkLocation: Горбунов Константин PostPosted: 24 May 2007 20:54
    —
Женя спасибо что делишься текстом с народом !!!!
А теперь немножко поворчу....
Не увлекайтесь установкой скопа в DBPUSH() это не мой совет,
это рекомендация Саныча - они это дело не обещают поддерживать.

И еще цикл это хорошо но DBEVAL() лучше и шустрее.
В данном случае смысла нет - по одной позиции, а так лучше
DBEVAL()
И в принципе Ваше решение пойдет для партионного учета если
по номенклатуре остаток считать. Тока в остатках начальных чуть подправить а так в принципе тоже самое будет.

А на самом деле спасибо что написал сюда !!!



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group