Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
21 Сен 2017, 13:39
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: УТ 10.3 - СКД - Левое соединение  (Прочитано 878 раз)

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

Онлайн AIFrame

  • ***
  • Сообщений: 208
  • РЕПУТАЦИЯ: 27
  • КПД: 13%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
Запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Спр.Ссылка КАК Номенклатура,
Спр.ОтветственныйМенеджерЗаПокупки КАК ОтветственныйЗаПокупки,
Спр.Производитель КАК Производитель,
Спр.НомерГТД КАК ГТД,
Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору КАК ЕХО,
Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору КАК ЕДО,
Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О,
ЗСО.Значение КАК Сертификат
{ВЫБРАТЬ
Номенклатура.*,
ОтветственныйЗаПокупки.*,
Производитель.*,
ГТД.*,
ЕХО.*,
ЕХО_К,
ЕХО_О,
ЕДО.*,
ЕДО_К,
ЕДО_О,
Сертификат.*}
ИЗ
Справочник.Номенклатура КАК Спр
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
ПО Спр.Ссылка = ЗСО.Объект.Ссылка}
ГДЕ
ЗСО.Свойство = &ЭтоСертификат
И Спр.ВидНоменклатуры В(&ВидНоменклатуры)
И ЗСО.Объект.ВидНоменклатуры В(&ВидНоменклатуры)
{ГДЕ
Спр.Ссылка.* КАК Номенклатура,
Спр.ОтветственныйМенеджерЗаПокупки.* КАК ОтветственныйЗаПокупки,
Спр.Производитель.*,
Спр.НомерГТД.* КАК ГТД,
Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.* КАК ЕХО,
Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору.* КАК ЕДО,
Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О,
ЗСО.Значение.* КАК Сертификат}
Подразумевается, что, согласно отбору, вывалится вся номенклатура из справочника и левым соединением допишется полем "Сертификат". На деле же я получаю только те позиции справочника, которым есть соответствие в таблице ЗСО (Значение Свойств Объекта).
В обычном запросе оно работает как надо, а вот в СКД так. В чем может быть причина?
Выводить Сертификат через ВЫБОР КОГДА?


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Что в запросе, что в СКД по этому вопросу работает одинаково. Секция "Где" всегда накладывает огрничение на уже сформированную таблицу с данными. У вас выбираются все данные в таблицу, потом на эту общую таблицу накладывается отбор из секции "Где", что естественно приводит к тому что в итоге остаются только записи, удовлетворяющие условиям.
Вам нужно внутренним запросом выбрать ваши сертификаты, там же во внутреннем запросе отсечь ненужные и только после этого цеплять левым соединением к основному запросу.

Онлайн AIFrame

  • ***
  • Сообщений: 208
  • РЕПУТАЦИЯ: 27
  • КПД: 13%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
Вам нужно внутренним запросом выбрать ваши сертификаты, там же во внутреннем запросе отсечь ненужные и только после этого цеплять левым соединением к основному запросу.
Только вы это написали, как я осознал свой косяк.
Спасибо.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Спр.Ссылка КАК Номенклатура,
Спр.ОтветственныйМенеджерЗаПокупки КАК ОтветственныйЗаПокупки,
Спр.Производитель КАК Производитель,
Спр.НомерГТД КАК ГТД,
Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору КАК ЕХО,
Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору КАК ЕДО,
Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О,
ЗСО.Сертификат
{ВЫБРАТЬ
Номенклатура.*,
ОтветственныйЗаПокупки.*,
Производитель.*,
ГТД.*,
ЕХО.*,
ЕХО_К,
ЕХО_О,
ЕДО.*,
ЕДО_К,
ЕДО_О}
ИЗ
Справочник.Номенклатура КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект.Ссылка КАК Связь,
ЗначенияСвойствОбъектов.Значение КАК Сертификат
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Свойство = &ЭтоСертификат
И ЗначенияСвойствОбъектов.Объект.ВидНоменклатуры = &ВидНоменклатуры) КАК ЗСО
ПО Спр.Ссылка = ЗСО.Связь
ГДЕ
Спр.ВидНоменклатуры В(&ВидНоменклатуры)
{ГДЕ
Спр.Ссылка.* КАК Номенклатура,
Спр.ОтветственныйМенеджерЗаПокупки.* КАК ОтветственныйЗаПокупки,
Спр.Производитель.*,
Спр.НомерГТД.* КАК ГТД,
Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.* КАК ЕХО,
Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору.* КАК ЕДО,
Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О}

Оффлайн LexaK

  • *****
  • Сообщений: 1254
  • РЕПУТАЦИЯ: 345
  • КПД: 28%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
м-м-м-да,
рассмотрим ваш первый запрос
1.настойчиво не рекомендуется к реквизиту обращаться через ссылку
ваш код
   Справочник.Номенклатура КАК Спр
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
        ПО Спр.Ссылка = ЗСО.Объект.Ссылка}

