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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.11.2013, 13:15   #21  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
ставим фильтр на тип даты = день
а на поле Starting Date - тот самый фильтр, что указал пользователь.
далее Date.Find('-') дает нам первую дату фильтра, а Date.Find('+') - последнюю.
и опять же никакого разбора на точечьки
вот эту часть не совсем понял
Старый 06.11.2013, 13:57   #22  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Цитата:
Сообщение от Fierce Посмотреть сообщение
вот эту часть не совсем понял
имелось в виду что при наложенном фильтре по дате FIND('-') найдет самую первую запись, а FIND('+') - последнюю... аналоги FINDFIRST и FINDLAST - сортировка таблицы по данному полю через конструкцию:
SETCURRENTKEY и ASCENDING перед выборками совсем не помешает - отсортирует записи...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 06.11.2013, 14:31   #23  
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   #24  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
periodstart,periodend пустые при заполненом Datafilter?
Старый 06.11.2013, 15:07   #25  
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   #26  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Так проверяйте на две точки в начале или в конце и получайте только верхнюю или только нижнюю границу соответственно.
Вы же вчера сами хотели так делать.
Цитата:
Сообщение от Fierce Посмотреть сообщение
... буду наверное находить позицию '..' ...
Старый 06.11.2013, 15:13   #27  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
Так проверяйте на две точки в начале или в конце и получайте только верхнюю или только нижнюю границу соответственно.
Вы же вчера сами хотели так делать. />
Цитата:
Сообщение от Fierce Посмотреть сообщение
... буду наверное находить позицию '..' ...
этот способ мне кажется плохим), я его не хочу использовать, нужно ведь расширять знания, а не делать все однотипно
Старый 06.11.2013, 15:21   #28  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
В этом случае Вы должны уточнить по ТЗ что должно быть в таких случаях, ибо если пользователь будет ошибаться - крайним он будет делать разработчика (проверено мною не один раз)...
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 06.11.2013, 15:30   #29  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
А в чем проблема передать 2 переменные, StartDate и EndDate? Если одна из них пустая (= 0D), то отругать пользователя и попросить заполнить.
И есть ли такая необходимость узнавать даты, если они не определены? Может просто в отчете сделать не
Код:
SETRANGE
, а
Код:
SETFILTER
. Он должен корректно наложить фильтр и перебрать все записи от неопределенной даты, до конечной (если у вас в начале стоит ..).
Старый 06.11.2013, 15:43   #30  
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   #31  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
Старый 06.11.2013, 16:03   #32  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от Constantine Посмотреть сообщение
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
такого условие, в отчете должно быть 2 переменные...пытался сделать проверку, на если дата минимальная пустая, то.. не канает, стреляет ту же ошибку)
Старый 06.11.2013, 16:10   #33  
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.
Старый 07.11.2013, 00:39   #34  
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   #35  
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   #36  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от Дуд Посмотреть сообщение
Санчо, не учи плохому
Не FIND('-') и FIND('+'), а FINDFIRST и FINDLAST />/>
А вот и нет! Если есть перебор, то лучше использовать так.
см. больше тут What impact does my C/AL have on SQL?
Старый 07.11.2013, 23:21   #37  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Fierce Посмотреть сообщение
а дату в формате
01.01.01..12.12.12
передать в две переменные
дата начала к примеру и дата окончание
Если весь сыр-бор двумя переменными только для того, чтобы потом передать фильтр по дате из реквест формы в программном коде в DateFilter,
то намного удобнее (и надёжнее) и без всяких заморочек с перебором точек, StartDate, EndDate и таблицой Date будет использовать просто одну текстовую переменную, в которой пользователь вводит какой угодно фильтр, вы просто преобразовываете то, что пользователъ ввёл сразу в OnValidate-triggere текст-бокса, в чистый DateFilter.
Вот пример:
Переменные:
Код:
Name	                 DataType	 Subtype	                      Length
DateFilterAsText	         Text		                                      100
SalesShipmentHeader                              Record	   Sales Shipment Header	
ApplMgt	                                         Codeunit  ApplicationManagement
Код в OnValidate-triggere текст-бокса:
Код:
CntrDateFilterAsText - OnValidate()
ApplMgt.MakeDateFilter(DateFilterAsText);
SalesShipmentHeader.SETFILTER("Posting Date",DateFilterAsText);
DateFilterAsText := SalesShipmentHeader.GETFILTER("Posting Date");
SalesShipmentHeader просто dummy-переменная, можно взять и любую другую таблицу, главное чтобы было поле типа "Date"
Старый 08.11.2013, 17:01   #38  
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, 18:45   #39  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Возможно нужно в person и employee1 поменять фирму?
Вы скажите в какой фирме что лежит, так сложно что-то оценить.

Не обернутые Find в if режут глаза. Если не все сотрудники "лежат на физ. лице" , то без обертки вообще писать нельзя.
Старый 08.11.2013, 18:49   #40  
srg is offline
srg
Участник
 
116 / 10 (1) +
Регистрация: 20.08.2013
Цитата:
Сообщение от InTacto Посмотреть сообщение
Возможно нужно в person и employee1 поменять фирму?
Вы скажите в какой фирме что лежит, так сложно что-то оценить.

Не обернутые Find в if режут глаза. Если не все сотрудники "лежат на физ. лице"/> , то без обертки вообще писать нельзя.
1. сотрудник может работать в 2 разных компаниях, но у него один и тот же ("No. in management comp."), который лежит в физ лице. ( во всех компаниях в которых он работает)
мне нужно по этому номеру найти каждого сотрудника и вывести уже к себе с кодом физ лица, вроде так.
 


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

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

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