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

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

Добавлено: 13 янв 2012, 17:03
kvit
Линия статуса предназначена для связи горячих клавиш с командами. Под горячими клавишами подразумеваются комбинации клавиш, которые действуют как элементы меню. Линия статуса выводится в нижней части экрана, начиная с левого края.
При активизации элемента графического интерфейса в нижней части окна прорисовывается соответствующая ему линия статуса
Описание статус-лайнов лежит в файле galnet.csc

в вашем случае можно использовать статус-лайн с кнопкой редактирования F4 (browse EmployeeBrowse(,,sci14Esc);) или F3 (browse EmployeeBrowse(,,sci13Esc);) также можно применять статус-лайн к полям.

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

Добавлено: 13 янв 2012, 17:05
kvit
Можно также использовать локальное меню или кнопку, которую вы создадите в вашем интерфейсе

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

Добавлено: 14 янв 2012, 11:14
Алексей
denisag писал(а):Ну господа комрады помогите разобраться дальше.
как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке, но не могу пока определиться этот интерфейс должен быть самописен или может есть какой то конкретный - задача чтобы в нем отбирались все грузополучатели по указанному контрагенту ;-)
что то я такого не помню (с)
что контрагент что грузополучатель выбираются из каталога организаций... потому там связи NxM
разве можно указать конкретных грузополучателей для одного конкретного контрагента?

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

Добавлено: 16 янв 2012, 12:26
denisag
Алексей писал(а):
denisag писал(а):Ну господа комрады помогите разобраться дальше.
как реализовать чтобы из вызываемого мной интерфейс, вызывался еще один по какой то кнопке, но не могу пока определиться этот интерфейс должен быть самописен или может есть какой то конкретный - задача чтобы в нем отбирались все грузополучатели по указанному контрагенту ;-)
что то я такого не помню (с)
что контрагент что грузополучатель выбираются из каталога организаций... потому там связи NxM
разве можно указать конкретных грузополучателей для одного конкретного контрагента?
Не указывать а выбрать - по моему это немного разные понятия.
В таблице KATSOPR есть поле "код контрагента", и поле "груз для" - второе это грузополучатель, первое контрагент. Так почему же нет?

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

Добавлено: 16 янв 2012, 14:34
n0where
Не указывать а выбрать - по моему это немного разные понятия.
В таблице KATSOPR есть поле "код контрагента", и поле "груз для" - второе это грузополучатель, первое контрагент. Так почему же нет?
Вроде как грузополучателей несколько, а тут грубоговоря по умолчанию...

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

Добавлено: 17 янв 2012, 17:30
denisag
Народ подсобите пожалуйста строчкой(строчками) кода как в мой интерфейс(код которого выше) добавить еще один

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

Interface Example2 'TEST2' , escClose, cyan, doAccept;
var _CORGBASE:comp;
parameters _CORGBASE
create view as select * from KATORG, KATSOPR, KATORG KATORG3
where
((
KATSOPR.CGRUZTO == KATORG.NREC and
KATSOPR.CORGBASE ==  KATORG3.NREC and
'0001000000000001h' == KATSOPR.CORGBASE
//_CORGBASE == KATSOPR.CORGBASE
));
browse EmployeeBrowse;
Fields
KATORG.NAME 'Наименование грузополучателя':[25], protect;
KATSOPR.CORGBASE 'Код контрагента':[25], protect;
KATORG3.NAME 'Наименование контрагента':[25], protect;
end;  
И вызывать его по нажатию F6 например из первого интерфейса - много уже прочтал но пока не могу понять принцип - желательно прокомментировать код.
Буду очень признателен ;-)

В общем уже помогли и не стало актуально

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

