Страница 2 из 3

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

Добавлено: 29 дек 2011, 15:56
denisag
Недоглядел ).
Удалил лишнюю не жесткую связку - ничего не изменилось.

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

Добавлено: 10 янв 2012, 12:32
denisag
Всех с прошедшими - вернулся к данному проекту. Вопрос по прежнему открыт.

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

Добавлено: 11 янв 2012, 06:33
Алексей
выложите итоговый вариант логической таблицы, как у Вас сейчас.
ну и что не устраивает в результате.

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

Добавлено: 11 янв 2012, 19:01
denisag
код сейчас такой:

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

//Добавлять во все проекты -----------------
#param /linc:d:\viperprojekt\autoexec.vpp
#setcurenv "galnet" from 'c:\GAL810\exe\';
#define ComponentVersion
//-----------------------------------------
#include GALNET.CCM
//Выбираем с чем работаем (в данном случае ресурс L_SOPRDOC)
#Component "L_SOPRDOC"
//Выбираем интерфейс из ресурса (в данном случае AKTREC)
alter interface AKTREC;
// Будем изменять обработчики таблице "SPSOPR"
tableEvent table SPSOPR
// Объявляем обработчик который нам нужен
cmPick:
{
// выбираем случай из "#NAMEMCUSL:" и присваиваем запуск интерфейса
 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, katsopr.cgruzfrom,spsopr.kolfact,spsopr.price,spsopr.csporder)
    spsopr.rprice:=spsopr.price;
    update current spsopr;
    PutCommand(cmRefreshBDdata)
  }
   // иначе обрабатываем обычный "cmPick"
   else if(inherited::HandleEvent(cmPick) = heOk)   {}
 end;
}
end;
end.
Interface Example 'TEST' , escClose, cyan,doAccept;
var _corg, _cmc, _csporder, _gruz, _cpodr:comp;
var _kol,_price:double;
parameters _corg, _cmc, _cpodr, _kol,_price,_csporder
  create view as select * from katsopr, spsopr, katorg, katparty, sklorder, sporder, katpodr
where
 ((
   _corg == katsopr.corgbase and
   _cpodr == katsopr.cgruzfrom(noindex) and
   201 == katsopr.vidsopr and
   _cmc == spsopr.cmcusl and
   katsopr.nrec /== spsopr.csopr   and
   katsopr.corgbase /== katorg.nrec and
   spsopr.cmcusl == katmc.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;
    katpodr.name 'Наименование склада':[15], 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.
Не устраивает то что показывается всегда наименование контрагента, даже если по критериям не должно показываться ничего,
и правильно ли описана проверка по складу? ;-)

Только что выяснил одну неприятную особенность - после того как я виртуально продал пару товаров и поменял контрагент на тот кому продавал - вся конструкция перестала работать :o То есть интерфейс открывается только с полем контрагента все остальное пусто хотя, ордера сформировало.

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

Добавлено: 12 янв 2012, 06:47
Алексей
задача я так понял в накладной на возврат найти позиции приходов которые были проданы этому контрагенту ранее, так?

1. что бросилось в глаза, связка 1>>=spsopr.prmc and
вы ведь вроде МЦ выбираете, значит 1 == spsopr.prmc

2. контрагента показывает а накладную к примеру нет? странно, т.к. контрагент у вас зацеплен именно через katsopr...

3. а что за проверка по складу? на каком этапе хотите проверять что то? вы ведь делаете возврат, ордеров ещё нет... если и указан склад куда будет оприходован возврат, то скорее всего передавать в ваш интерфейс надо katsopr.cgruzto а не katsopr.cgruzfrom

4. не понял, последнее предложение. где поменял контрагента? на другого? в документе продажи или в документе возврата?

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

Добавлено: 12 янв 2012, 13:15
denisag
1 - поменял
2 - Нет тут дело в том что например если я делаю возврат товара который не продавал данному контрагенту то в интерфейсе все поля пустые кроме наименования контрагента - а по идеи все должно быть пустое.
3 - Это для тех организаций у которых платит один а грузополучатель - другой
(Собственно сейчас я хочу сделать фильтр по грузополучателю в интерфейсе). При выборе по katsopr.cgruzto будет показывать только то что покупал контрагент если и он грузополучатель, а если были грузополучатели другие то он их просто не показывает.
4 - уже не актуально вроде разобрался

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

Добавлено: 12 янв 2012, 14:14
kvit
С контрагентом, конечно странно, попробуйте использовать в browse IsValid(#KatOrg)

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

Добавлено: 12 янв 2012, 14:58
Den
kvit писал(а):С контрагентом, конечно странно, попробуйте использовать в browse IsValid(#KatOrg)
Раз показывает katorg.name в бравсе, то быстрее всего isvalid )
Похоже на какой то глюк - не должно ,по идее, казаться katorg.name если нема накладных по таким условиям

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

Добавлено: 12 янв 2012, 15:14
denisag
kvit писал(а):С контрагентом, конечно странно, попробуйте использовать в browse IsValid(#KatOrg)
Функция помогла но только в другом виде:

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

if (IsValid(tnKATSOPR), katorg.name, ' ') 'Наименование контрагента':[25], protect;

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

Добавлено: 12 янв 2012, 15:26
denisag
А как можно завязаться на грузополучателя? Хочу так же вывести его во вьюхе
смотрю через журнал : при создании накладной на отпуск участвуют в процессе таблицы KATSOPR, SPSOPR, SPORDER, SKLORDER
так как я плоховато разбираюсь еще что и где в галактике, то не могу определить как же завязаться, буду признателен за наводку :-)

Так вроде нашел - Katsopr.cguzto - это же и есть код грузополучателя

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

Добавлено: 12 янв 2012, 15:36
kvit
denisag писал(а):Функция помогла но только в другом виде:
Значит при вызове вашего интерфейса "Example" вы передаете в его параметр _corg равный corgbase таблицы KatSopr в интерфейсе AKTREC.
А коли в вашем интерфейсе:

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

     _corg == katsopr.corgbase and
 katsopr.corgbase /== katorg.nrec and
Вы и попадаете в KatOrg

Вобщем в cmInit своего интерфейса проверяйте if GetFirst KatSopr <> tsOk then Abort;, чтобы его вобще не запускать при отсутствии накладной

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

Добавлено: 12 янв 2012, 18:10
denisag
В общем с грузополучателями разобрался

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

Добавлено: 13 янв 2012, 13:08
denisag
Ну господа комрады помогите разобраться дальше.
как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке, но не могу пока определиться этот интерфейс должен быть самописен или может есть какой то конкретный - задача чтобы в нем отбирались все грузополучатели по указанному контрагенту ;-)

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

Добавлено: 13 янв 2012, 16:27
kvit
denisag писал(а):как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке,
Смотрите статус-лайны и события cmPick, cmEdit и др.

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

Добавлено: 13 янв 2012, 16:33
denisag
kvit писал(а):
denisag писал(а):как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке,
Смотрите статус-лайны и события cmPick, cmEdit и др.
А чуток конкретней можно? Что такое статус-лайны?