Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 мая 2024, 15:34

Помогите с построением запроса

Автор Игорь_M, 15 фев 2015, 00:11

0 Пользователей и 1 гость просматривают эту тему.

Игорь_M

Имеется справочник Полуфабрикаты , у него есть ТЧ ДочернПФ (тип СправочникСсылка.Полуфабрикаты). Нужно отобрать те Полуфабрикаты у которых реквизит у него самого и тех которые записаны в ТЧ ДочернПФ  удовлетворяет условию. Сделал конструктором такой запрос:
"ВЫБРАТЬ
| Полуфабрикаты.ДочернПФ.(
| ПФДоч.ФлагРаспределения,
| ПФДоч.МоментОкончания
| ),
| Полуфабрикаты.РабочийЦентр,
| Полуфабрикаты.Наименование,
| Полуфабрикаты.МоментОкончания,
| Полуфабрикаты.ФлагРаспределения
|ИЗ
| Справочник.Полуфабрикаты КАК Полуфабрикаты
|ГДЕ
| Полуфабрикаты.ФлагРаспределения = Истина
| И Полуфабрикаты.МоментОкончания <= &ВремяН
| И Полуфабрикаты.ДочернПФ.ПФДоч.МоментОкончания <= &ВремяН
| И Полуфабрикаты.ДочернПФ.ПФДоч.ФлагРаспределения = Истина ";

проблема в том что если в табличной части несколько записей, то этот запрос не обрабатывает их все, а только первую. И вторая проблема - если в ТЧ вообще нет записей, то этот Полуфабрикат тоже не попадает в выборку , а мне нужно чтобы попадал. Как такое соорудить?

TreeDogNight

Создай вложенный запрос, в котором в таблицах укажи тч этого документа. Установи все нужные условия во вложенном запросе, и вытащи помимо нужных полей, ссылку на документ этой ТЧ. Потом сделай левое соединение с самим документом по этой ссылке.
Cегодня не все могут провести завтрашним числом. Вернее, не только лишь все - мало кто может это сделать.

Игорь_M

Можно набросок кода какой-нибудь? что-то мозги закипают, а толку ноль(

TreeDogNight


    ВЫБРАТЬ
АвансовыйОтчет.Ссылка,
АвансовыйОтчет.Сотрудник,
ВложенныйЗапрос.Контрагент,
ВложенныйЗапрос.ДоговорКонтрагента,
ВложенныйЗапрос.Сумма
ИЗ
Документ.АвансовыйОтчет КАК АвансовыйОтчет
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
АвансовыйОтчетОплатаПоставщикам.Ссылка КАК Ссылка,
АвансовыйОтчетОплатаПоставщикам.Контрагент КАК Контрагент,
АвансовыйОтчетОплатаПоставщикам.ДоговорКонтрагента КАК ДоговорКонтрагента,
АвансовыйОтчетОплатаПоставщикам.Сумма КАК Сумма
ИЗ
Документ.АвансовыйОтчет.ОплатаПоставщикам КАК АвансовыйОтчетОплатаПоставщикам
ГДЕ
АвансовыйОтчетОплатаПоставщикам.Сумма > 0) КАК ВложенныйЗапрос
ПО АвансовыйОтчет.Ссылка = ВложенныйЗапрос.Ссылка
ГДЕ
АвансовыйОтчет.ВалютаДокумента = &ВалютаДокумента
Cегодня не все могут провести завтрашним числом. Вернее, не только лишь все - мало кто может это сделать.

LexaK

прежде чем решать какую-то задачу, необходимо правильно сформулировать ее описание/постановку

в начале вы пишите
ЦитироватьНужно отобрать те Полуфабрикаты у которых реквизит у него самого и тех которые записаны в ТЧ ДочернПФ 

где условие: ... у него самого ИИИИ(!) тех которые 
для этого ИИИИ вы и написали правильный запрос

а в результате вы хотите видеть результат через   ИЛИ
или сам элемент удовлетворяет условиям или элемент из табличной части должен удовлетворять условиям.

т.е. ваша постановка должна звучать примерно так
Нужно отобрать те Полуфабрикаты у которых реквизит у него самого ИЛИ тех которые записаны в ТЧ ДочернПФ 

сделайте запрос для такой постановки, и получите требуемый результат!

(подсказка в вашем запросе в условии разобраться с ИИИИ )



если помогло нажмите: Спасибо!

Игорь_M

