Фильтр покупателей, которые купили конкретный товар
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Фильтр покупателей, которые купили конкретный товар
Добрый день!
Сразу прошу прощения, если такая тема была, но я, к сожалению не нашел.
Задача:
Есть BROWSE c товаром. При выборе конкретного товара должен открываться BROWSE с покупателями (не важно в новом окне или во вкладке TAB), в котором из общей базы отображаются только те покупатели, которые купили этот товар.
Среда С10, шаблоны АВС.
Скорее всего задача просто решается, но только начинаю осваивать АВС и с10.
Заранее спасибо.
			
			
									
						Сразу прошу прощения, если такая тема была, но я, к сожалению не нашел.
Задача:
Есть BROWSE c товаром. При выборе конкретного товара должен открываться BROWSE с покупателями (не важно в новом окне или во вкладке TAB), в котором из общей базы отображаются только те покупатели, которые купили этот товар.
Среда С10, шаблоны АВС.
Скорее всего задача просто решается, но только начинаю осваивать АВС и с10.
Заранее спасибо.
Фильтр покупателей, которые купили конкретный товар
А БД какая? Если SQL, то проще:
Можно ещё найти метод ValidateRecord и там устроить проверку - 
Да, после выбора товара надо перерисовать Browse - что-то типа Brw1.ResetQueue(Reset:Queue) 
			
			
									
						Код: Выделить всё
 View{Prop:SQLFilter} = ' Код покупателя in (select кодпокупателя from покупки where кодтовара=тотсамый) 'Код: Выделить всё
IF данный покупатель не покупал товар 
    Return Record:Filtered 
END 
- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Фильтр покупателей, которые купили конкретный товар
В шаблоне Browse на первой вкладке либо установить поле в Range Limit Field, либо написать фильтр в Record Filter.
			
			
									
						С уважением, ДП
			
						Фильтр покупателей, которые купили конкретный товар
Дед Пахом, 
А как написать фильтр, я же должен последовательно прочитать файл с товаром?
			
			
									
						А как написать фильтр, я же должен последовательно прочитать файл с товаром?
Фильтр покупателей, которые купили конкретный товар
Извините - не с товаром, а с продажами. Ведь там "завязываются" товар-покупатель
			
			
									
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Фильтр покупателей, которые купили конкретный товар
Когда запись товара выбрана стрелкой или мышью, поля файла заполнены данными. Фильтр примерно такой: CUS:ProductID = PRO:ID. Где CUS:ProductID - код товара в файле покупателей, PRO:ID - код товара в файле товаров.
			
			
									
						С уважением, ДП
			
						- Игорь Столяров
 - Ветеран движения
 - Сообщения: 8269
 - Зарегистрирован: 07 Июль 2005, 10:19
 - Откуда: г. Ростов-на-ДоМу
 - Благодарил (а): 34 раза
 - Поблагодарили: 106 раз
 
Фильтр покупателей, которые купили конкретный товар
Если БД не SQL, то придется делать обработку с запросом и показывать ее результат в отдельном окне (или списке).
Один покупатель может несколько раз покупать выбранный товар, и просто отфильтровать список продаж и
исключить из него повторы покупателей простым фильтром не получится (точнее можно, но излишне сложно).
За теми, кто отстал, не возвращаться ! 
 Кодекс
			
						Фильтр покупателей, которые купили конкретный товар
Решил воспользоваться советом Yufil, 
Коллеги, насколько оптимален следующий код в методе ValidateRecord?
			
			
									
						Коллеги, насколько оптимален следующий код в методе ValidateRecord?
Код: Выделить всё
ReturnValue = Record:Filtered 
SAL:ID=PRO:ID ! Продажи группирую по выбранному товару
SET(SAL:IDKey,SAL:IDKey)
LOOP UNTIL(EOF(SALE))
    Access:SALE.Next()
      IF ~(SAL:ID=PRO:ID) THEN BREAK END
      IF (SAL:ContractorID = CON:ContractorID) THEN
          ReturnValue = Record:OK    ! Вывожу     CON:ContractorID и CON:Name
          BREAK
      END
END
Фильтр покупателей, которые купили конкретный товар
Совсем не оптимален.  Если есть индекс по товару и покупателю, им и надо пользоваться, а если нет-завести (например, продукт+покупатель+датапродажи), тогда и цикла не надо... 
Тогда
А в исходном варианте:
- перед SAL:ID = PRO:ID надо почистить запись CLEAR(Sal:Record), даже если других полей в индексе нету, просто выработать привычку
- EOF не стоит использовать без крайней необходимости, на самом деле Access:Sale.Next() возвращает Level:BenIgn (=0), если удалось прочитать запись, и не равен 0 в противном случае, поэтому так
LOOP WHILE ~Access:SALE.Next() AND Sal:ID=Pro:ID
...
END
- Не вижу Record:Filtered, должно быть где-то в конце
			
			
									
						Тогда
Код: Выделить всё
CLEAR(SAL:RECORD) 
SAL:ID = PRO:ID 
SAL:ContractorID = Con:ContractorID 
SET(SAL:PROD_Contractor_Date, SAL:PROD_Contractor_Date) 
IF Access:Sale.Next() OR ~( SAL:ID = PRO:ID AND SAL:ContractorID = Con:ContractorID) 
    Return(Record:Filtered)
END 
- перед SAL:ID = PRO:ID надо почистить запись CLEAR(Sal:Record), даже если других полей в индексе нету, просто выработать привычку
- EOF не стоит использовать без крайней необходимости, на самом деле Access:Sale.Next() возвращает Level:BenIgn (=0), если удалось прочитать запись, и не равен 0 в противном случае, поэтому так
LOOP WHILE ~Access:SALE.Next() AND Sal:ID=Pro:ID
...
END
- Не вижу Record:Filtered, должно быть где-то в конце
Фильтр покупателей, которые купили конкретный товар
Yufil, Огромное спасибо за конструктивные замечания.
Один уточняющий вопрос: Вы имели ввиду все-таки INDEX или KEY
Еще раз спасибо Юрий.
			
			
									
						Эта запись у меня в начале просто в конце не хватало Return ReturnValue.
Один уточняющий вопрос: Вы имели ввиду все-таки INDEX или KEY
?
Еще раз спасибо Юрий.
