|  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 | 
| Участник | Цитата: мне нужно по этому номеру найти каждого сотрудника и вывести уже к себе с кодом физ лица, вроде так. | 
|  |