Чего-то я , наверное, не правильно излагаю постановку задачи. Вариант TreeDogNight выдает что-то совсем из другой оперы. Попробовал еще вот так :" ВЫБРАТЬ
| СсылкаДоч.Ссылка,
    | СсылкаДоч.РабочийЦентр,
| СсылкаДоч.Наименование КАК Наименование,
| СсылкаДоч.МоментОкончания,
| СсылкаДоч.ФлагРаспределения
|ИЗ
    |    (ВЫБРАТЬ
    |        ДочернПФ.Ссылка КАК СсылкаДоч,
    |        ДочернПФ.ПФДоч.МоментОкончания КАК МоментОкончанияДоч,
    |        ДочернПФ.ПФДоч.ФлагРаспределения КАК ФлагРаспредДоч
    |    ИЗ
    |        Справочник.Полуфабрикаты.ДочернПФ КАК  ДочернПФ
    |    ГДЕ
    |        ДочернПФ.ПФДоч.МоментОкончания <= &ВремяН) КАК ВложенныйЗапрос
|ГДЕ
    | СсылкаДоч.МоментОкончания <= &ВремяН";


проблема та же что и при варианте запроса из поста1  - из табличной части проверяется на условие <ДочернПФ.ПФДоч.МоментОкончания <= &ВремяН> только первая запись ((

Попробую еще раз объяснить что мне нужно ...
Есть справочник Полуфабрикаты , в элементе этого справочника есть реквизит МоментОкончания и есть табл.часть ДочернПФ где реквизит ДочернПФ.ПФДоч - это СправочникСсылка.Полуфабрикаты. Мне нужно выбрать те Полуфабрикаты, у которых 
1.Полуфабрикаты.МоментОкончания<=ВремяН
2 Для Каждого стр Из Полуфабрикат.ДочернПФ
   стр.ПФДоч.МоментОкончания<=ВремяН

temrmal

если правильно понял задание, то мудрите как-то

Выбрать СпрПолуфабрикатыДочернПФ.Ссылка КАК ОСНОВНОЙПФ,
        СпрПолуфабрикатыДочернПФ.ПФДоч КАК ДочернийПФ
ИЗ Справочник.Полуфабрикаты.ДочернПФ КАК СпрПолуфабрикатыДочернПФ

ГДЕ СпрПолуфабрикатыДочернПФ.Ссылка.МоментОкончания <= &ВремяН
И СпрПолуфабрикатыДочернПФ.ПФДоч.МоментОкончания <= &ВремяН
ИТОГИ ПО ОСНОВНОЙПФ,ДочернийПФ

(можно и без итогов. Все зависит от желаемого конечного результата)

Потом обход результата по группировкам
(с синтаксисом проверка нужна, писал прямо здесь) т.е. срабатывают два условия по времени на ссылку, и на пф в в табличной части данной ссылки


Игорь_M


Стала картина проясняться ...

Дело в том, что в выборке не реализовано условие ЕСЛИ Для Каждого стр Из Полуфабрикат.ДочернПФ  стр.ПФДоч.МоментОкончания<=ВремяН Тогда Полуфабрикат , имеющий ТЧ ДочернПФ попадает в выборку.  Как это реализовать?

temrmal

Так, давай по-русски

1. Выбираем ПолуфабрикатыССЫЛКИ где моментокончания<=ВремяН. Так?
2. Из табличной части ДочернПФ ЭТИХ ПолуфабрикатыССЫЛКИ выбираем ДочернПФ.ПФДоч где ДочернПФ.ПФДоч.моментокончания<=ВремяН? ТАК?
3 В результате нужно получить просто перечень ПолуфабрикатыССЫЛКИ и ДочернПФ.ПФДоч с заданным условием ОДНИМ СПИСКОМ? или в структуре? (Ссылка а под ней ссылки ьабличной части)?

Игорь_M

Цитата: temrmal от 16 фев 2015, 23:27
Так, давай по-русски

1. Выбираем ПолуфабрикатыССЫЛКИ где моментокончания<=ВремяН. Так?
2. Из табличной части ДочернПФ ЭТИХ ПолуфабрикатыССЫЛКИ выбираем ДочернПФ.ПФДоч где ДочернПФ.ПФДоч.моментокончания<=ВремяН? ТАК?
3 В результате нужно получить просто перечень ПолуфабрикатыССЫЛКИ и ДочернПФ.ПФДоч с заданным условием ОДНИМ СПИСКОМ? или в структуре? (Ссылка а под ней ссылки ьабличной части)?
3. только перечень ПолуфабрикатыССЫЛКИ списком, для которых 1=Истина и 2=Истина для каждой строки ДочернПФ

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск