Почему у меня не срабатывает UpdateRecord в интерфейсе?

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Почему у меня не срабатывает UpdateRecord в интерфейсе?

Сообщение Max_Ural »

Есть интерфейс, который получает Nrec матценности. Пользователь в нем будет распределять количество из накладной по разрезам, в которых есть Матценность.

При запуске интерфейса в таблицу в памяти складываю остатки по разрезам.
Задумывалось, что пользователь будет вводить количество в последнюю колонку.
Но при переходе на другую строку значение не сохраняется.

Подскажите пожалуйста, что не так делаю

Код интерфейса следующий:

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

Interface i041Konvertor_Int1 'Выбор из партий заданной МЦ';
          Show at(10,10,80,26);

   Var
        cur_mc
       ,cur_mc_bk
       : String;
        mc_nrec : comp;
        InterfaceVersion     // версия интрефейса
       : String[3];

   CREATE VIEW AS
   SELECT * FROM
                TEKMC, party041
                where ((mc_nrec     == katmc.nrec and
                        katmc.nrec  == party041.ckatmc))
                ;
                
Parameters mc_nrec;

Procedure FillTable(nr_mc:comp);
{
  delete all tmpsaldo1;
  var podr_ost, mol_ost, nrecmc, nrecGr:comp;
  var nameMC, grMCKod, kod_podr, edIzm1, barkodmc1, sch:string;
  var kol1, sum1, ves1 :double;
  Store_Init;
  Store_ReInit;
  Store_TypeOstatki(false);      // Исходящие остатки
  Store_DiagnosticOff;
  Store_Run(
    cur_date
    , nr_mc               // nrec                  матценность
    , 0        // nrec katpodr                     подразделения
    , 0               // nrec ??<                  мол
    , 0               // nrec Ї авЁЁ               партия
    , true
    , true
    , true
  );
  Store_done;
  _loop tmpsaldo1 where ((tmpsaldo1.cparty==katparty.nrec and katparty.corgpar==katorg.nrec)) {
    insert Party041 set
      cKatmc    :=    nr_mc,
      party     :=    katparty.name,
      dParty    :=    tmpsaldo1.DATEPARTY,
      Kontr     :=    katorg.name,
      Ost       :=    tmpsaldo1.kol,
      OstKub    :=    tmpsaldo1.kol;

  }
}

//--------------------------------------------------------------------------------------------------------
Screen S1  ('', , sci178Esc)
    Show at (,,,5);
        fields
            katmc.barkod:protect;
            katmc.name: PROTECT;
        Buttons
            cmCancel;
<<
   Баркод      .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   Матценность .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

   <.    Отмена   .>
>>
End;

Panel Part
  table party041;

Browse Partys
  show at (,6,,)
fields
  party041.party  'Партия':[10];
  party041.dparty 'Дата партии':[10];
  party041.Kontr  'Контрагент':[20];
  party041.ost    'Ост.':[10] ;
  party041.ostKub 'Ост.куб/м':[10.3];
  party041.kol  'Распр. кол-во':[10.3], NoProtect,{ font = {
			bold = (party041.kol > 0);
			backcolor = 17;
			}
		}
;
end;
handleevent
        cmUpdateRecord:{
          message('1');
          update current party041;
        }
end;

end;
    HandleEvent
        cmInit:{
            var V1, V2, V3, V4 : WORD;

            VersionGet(false, 'i041Konvertor_Int1', V1, V2, V3, V4);
            InterfaceVersion := V1+'.'+V2;
    		    SetTitle('Выбор из партий заданной МЦ '+InterfaceVersion);
            FillTable(mc_nrec);
        };// cmInit
        cmPick:{
            case CurField of
            end;
            ReReadRecord;
        };// cmPick
        cmCheckField:{
            case CurField of
            end;
            ReReadRecord;
        }
        cmOK:{
        };//cmOK
        cmCancel:{
            CloseInterface(cmCancel);
        }//cmCancel


    End; //HandleEvent
End.// iKonvertor
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

А если так? :

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

Panel Part 
  table party041; 

Browse Partys 
  show at (,6,,) 