Добавлено: 25 янв 2012, 18: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)
var tmpGruzto, tmpVozvratMC, _corg, _cmc, _csporder, _gruz, _cpodr :comp;
var _kol, _price:double;
//Временная таблица для 'Возврат материальной ценности'
table struct tmpVozvratMC "Возврат материальной ценности"
(
NNAKL       :string   "№ Накладной",
DATE        :date     "Дата",
NAMEMC      :string   "Наименование товара",
CENA        :string   "Цена",
CGRUZTO     :string   "Наименование грузополучателя",
PARTYNAME   :string   "Название партии",
NORDER      :string   "№ Ордера",
SKLAD       :string   "Наименование склада",
ADRES       :string   "Адрес грузополучателя",
OTGRUZ      :string   "Количество отгруженного товара",
VOZVRAT     :string   "Количество возвращенного товара",
DOSTVOZVRAT :string   "Количество доступное для возврата",
KONTRAGENT  :string   "Наименование контрагента",
KOLFACT     :string   "Кол-во фактическое",
SPORDERNREC :string   "NREC ордера",
CGRUZFROM   :string   "Код грузоотправителя"
)
with index
(
ind = CGRUZTO     //Индекс по номеру сопроводительного документа
);
//Временная таблица для 'Грузополучатели'
table struct tmpGruzto "Грузополучатели"
(
CGRUZTO     :string   "Наименование грузополучателя",
ADRES       :string   "Адрес грузополучателя",
KATORG3     :string   "Наименование контрагента",
CGRUZTONREC :comp     "NREC грузополучателя"
)
with index
(
ind = CGRUZTONREC  //Индекс по NREC грузополучателя
);
// тут временная таблица закончилась
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.corg, spsopr.cmcusl, katsopr.cgruzto,spsopr.kolfact,spsopr.price,spsopr.csporder, tmpVozvratMC)
    spsopr.rprice:=spsopr.price;
    update current spsopr;
    PutCommand(cmRefreshBDdata)
  }
   // иначе обрабатываем обычный "cmPick"
   else if(inherited::HandleEvent(cmPick) = heOk)   {}
 end;
}
end;
end.
Interface Example 'Возврат материальной ценности' (,,scinterface), escClose, cyan, doAccept;
parameters _corg, _cmc, _cpodr, _kol, _price, _csporder, tmpVozvratMC
create view as select * from tmpVozvratMC
  /*create view as select * from katsopr, spsopr, katorg, katparty, sklorder, sporder, katpodr, katorg katorg2
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  and
   katsopr.cgruzto == katorg2.nrec
 ))
 bounds filGruz = _gruz == katsopr.cgruzfrom(noindex)*/
bounds filGruz = _gruz == katsopr.cgruzfrom(noindex)
 ;
 browse EmployeeBrowse;
  Fields
  tmpVozvratMC.NNAKL       '№ Накладной':[30], protect;
  tmpVozvratMC.DATE        'Дата':[8], protect;
  tmpVozvratMC.NAMEMC      'Наименование товара':[25], protect;
  tmpVozvratMC.CENA        'Цена':[10], protect;
  tmpVozvratMC.CGRUZTO     'Наименование грузополучателя':[25], protect;
  tmpVozvratMC.PARTYNAME   'Название партии':[25], protect;
  tmpVozvratMC.NORDER      '№ Ордера':[10], protect;
  tmpVozvratMC.SKLAD       'Наименование склада':[15], protect;
  tmpVozvratMC.ADRES       'Адрес грузополучателя':[25], protect;
  tmpVozvratMC.OTGRUZ      'Кол-во отгруженного товара':[30], protect;
  tmpVozvratMC.VOZVRAT     'Кол-во возвращенного товара':[30], protect;
  tmpVozvratMC.DOSTVOZVRAT 'Кол-во доступное для возврата':[30], protect;
  tmpVozvratMC.KONTRAGENT  'Наименование контрагента':[25], protect;
  end;
  /*browse EmployeeBrowse;
  Fields
    katsopr.nsopr '№ сопроводительного документа':[30], protect;
    katsopr.dsopr 'Дата':[10], protect;
   katmc.name  'Наименование товара':[25], protect;
    if (IsValid(tnKATSOPR), katorg.name, '') 'Наименование контрагента':[25], protect;
    katparty.name 'Название партии':[25], protect;
    sklorder.norder '№ Ордера':[10], protect;
    katpodr.name 'Наименование склада':[15], protect;
    katorg2.name 'Наименование грузополучателя':[25], protect;

  end;*/
