как вызвать cmInsertRecord в 8.1

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

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

Ответить
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

как вызвать cmInsertRecord в 8.1

Сообщение Hmyrii »

Всем доброго времени суток.
Помогите люди добрые кто чем может.
Ситуация следующая.
Галя версии 8.1.
Сделан browse по определенной таблице например table1.
Нажимаем F7 - создаем новую запись.
1. Генериться событие cmInsert - на него прикладного обработчика не делал - система сама создает новую запись с пометкой isNew.
2. Генериться событие cmSetDefault - там выставляю значения полей по умолчаниию. Тут же делаю PutCommand(cmEdit). В cmEdit запускаю window к котором в верхней части скрин для редактирования данных таблицы table1 а во второй броузе со спецификацие документа - table2.

цитата из доки по описанию события cmDefault: после модификации пользователем значений полей при попытке любым путем уйти с записи возникнет событие cmInsertRecord, в котором необходимо запрограммировать оператор добавления записи SQL

Я в cmSetDefault по table1 уже все значения какие надо выставил. Юзеру после нажатия кнопки F7 надо сразу начинать заполнять спецификацию. А так как он руками полей table1 не правил, то значит и cmInsertRecord не вызывался и потому галя не дает перейти на спецификацию и ругается "Переход не возможен, текущий документ не заполнен".

А теперь вопрос. Как же это вылечить? Что же лишать пользователя части автоматизации и заставлять какие то поля заполнять руками?

Вот для наглядности часть кода

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

..................................

browse brPricaz (,,sci1478EnEsc);
Table PrCalcZar;
fields
  PrCalcZar.Nomer       'Приказ №'     : [10], protect;
end; // browse brPricaz
 
window winEditPricaz 'Редактирование приказа' EscClose;
  panel pPricaz;
  screen scrPricaz (,,);
  Show at (,,,6);
  table PrCalcZar;
  fields
   PrCalcZar.Descr       ('дескриптор'): Protect;
   PrCalcZar.Nomer       ('номер приказа'): noProtect;
<<
`Дескриптор` .@@@@@ `Номер` .@@@@@@@
>>
  end; // scrPricaz
  end; // pPricaz
   
  panel pPrCalcSpLS;
  browse brPrCalcSpLS (,,sci1478EnEsc);
  Show at (,7,,18);
  table PrCalcSpLS;
    PrCalcSpLS.TabN         #3'Таб.н.'             : [5],  protect;
    PrCalcSpLS.Fio          #3'ФИО'                : [15], protect;
  end; // scrPrCalcSpLS
  end; // pPrCalcSpLS
 end;  
   
TableEvent Table PrCalcZar;
  cmSetDefault:
  {
    SetDefaultValuePricaz;
    
    PutCommand(cmEdit);
  }
  cmInsertRecord:
  {
    insert current PrCalcZar;
  }
  cmUpdateRecord:
  {
    update current PrCalcZar;
  }
  cmDeleteRecord:
  {
    delete all from PrCalcSpLS where ((PrCalcZar.Nrec == PrCalcSpLS.cPrCalcZar));
    delete current PrCalcZar;
  }
  cmEdit:
  {
    RunWindow(winEditPricaz);
  }
end;
.................................
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

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

Так а если после вставки значений по умолчанию самому вставить запись?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

set table.поле - вызовет принудительно cmInsertRecord. + можно выполнить Putcommand(cmInsertRecord) но тыды еще SetNew(false)
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Сообщение Hmyrii »

самому вставить? если вы имели insert current то не канает, тогда получаем в итоге после нажатия F7 имеем сразу две записи, одна сделана галей, вторая мной, руками

SET помог, если при выставлении значений по умолчанию сделать SET, то тогда при уходе с записи вызывается cmInsertRecord
спасибо за совет
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Всё, что нужно - это вовремя выставить флаг наличия модификаций текущей записи - либо с помощью SetModified(true), либо с помощью set. Но последний оператор, кроме взведения флага, выполняет еще массу не всегда нужных действий. Обычно хватает SetModified - вызовите его в обработчике cmSetDefault. Не имеет значения, в какой именно его части.
Виталий
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Сообщение Hmyrii »

спасибо за консультацию
виталий как всегда на высоте :cool:
Ответить