Страница 1 из 3
Помогите разобраться - почему не работает конструкция
Добавлено: 23 дек 2011, 16:19
denisag
Добрый день.
В общем написал я вот такой скрипт
Код: Выделить всё
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
#include GALNET.CCM
#Component "L_SOPRDOC"
alter interface AKTREC;
tableEvent table SPSOPR
cmPick:
{
var cmc:comp
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,cmc) = cmdefault and cmc != 0
{
if spsopr.cmcusl = 0
{
spsopr.cmcusl:=cmc;
insert current spsopr;
}
else
{
spsopr.cmcusl:=cmc;
update current spsopr;
}
rereadrecord(#spsopr);
stop;
}
} else if(inherited::HandleEvent(cmPick) = heOk) {}
end;
}
end;
end.
Он работает но он не очень красив
Попробовал с оператором RecordExists
Код: Выделить всё
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
#include GALNET.CCM
#Component "L_SOPRDOC"
alter interface AKTREC;
tableEvent table SPSOPR
cmPick:
{
var cmc:comp
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,cmc) = cmdefault and cmc != 0
if spsopr.cmcusl = 0
{
spsopr.cmcusl:=cmc;
if RecordExists spsopr !=tsOK
then insert current spsopr;
else
update current spsopr;
rereadrecord(#spsopr);
stop;
}
else if(inherited::HandleEvent(cmPick) = heOk) {}
}
end;
}
end;
end.
Не работает. При попытке добавить товар который уже есть выдает ошибку "Отсутствует позиция. Таблица N1110"
Подскажите как можно доработать чтобы все было ок
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 23 дек 2011, 16:34
n0where
Код: Выделить всё
spsopr.cmcusl:=cmc;
insert current spsopr;
А кто будет заботится о связках с KATSOPR и прочем? и не забываем
ClearBuffer
И проще наверно вставить стандартным способом через функцию InsertMcInAkt либо другую там...
типа стандартную по вставке позиции, а потом уже поменяйте МЦ.
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 23 дек 2011, 17:16
denisag
А можно поподробнее про InsertMcInAkt? Где почитать и как используется?
Я начинающий и таких нюансов еще не знаю.
А кто будет заботится о связках с KATSOPR и прочем? и не забываем ClearBuffer
Это докомпиляция.
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 26 дек 2011, 08:08
n0where
Это докомпиляция.
Это не значит что галактика за вас об этом позаботиться.
А можно поподробнее про InsertMcInAkt? Где почитать и как используется?
Я начинающий и таких нюансов еще не знаю.
Вы нигде не найдёте про такие нюансы )))
1. Есть стандартные процедуры к примеру для 201 документа
Это будет проще ))
2. Есть vih для вставки данных. Им пользоваться ещё лучше )
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 26 дек 2011, 18:29
denisag
А вы не могли бы на моем примере показать конструкцию с этим самым vih? Я пока слабо понимаю о чем идет речь, а разобраться хочется
Все вставляется же более или менее правильно - нужно как то правильно описать: INSERT делать или UPDATE.
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 27 дек 2011, 12:02
RAJAH
denisag
А вы уверены, что докомпиляция - это то, что вам нужно?
Может, что попроще для начала?
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 27 дек 2011, 12:16
denisag
Уверен - так как функционал надо будет постепенно расширять
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 27 дек 2011, 12:53
KATZ
denisag писал(а):нужно как то правильно описать: INSERT делать или UPDATE.
Посмотрите в документации про функцию
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 27 дек 2011, 18:57
denisag
KATZ писал(а):denisag писал(а):нужно как то правильно описать: INSERT делать или UPDATE.
Посмотрите в документации про функцию
Большое спасибо - помогло
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 28 дек 2011, 13:06
denisag
В общем продолжил усложнять и получилось что-то такое:
Код: Выделить всё
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
#include GALNET.CCM
#Component "L_SOPRDOC"
alter interface AKTREC;
tableEvent table SPSOPR
cmPick:
{
var cmc:comp
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,cmc) = cmdefault and cmc != 0
spsopr.cmcusl:=cmc;
if isnew()
insert current spsopr;
else
update current spsopr;
rereadrecord(#spsopr);
runinterface (L_SOPRDOC::Example, katsopr.corgbase, spsopr.cmcusl)
}
else if(inherited::HandleEvent(cmPick) = heOk) {}
end;
}
end;
end.
Interface Example 'TEST' doAccept;
var _corg, _cmc:comp
parameters _corg, _cmc
create view as select * from katsopr, spsopr, katorg
where
((
_corg == katsopr.corgbase and
201 == katsopr.vidsopr and
_cmc == spsopr.cmcusl and
katsopr.nrec == spsopr.csopr and
spsopr.cmcusl == katmc.nrec and
katsopr.corgbase == katorg.nrec and
1>>=spsopr.prmc
));
browse EmployeeBrowse;
// table KATSOPR;
Fields
katsopr.nsopr:protect;
katsopr.dsopr:protect;
katsopr.vidsopr:protect;
katmc.name:protect;
katorg.name:protect;
end;
end.
Что это дает:
при редактировании накладной на возврат в продаже при добавлении(изменении) товара вываливается окно с таким же товаром на данного контрагента приобретенного(возвращенного) ранее.
НО почему то если такого товара нет то окно показывается не пустое - отсутствует только название товара (Должно быть пустое полностью).
Подскажите пожалуйста что я делаю не так.
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 29 дек 2011, 05:52
Алексей
ну это значит что покупки ранее у этого контрагента были, а вот конкретно именно этой МЦ ещё не закупалось.
сделайте жёсткую подцепку katsopr.nrec /== spsopr.csopr
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 29 дек 2011, 12:43
denisag
Алексей писал(а):ну это значит что покупки ранее у этого контрагента были, а вот конкретно именно этой МЦ ещё не закупалось.
сделайте жёсткую подцепку katsopr.nrec /== spsopr.csopr
Не помогло. Все равно показывает наименование контрагентов.
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 29 дек 2011, 14:54
Den
А зачем убрали
// table KATSOPR;
сделайте все же бравсе с корнем + katsopr.corgbase /== katorg.nrec
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 29 дек 2011, 15:13
denisag
Тоже не помогло!
Код на данный момент такой:
Код: Выделить всё
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
#include GALNET.CCM
#Component "L_SOPRDOC"
alter interface AKTREC;
tableEvent table SPSOPR
cmPick:
{
case curfield of
#NAMEMCUSL:
{
if runinterface (L_MCU::GETMC,spsopr.cmcusl) = cmdefault and spsopr.cmcusl != 0
if isnew()
insert current spsopr;
else
update current spsopr;
rereadrecord(#spsopr);
runinterface (L_SOPRDOC::Example, katsopr.corgbase, spsopr.cmcusl,spsopr.kolfact,spsopr.price,spsopr.csporder)
spsopr.rprice:=spsopr.price;
update current spsopr;
PutCommand(cmRefreshBDdata)
}
else if(inherited::HandleEvent(cmPick) = heOk) {}
end;
}
end;
end.
Interface Example 'TEST' , escClose, cyan,doAccept;
var _corg, _cmc, _csporder, _gruz:comp
var _kol,_price:double;
parameters _corg, _cmc, _kol,_price,_csporder
create view as select * from katsopr, spsopr, katorg, katparty, sklorder, sporder, katpodr
where
((
_corg == katsopr.corgbase and
201 == katsopr.vidsopr and
_cmc == spsopr.cmcusl and
katsopr.nrec /== spsopr.csopr and
katsopr.corgbase /== katorg.nrec and
spsopr.cmcusl == katmc.nrec and
katsopr.corgbase == katorg.nrec and
1>>=spsopr.prmc and
spsopr.cparty == katparty.nrec and
spsopr.nrec == sporder.cspsopr and
sporder.csklorder == sklorder.nrec and
sklorder.cpodr == katpodr.nrec
))
bounds filGruz = _gruz == katsopr.cgruzto(noindex)
;
browse EmployeeBrowse;
table KATSOPR;
Fields
katsopr.nsopr '№ сопроводительного документа':[30], protect;
katsopr.dsopr 'Дата':[10], protect;
// katsopr.vidsopr:protect;
katmc.name 'Наименование товара':[25], protect;
katorg.name 'Наименование контрагента':[25], protect;
katparty.name 'Название партии':[25], protect;
sklorder.norder '№ Ордера':[10], protect;
end;
handleevent
cmInit :
{
}
cmDefault:
{
_kol:=spsopr.kolfact;
_price:=spsopr.price;
_csporder:=sporder.nrec;
}
cmpick:
{
_gruz:=0;
runinterface(L_KATORG::GetKatOr,_gruz,0,false,0,0);
if _gruz !=0
{
subbounds(tbfilGruz);
addbounds(tbfilGruz);
}
else
subbounds(tbfilGruz)
PutCommand(cmRefreshBDdata)
}
end;
end.
Хочу сделать еще проверку по складу, чтобы показало товар только отпущенный со слада который у нас сейчас в поле 'склад' в
"Редактирование накладной на возврат" но никак не додумаю как это сделать - готов выслушать предложения
Re: Помогите разобраться - почему не работает конструкция
Добавлено: 29 дек 2011, 15:38
Den
..
katsopr.corgbase /== katorg.nrec and
spsopr.cmcusl == katmc.nrec and
katsopr.corgbase == katorg.nrec and
..
так и задумано ?