Версия для печати темы (https://pro1c.org.ua/index.php?s=0ba1eebeb3e0228492cb504dd4d4e1ef&showtopic=33556)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ УПП 8.2 Запрос В Иерархии

Автор: alexandr_f 29.11.16, 11:06

УПП 8.2
Есть справочник спецодежды - наименование, табличная часть ДолжностиОрганизаций.
Но для некоторых позиций ТЧ нужно сделать отбор только отдельным подразделениям.
Сделал в ТЧ ссылку на справочник СИЗТребования с ТЧ Подразделения.
Вся проблема оказалась в том что Справочник Подразделений иерархический.
Мне надо выбрать все подразделения соответствующие ТЧ СИЗТребования с сохраниением ссылки на нее


ВЫБРАТЬ
    СотрудникиОрганизаций.ТекущаяДолжностьОрганизации КАК ТекущаяДолжностьОрганизации,
    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации КАК ТекущееПодразделениеОрганизации
ИЗ
    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
ГДЕ
    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации В ИЕРАРХИИ
            (ВЫБРАТЬ
                СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций
            ИЗ
                Справочник.СИЗСпецУсловия.Подразделения КАК СИЗСпецУсловияПодразделения)

УПОРЯДОЧИТЬ ПО
    ТекущееПодразделениеОрганизации,
    ТекущаяДолжностьОрганизации



В этом случае теряется СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций
КАК мне ее вытащить. По что в подзапросе

Автор: sava1 29.11.16, 11:10

А по-человечески объяснить - что надо получить?

Автор: alexandr_f 29.11.16, 11:17

sava1 @ Сегодня, 11:10 * ,

Мне надо вытащить значение из подзапроса
ВЫБРАТЬ
                СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций
            ИЗ
                Справочник.СИЗСпецУсловия.Подразделения КАК СИЗСпецУсловияПодразделения

ИЗСпецУсловияПодразделения.ПодразделенияОрганизаций - которое и совпало с СотрудникиОрганизаций.ТекущееПодразделениеОрганизации
Может надо как-то его переделать.
Просто по этой ссылке мне потом связывать дальше

Автор: sava1 29.11.16, 12:18

Цитата(alexandr_f @ 29.11.16, 11:06) *
ВЫБРАТЬ     СотрудникиОрганизаций.ТекущаяДолжностьОрганизации КАК ТекущаяДолжностьОрганизации, 
    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации КАК ТекущееПодразделениеОрганизации
    ИЗ     Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций

   ЛЕВОЕ СОЕДИНЕНИЕ (
         ВЫБРАТЬ   СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций,
                              // тут еще что-то
             ИЗ                 Справочник.СИЗСпецУсловия.Подразделения КАК СИЗСпецУсловияПодразделения
         ) как Табл ПО Табл.ПодразделенияОрганизаций = СотрудникиОрганизаций.ТекущееПодразделениеОрганизации

Автор: Vladal 29.11.16, 13:51

Вот не надо так делать - соединять с подзапросом:

ЛЕВОЕ СОЕДИНЕНИЕ (

         ВЫБРАТЬ   СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций,
                              // тут еще что-то
             ИЗ                 Справочник.СИЗСпецУсловия.Подразделения КАК СИЗСпецУсловияПодразделения
         ) как Табл ПО Табл.ПодразделенияОрганизаций = СотрудникиОрганизаций.ТекущееПодразделениеОрганизации


Надо, наверно, сделать так?
ВЫБРАТЬ
    СотрудникиОрганизаций.ТекущаяДолжностьОрганизации КАК ТекущаяДолжностьОрганизации,
    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации КАК ТекущееПодразделениеОрганизации,
    СИЗСпецУсловияПодразделения.*

ИЗ
    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    левое соединение Справочник.СИЗСпецУсловия.Подразделения КАК СИЗСпецУсловияПодразделения
        по СИЗСпецУсловияПодразделения.ПодразделенияОрганизаций = СотрудникиОрганизаций.ТекущееПодразделениеОрганизации
И получится табличка с колонками

ТекущаяДолжностьОрганизации, ТекущееПодразделениеОрганизации, и еще что-то , что можно вытянуть из таблицы Справочник.СИЗСпецУсловия. Если поместить этот запрос в конструктор запросов, то он вместо звездочки вытянет все поля и на вкладке ОбъединенияПсевдонимы можно посмотреть их имена.

Автор: sava1 29.11.16, 14:02

Цитата(Vladal @ 29.11.16, 13:51) *
Вот не надо так делать - соединять с подзапросом:

А откуда Вы знаете ЧТО и КАК будет выбираться из того справочника ?

Автор: alexandr_f 29.11.16, 15:11

Все дело в иерархии. Если ссылки на подразделения совпадают (это если есть подчиненние подразделения) , то все хорошо , а если нет то и ссылки на СИЗСпецУсловияПодразделения я не получаю. Хуже всего я не понимаю как получить именно из ТЧ СИЗСпецУсловияПодразделения ТЧ со всеми подчиненными подразделениями

Запрос = Новый запрос;

Запрос.Текст =

"ВЫБРАТЬ
|    СотрудникиОрганизаций.Ссылка
|ИЗ
|    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
|    СотрудникиОрганизаций.ПодразделениеОрганизации В ИЕРАРХИИ(&Подразделения)";
Запрос.УстановитьПараметр("Подразделения",Подразделение);
alexandr_f @ Сегодня, 14:49 * ,
Где Параметр ТЧ -выборка, а не значение

Автор: Vladal 29.11.16, 16:40

Цитата(sava1 @ 29.11.16, 14:02) *
А откуда Вы знаете ЧТО и КАК будет выбираться из того справочника ?
sava1 @ Сегодня, 14:02 * , я не понял Ваш вопрос ко мне, про что и как будет выбираться из справочника, но есть рекомендация http://pro1c.org.ua/redirect.php?http://its.1c.ru/db/metod8dev#content:5842:hdoc:subquery_join:
Цитата
Cоединения с подзапросами

Рекомендации
При написании запросов не следует использовать соединения с подзапросами. Следует соединять друг с другом только объекты метаданных или временные таблицы. Если запрос использует соединения с подзапросами, то его следует переписать с использованием временных таблиц.

Если запрос содержит соединения с подзапросами, то это может привести к следующим негативным последствиям:

  • Крайне медленное выполнение запроса при слабой загрузке серверного оборудования. Замедление запроса может быть очень значительным (до нескольких порядков).
  • Нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других - очень медленно.
  • Значительная разница по времени выполнения запроса на разных СУБД.
  • Повышенная чувствительность запроса к актуальности и полноте статистик. Сразу после http://pro1c.org.ua/redirect.php?http://its.1c.ru/db/content/metod8dev/src/developers/scalability/instructions/i8105837.htm?_=1479719295 запрос может работать быстро, но через некоторое время опять замедлиться.
Пример потенциально опасного запроса, использующего соединение с подзапросом:

ВЫБРАТЬ ...
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (
   ВЫБРАТЬ ИЗ РегистрСведений.Лимиты
   ГДЕ ...
   СГРУППИРОВАТЬ ПО ...
) ПО ...

и далее по тексту.

Я предложил запрос, в котором будут видны все поля, необходимые для ответа на вопрос в этой теме.
Предостерег от ошибки использвоания подзапроса в левом соединении.

Теперь давайте Вы выволните мой запрос в консоли запросов и скажете, все ли нужные данные теперь показаны и что еще хотелось бы увидеть?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua