Поступило предложение, видеть цену за килограмм.
Применил доп. еденицы.
Но теперь возникла ситуация, когда операторы не переключают цену за коробку,
а так и переносят за кг.
Написал условие на проверку накладной.
Но оно срабатывает только на первую строку.
Как запрограммировать чтоб проверяла все строки?
Код
begin
if [DialogForm.STROKI."Едизмерения_расхода"]=[DialogForm.STROKI."Доп_ЕИ1"] then
begin
MessageBox('исправьте кг на коробки','Внимание',mb_Ok);
modalresult:=mrCancel;
end
Else
modalresult:=mrOK;
end
Примерно так (если этот скрипт выполняется на кнопке "Выполнить" и отчет формируется только по одной накладной):
lErr := False;
Stroki.First;
while (not Stroki.Eof) and (not lErr) do begin
if [DialogForm.STROKI."Едизмерения_расхода"]=[DialogForm.STROKI."Доп_ЕИ1"] then begin
lErr := True;
end;
Stroki.Next;
end;
Stroki.First;
if lErr then
begin
MessageBox('исправьте кг на коробки','',mb_Ok);
modalresult:=mrCancel;
end
Else
modalresult:=mrOK;
БЭСТ-4
Развиваем нашу расходную накладную из 3 поста.
Фирма закупает товар ежедневно, но помаленьку. Поэтому, часто отписывают под ноль, и грузчикам приходится заходить в офис и спрашивать не последняяли эта позиция, и если да, то снимают образец с витрины. Это отвлекает сотрудников от текущей работы, и усложняет работу грузчиков по поиску последней коробки на складе.
Возможно ли запрограммировать это через sql- запрос, на отслеживание остатка товара под ноль.
Например, ставим запись документа при отправке на печать. тогда остаток в картотеке склада будет ноль, и если остаток равен нулю, то шрифт номера по порядку изменить на жирный.
Вроде еще в строке mdocm.dbf поле kol0 - количество товара перед началом данного движения, может тогда ориентироваться на это поле.
Нужна помощь, sql- запрос никогда не писал.
Константин, как я понял ты советуешь, сделать контроль в накладной БЭСТЕ (выдача транспаранта о позициях под ноль)..
А мне хочется, чтобы было ненавязчивый сигнал грузчикам в печатной накладной, что это позиция выбирает товар под ноль (жирный шрифт номера по порядку)
А операторам это не важно, главное они отписали товар. Например, по заявкам телефонным с точек отписано 20 накладных. Пускай в каждой одна позиция под ноль. Тогда, в каждой бумажной накладной один из номеров по порядку стоит жирным, значится при сборе товара грузчик без вопросов заходит в помещение выписки и забирает эту упаковку с витрины. Отсутсвует отвлечение операторов на последняя ли это позиция, и грузчикам не надо больше бегать по складу в поиска "затерявшейся" коробки.
Или у тебя что-то другое в совете?
Нашел Fileеval - программу по формированию DOS накладной, в которой одна из функций вычисляет остаток на складе. и передает его, как параметр aVars[2].
aVars[2]:=s_k0+s_his-s_tek
Проверил на данных заказчика, программа отрабатывает корректно.
Теперь необходимо привязать это к печатной форме Фастрепорта.
Посмотрел, как формируются плагины для зарплат, хотя там и рассчитываются aVars, но напрямую в форму печати не передаются.
Подскажите как это сделать в Fastreporte?
ВАЛЕРИЙ БОНДАРЧУК пишет:
Константин, как я понял ты советуешь, сделать контроль в накладной БЭСТЕ (выдача транспаранта о позициях под ноль)..
Я предлагаю другое.
1.Выбрать свободное поле в таблице (свободный параметр какой-нить)
2.В событии на запись заполнить это поле значением - например единичкой
3.при печати это поле должно быть штатно доступно и его анализировать - если оно единичка, то печатать восколицательные знаки или как-то еще это дело выделить.
Вам же при печати надо - вот я и говорю про действия для анализа в печатной форме
Слепил код, пока не ставил else - она заполняла всем 1, применил у всех строк стоит ноль.
Код
DBPUSH("MDOCM","MDOCM","",{"UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)",MDOC->(UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)),,.F.,{"MDOCM"}})
DBGOTOP()
DO WHILE !EOF()
mkart->( DBSEEK(UPPER(MDOCM->SCLAD+MDOCM->GRUP+MDOCM->NNUM)) )
mdocm->(RECLOCK())
if (mkart->koltek:=0)
mdocm->sum_csh:=1
else
mdocm->sum_csh:=0
endif
mdocm->(F_DBUNLOCK())
DBSKIP()
ENDDO
mdocm->( DBCOMMIT() )
DBPOP()
правильно ли применил обращение к текущему остатку, если программу поставить на отработку при записи документа,
Ведь также поставлено запись накладной при вызове документа на печать.
По моей логике, 1. записалась накладная, 2 программа проверила текущее количество и сработала на изменение поля сумма налога с продаж, 3 затем запускается накладная в фастрепорте с обращением на это поле.
Помогите с советом по кодописанию.
Намаялся с кодом, но так и не победил его, Зато ставит текущий остаток в нужное поле.
Вот так выглядит последняя программа:
Код
DBPUSH("MDOCM","MDOCM","",{"upper(SCLAD+VID+TYPE+CODEDOC+NUMDOC)",MDOC->(UPPER(SCLAD+VID+TYPE+CODEDOC+NUMDOC))})
MKART->(ordsetfocus("MKART"))
F_SETRELATION("MKART","UPPER(GRUP+NNUM+PARTIA+SCLAD)")
DO WHILE (MDOCM->(!EOF()))
mdocm->(RECLOCK())
mdocm->sum_csh:=mkart->koltek
MDOCM->(F_DBUNLOCK())
MDOCM->(DBSKIP())
ENDDO
DBPOP()
Пришлось условие на проверку остатка отработать в фастрепорте :
Код
begin
If ([DialogForm.STROKI."Сумма_налога_с_продаж"]<>0) and
([DialogForm.SHAPKA."Вид_движ1приход2расход"]='2') Then
EI:=[DialogForm.STROKI."Едизмерения_расхода"]
else
EI:=[[DialogForm.STROKI."Едизмерения_расхода"]+'.'];
end
Если остаток 0, то ставит точку к коробке.
Спасибо Константин за помощь.