Страница 1 из 1

Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 10:35
Marisha_P
Здравствуйте!
Подскажите, пожалуйста, как можно организовать запрет выбора двух одинаковых МЦ в спецификации накладной на отпуск в производство?

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 11:01
RAJAH
Можно попробовать триггер создать: в случае, если SPSOPR.CMCUSL вводимой записи уже есть в другой записи с таким же SPSOPR.CSOPR, то новую запись удалить.
Спецификация накладной на отпуск в производство у нас чаще всего из ЛЗК берётся, к тому же для одной МЦ может разбиваться на несколько позиций по партиям. У вас нет партионного учёта и лимитов?

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 11:09
Marisha_P
Есть... проблема сейчас в том, что был написан новый алгоритм сверхлимитного отпуска.... И сейчас, когда формируется требование-накладная осуществляется проверка на превышение лимита. Но сравнение идет построчно... т.е. если будут две одинаковые позиции, то они будут сравниваться поочередно, а превышения в сумме не могу понять как отследить...
т.е например если спецификация вот такой вид имеет:
наименование количество
стружка стальная 0,1
стружка стальная 0,3

и в ЛЗК в наличии было 0,3 т.е. накладная распечатается, потому что 0,1<0,3(лимит не превышен), и 0,3=0,3 (лимит тоже не превышен), хотя по сумме 0,4 уже явно превышает допустимый лимит
чтоб было понятнее приведу код:

.create view vsum
as select spstep.kolskl,spsopr.kolfact,dopbdoc.kol (данное количество можно добрать из других ЛЗК, если таковые есть)
from
spsopr,spstep, dopbdoc
where
((comp(katsoprnrec)==katsopr.nrec and
katsopr.nrec==spsopr.csopr and
katsopr.CSTEPDOC==STEPDOC.NREC and
SPSOPR.CSPSTEP==SPSTEP.NREC
and spSopr.nRec == dopbdoc.cSpSopr
and STEPDOC.CBASEDOC==BASEDOC.NREC and
StepDoc.nRec == SpStep.cStepDoc (NoIndex)
));
а сама проверка непосредственно здесь:
Teksopr:=0;
if (vsum.GetFirst katsopr = 0) then
if (vsum.GetFirst spsopr = 0) then
do {
teksopr:=teksopr+vsum.SPSOPR.KOLfact;
tekstep:=0;
if (vsum.GetFirst spstep = 0) then
do
{ tekstep:=tekstep + vsum.SPSTEP.KOLskl;
}
while((vsum.getnext spstep)=0);
if (vsum.GetFirst dopbdoc = 0) then
do
tekstep:=tekstep+vsum.dopbdoc.kol;
while (vsum.Getnext dopbdoc = 0);
if (tekstep<teksopr) then {PrintPic:=true;};
teksopr :=0;
} while((vsum.getnext spsopr)=0);
if (PrintPic=true) and (vsum.basedoc.nrec<>0)
then {
message(’Вы превысили лимит!’,tsok);

Буду очень благодарна за помощь!

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 11:23
RAJAH
Настройка отсюда не помогла? :)
Во-первых, сгруппировав данные, можно количество и просуммировать. Во-вторых, в вашем коде не учитывается возможность разных единиц измерения в ЛЗК и накладной: теоретически, SPSTEP.KOLSKL может быть, например, в кг, а SPSOPR.KOLFACT - в шт.

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 12:46
Marisha_P
такой настройки я так и не нашла.... ну и вряд ли она устраивала если алгоритм сверхлимитного отпуска был написан с нуля..

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 13:01
RAJAH
Понятно: вы - тру-фанат 7.12. :grin:

Re: Повторный выбор МЦ в накладной

Добавлено: 24 апр 2012, 13:33
Marisha_P
именно так :grin: и это фанатизм скоро погубит:)))