Дано:
Справочник: Фрукты (двухуровневый).
Группа: Яблоки. Элементы: Зеленые, Желтые, Красные;
Группа: Груши. Элементы: Большие, Спелые, Крупные;
Справочник: Партии (одноуровневый).
Фрукты, Страна.
Во втором справочнике есть две записи:
Яблоки, Турция
Груши, Аргентина
Надо запросом получить Страну, имея элемент справочника Фрукты

ВЫБРАТЬ
 Партии.Страна
ИЗ
 Справочник.Партии КАК Партии
ГДЕ
 &Фрукт В ИЕРАРХИИ (Партии.Фрукты) //Понятно что так нельзя ))

...

пФрукт = Справочники.Фрукты.Зеленые;
Запрос.УстановитьПараметр("Фрукт",пФрукт);

Должны получить Турцию, но как?
---
Win98, а принципиально надо передавать в запрос сам фрукт? тогда

```1c
    "Выбрать
    |Партии.Страна
    |Фрукты.Родитель
    |ИЗ
    |Справочник.Партии КАК Партии
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    |Справочник.Фрукты КАК Фрукты
    |ПО Партии.Фрукты = Фрукты.Родитель
    |ГДЕ
    |Фрукты.Ссылка = &Фрукт";
```

так как-то
---
Win98,
Если такие простые справочники, то используй родителя

ВЫБРАТЬ
Партии.Страна
ИЗ
Справочник.Партии КАК Партии
ГДЕ
 Партии.Фрукты=&РодительФрукта

пФрукт = Справочники.Фрукты.Зеленые.Родитель;
Запрос.УстановитьПараметр("РодительФрукта",пФрукт);
---
Или соединением таблиц

Но условие точно должно быть более общее:
Партии.Фрукты = Фрукты.Ссылка или Фрукты.Ссылка В ИЕРАРХИИ (Партии.Фрукты)
---
Win98, кстати, с такми справочником партии непонятно, какая партия на самом деле пришла ))
---
Win98, это что за конструкция такая ? Впервые вижу, чтобы учет партий был организован в справочнике 8)
И как предполагается использование ? Новая партия, это последний элемент справочника, который при списании партии удаляется ?
В запросе, в принципе можно выбирать первый элемент выборки, естественно упорядочив при этом в нужном направлении
Типа того
Выбрать Первые 1
бла бла бла
где
Партии.Фрукты = &Фрукт

А вообще, регистр накопления нуно юзать
---
Win98, ЭЭЭ судя по постановке задачи должно быть так

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    ГДЕ
    Партии.Фрукты = &Фрукт
