1С получить цену номенклатуры

ElenaT
08.12.2016 16:06

Прочитано: 1967

Как в запросе получить цену номенклатуры с характеристиками по остаткам товаров на складах. В РС Цены номенклатуры часть ном-ры имеет цену с учетом характеристики, а часть только цену номенклатуры без характеристики.

Yandex
Возможно, вас также заинтересует
ElenaT
08.12.2016 17:04

Ответ № 1
Вопрос закрыт!
ElenaT
08.12.2016 17:36

Ответ № 2
ElenaT
08.12.2016 17:39

Ответ № 3

ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,

ВЫРАЗИТЬ(ТоварыНаСкладахОстатки.КоличествоОстаток * ЦеныНоменклатурыСрезПоследних.Цена КАК ЧИСЛО(15, 2)) КАК Сумма,

ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры1

РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура =Номенклатура) КАК ТоварыНаСкладахОстатки

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен =ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

КОГДА ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)

ТОГДА ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)

ИНАЧЕ ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

Запрос все равно возвращает 2 строки для номенклатуры в остатках с характеристикой, по которой есть цена в РС, а надо, чтобы всегда была одна строка.

ElenaT
10.12.2016 11:38

Ответ № 4

Осенило, если кому понадобится:

ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,

ЦеныНоменклатурыСрезПоследних.Цена КАК Цена

РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен =ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

И (ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))

ЦеныБезХарактристики.Номенклатура КАК Номенклатура,

КОГДА ЦеныБезХарактристики.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

ЦеныБезХарактристики КАК ЦеныБезХарактристики

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен =ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

ПО ЦеныБезХарактристики.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

И ЦеныБезХарактристики.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры

Примеры по программированию в 1с 7.7, 8.1, 8.2

пятница, 21 марта 2014 г.

Запрос 1с: Получить цену последненего прихода по всем номенклатурам на дату

1)Получим список номенклатур
2)По этому списку получим максимальную дату поступления
3)По максимальной дате поступления и номенклатуре — получим из документа (дата которого равна максимальной дате) цену.

ВЫБРАТЬ РАЗЛИЧНЫЕ
Номенклатура_.Ссылка КАК Номенклатура,
Поступления.Цена
ИЗ
Справочник.Номенклатура КАК Номенклатура_
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МАКСИМУМ(ПоступлениеТоваровТовары.Ссылка.Дата) КАК Дата,
ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
ГДЕ
ПоступлениеТоваровТовары.Ссылка.Проведен
И ПоступлениеТоваровТовары.Ссылка.Дата

Поставленная задача

Предположим, что нам поступила задача, по которой заказчик хочет получить отчет по введенным в базу документам "Реализация товаров и услуг", причем на каждый документ необходимо получать цену из регистра сведений "Цены номенклатуры" на дату документа. Отчет пишется для конфигурации "Управление производственным предприятием" версии 1.3.

К записи из таблицы документа присоединяется запись из виртуальной таблицы "ЦеныНоменклатуры.СрезПоследний" по соответствующим условиям периода, типа цены и номенклатуры. Тип цены получаем из одноименного реквизита документа.

Задача имеет несколько способов решения. Рассмотрим два из них: отчет на СКД с помощью двух наборов данных и получение всех необходимых данных в одном запросе. Теперь по порядку.

Использование СКД

Для реализации подобного отчета на СКД создадим в схеме компоновки данных два набора данных. Первый будет получать список документов, второй цены на даты документов по выбранной номенклатуре и типу цен. Связь между двумя наборами данных осуществляется по номенклатуре, периоду (дата документа) и типу цены. Из первого набора необходимо передвать параметры "Номенклатура", "ТипЦены" и "Период" во второй набор.

Первый набор данных содержит следующий запрос:

Запрос выбирает из таблицы документа и табличной части "Товары" поля: "Ссылка", "Дата", "ТипЦен", "Номенклатура". Теперь рассмотрим второй набор данных:

Во втором наборе данных следует обратить внимание на параметры, передаваемые в запрос. В списке выбираемых полей содержатся параметры "Период, "Номенклатура" и "ТипЦены". Эти же параметры используются в параметрах виртуальной таблицы "ЦеныНоменклатуры.СрезПоследних". Выводить данные параметры в список выбираемых полей необходимо, чтобы из первого набора можно было передавать значения этих параметров во второй набор. Осуществляется это с помощью настроек соединения между наборами данных в вкладке конструктора схемы компоновки данных "Связи наборов данных". Перейдем к ее рассмотрению:

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

Настроив структуру отчета и сформировав его, мы получим следующий результат:

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

В одном запросе

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

Принцип работы запроса заключается в получении к документe ближайшей даты изменения цены для каждой использованной номенклатуры в табличной части, а затем присоединение к полученному результату запроса данных из физической таблицы "Цены номенклатуры" по периоду, номенклатуре и типу цен. На первый взгляд, запрос может показаться сложным, однако на самом деле его синтаксис достаточно простой.

Результат выполнения аналогичен результату предыдущего отчета (см. скриншот выше).

Делайте выводы

Какой вариант выполнения задачи лучше? Тут все зависит от конкретных условий. В некоторых ситуациях отчет из двух наборов данных будет работать быстрее, чем получение всех данных для отчета в одном запросе. В рамках статьи мы не сможем коснуться вопросов производительности для рассмотренных способов решения задачи.

Также стоит помнить, что создание отчетов на основе таблиц документов не рекомендуется методикой разработки от фирмы 1С, так как считается, что информация в документах может быть не достоверной. Все отчеты необходимо строить на основании регистров.


[an error occurred while processing the directive]
Карта сайта