8.х Связи в Запросах

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем KatrineKA, 19 авг 2011.

  1. TopicStarter Overlay
    KatrineKA
    Offline

    KatrineKA Опытный в 1С

    Регистрация:
    5 окт 2010
    Сообщения:
    214
    Симпатии:
    0
    Баллы:
    26
    Работаю с регистром накопления ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.
    Запрос хорошо работает если у номенклатуры есть характеристика. А вот если в номенклатуре не ведется учет по характеристикам, то запрос пустой - и это понятно... Не понятно как в таком случае обходить соединение таблиц, ну или я опять какую то фигню делаю, а это все делается по другому?

    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    ВложенныйЗапросЗнач.ПометкаУдаления,
    ВложенныйЗапросЗнач.Номенклатура КАК Номенклатура,
    ВложенныйЗапросЗнач.Продукция,
    ВложенныйЗапросЗнач.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ВложенныйЗапросЗнач.КоличествоПриход КАК КоличествоПриход,
    ВложенныйЗапросЗнач.КоличествоРасход КАК КоличествоРасход,
    ВложенныйЗапросЗнач.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
    ВложенныйЗапросЗнач.СвойстваОбъектовНаименование,
    ВложенныйЗапросЗнач.Свойство,
    ВложенныйЗапросЗнач.Значение КАК Значение,
    ВложенныйЗапросЗнач.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ВложенныйЗапросЗнач.Заказ КАК Заказ,
    ВложенныйЗапросЗнач.Номенклатура.Артикул,
    ВложенныйЗапросЗнач.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдИзм,
    ВложенныйЗапросЗнач.Регистратор
    ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    СвойстваОбъектов.Наименование КАК СвойстваОбъектовНаименование,
    СвойстваОбъектов.ПометкаУдаления КАК ПометкаУдаления,
    СвойстваОбъектов.Ссылка КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение,
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.Продукция КАК Продукция,
    ВложенныйЗапрос.Материал КАК Материал,
    СУММА(ВложенныйЗапрос.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
    СУММА(ВложенныйЗапрос.КоличествоПриход) КАК КоличествоПриход,
    СУММА(ВложенныйЗапрос.КоличествоРасход) КАК КоличествоРасход,
    СУММА(ВложенныйЗапрос.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
    ВЫБОР
    КОГДА ВложенныйЗапрос.ХарактеристикаНоменклатуры <> 0
    ТОГДА ВложенныйЗапрос.ХарактеристикаНоменклатуры
    ИНАЧЕ 1
    КОНЕЦ КАК ХарактеристикаНоменклатуры,
    ВложенныйЗапрос.Заказ КАК Заказ,
    ВложенныйЗапрос.Регистратор КАК Регистратор
    ИЗ
    (ВЫБРАТЬ
    СвойстваОбъектов.Ссылка КАК Ссылка,
    СвойстваОбъектов.Наименование КАК Наименование,
    СвойстваОбъектов.ПометкаУдаления КАК ПометкаУдаления
    ИЗ
    ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
    ГДЕ
    СвойстваОбъектов.НазначениеСвойства В(&НазначениеСвойств)) КАК СвойстваОбъектов
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ВЫБОР
    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул <= (ВЫРАЗИТЬ(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул КАК СТРОКА(7)))
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул
    КОНЕЦ КАК Продукция,
    ВЫБОР
    КОГДА (ВЫРАЗИТЬ(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул КАК СТРОКА(9))) <> (ВЫРАЗИТЬ(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул КАК СТРОКА(8)))
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Артикул
    КОНЕЦ КАК Материал,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
    ВЫБОР
    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.ВестиУчетПоХарактеристикам = ИСТИНА
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры
    ИНАЧЕ 0
    КОНЕЦ КАК ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Заказ КАК Заказ,
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Регистратор КАК Регистратор
    ИЗ
    РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(&НачПериода, &КонПериода, Регистратор, , Заказ.ДоговорКонтрагента = &ДоговорКонтрагента) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты
    
    СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура,
    ....					
    ) КАК ВложенныйЗапрос
    ПО ЗначенияСвойствОбъектов.Объект = ВложенныйЗапрос.ХарактеристикаНоменклатуры
    ПО (ЗначенияСвойствОбъектов.Свойство = СвойстваОбъектов.Ссылка)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
    ПО (НазначенияСвойствОбъектов.Свойство = СвойстваОбъектов.Ссылка)
    И (ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL )
    ГДЕ
    (НазначенияСвойствОбъектов.Объект ЕСТЬ NULL 
    ИЛИ НазначенияСвойствОбъектов.Объект В (ВложенныйЗапрос.Номенклатура))
    
    СГРУППИРОВАТЬ ПО
    СвойстваОбъектов.Ссылка,
    ЗначенияСвойствОбъектов.Значение,
    ВложенныйЗапрос.Продукция,
    .....
    
    СГРУППИРОВАТЬ ПО
    ВложенныйЗапросЗнач.ПометкаУдаления,
    .....
    ИТОГИ
    ....
    ПО
    Заказ,
    Значение
    АВТОУПОРЯДОЧИВАНИЕ
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Вот это место смущает:
    Код:
    "ВЫБОР
    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.ВестиУчетПоХарактеристикам = ИСТИНА
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры
    ИНАЧЕ 0
    КОНЕЦ КАК ХарактеристикаНоменклатуры"
    
    Почему когда учет ведется по характеристикам, вы выбираем "СправочникСсылка.ХарактеристикиНоменклатуры", а когда нет "Число"? Кроме того, насколько вижу, у РС "ЗначениеСвойствОбъектов" измерение "Объект", не включает в себя тип число.

    Попробуйте переписать так:
    Код:
    "ВЫБОР
    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.ВестиУчетПоХарактеристикам = ИСТИНА
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры
    ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
    КОНЕЦ КАК ХарактеристикаНоменклатуры"
    
  3. TopicStarter Overlay
    KatrineKA
    Offline

    KatrineKA Опытный в 1С

    Регистрация:
    5 окт 2010
    Сообщения:
    214
    Симпатии:
    0
    Баллы:
    26
    Да, число оно не включает.

    Но и ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) без всего этого условия, Характеристика итак является пустой ссылкой.

    А потом с пустой сслкой выполянется соединение ЗначенияСвойствОбъектов.Объект = ВложенныйЗапрос.ХарактеристикаНоменклатуры и запрос пустой. Как обойти?
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ПО (ЗначенияСвойствОбъектов.Объект = ВложенныйЗапрос.ХарактеристикаНоменклатуры) ИЛИ (ВложенныйЗапрос.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))"
    
    Если так?
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    И это, в таком случае в этой конструкции нет необходимости:
    Код:
    "ВЫБОР
    КОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.ВестиУчетПоХарактеристикам = ИСТИНА
    ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры
    ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
    КОНЕЦ КАК ХарактеристикаНоменклатуры"
    
    Просто выбирайте поле:
    Код:
    "ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры"
    
  6. TopicStarter Overlay
    KatrineKA
    Offline

    KatrineKA Опытный в 1С

    Регистрация:
    5 окт 2010
    Сообщения:
    214
    Симпатии:
    0
    Баллы:
    26
    Тогда, он выдает все что есть в справочнике характеристика, все 3500 строк. Но зато запрос уже не пустой :)
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    вопрос: зачем вы пытаетесь проверять ведется или нет учет по характеристикам?

    в соединении сделать условие соединения по характеристикам - система сама знает про то, ведется учет по характеристикам данной номенклатуры или нет.
  8. TopicStarter Overlay
    KatrineKA
    Offline

    KatrineKA Опытный в 1С

    Регистрация:
    5 окт 2010
    Сообщения:
    214
    Симпатии:
    0
    Баллы:
    26
    Именно это я и пытаюсь сделать, обойти связи если нет характеристик. Но у меня пока не получилось, поэтому и задала вопрос на форуме.
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    не нужно это делать.
    если у вас одна номенклатура ведется по характеристикам, а другая - нет, что вы хотите в результате получить?
  10. TopicStarter Overlay
    KatrineKA
    Offline

    KatrineKA Опытный в 1С

    Регистрация:
    5 окт 2010
    Сообщения:
    214
    Симпатии:
    0
    Баллы:
    26
    все тот же отчет с данными по остаткам и движению.

    Сейчас сделала вот так: добавила во вложенный запрос все таблицы по нахождению свойств и значения характеристик и связываю его с ПартииТоваровНаСкладахБух, с условием в связи если ведется учет по характеристикам

Поделиться этой страницей