будет правильнее
   Справочник.Номенклатура КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
   ПО Спр.Ссылка = ЗСО.Объект

2. Если вы какие-то объекты сопраягли по ссылке, т.е. Ссылка1 = Ссылка2
то это значит что и все остальные данные в этих объектах так-же равны, и не надо два раза проверять одно и тоже значение
ваш код
   ЗСО.Свойство = &ЭтоСертификат
    И Спр.ВидНоменклатуры В(&ВидНоменклатуры)
    //И ЗСО.Объект.ВидНоменклатуры В(&ВидНоменклатуры) <- такая проверка абсолютно лишняя!!!

3.когда делаете реально левое соединение и хотите получить все записи из левой таблицы
то все условия на правую таблицу надо писать в разделе ПО

ваш запрос выглядел бы так, попробуйте его
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    Спр.Ссылка КАК Номенклатура,
    Спр.ОтветственныйМенеджерЗаПокупки КАК ОтветственныйЗаПокупки,
    Спр.Производитель КАК Производитель,
    Спр.НомерГТД КАК ГТД,
    Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору КАК ЕХО,
    Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
    Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
    Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору КАК ЕДО,
    Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
    Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О,
    ЗСО.Значение КАК Сертификат
{ВЫБРАТЬ
    Номенклатура.*,
    ОтветственныйЗаПокупки.*,
    Производитель.*,
    ГТД.*,
    ЕХО.*,
    ЕХО_К,
    ЕХО_О,
    ЕДО.*,
    ЕДО_К,
    ЕДО_О,
    Сертификат.*}
ИЗ
    Справочник.Номенклатура КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗСО
    ПО Спр.Ссылка = ЗСО.Объект
    и ЗСО.Свойство = &ЭтоСертификат
ГДЕ
    И Спр.ВидНоменклатуры В(&ВидНоменклатуры)
    //И ЗСО.Объект.ВидНоменклатуры В(&ВидНоменклатуры)
{ГДЕ
    Спр.Ссылка.* КАК Номенклатура,
    Спр.ОтветственныйМенеджерЗаПокупки.* КАК ОтветственныйЗаПокупки,
    Спр.Производитель.*,
    Спр.НомерГТД.* КАК ГТД,
    Спр.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.* КАК ЕХО,
    Спр.ЕдиницаХраненияОстатков.Коэффициент КАК ЕХО_К,
    Спр.ЕдиницаХраненияОстатков.Объем КАК ЕХО_О,
    Спр.ЕдиницаДляОтчетов.ЕдиницаПоКлассификатору.* КАК ЕДО,
    Спр.ЕдиницаДляОтчетов.Коэффициент КАК ЕДО_К,
    Спр.ЕдиницаДляОтчетов.Объем КАК ЕДО_О,
    ЗСО.Значение.* КАК Сертификат}


п.с. Вложенные/вложенные и т.д. запросы писать считается не читабельно, не оптимально 
Быбрать ...
   из ( Быбрать ...
      из ( Быбрать ...
          ...
         из ( ) ) )
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
, не оптимально 
Категорически не согласен. Читабельно/нечитабельно дело фэншуя. А по оптимальности - все зависит от конкретной задачи. Грести все под одну гребенку, типа внутрение запросы = зло, - явно не стоит.

Онлайн AIFrame

  • ***
  • Сообщений: 208
  • РЕПУТАЦИЯ: 27
  • КПД: 13%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
Любопытно, т.е. объявление условия в связях с таблицей = вложенная таблица с условием.
Ладно.


Теги:
 

com-соединение: .Пустая() - Значение не является значением объектного типа (Пустая)

Автор burvladimirРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 2574
Последний ответ 03 Фев 2015, 10:52
от Slin
Ошибка "Соединение с сервером разорвано по инициативе сервера"

Автор lone_wolfРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1087
Последний ответ 13 Ноя 2016, 09:20
от ilyay
Ошибка SDBL: Соединение с базой данных не удерживается. Отпустить контекст соединения невозможно

Автор SandiРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 9953
Последний ответ 15 Май 2015, 17:03
от Sandi
В клиент серверном режиме при подключении через com-соединение не дает создать документ

Автор LilkosРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 1051
Последний ответ 23 Май 2016, 10:58
от Lilkos
1с82 и PHP5 Организация доступа через внешнее соединение 1с из модулей PHP!

Автор Mr_Best_23rusРаздел Беседка

Ответов: 4
Просмотров: 4550
Последний ответ 15 Фев 2011, 21:23
от chuevsf

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
165 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
88 Сообщений
alex0402
87 Сообщений
Golickoff Golickoff
32 Сообщений
ilyay ilyay
30 Сообщений
Kironten
29 Сообщений
AIFrame
26 Сообщений
BuhRust
26 Сообщений
AsadRoman
26 Сообщений
Варвар
20 Сообщений

* Кто онлайн

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal