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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.06.2007, 16:53   #21  
satir is offline
satir
Участник
Аватар для satir
 
77 / 10 (1) +
Регистрация: 09.06.2006
Лезем в ключи таблицы
Добавляем в поле KeyGroups имя группы
Лезем в инфу по базе -> таблицы -> группы ключей
Выбираем нужную группу -> жмем включить, выключить
А дальше ждемс окончания процесса
Пользователь сам определяет, когда ему нужны ключики
Старый 19.06.2007, 19:42   #22  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Так в этой форме же вроде фильтруются записи по периоду тоже, а не как мне надо - допустим по конкретному месяцу всех лет.
И еще я что-то не понял там смысла конструкции:
Код:
SETRANGE("Date Filter",Calendar."Period Start",Calendar."Period End");
IF GETRANGEMIN("Date Filter") = GETRANGEMAX("Date Filter") THEN
  SETRANGE("Date Filter",GETRANGEMIN("Date Filter"));
Можно сделать ОЧЕНЬ просто (на основании фильтрации такого рода форм). Например сделать 2 рядка кнопочек (где первый ряд это захватываемый диапазон (в твоем случае это месяц май), а второй это диапазон ПРЫЖКА вывода (в твоем случае это через год).

Ну или вообще можно упростить поставив ДатаФомулу (ну этот вариант мне не очень - универсальность падает..)
Старый 20.06.2007, 09:36   #23  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от RedFox Посмотреть сообщение
Можно сделать ОЧЕНЬ просто (на основании фильтрации такого рода форм). Например сделать 2 рядка кнопочек (где первый ряд это захватываемый диапазон (в твоем случае это месяц май), а второй это диапазон ПРЫЖКА вывода (в твоем случае это через год).

Ну или вообще можно упростить поставив ДатаФомулу (ну этот вариант мне не очень - универсальность падает..)
Это в случае, если человеку нужны формы (может он в коде хочет получить выборку).
Так что это еще одно решение...
И еще можно много решений придумывать, выдумывая себе - что же за задача реально стоит перед автором
Старый 20.06.2007, 09:43   #24  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от satir Посмотреть сообщение
Лезем в ключи таблицы
Добавляем в поле KeyGroups имя группы
Лезем в инфу по базе -> таблицы -> группы ключей
Выбираем нужную группу -> жмем включить, выключить
А дальше ждемс окончания процесса
Пользователь сам определяет, когда ему нужны ключики
Вы описали процедуру... Она известна...

Тут вопрос - пользовался ли кому нибудь реально этой процедурой? Есть ли у кого-то отчеты, которые реально запускаются раз в год, а в остальное время не трогаются, причем под этот отчет выведен специальный ключ?

Не думаю, что пользователям ради этого стоит давать права доступа к информации о базе, разрешать играть с группами ключей и т.п.
А еще юзер случайно оптимизацию нажмет в пиковый час... все это чревато...

Это прерогатива все таки программистов.
Старый 20.06.2007, 10:49   #25  
satir is offline
satir
Участник
Аватар для satir
 
77 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Сообщение от randrews Посмотреть сообщение
Вы описали процедуру... Она известна...

Тут вопрос - пользовался ли кому нибудь реально этой процедурой? Есть ли у кого-то отчеты, которые реально запускаются раз в год, а в остальное время не трогаются, причем под этот отчет выведен специальный ключ?

Не думаю, что пользователям ради этого стоит давать права доступа к информации о базе, разрешать играть с группами ключей и т.п.
А еще юзер случайно оптимизацию нажмет в пиковый час... все это чревато...

Это прерогатива все таки программистов.
Да, такие примеры есть.
Старый 20.06.2007, 11:44   #26  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от randrews Посмотреть сообщение
Это в случае, если человеку нужны формы (может он в коде хочет получить выборку).
Да какие проблемы - так можно сделать на форме запроса отчета или форме.
А в обычном коде можно сделать просто формой ввода.

Цитата:
Так что это еще одно решение...
И еще можно много решений придумывать, выдумывая себе - что же за задача реально стоит перед автором
А я не говорил, что это единственно-правильное ;-)
Это просто вариант для разработки и обсуждения, который не требует модификации таблиц.
И...и вообще, можно сделать маленькую формочку (по аналогии с календарем), которую потом и юзать где нужно.
Старый 20.06.2007, 12:04   #27  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Чтото я не очень понял реализацию:
Цитата:
Можно сделать ОЧЕНЬ просто (на основании фильтрации такого рода форм). Например сделать 2 рядка кнопочек (где первый ряд это захватываемый диапазон (в твоем случае это месяц май), а второй это диапазон ПРЫЖКА вывода (в твоем случае это через год).
Вот у меня сейчас сделано так:
Код:
OnPreDataItem ()
SETFILTER ("Posted Date", '<=%1', CALCDATE('<CM>-5<Y>', RepDateS)); // - чтобы ограничить диапазон выборки допустим 5 лет

OnAfterGetRecord ()
EntryMonth:=DATE2DMY("Posted Date",2);
IF EntryMonth <> (RepMonth+1) THEN CurrReport.SKIP; // - +1 потому что выпадающий список с месяцами: январь - 0 и т.д.
{
Обработка нужных записей
}
Более изящно получается не сделать?
Старый 20.06.2007, 12:24   #28  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Чтото я не очень понял реализацию:

Вот у меня сейчас сделано так:
Код:
OnPreDataItem ()
SETFILTER ("Posted Date", '<=%1', CALCDATE('<CM>-5<Y>', RepDateS)); // - чтобы ограничить диапазон выборки допустим 5 лет

OnAfterGetRecord ()
EntryMonth:=DATE2DMY("Posted Date",2);
IF EntryMonth <> (RepMonth+1) THEN CurrReport.SKIP; // - +1 потому что выпадающий список с месяцами: январь - 0 и т.д.
{
Обработка нужных записей
}
Более изящно получается не сделать?
Почему не получается. Получается ..
В предложенном варианте записей будет в разы больше отсеяно, чем обработано. Вернее обработаются все, но куча из них - впустую. Лучше взять снаружи цикл по годам. Внутри цикл по определенному месяцу. В этом случае обрабатываться будут только полезные записи. Лишний датаайтем сверху по вирт таблице Дата, ограниченной интервалом в пять (или сколько вам угодно) лет. И все дела )
Старый 20.06.2007, 13:20   #29  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Цитата:
Лучше взять снаружи цикл по годам. Внутри цикл по определенному месяцу. В этом случае обрабатываться будут только полезные записи. Лишний датаайтем сверху по вирт таблице Дата, ограниченной интервалом в пять (или сколько вам угодно) лет.
Что-то я не очень уловил, нельзя ли кусок кода для наглядности?
Старый 20.06.2007, 13:37   #30  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Что-то я не очень уловил, нельзя ли кусок кода для наглядности?
Репорт.
Верхний датаайтем на вирт таблице Дата.
Код:
Дата - OnPreDataItem().

Дата.SETRANGE("Тип периода", "Тип периода"::Год);
Дата.SETRANGE("Начало периода", CALCDATE('<-CY-5Y>', TODAY()), CALCDATE('<-CY>', TODAY()));
Вложенный датаайтем - тот, чьи записи вы обрабатываете. Допустим 32 таблица

Код:
ItemLedgerEntry - OnPreDataItem().

MyWorkDate := DMY2DATE(1, RepMonth + 1, DATE2DMY(Дата."Начало периода", 3)); // 1я дата нужного месяца нужного года

SETRANGE("Posting Date", Дата."Начало периода", NORMALDATE(Дата."Конец периода"));
FILTERGROUP(4);
SETRANGE("Posting Date", CALCDATE('<-CM>', MyWorkDate), CALCDATE('<CM>', MyWorkDate));
FILTERGROUP(0);
Здесь обрабатывается только массив по одному нужному вам месяцу одного года. И так по тому колву годов, которое вы задали сверху.
ПС. Писал не проверяя. Может где лишняя скобка затесалась ...
Старый 20.06.2007, 17:13   #31  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от romeo Посмотреть сообщение
Репорт.
Верхний датаайтем на вирт таблице Дата.
Код:
Дата - OnPreDataItem().

Дата.SETRANGE("Тип периода", "Тип периода"::Год);
Дата.SETRANGE("Начало периода", CALCDATE('<-CY-5Y>', TODAY()), CALCDATE('<-CY>', TODAY()));
Вложенный датаайтем - тот, чьи записи вы обрабатываете. Допустим 32 таблица

Код:
ItemLedgerEntry - OnPreDataItem().

MyWorkDate := DMY2DATE(1, RepMonth + 1, DATE2DMY(Дата."Начало периода", 3)); // 1я дата нужного месяца нужного года

SETRANGE("Posting Date", Дата."Начало периода", NORMALDATE(Дата."Конец периода"));
FILTERGROUP(4);
SETRANGE("Posting Date", CALCDATE('<-CM>', MyWorkDate), CALCDATE('<CM>', MyWorkDate));
FILTERGROUP(0);
Здесь обрабатывается только массив по одному нужному вам месяцу одного года. И так по тому колву годов, которое вы задали сверху.
ПС. Писал не проверяя. Может где лишняя скобка затесалась ...
Именно так по аналогии оно и работают там ;-)
Старый 09.07.2007, 12:24   #32  
mRazik is offline
mRazik
Участник
Аватар для mRazik
 
20 / 10 (1) +
Регистрация: 09.02.2007
Группа ключей, вопрос очень интересный, находится он по пути Файл-База данных-Информация-Таблицы-Группы ключей (путь не близкий). Тут мы по необходимости включаем и выключаем группу ключей ручками, а программно как это сделать?
Старый 09.07.2007, 14:50   #33  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
вообще, можно использовать программно следующую логику.
по виртуальной таблице Date ставить фильтр
Тип периода -Месяц
Период Но. - 5 (в данном случае, но вполне можно это выбирать программно)
по интересующим данным установить ключ по дате. Найти минимальную дату (FINDFIRST), и найти Максимальную дату (FINDLAST). Установить соответстующий фильтр на поля Начало периода и конец периода в виртуальной таблице, так что виртуальная таблица будет содержать только интересующие месяца интересующих лет, а потом создать текстовую переменную(до 2000 символов), которая будет хранить фильтр на дату Str:=Str+ FORMAT(Date."Начало Периода)+'..'+FORMAT(Date."Конец Периода")+ '|' проходя по всем записям виртуальной таблицы, а потом просто необходимо будет установить этот сложный фильтр на поле дата по интересущим данным
 

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

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

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

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

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