```

В чем затык ???? Похоже на задачку для собеседования.
---
Win98, тьфу тьфу меня за предыдущий пост (9) невнимательно прочел !!! - от тебя походу вот такое левое соединение хотят

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    Левое Соединение Справочник.Номенклатура Как Номенклатура
    По Партии.Фрукты = Номенклатура.Родитель И Номенклатура.Ссылка = &Фрукт
```
---
Восьмой, не взлетело, в выборку попадает все
---
Win98, , а из 38 поста (38) Восьмой, ???
---
Bukaska, так не работает с непредопределенными элементами
Там "Справочник.Номенклатура.Зеленый" а у меня "&Фрукт" :(

Или я что-то не понимаю?
---
Win98,
```1c
    "Выбрать
    |Партии.Страна
    |ИЗ
    |Справочник.Партии КАК Партии
    |ГДЕ
    |Партии.Фрукты = &Фрукт";

    пФрукт = Справочники.Фрукты.Зеленые;
    Запрос.УстановитьПараметр("Фрукт",пФрукт[Родитель]);
```
---
jigourt, &Фрукт это собственно сам фрукт, а не его родитель, в запрос мы передаем именно Фрукт.
а так, по-моему, аналогично (2)
---
Win98, а принципиально надо передавать в запрос сам фрукт? тогда

```1c
    "Выбрать
    |Партии.Страна
    |Фрукты.Родитель
    |ИЗ
    |Справочник.Партии КАК Партии
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    |Справочник.Фрукты КАК Фрукты
    |ПО Партии.Фрукты = Фрукты.Родитель
    |ГДЕ
    |Фрукты.Ссылка = &Фрукт";
```

так как-то
---
Win98, Реально не понимаешь или невнимательно читаешь пост.
Нужно передавать фрукт именно параметром? пожалуйста:

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    ГДЕ
    Партии.Номенклатура = ВЫРАЗИТЬ(&Фрукт КАК Справочник.Номенклатура).Родитель
```

Можно передать родителя фрукта? пожалуйста:

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    ГДЕ
    Партии.Номенклатура = &Фрукт
```

Нужно сделать через вложенный запрос для получения родителя и связать внутренним соединением? пожалуйста:

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии Внутреннее Соединение
    (ВЫБРАТЬ
    Номенклатура.Родитель КАК Родитель
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка = &Фрукт) КАК РодительФрукта
    ПО Партии.Номенклатура = РодительФрукта.Родитель
```

нужно сделать тоже самое без внутреннего соединение но через вложенный запрос в условии? пожалуйста:

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    ГДЕ
    Партии.Номенклатура В
    (ВЫБРАТЬ
    Номенклатура.Родитель
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.Ссылка = &Фрукт
    СГРУППИРОВАТЬ ПО
    Номенклатура.Родитель)
```

Тебе еще вариантов нарезать? В чем твоя проблема, а?
---
Восьмой, мне кажется стартмани отдавать не хочет просто )))
---
Win98, Предлагаю поделить вознаграждение между (84) Восьмой, и (83) jigourt,
---
Bukaska, да не в стартманях дело)) опять из мухи слона надуваем.
---
Bukaska, запросто, каждому по 10, ни вопрос. Как это технически сделать?
---
Win98, Только если вручную.. в одном посту добиваешь до 10 и отдаешь одному..
Потом не закрываю тему делаешь новый пост и добавляешь вознаграждение .. Пост отправится - вознаграждение будет опять в теме.. снова отдаешь второму
Только так.. одновременно не получится.. только вручную
---
Bukaska, если возражений нет, то сейчас так и поступлю.
---
а если в справочнике "неожиданно" возникнет такая ситуация:
Яблоки, Турция
Яблоки, Украина
Яблоки, Россия

то как должен отработать запрос?
---
puzakov, вернуть три записи
---
Win98, какой вариант в итоге выбрал?
---
tolyan_ekb, ни какого :( Или решения нет или я его не вижу :(

PS. [OFF] Извини, а "ekb" что означает? [/OFF]
---
Win98, мой чтоли тоже не работает? Что в результате?
ekb - сокращение ekaterinburg
---
tolyan_ekb, а я думал екарныйбабай)))))))))))) сори за флуд)
---
tolyan_ekb, [OFF]а я надеялся "гребаный Экибастуз"[/OFF]
---
Win98, А если будет Никнейм_СПб? То как СПб расценишь? Спасите-Помогите бла-бла)))
---
Win98, короче если задача звучала так как написанно в посте и по тем условиям то запросик должен быть таким

```1c
    ВЫБРАТЬ
    Партии.Страна
    ИЗ
    Справочник.Партии КАК Партии
    ГДЕ
    Партии.Номенклатура = ВЫРАЗИТЬ(ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый) КАК Справочник.Номенклатура).Родитель
```
---
Восьмой, Я честно скажу.. я бы составила запрос как в (2) tolyan_ekb,
Но не догадалась бы я юзать оператора ВЫРАЗИТЬ в ветке ГДЕ..
Признаю свою слабость)))
---
Bukaska, лови +1 ) оператор Выразить - весчь весьма полезная))
---
Восьмой, да.. Но я его употребляю обычно не в ветке ГДЕ,
а в полях регистратора..
Когда делаю запрос к регистру.. вот там когда из документа регистратора надо тащить дату, номер и все такое, тогда я его и использую..
В основном, если выбранные поля имеют обращение более чем через одну запятую, тогда я его и пользую..
А тут именно ветка ГДЕ такая длинная получилась_))))
---
И для чего там ВЫРАЗИТЬ если поле не составного типа? И где сказано, что Зеленый, это предопределенный элемент?
---
хотя про предопределенный увидел, но про ВЫРАЗИТЬ вопрос остался
---
adva, По любому нужен оператор ВЫРАЗИТЬ, иначе будет куча левых соединений с справочником номенклатура, а там может таблица с всеми цветами радуги, когда нужен только зеленый...
Не.. ИМХО, ВЫРАЗИТЬ надо чтобы не было запроса в цикле, если обращение более чем через одну точку по полям)))
---
Bukaska, Для явного указания запросу таблицы из которой нужно брать данные либо для форматирования примитивных типов!
---
adva, я вам более скажу что через выразить можно обращаться к полям параметров запроса ссылочного типа т.е.
конструкция в запросе

