AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.11.2013, 15:22   #1  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Ребята, вопрос такой, как передать переменную с формы в отчет/другую форму?
Старый 01.11.2013, 15:31   #2  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
создается ф-ция в форме, которой нужно передать значения, с параметрами. В этой ф-ции параметры присваиваются глобальным переменным, которые потом используются в форме.
Получение значения из формы точно так же, только в ф-ции теперь параметрам присваиваются глобальные переменные.
Старый 04.11.2013, 14:53   #3  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
а если передать переменную с формы, которая является фильтром, другой переменной на реквест форму Репорта?
вот к примеру от сюда >

Моя форма


в Мой Отчет
на реквест форму
Старый 04.11.2013, 17:40   #4  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
я обычно передаю в отчет фильтра через вызов функции, к примеру - SetMyFilters(text); где text - текстовая переменная содержащая данные после функции GETVIEW, переменная присваивается какой-то переменной (text) - глобальной для отчета.
В отчете функция имеет вид:
Код:
SetMyFilters(_text : text[1024])
text := _text
Если у Вас на исходной форме есть сабформа - тогда вытащить ее фильтра можно конструкцией CurrForm.сабформа.FORM.GetMyFilters; функция на сабформе:
Код:
GetMyFilters()text:text[1024]
text := GETVIEW;
В отчете на таблицу где-нибудь в PreReport я делаю таблица.SETVIEW(text) - и таблица отфильтрована по нужным полям и значениям. Способ для ленивых...
На форму запроса тоже можно вытащить эти данные - ведь известно по каким полям нужны (опять же передать фильтра и таблицу ими прогнать), String := Record.GETFILTER(Field), String передать в качестве SourceExpr поля формы...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 05.11.2013, 11:56   #5  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Вопрос такого характера..

сделал на реквест форме построение отчета по периодам

вот код

Код:
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  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 05.11.2013, 12:31   #7  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от zuzka Посмотреть сообщение
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
правильно говорите, сделал уже))

а дату в формате

01.01.01..12.12.12
передать в две переменные
дата начала к примеру и дата окончание
Старый 05.11.2013, 13:03   #8  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
Цитата:
Сообщение от zuzka Посмотреть сообщение
Если период это переменная - в чем проблема ее передать? Завести в отчете переменную типа Option и передавать... Главное чтобы порядок следования параметров в Option совпадал у той что на форме и в той что в отчете. Даже если на форме даты "С..." и "До..." - можно легко обработать их и вычислить какому периоду они соответствуют, или если на форме строки можно взять самую раннюю и самую позднюю - и опять же узнать период...
правильно говорите, сделал уже))

а дату в формате

01.01.01..12.12.12
передать в две переменные
дата начала к примеру и дата окончание
как параметр я ее получаю, у себя, но дальше походу нужно искать эти '..', чтоб можно было скопировать символы
Старый 05.11.2013, 13:21   #9  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
можно наложить этот фильтр на какое-нибудь поле таблицы, а потом получить границы через ф-ции GETRANGEMIN и GETRANGEMAX по этому полю
Старый 05.11.2013, 13:24   #10  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
можно наложить этот фильтр на какое-нибудь поле таблицы, а потом получить границы через ф-ции GETRANGEMIN и GETRANGEMAX по этому полю
а можно какой то пример использования?
Старый 05.11.2013, 13:31   #11  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Пример из справки />

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 message window shows:

The minimum value is: 100

With a filter which is single value:

Код:
Customer.SETFILTER("No.",'100');
Val := Customer.GETRANGEMIN("No.");
MESSAGE(Text000, Val);
Create the following text constant in the C/AL Globals window:

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.");
This code causes a run-time error to occur.
Старый 05.11.2013, 13:49   #12  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
а если дату ввели ..12.12.12 что делать??

на сколько я понял, идея заключается в том, чтоб узнать минимальный и максимальный.
я их получаю и после этого вывожу на свою реквест форму, правильно?
а что делать если, дата ..12.12.12 или 12.12.12..?
мне то нужна полная, а ее могут и не ввести, как мне нужно..
Старый 05.11.2013, 14:24   #13  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Так это как вы с пользователями договоритесь. Нужно уточнять ТЗ.
Что будет означать пусто поле - дата не введена или нет границы?
Старый 05.11.2013, 14:29   #14  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
Так это как вы с пользователями договоритесь. Нужно уточнять ТЗ.
Что будет означать пусто поле - дата не введена или нет границы?
нет границы, от начала времен будет считать.
Старый 05.11.2013, 14:34   #15  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Значит вы ответили на свой вопрос?
Старый 05.11.2013, 14:39   #16  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
Значит вы ответили на свой вопрос?
в том то и весь подвох, что на форме оно должно так считать, поле DateFilter
а на отчете должно считать от Дата Начало, до Дата окончание, но то что указано в DateFilter, оно должно автоматически заносить в Дата начало и Дата окончание, исходя с этого, если в DateFilter не будет начальной даты, то просто не смогу определить эту дату*.

буду наверное находить позицию '..', а после '..'записывать цифры к себе, ну и наоборот.
Старый 05.11.2013, 20:15   #17  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
убедимся, что поле "Date Filter" есть в таблице источнике
далее сделаем 2 переменные с типом Дата, например, ДатаНачалы и ДатаКонцы
далее на триггер OnPreReport напишем одну фразу:
SETRANGE("Date Filter", ДатаНачалы, ДатаКонцы);
если надо от начала времен, то ДатуНачалы не заполняем.

с точечками играться не стоит
Старый 05.11.2013, 20:26   #18  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от Fierce Посмотреть сообщение
... исходя с этого, если в DateFilter не будет начальной даты, то просто не смогу определить эту дату*.

буду наверное находить позицию '..', а после '..'записывать цифры к себе, ну и наоборот.
если гад пользователь ввел какой-то фильтр на дату и надо определить дату от и дату до, то идем другим путем
создаем глобальную переменную на таблицу Date (есть такая служебная таблица)
ставим фильтр на тип даты = день
а на поле Starting Date - тот самый фильтр, что указал пользователь.
далее Date.Find('-') дает нам первую дату фильтра, а Date.Find('+') - последнюю.
и опять же никакого разбора на точечьки
Старый 06.11.2013, 11:53   #19  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Sancho Посмотреть сообщение
убедимся, что поле "Date Filter" есть в таблице источнике
далее сделаем 2 переменные с типом Дата, например, ДатаНачалы и ДатаКонцы
далее на триггер OnPreReport напишем одну фразу:
SETRANGE("Date Filter", ДатаНачалы, ДатаКонцы);
если надо от начала времен, то ДатуНачалы не заполняем.

с точечками играться не стоит />/>
ну и опять же, по поводу даты начала, если ее не введут, оно в ексель будет выводить с какого то там 1700 года...
Старый 06.11.2013, 12:19   #20  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
ну и опять же, по поводу даты начала, если ее не введут, оно в ексель будет выводить с какого то там 1700 года...
А кто мешает урезать то что без даты до максимально возможного отрезка?
К примеру: выбрали 5 лет - у Вас максимум 1 год, режьте год от имеющейся даты... (...12.12.12 => 12.12.11..12.12.12)
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:20.