Помогите разобраться - почему не работает конструкция

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Помогите разобраться - почему не работает конструкция

Сообщение 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"
Подскажите как можно доработать чтобы все было ок :?:
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Помогите разобраться - почему не работает конструкция

Сообщение n0where »

Код: Выделить всё

   spsopr.cmcusl:=cmc;
   insert current spsopr;
А кто будет заботится о связках с KATSOPR и прочем? и не забываем ClearBuffer

И проще наверно вставить стандартным способом через функцию InsertMcInAkt либо другую там...
типа стандартную по вставке позиции, а потом уже поменяйте МЦ.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение denisag »

А можно поподробнее про InsertMcInAkt? Где почитать и как используется?
Я начинающий и таких нюансов еще не знаю.
А кто будет заботится о связках с KATSOPR и прочем? и не забываем ClearBuffer
Это докомпиляция.
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Помогите разобраться - почему не работает конструкция

Сообщение n0where »

Это докомпиляция.
Это не значит что галактика за вас об этом позаботиться.
А можно поподробнее про InsertMcInAkt? Где почитать и как используется?
Я начинающий и таких нюансов еще не знаю.
Вы нигде не найдёте про такие нюансы )))

1. Есть стандартные процедуры к примеру для 201 документа

Код: Выделить всё

SpSopr201Default(1);
Это будет проще ))

2. Есть vih для вставки данных. Им пользоваться ещё лучше )
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение denisag »

А вы не могли бы на моем примере показать конструкцию с этим самым vih? Я пока слабо понимаю о чем идет речь, а разобраться хочется ;-)
Все вставляется же более или менее правильно - нужно как то правильно описать: INSERT делать или UPDATE.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Помогите разобраться - почему не работает конструкция

Сообщение RAJAH »

denisag
А вы уверены, что докомпиляция - это то, что вам нужно? :-) Может, что попроще для начала?
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение denisag »

Уверен - так как функционал надо будет постепенно расширять 8-)
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Помогите разобраться - почему не работает конструкция

Сообщение KATZ »

denisag писал(а):нужно как то правильно описать: INSERT делать или UPDATE.
Посмотрите в документации про функцию

Код: Выделить всё

function IsNew : boolean;
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение denisag »

KATZ писал(а):
denisag писал(а):нужно как то правильно описать: INSERT делать или UPDATE.
Посмотрите в документации про функцию

Код: Выделить всё

function IsNew : boolean;
Большое спасибо - помогло
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение 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.
Что это дает:
при редактировании накладной на возврат в продаже при добавлении(изменении) товара вываливается окно с таким же товаром на данного контрагента приобретенного(возвращенного) ранее.
НО почему то если такого товара нет то окно показывается не пустое - отсутствует только название товара (Должно быть пустое полностью).
Подскажите пожалуйста что я делаю не так.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Помогите разобраться - почему не работает конструкция

Сообщение Алексей »

ну это значит что покупки ранее у этого контрагента были, а вот конкретно именно этой МЦ ещё не закупалось.
сделайте жёсткую подцепку katsopr.nrec /== spsopr.csopr
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение denisag »

Алексей писал(а):ну это значит что покупки ранее у этого контрагента были, а вот конкретно именно этой МЦ ещё не закупалось.
сделайте жёсткую подцепку katsopr.nrec /== spsopr.csopr
Не помогло. Все равно показывает наименование контрагентов.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Помогите разобраться - почему не работает конструкция

Сообщение Den »

А зачем убрали
// table KATSOPR;
сделайте все же бравсе с корнем + katsopr.corgbase /== katorg.nrec
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

Re: Помогите разобраться - почему не работает конструкция

Сообщение 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.
Хочу сделать еще проверку по складу, чтобы показало товар только отпущенный со слада который у нас сейчас в поле 'склад' в
"Редактирование накладной на возврат" но никак не додумаю как это сделать - готов выслушать предложения ;-)
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Помогите разобраться - почему не работает конструкция

Сообщение Den »

..
katsopr.corgbase /== katorg.nrec and
spsopr.cmcusl == katmc.nrec and
katsopr.corgbase == katorg.nrec and
..
так и задумано ?
Ответить