fields 
  party041.party  'Партия':[10]; 
  party041.dparty 'Дата партии':[10]; 
  party041.Kontr  'Контрагент':[20]; 
  party041.ost    'Ост.':[10] ; 
  party041.ostKub 'Ост.куб/м':[10.3]; 
  party041.kol  'Распр. кол-во':[10.3], NoProtect,{ font = { 
         bold = (party041.kol > 0); 
         backcolor = 17; 
         } 
      } 
; 
end; 
handleevent 
        cmUpdateRecord:{ 
          message('1'); 
          update current party041; 
        } 
end; 

end; 
изменить на:

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

Browse Partys 
  show at (,6,,) 
table Party041;
fields 
  party041.party  'Партия':[10]; 
  party041.dparty 'Дата партии':[10]; 
  party041.Kontr  'Контрагент':[20]; 
  party041.ost    'Ост.':[10] ; 
  party041.ostKub 'Ост.куб/м':[10.3]; 
  party041.kol  'Распр. кол-во':[10.3], NoProtect,{ font = { 
         bold = (party041.kol > 0); 
         backcolor = 17; 
         } 
      } 
; 
end; 

TableEvent Table Party041
cmUpdateRecord:{ 
          message('1'); 
          update current party041; 
        } 
end; 
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Сообщение Max_Ural »

Такой вариант уже пробовал
Написал вот так

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

Browse Partys
  show at (,6,,)
table Party041;
fields
  party041.party  'Партия':[10], Protect;
  party041.dparty 'Дата партии':[10], Protect;
  party041.Kontr  'Контрагент':[20], Protect;
  party041.ost    'Ост.':[10], Protect ;
  party041.ostKub 'Ост.куб/м':[10.3], Protect;
  party041.kol  'Распр. кол-во' ('Распределенное количество',,sci178Esc):[10.3], NoProtect,{ font = {
         bold = (party041.kol > 0);
         backcolor = 17;
         }
  }
;
end;

TableEvent Table Party041
cmUpdateRecord:{
          message('1');
          update current party041;
        }
cmInsertRecord:{
          message('1');
          insert current party041;
        }
end;
Сейчас, если нажать F7 - появляется новая строка.
Но изменения точно также не сохраняются.
При этом ни одного сообщения не выводится
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

делайте update в cmCheckField

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

create view as select party041.kol(InputKol) ...from...
...
cmCheckField:
{
    case CurField() of
       #InputKol:
       {
           update current party041;
       }
    end;
}
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: Не происходит событие UpdateRecord в интерфейсе

Сообщение cruger »

Max_Ural писал(а):Подскажите пожалуйста, что не так делаю

Код интерфейса следующий:

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

        cmCheckField:{
            case CurField of
            end;
            ReReadRecord;
        }
:lol:
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

stix писал(а):делайте update в cmCheckField
Весьма вредный совет. Отвратительный стиль программирования. :evil:
Max_Ural
партнер
Сообщения: 82
Зарегистрирован: Ср, 19/09/2007 08:35
Имя Фамилия: Максим Шагубаков
Откуда: Галактика-Урал
Контактная информация:

Сообщение Max_Ural »

Дааа, сам от себя такого не ожидал :-(
Ну ладно, урок будет на всю жизнь
Фёдор, спасибо большое
masygreen
партнер
Сообщения: 112
Зарегистрирован: Чт, 20/03/2008 09:10
Имя Фамилия: Максим Черепанов
Откуда: IT
Контактная информация:

Сообщение masygreen »

пока без проблем пользовался такой конструкцией. ВСЕГДА ПОСЛЕ INSERT СЛЕДУЕТ UPDATE
a1.nrec:=0;
a1.name:='';
insert current a1;
update current a1;
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Максим Черепанов
А зачем???
Зачем писать код, который лишь а) нагружает СУБД; б) тормозит выполнение?
masygreen
партнер
Сообщения: 112
Зарегистрирован: Чт, 20/03/2008 09:10
Имя Фамилия: Максим Черепанов
Откуда: IT
Контактная информация:

Сообщение masygreen »

хз .. это может и чего то нагружает, но зато всегда уверен что запись товоя вставилась и если после этого производится чтение из БД... то эта запись будет на месте!
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

уверенность даёт лишь анализ результата вставки записи
Ответить