Редактируемые отчеты

Материал из GB wiki
Перейти к: навигация, поиск


Редактируемый отчет - это отчет, в котором пользователь может редактировать данные и сохранять сделанные изменения.

Существует 2 вида редактируемых отчетов.

Отчеты с процедурой сохранения.

В отчете с процедурой сохранения обязательно должна быть как минимум одна кнопка для вызова процедуры сохранения.

В таком отчете пользователь может изменять любые поля, которые вернула процедура, и у которых не установлен атрибут faReadOnly. Вычисляемые поля тоже могут меняться, при этом изменение поля Partner.Name изменяет и поле Partner, изменение поля Heap.@X изменяет и поле Heap. Кроме того, могут изменяться и вычисляемые поля, которые равны сами себе: Amount[Сумма,fmAMount+1]=Amount, но по умолчанию в процедуру записи они не передаются. Для того, чтобы передавались, нужен специальный параметр.

Кнопка вызова процедуры сохранения должна иметь следующий вид:

а) в поле "Процедура" - имя процедуры, в поле "Только параметры" - тип вызова

б) в поле "Процедура" - скрипт, который содержит функцию savechanges как минимум с одним параметром. Скрипт =SaveChanges(`Процедура`,`Тип вызова`) полностью эквивалентен варианту (а) Вариант (б) используется, например, для обновления отчета после сохранения. Тогда скрипт будет выглядеть так

=SaveChanges(`Процедура`,`Тип вызова`),ProcessCommand(`CURRENT`,``,`REFRESH`)

в) если для записи используется скрипт, но функция SaveChanges в нем по каким-то причинам не зовется (например, надо бегать по строчкам и звать gb_put, и т.п.) - то скрипт должен содержать строку `SaveChanges(` - проще всего записать ее в ненужную переменную, например так:

:tmp:=`SaveChanges(`

Дополнение. В процедуру записи можно передавать не только данные, но и дельту, для этого используется кнопка со скриптом типа такого

=:tmp:=`SaveChanges(`,ApplyUpdates(`ViewQuery`,`ViewQuery_Put`)

Процедура для записи дельты должна иметь соответствующий вид, и в нее не передаются вычисляемые поля.

Типы вызова.

  • пустая строка или ALL (по умолчанию) - в процедуру передается датасет из двух полей: Params - содержит субсет параметров отчета, Results - содержит субсет результатов без вычисляемых полей (может быть отфильтрован, список полей может быть задан явно)
  • LAYOUT - в процедуру передается датасет, структура которого в точности соответствует настройке таблицы результатов. Передаются все поля таблицы, в том числе вычисляемые. Поля, не попавшие в настройку, не передаются.
  • CALCDATA - в процедуру передается датасет из двух полей: Params - содержит субсет параметров отчета, Results - содержит субсет результатов со всеми вычисляемыми полями
  • ORIGINALDATA - в процедуру передается датасет из двух полей: Params - содержит субсет параметров отчета, Results - содержит субсет результатов без сделанных пользователем правок
  • DATAONLY - в процедуру передается датасет результатов отчета (может быть отфильтрован, список полей можно задать явно).
  • PARAMSONLY или 1 - в процедуру передается датасет входных параметров отчета (1 - для обратной совместимости )

Через ; к типу вызова для вариантов ALL и DATAONLY можно задать фильтр и список полей FILTER=выражение FIELDS=поле;поле;поле Если задано и то и другое - между собой они разделюятся запятыми. Например:

ALL;FILTER=_Changed,FIELDS=Id;Name;Amount

В самом конце типа вызова через ; может быть добавлен параметр SHOWRESULTS В этом случае после выполнения процедуры сохранения результат ее работы будет показан в результатах отчета (этот способ тоже можно использовать для того, чтобы показать результат выполнения процедуры, хотя при этом нужно в процедуру записи всталять всю процедуру получения отчета).

Дополнение. Можно передавать на сервер только измененные записи. Для этого в свойствах отчета в поле "Автоколонки" нужно добавить поле _Changed[изм,fmBoolean]=_Changed В параметрах вызова нужно указать фильтр FILTER=_Changed Поле _Changed будет автоматически изменяться на 1 при любом редактировании

Дополнение. При множественном выделении записей в редактируемом отчете любое изменение поля коснется всех выделенных записей

Дополнение. Если в выходном датасете есть строковое поле Message то по результатам работы кнопки будет выведена форточка: Результат выполнения команды <содержимое поля Message>

Отчеты без процедуры сохранения.

В отчете без процедуры сохранения сохранение данных осуществляется по кнопке со стрелкой вправо в тубларе, либо по кнопке, содержащей скрипт SaveChanges() - без параметров

Такой отчет обязательно должен содержать поле Id

В таком отчете пользователь может изменять только поля Id.Поле и Id.Heap.Поле Для записи изменений в этом случае используются стандартные процедуры XXX_Put, где XXX определяется по типу поля Id