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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.11.2013, 12:19   #1  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
ну и опять же, по поводу даты начала, если ее не введут, оно в ексель будет выводить с какого то там 1700 года...
А кто мешает урезать то что без даты до максимально возможного отрезка?
К примеру: выбрали 5 лет - у Вас максимум 1 год, режьте год от имеющейся даты... (...12.12.12 => 12.12.11..12.12.12)
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 06.11.2013, 13:15   #2  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
ставим фильтр на тип даты = день
а на поле Starting Date - тот самый фильтр, что указал пользователь.
далее Date.Find('-') дает нам первую дату фильтра, а Date.Find('+') - последнюю.
и опять же никакого разбора на точечьки
вот эту часть не совсем понял
Старый 06.11.2013, 13:57   #3  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
вот эту часть не совсем понял
имелось в виду что при наложенном фильтре по дате FIND('-') найдет самую первую запись, а FIND('+') - последнюю... аналоги FINDFIRST и FINDLAST - сортировка таблицы по данному полю через конструкцию:
SETCURRENTKEY и ASCENDING перед выборками совсем не помешает - отсортирует записи...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 07.11.2013, 00:39   #4  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Цитата:
Сообщение от Fierce Посмотреть сообщение
вот эту часть не совсем понял
погнали
создаем переменную типа record с субтипом Date, назовем ее _Date
далее

Код:
 _Date1 := 0D;
 _Date2 := 0D;
 _Date.SETRANGE("Period Type", _Date."Period Type"::"0"{День});
 _Date.SETFILTER("Period Start", ТотСамыйДатаФильтрТупымТекстом);
 IF _Date.FIND('-') THEN
    Date1 := _Date."Period Start";
 IF _Date.FIND('+') THEN
    Date2 := _Date."Period Start";
где _Date1 и _Date2 переменные, даты начала и конца пользовательского фильтра.
если фильтр ..011113, то _Date1 наверняка будет 0D или 1753-й год
Старый 07.11.2013, 02:38   #5  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Санчо, не учи плохому
Не FIND('-') и FIND('+'), а FINDFIRST и FINDLAST
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 07.11.2013, 20:12   #6  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от Дуд Посмотреть сообщение
Санчо, не учи плохому
Не FIND('-') и FIND('+'), а FINDFIRST и FINDLAST />/>
А вот и нет! Если есть перебор, то лучше использовать так.
см. больше тут What impact does my C/AL have on SQL?
Старый 06.11.2013, 14:31   #7  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Короче я идиот, не могу сделать эту "фигню"

на OnOpenForm реквест формы..
Код:
IF DateFilter='' THEN
ERROR('Необходимо ввести дату периода');
Item.SETFILTER("Date Filter",DateFilter);
     periodstart:=Item.GETRANGEMIN("Date Filter");
     periodend:=Item.GETRANGEMAX("Date Filter");
не могу решить эту задачу вообще, сейчас заплачу
Старый 06.11.2013, 15:04   #8  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
periodstart,periodend пустые при заполненом Datafilter?
Старый 06.11.2013, 15:07   #9  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
periodstart,periodend пустые при заполненом Datafilter?
если datafilter 01.01.11..31.12.11
то
periodstart=01.01.11
periodend=31.12.11

так же, если дата фильтер 01.01.01
то
periodstart=01.01.01
periodend=01.01.01
а если датафильтер ..01.01.11 то ошибка которую пользователь сочтет как ошибку программы скорей, чем то, что он неправильно ввел.
Старый 06.11.2013, 15:12   #10  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Так проверяйте на две точки в начале или в конце и получайте только верхнюю или только нижнюю границу соответственно.
Вы же вчера сами хотели так делать.
Цитата:
Сообщение от Fierce Посмотреть сообщение
... буду наверное находить позицию '..' ...
Старый 06.11.2013, 15:13   #11  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
Так проверяйте на две точки в начале или в конце и получайте только верхнюю или только нижнюю границу соответственно.
Вы же вчера сами хотели так делать. />
Цитата:
Сообщение от Fierce Посмотреть сообщение
... буду наверное находить позицию '..' ...
этот способ мне кажется плохим), я его не хочу использовать, нужно ведь расширять знания, а не делать все однотипно
Старый 06.11.2013, 15:21   #12  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
В этом случае Вы должны уточнить по ТЗ что должно быть в таких случаях, ибо если пользователь будет ошибаться - крайним он будет делать разработчика (проверено мною не один раз)...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 06.11.2013, 15:30   #13  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
А в чем проблема передать 2 переменные, StartDate и EndDate? Если одна из них пустая (= 0D), то отругать пользователя и попросить заполнить.
И есть ли такая необходимость узнавать даты, если они не определены? Может просто в отчете сделать не
Код:
SETRANGE
, а
Код:
SETFILTER
. Он должен корректно наложить фильтр и перебрать все записи от неопределенной даты, до конечной (если у вас в начале стоит ..).
Старый 06.11.2013, 15:43   #14  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Constantine Посмотреть сообщение
А в чем проблема передать 2 переменные, StartDate и EndDate? Если одна из них пустая (= 0D), то отругать пользователя и попросить заполнить.
На форме одно поле DateFitler

