8.х Внешний отчет

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

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Подскажите. Как из карточки элемента справочника номенклатура вывести значения поля вес во внешний отчет (как обратится к подчиненному справочнику единицы измерения) :unsure:
  2. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    К подчиненному справочнику - например вот так:
    Код:
    "ВЫБРАТЬ
    |Ссылка
    |ИЗ
    |Справочник.МойПодчиненныйСправочник
    |ГДЕ
    |Владелец = &СсылкаНаЭлементВладелец"
    
    
    
    Также ссылки по теме
    http://www.1c-pro.ru/index.php?showtopic=1...%E4%E5%EB%E5%F6
    http://www.1c-pro.ru/index.php?showtopic=1...%E4%E5%EB%E5%F6
    http://www.1c-pro.ru/index.php?showtopic=1...%E4%E5%EB%E5%F6
    http://www.1c-pro.ru/index.php?showtopic=9...%E4%E5%EB%E5%F6
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Товары.(
    |		Номенклатура как Номенклатура,
    |		Количество КАК Количество,
    |	),
    |	РеализацияТоваровУслуг.Ссылка,
    |	РеализацияТоваровУслуг.Номер,
    |	РеализацияТоваровУслуг.Контрагент,
    |	РеализацияТоваровУслуг.Организация,
    |  РеализацияТоваровУслуг.АдресДоставки
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Контрагент В(&СписокКонтрагентов)
    |  И РеализацияТоваровУслуг.Товары.Номенклатура в(&СписокНоменклатуры)
    |	И РеализацияТоваровУслуг.Дата >= &ДатаНачала
    |	И РеализацияТоваровУслуг.Дата <= &ДатаКонца
    |	И РеализацияТоваровУслуг.Организация = &Организация
    |	И РеализацияТоваровУслуг.Проведен = ИСТИНА";
    
    
    Как из этого запроса обратится к справочнику ЕдиницыИзмерения поле Вес нужно вытащить в отчет родитель справочник Номенклатура :unsure:
  4. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Код:
     // Начнем с того, что запрос - косяковый.
    |	РеализацияТоваровУслуг.Товары.(  //В такой постановке нет неопбходимости, достаточно сразу делать запрос по таблице Товары. см. ниже
    
    // зачем выбирать Оргинацзию, если есть отбор(ГДЕ),который оставит в результате только одну?
    |	РеализацияТоваровУслуг.Организация,
    
    // Вместо
    |	И РеализацияТоваровУслуг.Дата >= &ДатаНачала  
    |	И РеализацияТоваровУслуг.Дата <= &ДатаКонца       
    // Предпочтительнее использвовать конструкцию МЕЖДУ
    |	И РеализацияТоваровУслуг.Дата МЕЖДУ (&ДатаНачала) И (&ДатаКонца)
    
    // вот так тоже не обычно не пишут
    |	И РеализацияТоваровУслуг.Проведен = ИСТИНА
    // достаточно
    |	И РеализацияТоваровУслуг.Проведен
    
    // Отредактированный запрос будет выглядеть примерно так:
    
    "ВЫБРАТЬ
    |	РеализацияТоваровУслугТовары.Ссылка.Номер,
    |	РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    |	РеализацияТоваровУслугТовары.Ссылка.Организация,
    |	РеализацияТоваровУслугТовары.Ссылка.АдресДоставки,
    |	РеализацияТоваровУслугТовары.Номенклатура,
    |	РеализацияТоваровУслугТовары.Количество,
    |	ЕдиницыИзмерения.Ссылка КАК ЕдИзм, // вот единица измерения
    |	ЕдиницыИзмерения.Вес  // вот вес
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения  // вот ответ - ЛЕВОЕ СОЕДИНЕНИ со справочником ЕдиницыИзмерения
    |		ПО РеализацияТоваровУслугТовары.Номенклатура = ЕдиницыИзмерения.Владелец // ПО - Номенклатура владелец для данной ЕдиницыИзмерения
    |ГДЕ
    |	РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация
    |	И РеализацияТоваровУслугТовары.Ссылка.Контрагент В(&СписокКонтрагентов)
    |	И РеализацияТоваровУслугТовары.Ссылка.Проведен
    |	И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
    |   И РеализацияТоваровУслугТовары.Номенклатура в(&СписокНоменклатуры) ";
    // на будущее - не забываем указывать используемую конфигурацию;-)
    
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Спасибо работает, а если нужно вытащить из карточки контрагента данные тоже через левое соединение делать, если да то как обратится?
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А я вот вообще не догоняю смысл "РеализацияТоваровУслугТовары.Ссылка"...
    Нафига .Ссылка лепить? Левое соединение намного практичнее и решение красивее будет...

    Апдейт:
    Почему не .Ссылка?
    Если вкратце - особенность реализаций RLS - там хитрое наложение условий произойдет, уже обсуждалось на партнерском форуме.
  7. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Не осознаю Вашей идеи BabySG.
    Не могли бы Вы пояснить ее примером?
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Эх... Сейчас найду тему на партнерском...
    Общая идея состоит в том, что по разному будут применены RLS при обращении через .Ссылка и через левое соединение.

    Апдейт:
    Мда... Потерял эту тему.
    Общий смысл в теме был такой, что проблема с производительностью возникала и еще что-то было при обращении к полям "через точку", если наложены хитрые RLS
    Поэтому рекомендовали использовать явное левое соединение, что, честно говоря, я почти всегда и делаю.
  9. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Т.е. вместо

    Код:
    "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Ссылка.Номер,
    |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    |    РеализацияТоваровУслугТовары.Ссылка.Организация,
    |    РеализацияТоваровУслугТовары.Ссылка.АдресДоставки,
    </span>
    </FONT></FONT></pre>
    Вы предлагаете добавлять ЛЕВОЕСОЕДИНЕНИЕ к документу типа

    Код:
    "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    РеализацияТоваровУслугТовары.Количество,
    |    ЕдиницыИзмерения.Ссылка КАК ЕдИзм,
    |    ЕдиницыИзмерения.Вес,
    |    ЗапросПоДокументу.Номер,
    |    ЗапросПоДокументу.Дата,
    |    ЗапросПоДокументу.Проведен
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
    |        ПО РеализацияТоваровУслугТовары.Номенклатура = ЕдиницыИзмерения.Владелец
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    |            РеализацияТоваровУслуг.Номер КАК Номер,
    |            РеализацияТоваровУслуг.Дата КАК Дата,
    |            РеализацияТоваровУслуг.Проведен КАК Проведен,
    |            РеализацияТоваровУслуг.АдресДоставки КАК АдресДоставки
    |        ИЗ
    |            Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг) КАК ЗапросПоДокументу...
    </span>
    </FONT></FONT></pre>
    ?
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Э.... Что-то не то накрутил в запросе :)
    Достаточно соединения по ссылке.

    Но идея примерно такая.

    ЗЫ. Кстати, вспомнил еще причину: если будет большая вложенность - то возникает опастность ситуации, когда оптимизатор проглючит и он начет делать выборки в цикле, либо сначала тараканить всю таблицу и только потом накладывать условие.
    Сам сталкивался с проблемой, что оптимизатор проглючивает на больших вложенностях и внутри множественные группировки. Он начал мне в цикле запрос гонять... Решилось очень просто - убрал группировки, которые "типа" должны были сократить выборку, а получилось наоборот.

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

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