```1c
    ВЫРАЗИТЬ(&Параметр КАК Справочник.Номенклатура).Родитель КАК Поле1
    ВЫРАЗИТЬ(&Параметр1 КАК Справочник.Номенклатура).Наименование КАК Поле2
```
 имеет право на жизнь вполне.
---
да, спасибо, смысл уловил, сам иногда делаю приведение, когда исползуются виртуальные таблицы из другого Запрос.Выполнить() (когда через точку обращаешься, постоянно ругается, что типа нету, такого реквизита, а с ВЫРАЗИТЬ все ОК)
---
+ (52) кстати, не поинмаю, почему в этом случае, конструктор запроса сам не делает приведение типа (когда явно указываешь тип в параметрах полей виртуальной таблицы)
---
adva, Ну потому что БОРИС НУРАЛИЕВ - цитирую "САМ НА 1С НЕ ПРОГРАММИРУЮ, О ЧЕМ СОЖАЛЕЮ".
---
adva, Внимательно читайте задание в (1), а выразить нужно для того чтобы явно указать таблицу из которой я беру значение т.е. конструкция ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый).Родитель - ТУПО не взлетит - вам лень поэксперементировать коллега?)
---
ВЫРАЗИТЬ, всё-таки лишнееконструкция ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый).Родитель - ТУПО не взлетит, а конструкция (ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый)).Родитель вполне себе взлетит. По поводу параметров тоже сомнительный способ, честно говоря - лучше сразу в параметр передавать значение реквизита, а не получать через точку, чтобы избежать лишнего соединения.
---
saiten, Бро плюсану +1, такой вариант вижу в первые)
---
saiten, Не совсем соображу.. а в чем разница: Скобки или без скобок?
---
Bukaska, типа сначала получаем значение а потом лезем в поля. просто я как понял без скобок система видит это как целый оператор "Значение" и падает в ошибку а со скобками сначала значение а потом уже все остальное. Короче saiten-у плюс однозначно
---
Восьмой, То есть вместо:

```1c
    ...
    ГДЕ
    Партии.Номенклатура = ВЫРАЗИТЬ(ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый) КАК Справочник.Номенклатура).Родитель
```

Полетит вполне:

```1c
    ...
    ГДЕ
    Партии.Номенклатура = (ЗНАЧЕНИЕ(Справочник.Номенклатура.Зеленый)).Родитель
```

???
---
saiten, это работает даже не для предопределенных значений?
---
tolyan_ekb, только для предопределенных
---
Не понял вопроса.
---
saiten, По поводу параметров - тут скорее будет подзапрос Вида

```1c
    Выбрать Справочник.Номенклатура.Родитель где Справочник.Номенклатура.Ссылка = &Параметр
```

а не соединение.
---
Восьмой, Не получен ответ (63) tolyan_ekb,
---
Bukaska, смотри в (64) - катит только для предопределенных
---
Восьмой, Именно в одиночке конструкция ЗНАЧЕНИЕ = катит только для предопределенных?
А ВЫРАЗИТЬ(ЗНАЧЕНИЕ) = для всех?
Просто не совсем врубаюсь_)))
---
Bukaska, да.
---
Может быть, я не в курсе как 1с разыменование в запросах делает...
---
Может так:

