06.11.2013, 13:15 | #21 |
Участник
|
Цитата:
ставим фильтр на тип даты = день
а на поле Starting Date - тот самый фильтр, что указал пользователь. далее Date.Find('-') дает нам первую дату фильтра, а Date.Find('+') - последнюю. и опять же никакого разбора на точечьки |
|
06.11.2013, 13:57 | #22 |
Участник
|
имелось в виду что при наложенном фильтре по дате FIND('-') найдет самую первую запись, а FIND('+') - последнюю... аналоги FINDFIRST и FINDLAST - сортировка таблицы по данному полю через конструкцию:
SETCURRENTKEY и ASCENDING перед выборками совсем не помешает - отсортирует записи...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
06.11.2013, 14:31 | #23 |
Участник
|
Короче я идиот, не могу сделать эту "фигню"
на 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 |
Участник
|
periodstart,periodend пустые при заполненом Datafilter?
|
|
06.11.2013, 15:07 | #25 |
Участник
|
если 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 |
Участник
|
|
|
06.11.2013, 15:13 | #27 |
Участник
|
этот способ мне кажется плохим), я его не хочу использовать, нужно ведь расширять знания, а не делать все однотипно
|
|
06.11.2013, 15:21 | #28 |
Участник
|
В этом случае Вы должны уточнить по ТЗ что должно быть в таких случаях, ибо если пользователь будет ошибаться - крайним он будет делать разработчика (проверено мною не один раз)...
__________________
Как только вы проиграете, все ваши прошлые победы забудут. |
|
06.11.2013, 15:30 | #29 |
Участник
|
А в чем проблема передать 2 переменные, StartDate и EndDate? Если одна из них пустая (= 0D), то отругать пользователя и попросить заполнить.
И есть ли такая необходимость узнавать даты, если они не определены? Может просто в отчете сделать не Код: SETRANGE Код: SETFILTER |
|
06.11.2013, 15:43 | #30 |
Участник
|
Цитата:
у меня на репорте, на реквест форме два поля Startingdate и endingdate, при вызове отчета, нужно передавать DateFilter в старт и енд дейт, но в DateFilter могут ввести такого рода как ..12.12.12 ДАТУ, и теория моя ломиться..\ Конечная дата получается и записывается, когда в DateFilter вписана дата в формате ..12.12.12, но сразу валиться с ошибкой, из за того, что первое поле пустое.. |
|
06.11.2013, 15:59 | #31 |
Участник
|
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
|
|
06.11.2013, 16:03 | #32 |
Участник
|
Цитата:
Сообщение от Constantine
А вам обязательно в своем отчете использовать 2 переменные? Используйте 1 как на форме или разбирайте на составляющие. Либо через разбор точек, либо сортируйте таблицу по нужной вам дате, накладывайте фильтр и находите первую и последнюю запись, берите из них даты и передавайте в свой отчет.
|
|
06.11.2013, 16:10 | #33 |
Участник
|
GETRANGEMIN и GETRANGEMAX видимо не умеет работать с неопределенной датой. Разбирайте строку и ищите точки, либо ищите первую и последнюю запись.
Код: SETCURRENTKEY("Postin Date"); ASCENDING(True); IF FINDFIRST THEN // тут будет самая ранняя дата StartDate := Rec."Posting Date"; IF FINDLAST THEN // тут будет самая поздняя дата EndDate := Rec."Posting Date"; |
|
07.11.2013, 00:39 | #34 |
Administrator
|
погнали
создаем переменную типа 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"; если фильтр ..011113, то _Date1 наверняка будет 0D или 1753-й год |
|
07.11.2013, 02:38 | #35 |
NavAx
|
Санчо, не учи плохому
Не FIND('-') и FIND('+'), а FINDFIRST и FINDLAST
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
07.11.2013, 20:12 | #36 |
Участник
|
Цитата:
см. больше тут What impact does my C/AL have on SQL? |
|
07.11.2013, 23:21 | #37 |
Участник
|
Цитата:
то намного удобнее (и надёжнее) и без всяких заморочек с перебором точек, 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"); |
|
08.11.2013, 17:01 | #38 |
Участник
|
Спасибо огромное за советы ребята
есть вопрос мне нужно найти сотрудников, по полю "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 |
Участник
|
Возможно нужно в person и employee1 поменять фирму?
Вы скажите в какой фирме что лежит, так сложно что-то оценить. Не обернутые Find в if режут глаза. Если не все сотрудники "лежат на физ. лице" , то без обертки вообще писать нельзя. |
|
08.11.2013, 18:49 | #40 |
Участник
|
Цитата:
мне нужно по этому номеру найти каждого сотрудника и вывести уже к себе с кодом физ лица, вроде так. |
|