|
01.11.2013, 15:22 | #1 |
Участник
|
Ребята, вопрос такой, как передать переменную с формы в отчет/другую форму?
|
|
01.11.2013, 15:31 | #2 |
Участник
|
создается ф-ция в форме, которой нужно передать значения, с параметрами. В этой ф-ции параметры присваиваются глобальным переменным, которые потом используются в форме.
Получение значения из формы точно так же, только в ф-ции теперь параметрам присваиваются глобальные переменные. |
|
04.11.2013, 14:53 | #3 |
Участник
|
а если передать переменную с формы, которая является фильтром, другой переменной на реквест форму Репорта?
вот к примеру от сюда > Моя форма в Мой Отчет на реквест форму |
|
04.11.2013, 17:40 | #4 |
Участник
|
я обычно передаю в отчет фильтра через вызов функции, к примеру - SetMyFilters(text); где text - текстовая переменная содержащая данные после функции GETVIEW, переменная присваивается какой-то переменной (text) - глобальной для отчета.
В отчете функция имеет вид: Код: SetMyFilters(_text : text[1024]) text := _text Код: GetMyFilters()text:text[1024] text := GETVIEW; На форму запроса тоже можно вытащить эти данные - ведь известно по каким полям нужны (опять же передать фильтра и таблицу ими прогнать), String := Record.GETFILTER(Field), String передать в качестве SourceExpr поля формы...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
05.11.2013, 11:56 | #5 |
Участник
|
Вопрос такого характера..
сделал на реквест форме построение отчета по периодам вот код Код: Col:=3; CASE PeriodType OF PeriodType::Day: Formula:='<1D>'; PeriodType::Week: Formula:='<1W>'; PeriodType::Month: Formula:='<1M>'; PeriodType::Quarter: Formula:='<1Q>'; PeriodType::Year: Formula:='<1Y>'; END; REPEAT CASE PeriodType OF PeriodType::Day: DateText:=FORMAT(CurDate); PeriodType::Week: DateText:=FORMAT(CurDate,7,'<Week>.<Year4>'); PeriodType::Month: DateText:=FORMAT(CurDate,12,'<Month Text,3> <Year4>'); PeriodType::Quarter: DateText:=FORMAT(CurDate,7,'<Quarter>/<Year4>'); PeriodType::Year: DateText:=FORMAT(DATE2DMY(CurDate,3)); END; мне нужно вот эти периоды, получать с самой формы и передавать себе в отчет уже. |
|
05.11.2013, 12:29 | #6 |
Участник
|
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
05.11.2013, 12:31 | #7 |
Участник
|
Цитата:
Сообщение от zuzka
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
а дату в формате 01.01.01..12.12.12 передать в две переменные дата начала к примеру и дата окончание |
|
05.11.2013, 13:03 | #8 |
Участник
|
Цитата:
Сообщение от Fierce
Цитата:
Сообщение от zuzka
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
а дату в формате 01.01.01..12.12.12 передать в две переменные дата начала к примеру и дата окончание |
|
07.11.2013, 23:21 | #9 |
Участник
|
Цитата:
то намного удобнее (и надёжнее) и без всяких заморочек с перебором точек, StartDate, EndDate и таблицой Date будет использовать просто одну текстовую переменную, в которой пользователь вводит какой угодно фильтр, вы просто преобразовываете то, что пользователъ ввёл сразу в OnValidate-triggere текст-бокса, в чистый DateFilter. Вот пример: Переменные: Код: Name DataType Subtype Length DateFilterAsText Text 100 SalesShipmentHeader Record Sales Shipment Header ApplMgt Codeunit ApplicationManagement Код: CntrDateFilterAsText - OnValidate() ApplMgt.MakeDateFilter(DateFilterAsText); SalesShipmentHeader.SETFILTER("Posting Date",DateFilterAsText); DateFilterAsText := SalesShipmentHeader.GETFILTER("Posting Date"); |
|
05.11.2013, 13:21 | #10 |
Участник
|
можно наложить этот фильтр на какое-нибудь поле таблицы, а потом получить границы через ф-ции GETRANGEMIN и GETRANGEMAX по этому полю
|
|
05.11.2013, 13:24 | #11 |
Участник
|
|
|
05.11.2013, 13:31 | #12 |
Участник
|
Пример из справки />
These examples show how to use the GETRANGEMIN function. With a filter which is a single range: Код: Customer.SETFILTER("No.",'100..200'); Val := Customer.GETRANGEMIN("No."); MESSAGE(Text000', Val); The minimum value is: 100 With a filter which is single value: Код: Customer.SETFILTER("No.",'100'); Val := Customer.GETRANGEMIN("No."); MESSAGE(Text000, Val); Text Constant ENU Value Text000 'The minimum value is: %1' The message window shows: The minimum value is: 100 With a filter which is not a single range: Код: Customer.SETFILTER("No.",'200|300'); Val := Customer.GETRANGEMIN("No."); |
|
05.11.2013, 13:49 | #13 |
Участник
|
а если дату ввели ..12.12.12 что делать??
на сколько я понял, идея заключается в том, чтоб узнать минимальный и максимальный. я их получаю и после этого вывожу на свою реквест форму, правильно? а что делать если, дата ..12.12.12 или 12.12.12..? мне то нужна полная, а ее могут и не ввести, как мне нужно.. |
|
05.11.2013, 14:24 | #14 |
Участник
|
Так это как вы с пользователями договоритесь. Нужно уточнять ТЗ.
Что будет означать пусто поле - дата не введена или нет границы? |
|
05.11.2013, 14:29 | #15 |
Участник
|
|
|
05.11.2013, 14:34 | #16 |
Участник
|
Значит вы ответили на свой вопрос?
|
|
05.11.2013, 14:39 | #17 |
Участник
|
в том то и весь подвох, что на форме оно должно так считать, поле DateFilter
а на отчете должно считать от Дата Начало, до Дата окончание, но то что указано в DateFilter, оно должно автоматически заносить в Дата начало и Дата окончание, исходя с этого, если в DateFilter не будет начальной даты, то просто не смогу определить эту дату*. буду наверное находить позицию '..', а после '..'записывать цифры к себе, ну и наоборот. |
|
05.11.2013, 20:26 | #18 |
Administrator
|
Цитата:
создаем глобальную переменную на таблицу Date (есть такая служебная таблица) ставим фильтр на тип даты = день а на поле Starting Date - тот самый фильтр, что указал пользователь. далее Date.Find('-') дает нам первую дату фильтра, а Date.Find('+') - последнюю. и опять же никакого разбора на точечьки |
|
05.11.2013, 20:15 | #19 |
Administrator
|
убедимся, что поле "Date Filter" есть в таблице источнике
далее сделаем 2 переменные с типом Дата, например, ДатаНачалы и ДатаКонцы далее на триггер OnPreReport напишем одну фразу: SETRANGE("Date Filter", ДатаНачалы, ДатаКонцы); если надо от начала времен, то ДатуНачалы не заполняем. с точечками играться не стоит |
|
06.11.2013, 11:53 | #20 |
Участник
|
Цитата:
Сообщение от Sancho
убедимся, что поле "Date Filter" есть в таблице источнике
далее сделаем 2 переменные с типом Дата, например, ДатаНачалы и ДатаКонцы далее на триггер OnPreReport напишем одну фразу: SETRANGE("Date Filter", ДатаНачалы, ДатаКонцы); если надо от начала времен, то ДатуНачалы не заполняем. с точечками играться не стоит />/> |
|