```1c
    ВЫБРАТЬ
    ВсеФрукты.Ссылка КАК Фрукт,
    Партии.Страна
    ИЗ
    Справочник.Фрукты КАК ВсеФрукты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партии КАК Партии
    ПО ВсеФрукты.Родитель = Партии.Фрукты
    ГДЕ
    ВсеФрукты.Ссылка = &Ссылка
```
---
Правильный запрос в (5), возможно там исходя из условий задачи, надо не левое, а внутреннее соединение. Но вообще да, задача очень странная
---
adva, не взлетело :(
---
Моветон использовать группы для хранения чего либо..
---
```1c
    ВЫБРАТЬ
    Фрукты.Ссылка,
    Фрукты.Родитель КАК Родитель,
    Фрукты.Наименование
    ПОМЕСТИТЬ ВТФрукты
    ИЗ
    Справочник.Фрукты КАК Фрукты
    ГДЕ
    Фрукты.ЭтоГруппа = ЛОЖЬ

    ИНДЕКСИРОВАТЬ ПО
    Родитель
    ;

    ВЫБРАТЬ
    ВТФрукты.Ссылка,
    ВТФрукты.Родитель,
    ВТФрукты.Наименование,
    Партии.Страна
    ИЗ
    ВТФрукты КАК ВТФрукты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партии КАК Партии
    ПО ВТФрукты.Родитель = Партии.Фрукт
```

Как правильно заметил (7) пересмотрите свое отношение к хранению какой-либо информации в структуре справочников. Подумайте о регистрах, доп. реквизитах.
---
Регистр Накопления лучше юзать, или же регистр сведений(если просто хранить информацию) - тогда будет проще...
Тогда не нужно будет ГДЕ, а сразу всё указывать в параметрах виртуальной таблицы, и быстрее запрос будет
---
варианты решения уже есть, так что просто скажу, что изначально хранение данных неверно. то что в задаче группы, считаю, что должны быть свойства и характеристики номенклатуры
---
А свойства и характеристики хранятся в плане видов характеристик, а там подчинен ему либо справочник(Дополнительные свойства объектов), либо дополнительный регистр сведений.
---
Да походу чувака на собеседовании решили потестить))) мне как-то при одном собеседовании вообще задачу поставили написать запрос который из справочника читал остатки и обороты))))
---
Восьмой, написал?
---
tolyan_ekb, а то))) тока я то собеседование не прошел)))
---
Восьмой, видимо вы все-таки получили запрос который из справочника читал остатки и обороты)))) )))
---
odin777, Мда.. Получить из справочника остатки и обороты - это круто)) Меня научите))))
---
Bukaska, я не удивлюсь, что как-нибудь на ИС кто-нибудь спросит "а как добавить движения в справочнике при проведении документа?" )))
---
jigourt, Или как ввести данные о сотруднике вручную в регистр накопления,(подчиненный регистратору)
---
Bukaska, только завершу доработку своего учебного курса по 1С - "Нерельное программирование в 1С". По поводу моего сообщения (23) odin777, к посту (22) Восьмой, это была всего лишь шутка ))) ковычки(то бишь смайл) вроде должны были на это указывать.
---
odin777, мое 6-ое чувство подсказывает, что она тоже пошутила ))
(29) odin777, последнее это (28) или (29) ?? )))
---
jigourt, если вы решили спросить, то и (28) odin777, (29) odin777, и это в том числе, не относящееся к теме вопроса, скорее для раздела Лайф, думаю меня немного смутил после поста (24) Bukaska, ваш пост Bukaska, я не удивлюсь, что как-нибудь на ИС кто-нибудь спросит "а как добавить движения в справочнике при проведении документа поэтому и отписался в (27) odin777.
---
Bukaska, хотя если вы попросите об этом еще раз, постараюсь все таки Получить из справочника остатки и обороты, примерный код у меня в "голове" уже затаился! :)
---
Восьмой, бугагашки, выкупляют тупокодеров что ли? ))
---
Восьмой, это был провокационный вопрос ))
---
Восьмой, и что тут такого!? Обычный вопрос на знание управляемого интерфейса и работы с динамическим списком. В УТ 11, в спр. Номенклатура видны остатки товара, вот и нужно знать, как по-уму это делается.
---
DoctorRoza, не задача звучала именно так - "есть справочник ОстаткиОборотыНоменклатуры - именно справочник все технологические моменты мы не учитываем - поля справочника - Номенклатура - Склад - Дата операции - вид операции (перечисление приход/расход) - количество - сумма - нужно написать запрос который бы показывал остатки и обороты за произвольный период с возможность отбора по номенклатуре и склада - по возможности не использовать вложенные запросы и временные таблицы - написать запрос нужно было на бумаге от руки без использования конструктора и отводилось на задание час, проверялись навыки составления запросов.

Вобщем задачка легкая просто я тогда без конструктора с трудом составлял запросы и в начале еще чего-то троллить начал не в тему мол "да вы че этож ППЦ че за х...))" Короче в начале не подумал чутка и внимательно задание не прочел где все было четко сказано - ну и малость неадыкватно себя повел по неопытности)))) потом после собеседования посидел подумал решил через конструктор за 10 мин... понял что я еще молодой и зеленый)) и снова стал читать запретные желтые книги, щас уровень на порядок выше но один хрен я еще молодой и зеленый)))))))

З.Ы. Зп у ваканта была 150 на руки))) так что для тек кто считает что он мега крут можете поразвлечься и порешать эту задачку))) DoctorRoza - коллега если бы все было так просто)))))))))
---
Восьмой, Но в справочнике единственный ориентир - это вид операции.. только если на него ориентироваться на обороты.. Но все равно, кто остатки в справочнике считает...))))
---
Bukaska, Повторюсь проверялось знание составление запросов - какая разница откуда читать, есесно ориентиром были поля дата и вид операции))) - запрос тот же по сути что и у вирт таблицы оборотного регистра - просто система его за вас дописывает а тут нужно было показать что понимаешь че к чему и как эта хрень работает)))) ну и на адыкватность заодно прверили))))
---
Восьмой, Ну так.. дык-дык)))
---
Bukaska, Давай подруга покажи нам мастер класс чиркани запросик по этой задачке))))
---
Восьмой, В другой раз))) Тут слишком большая аудитория... Я ещё не привыкла)))
Был бы это регистр накопления, я была бы первая в очереди))))
---
Bukaska, Да ты не стесняйся всегда бывает все в первый раз))))
---
Мое последнее сообщение заставило вспомнить меня слово Флуд
---
Вот вы ржете, про движения и справочники.
А между тем в ЗиК 7.7 итоги хранились в справочниках.
---
KapasMordorov, а при чем тут 7? Или это намёк: Спуститесь с небес на землю?)))
---
KapasMordorov, если память мне не изменяет,
в ЗиК-7.7 в периодических реквизитах хранятся не Итоги как таковые
(для компоненты "Расчет" понятия итогов не сущестыует, есть понятие результат расчета)
а начальные данные по НДФЛ и прочая-прочая-прочая...
---
yuraos, Для меня модель 7.7 - это такой темный лес))))
Видала я там длинные строчки объектной модели запросов, повеситься можно)))
Разве что платформа более стабильная, по части типа: ошибка выполнения файловой операции... и все в том же духе..
---
Начальные данные - это начальные итоги какого-то периода.
Они же - конечные итоги предыдущего периода.
---
Интересно, автор собирается премировать лучший ответ?
---
tolyan_ekb, собирается, но к сожалению, у автора небольшой цейтнот :( за выходные обещаю все прочитать, понять и протестировать.
---
Win98, за выходные сумма еще уменьшится. Как собеседование прошло?
---
tolyan_ekb, нет ни какого собеседования, это реальная задача из жизни. Сумма уменьшится - я добавлю.
---
Второй приз.
А не прокатило, второй раз выдать не могу :(
Точнее, похоже что, просто увеличил начальную сумму
---
Странно это как-то, ведь предложенный вариант в (5) так же верен, или я ошибаюсь?
---
ну что Вы разоряетесь :)
---
Win98, Вы можете просто через сервис кошелька стартмани перечислить участнику.. если не катит дело в теме)))
---
Bukaska, ID это номер профайла?
---
Win98, да...