8.х Помощь в модификации стандартного отчёта "Стоимостная оценка склада в ценах номенклатуры"

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем DeniNikitin, 23 авг 2010.

  1. TopicStarter Overlay
    DeniNikitin
    Offline

    DeniNikitin Опытный в 1С

    Регистрация:
    2 июл 2008
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    По производственной необходимости стоимость в отчёте должна считаться умножением на характеристику, для этого сделал соединение с регистром значение свойств вот какой запрос получился:

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

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

    |
    |ИТОГИ
    | СУММА(КоличествоОстаток),
    | СУММА(КоличествоБазовыхЕдОстаток),
    | СУММА(ТипЦенСтоимость),
    | МАКСИМУМ(ТипЦенЦена)
    | //ИТОГИ_СВОЙСТВА
    | //ИТОГИ_КАТЕГОРИИ
    |ПО ОБЩИЕ
    |
    |{ИТОГИ ПО
    | Склад.* КАК Склад,
    | ТаблицаРегистра.Номенклатура.* КАК Номенклатура,
    | ТаблицаРегистра.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры
    | //ПСЕВДОНИМЫ_СВОЙСТВА
    | //ПСЕВДОНИМЫ_КАТЕГОРИИ
    |}

    |";

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

    Вложения:

  2. Misha123
    Offline

    Misha123 Опытный в 1С

    Регистрация:
    13 май 2008
    Сообщения:
    54
    Симпатии:
    0
    Баллы:
    26
    В таком запросе вряд ли ктото будет разбиратся.
    Попробуй упростить запрос (откинь пока все лишнее) и решить проблему а потом добавь нужные данные.
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Действительно, разбираться лениво, но предположение выскажу:
    Делайте ЛЕВОЕ СОЕДИНЕНИЕ.
    Потом обратите внимание на эти строки "ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК ЧИСЛО)" - там их несколько кажется.
    Объясняю: когда делаете левое соединение, то ЗначенияСвойствОбъектов.Значение может быть NULL, таким образом вам надо переписать все подобные строки на
    Код:
    "ВЫРАЗИТЬ(ЕстьNULL(ЗначенияСвойствОбъектов.Значение, 0) КАК ЧИСЛО)"
    
    Вместо 0, возможно надо поставить 1-цу, я не вникал в суть запроса. Вобщем надо подставить значение, если характеристика не найдена (отсутствует).
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    И это, еще такой совет: отладьте сначала запрос в консоли запросов, чтобы выдавал что надо, а потом уже помещайте это дело в построитель. Поскольку если что-то пропустите в запросе (в том что касается параметров построителя) - на экран хрень выдавать будет, а вы голову себе ломать будете почем зря. А так уже будет 100% рабочий запрос.

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