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

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

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

Оффлайн AIFrame

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


Оффлайн vitasw

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

Оффлайн AIFrame

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

Оффлайн LexaK

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

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

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

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

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


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

Оффлайн vitasw

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

Оффлайн AIFrame

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


Теги:
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

oleg-x
116 Сообщений
alex0402
102 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
72 Сообщений
Golickoff Golickoff
49 Сообщений
AIFrame
49 Сообщений
ilyay ilyay
49 Сообщений
ab30ru
38 Сообщений
wise wise
34 Сообщений
Амал
30 Сообщений
lansy
22 Сообщений

* Кто онлайн

  • Точка Гостей: 133
  • Точка Скрытых: 0
  • Точка Пользователей: 7
  • Точка Сейчас на форуме:

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal