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

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

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

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

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

Сообщение denisag »

Недоглядел ).
Удалил лишнюю не жесткую связку - ничего не изменилось.
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

Всех с прошедшими - вернулся к данному проекту. Вопрос по прежнему открыт.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

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

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

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

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

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

задача я так понял в накладной на возврат найти позиции приходов которые были проданы этому контрагенту ранее, так?

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

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

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

4. не понял, последнее предложение. где поменял контрагента? на другого? в документе продажи или в документе возврата?
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

1 - поменял
2 - Нет тут дело в том что например если я делаю возврат товара который не продавал данному контрагенту то в интерфейсе все поля пустые кроме наименования контрагента - а по идеи все должно быть пустое.
3 - Это для тех организаций у которых платит один а грузополучатель - другой
(Собственно сейчас я хочу сделать фильтр по грузополучателю в интерфейсе). При выборе по katsopr.cgruzto будет показывать только то что покупал контрагент если и он грузополучатель, а если были грузополучатели другие то он их просто не показывает.
4 - уже не актуально вроде разобрался
kvit
Сообщения: 8
Зарегистрирован: 10 мар 2006, 15:44
Откуда: Россия, Тюмень

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

Сообщение kvit »

С контрагентом, конечно странно, попробуйте использовать в browse IsValid(#KatOrg)
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

kvit писал(а):С контрагентом, конечно странно, попробуйте использовать в browse IsValid(#KatOrg)
Раз показывает katorg.name в бравсе, то быстрее всего isvalid )
Похоже на какой то глюк - не должно ,по идее, казаться katorg.name если нема накладных по таким условиям
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

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

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

if (IsValid(tnKATSOPR), katorg.name, ' ') 'Наименование контрагента':[25], protect;
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

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

Так вроде нашел - Katsopr.cguzto - это же и есть код грузополучателя
Последний раз редактировалось denisag 12 янв 2012, 19:12, всего редактировалось 2 раза.
kvit
Сообщения: 8
Зарегистрирован: 10 мар 2006, 15:44
Откуда: Россия, Тюмень

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

Сообщение kvit »

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

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

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

Вобщем в cmInit своего интерфейса проверяйте if GetFirst KatSopr <> tsOk then Abort;, чтобы его вобще не запускать при отсутствии накладной
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

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

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

Сообщение denisag »

Ну господа комрады помогите разобраться дальше.
как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке, но не могу пока определиться этот интерфейс должен быть самописен или может есть какой то конкретный - задача чтобы в нем отбирались все грузополучатели по указанному контрагенту ;-)
kvit
Сообщения: 8
Зарегистрирован: 10 мар 2006, 15:44
Откуда: Россия, Тюмень

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

Сообщение kvit »

denisag писал(а):как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке,
Смотрите статус-лайны и события cmPick, cmEdit и др.
denisag
Постоянный гость
Сообщения: 59
Зарегистрирован: 02 дек 2011, 14:28

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

Сообщение denisag »

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