у меня на репорте, на реквест форме два поля Startingdate и endingdate, при вызове отчета, нужно передавать DateFilter в старт и енд дейт, но в DateFilter могут ввести такого рода как ..12.12.12 ДАТУ, и теория моя ломиться..\

Конечная дата получается и записывается, когда в DateFilter вписана дата в формате ..12.12.12, но сразу валиться с ошибкой, из за того, что первое поле пустое..
Старый 06.11.2013, 15:59   #15  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
Старый 06.11.2013, 16:03   #16  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Constantine Посмотреть сообщение
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
такого условие, в отчете должно быть 2 переменные...пытался сделать проверку, на если дата минимальная пустая, то.. не канает, стреляет ту же ошибку)
Старый 06.11.2013, 16:10   #17  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
GETRANGEMIN и GETRANGEMAX видимо не умеет работать с неопределенной датой. Разбирайте строку и ищите точки, либо ищите первую и последнюю запись.
Код:
SETCURRENTKEY("Postin Date");
ASCENDING(True);
IF FINDFIRST THEN // тут будет самая ранняя дата
  StartDate := Rec."Posting Date";
IF FINDLAST THEN // тут будет самая поздняя дата
  EndDate := Rec."Posting Date";
Ну или как советовал Sancho, ставьте фильтр на служебную таблицу Date.
Старый 08.11.2013, 17:01   #18  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Спасибо огромное за советы ребята
есть вопрос

мне нужно найти сотрудников, по полю "No. in management comp.", которое лежит на физ лице.
и вывести тех у кого они есть, все это делается на Multicompany

вот мой код, что неправильно работает, я хз
Код:
employee.CHANGECOMPANY(company.Name);
employee.SETRANGE(employee."No.",PayrollLedgerEntry."Employee No.");
employee.FINDFIRST;

person.SETRANGE(person."No.",employee."Person No.");
person1.FINDSET;
person1.SETRANGE(person1."No. in management comp.",person."No. in management comp.");

employee1.RESET;
employee1.SETRANGE(employee1."Person No.",person1."No.");//

TempPayrollAnalysisViewEntry."Employee No." :=employee1."No.";
Старый 08.11.2013, 19:13   #19  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
зачем на person наложен фильтр?
Цитата:
Сообщение от Fierce Посмотреть сообщение
person.SETRANGE(person."No.",employee."Person No.");
где этот person используется в этом коде?

а потом делается поиск записи в person1 и где на него накладывались фильтры не показано
Цитата:
Сообщение от Fierce Посмотреть сообщение
person1.FINDSET;
вот эта строчка тоже оч странная
Цитата:
Сообщение от Fierce Посмотреть сообщение
person1.SETRANGE(person1."No. in management comp.",person."No. in management comp.");
а где поиск для employee1?
Цитата:
Сообщение от Fierce Посмотреть сообщение
employee1.RESET;
employee1.SETRANGE(employee1."Person No.",person1."No.");//

TempPayrollAnalysisViewEntry."Employee No." :=employee1."No.";[/code]
После исправлений напишите комментарий к каждому блоку.
Здесь получил общий номер, тут вот ищу его в одной фирме, тут ищу в другой.
Наверное туплю под вечер, но что нужно получить физ лицо или сотрудника не понял?
Старый 08.11.2013, 19:25   #20  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
зачем на person наложен фильтр?
Цитата:
Сообщение от Fierce Посмотреть сообщение
person.SETRANGE(person."No.",employee."Person No.");
где этот person используется в этом коде?

а потом делается поиск записи в person1 и где на него накладывались фильтры не показано
Цитата:
Сообщение от Fierce Посмотреть сообщение
person1.FINDSET;
вот эта строчка тоже оч странная
Цитата:
Сообщение от Fierce Посмотреть сообщение
person1.SETRANGE(person1."No. in management comp.",person."No. in management comp.");
а где поиск для employee1?
Цитата:
Сообщение от Fierce Посмотреть сообщение
employee1.RESET;
employee1.SETRANGE(employee1."Person No.",person1."No.");//

TempPayrollAnalysisViewEntry."Employee No." :=employee1."No.";[/code]
После исправлений напишите комментарий к каждому блоку.
Здесь получил общий номер, тут вот ищу его в одной фирме, тут ищу в другой.
Наверное туплю под вечер, но что нужно получить физ лицо или сотрудника не понял?
консультант как сформировал задание, я его так и говорю))

короче говорил 20 минут с ним(не привело вообще ничего и не понятно еще больше стало),пошел поговорил еще с одним программистом,решили нужно вывести всех пользователей у которых заполнен в управленчиской компании, то есть в текущей.
No. in management comp. - поле таблицы Person
 

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

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:15.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.