handleevent
// При нажатии F6 запускаем интерфейс Example2
cmnext :
{
RUNINTERFACE (L_SOPRDOC::Example2, _corg, tmpGruzto)
}
cmInit :
{
//Присваиваем имя вызываемому интерфейсом окну
SetWindowTitle(wnMainWindow,'Возврат материальной ценности '+katmc.name);
//Обрабатываем прямой SQL для первого интерфейса
var stmt:longint
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, _corg);
sqlBindParam(stmt, 2, _cpodr);
sqlBindParam(stmt, 3, _cmc);
sqlExecStmt(stmt,'select SET1.[№ накладной],'+
                        'SET1.[Дата накладной],'+
                        'SET1.[Наименование товара],'+
                        'SET1.[Цена за еденицу],'+
                        'SET1.[Наименование грузополучателя],'+
                        'SET1.[Наименование партии],'+
                        'SET1.[№ ордера],'+
                        'SET1.[Название склада],'+
                        'SET1.[адрес грузополучателя],'+
                        'SET1.[Кол-во отгруженного товара],'+
                        'SET2.[Кол-во возвращаемого товара],'+
                        '(SET1.[Кол-во отгруженного товара] - SET2.[Кол-во возвращаемого товара]),'+
                        'SET1.[Наименование контрагента]'+
                        'SET1.[Кол-во фактическое],'+
                        'SET1.[NREC ордера],'+
                        'SET1.[код грузоотправителя]'+
                  'from'+
               '(select'+
                        'SPORDER.NREC,'+
                        'KATSOPR.NSOPR,'+
                        'KATSOPR.DSOPR,'+
                        'KATMC.NAME,'+
                        'SPSOPR.PRICE,'+
                        'katorg2.name,'+
                        'KATPARTY.NAME,'+
                        'SKLORDER.NORDER,'+
                        'KATPODR.NAME,'+
                        'KATORG2.ADDR,'+
                        'SPORDER.KOL,'+
                        'KATORG1.NAME,'+
                        'SPSOPR.CSPORDER,'+
                        'T$SPSOPR.F$KOLFACT,'+
                        'T$SPORDER.F$NREC,'+
                        'T$KATSOPR.F$CGRUZFROM'+
                  'from'+
                        'KATSOPR'+
                                'INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC'+
                                'INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR'+
                                'INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC'+
                                'LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC'+
                                'LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC'+
                                'LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC'+
                                'LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC'+
                                'LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC'+
                  'where'+
                         '201 = KATSOPR.VIDSOPR and'+
                         '? = katsopr.corgbase and'+
                         '? = katsopr.cgruzfrom(noindex) and'+
                         '? = spsopr.cmcusl ) as SET1'+
'LEFT OUTER JOIN'+
                '(select'+
                          'SPSOPR.CSPORDER,'+
                          'SUM (SPORDER.KOL)'+
                    'from'+
                          'KATSOPR'+
                                   'INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC'+
                                   'INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR'+
                                   'INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC'+
                                   'LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC'+
                                   'LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC'+
                                   'LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC'+
                                   'LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC'+
                                   'LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC'+
                    'where'+
                           '106 = KATSOPR.VIDSOPR'+
                    'group by KATMC.NAME, KATORG1.NAME, katorg2.name, SPSOPR.CSPORDER, SPORDER.CSPORDV) as SET2'+
'ON SET1.NREC = SET2.CSPORDER');
sqlFetchInto(stmt, tntmpVozvratMC);
sqlFreeStmt(Stmt);
}
cmDefault:
{
/* _kol:=spsopr.kolfact;
 _price:=spsopr.price;
 _csporder:=sporder.nrec;*/
 _kol:=tmpVozvratMC.KOLFACT
 _price:=tmpVozvratMC.CENA
 _csporder:=tmpVozvratMC.SPORDERNREC
}
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.
// Вызов второго интерфейса для использования его в качестве фильтров для первого
Interface Example2 'Грузополучатели' , escClose, cyan, doAccept;
parameters tmpGruzto, _CORG
create view as select * from tmpGruzto;
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.ADRES 'Адрес грузополучателя':[25], protect;
end;
handleevent
cmInit :
{
//Обрабатываем прямой SQL для второго интерфейса
var stmt:longint
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, _CORG);
sqlExecStmt(stmt,
'select distinct KATORG.NAME,'+
                'KATORG.ADDR,'+
                'KATORG3.NAME,'+
                'KATORG.NREC'+
'from KATORG,'+
     'KATSOPR,'+
     'KATORG KATORG3'+
'where KATSOPR.CGRUZTO = KATORG.NREC and'+
      'KATSOPR.CORGBASE =  KATORG3.NREC and'+
      '? = KATSOPR.CORGBASE');
sqlFetchInto(stmt, tntmpGruzto);
sqlFreeStmt(Stmt);
}
end;
end.   
Я наверное что то перемудрил с присвоением переменных и интерфейсы выходят пустыми,
Подскажите куда копать так как не совсем понятна логика.

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

Добавлено: 26 янв 2012, 08:38
n0where
1. строка запроса может быть только 255 символов в текстовом выражении.
2. нельзя использовать в запросах префиксы F$, T$
3. Самое интересное что запросы в MSSQL, Саппорте и DSQL бывает по разному отрабатывают )) Экспериментируйте )))