Фильтр покупателей, которые купили конкретный товар
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию 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
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Фильтр покупателей, которые купили конкретный товар
В шаблоне Browse на первой вкладке либо установить поле в Range Limit Field, либо написать фильтр в Record Filter.
С уважением, ДП
Фильтр покупателей, которые купили конкретный товар
Дед Пахом,
А как написать фильтр, я же должен последовательно прочитать файл с товаром?
А как написать фильтр, я же должен последовательно прочитать файл с товаром?
Фильтр покупателей, которые купили конкретный товар
Извините - не с товаром, а с продажами. Ведь там "завязываются" товар-покупатель
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Фильтр покупателей, которые купили конкретный товар
Когда запись товара выбрана стрелкой или мышью, поля файла заполнены данными. Фильтр примерно такой: CUS:ProductID = PRO:ID. Где CUS:ProductID - код товара в файле покупателей, PRO:ID - код товара в файле товаров.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7384
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
Фильтр покупателей, которые купили конкретный товар
Если БД не 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
?
Еще раз спасибо Юрий.