Редактируемые отчеты — различия между версиями
Bars (обсуждение | вклад) (Новая страница: «Категория:Настройка ГБ Редактируемый отчет - это отчет, в котором пользователь может ре…») |
Alexandr (обсуждение | вклад) (→Типы вызова.) |
||
Строка 53: | Строка 53: | ||
Дополнение. При множественном выделении записей в редактируемом отчете любое изменение поля коснется всех выделенных записей | Дополнение. При множественном выделении записей в редактируемом отчете любое изменение поля коснется всех выделенных записей | ||
+ | |||
+ | Дополнение. Если в выходном датасете есть строковое поле Message то по результатам работы кнопки будет выведена форточка: | ||
+ | Результат выполнения команды | ||
+ | <содержимое поля Message> | ||
==Отчеты без процедуры сохранения.== | ==Отчеты без процедуры сохранения.== |
Текущая версия на 11:04, 11 октября 2011
Редактируемый отчет - это отчет, в котором пользователь может редактировать данные и сохранять сделанные изменения.
Существует 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