Имя: Пароль:
1C
 
Цена на дату документа
0 Sasha_uu
 
31.08.10
06:34
Добрый день
Задача в следующем. Требуется получить цену из регистра на дату документа в запросе. Делаю запрос к регистру продаж , получаю регистратор и хочу получить цену которая была на установлена на дату регистратора

1С8 УТ 10.3.8.9
1 Гефест
 
31.08.10
06:38
Ты разрешения спрашиваешь?
2 Sasha_uu
 
31.08.10
06:39
(1) хочу знать ответ как это сделать?
3 Нуф-Нуф
 
31.08.10
06:45
4 Sasha_uu
 
31.08.10
11:16
v8: Запрос по ценам по разным датам документа  
все прочитал, это все понятно, но в том случае если цена менялась несколько раз за месяц и отчет формируется тоже за месяц. Формируется отчет по группировкам документ то как быть в этом случае?

Отчеты делаю через построитель с использованием универсального отчета
5 Ненавижу 1С
 
гуру
31.08.10
11:23
там все расписано по полочкам:

ВЫБРАТЬ
   ВложенныйЗапрос.Ссылка,
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.Количество,
   ВложенныйЗапрос.Количество * ЦеныНоменклатуры.Цена КАК Сумма
ИЗ
   (ВЫБРАТЬ
       РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
       РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
       СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
       МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
   ИЗ
       Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
           ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
               И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
               И (РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период)
   
   СГРУППИРОВАТЬ ПО
       РеализацияТоваровУслугТовары.Ссылка,
       РеализацияТоваровУслугТовары.Номенклатура) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
       ПО ВложенныйЗапрос.Период = ЦеныНоменклатуры.Период
           И ВложенныйЗапрос.Номенклатура = ЦеныНоменклатуры.Номенклатура
           И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
6 Sasha_uu
 
31.08.10
11:28
(5) мне понятно. Получается что из вложенного запроса получаются максимальный период. А если цена на товар менялась несколько раз за месяц. Получается что он вернет максимальное значение? Я прав?
7 Sasha_uu
 
31.08.10
11:29
Как сделать группировку периодов, и как все это написать в запросе???
8 shuhard
 
31.08.10
11:33
9 73
 
31.08.10
12:02
(6) <Получается что он вернет максимальное значение?>
Обрати внимание в соединении:
(РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период)

Максимальное, но не более чем на дату в документе! Т.е. на дату документа.
Что ты и просил.
10 Sasha_uu
 
31.08.10
12:41
у меня сейчас мозг сломается, не получается будь оно не ладно. ппц....
мой запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.СтоимостьОборот КАК СуммаУчет,
   ПродажиОбороты.ДоговорКонтрагента.Владелец КАК Контрагент,
   ПродажиОбороты.КоличествоОборот КАК Количество,
   ПродажиОбороты.Номенклатура.Вес * ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК Тоннаж,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ОптоваяЦена.Цена, 0) КАК СуммаОптовая,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0) КАК СуммаТранспорт,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ЗакупочнаяЦена.Цена, 0) КАК СуммаЗакупочная,
   ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0) КАК СуммаНаценка,
   (ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) / (ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) * 100 КАК ПроцентНаценки
{ВЫБРАТЬ
   Номенклатура.* КАК Номенклатура,
   Контрагент.*,
   СуммаУчет,
   Количество,
   Тоннаж,
   СуммаОптовая,
   СуммаТранспорт,
   СуммаЗакупочная,
   СуммаНаценка,
   ПроцентНаценки}
ИЗ
   (ВЫБРАТЬ
       МАКСИМУМ(Цена_ОПТОВАЯ.Период) КАК Период_ОПТОВАЯ_ЦЕНА,
       ПродажиОбороты.Номенклатура КАК Номенклатура,
       МАКСИМУМ(Цена_ТРАНСПОРТ.Период) КАК Период_ТРАНСПОРТ_ЦЕНА,
       МАКСИМУМ(Цена_ЗАКУП.Период) КАК Период_ЗАКУП_ЦЕНА,
       ПродажиОбороты.Регистратор КАК Регистратор
   ИЗ
       РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, ) КАК ПродажиОбороты
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ТРАНСПОРТ
           ПО ПродажиОбороты.Номенклатура = Цена_ТРАНСПОРТ.Номенклатура
               И ПродажиОбороты.Регистратор.Дата >= Цена_ТРАНСПОРТ.Период
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ЗАКУП
           ПО ПродажиОбороты.Номенклатура = Цена_ЗАКУП.Номенклатура
               И ПродажиОбороты.Регистратор.Дата >= Цена_ЗАКУП.Период
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ОПТОВАЯ
           ПО ПродажиОбороты.Номенклатура = Цена_ОПТОВАЯ.Номенклатура
               И ПродажиОбороты.Регистратор.Дата >= Цена_ОПТОВАЯ.Период
   ГДЕ
       Цена_ОПТОВАЯ.ТипЦен = &ТипЦенОптовая
       И Цена_ТРАНСПОРТ.ТипЦен = &ТипЦенТранспортные
       И Цена_ЗАКУП.ТипЦен = &ТипЦенЗакупПлюс
   
   СГРУППИРОВАТЬ ПО
       ПродажиОбороты.Номенклатура,
       ПродажиОбороты.Регистратор) КАК РасчетЦены
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ОптоваяЦена
       ПО РасчетЦены.Номенклатура = ОптоваяЦена.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ТранспортнаяЦена
       ПО РасчетЦены.Номенклатура = ТранспортнаяЦена.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЗакупочнаяЦена
       ПО РасчетЦены.Номенклатура = ЗакупочнаяЦена.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, ) КАК ПродажиОбороты
       ПО РасчетЦены.Номенклатура = ПродажиОбороты.Номенклатура
           И РасчетЦены.Регистратор = ПродажиОбороты.Регистратор
ГДЕ
   ЗакупочнаяЦена.ТипЦен = &ТипЦенЗакупПлюс
   И ОптоваяЦена.ТипЦен = &ТипЦенОптовая
   И ТранспортнаяЦена.ТипЦен = &ТипЦенТранспортные
{ГДЕ
   ПродажиОбороты.Номенклатура.* КАК Номенклатура,
   ПродажиОбороты.ДоговорКонтрагента.Владелец.* КАК Контрагент,
   ПродажиОбороты.Регистратор.*}
{УПОРЯДОЧИТЬ ПО
   Номенклатура.*,
   Контрагент.*}
ИТОГИ ПО
   ОБЩИЕ
{ИТОГИ ПО
   Номенклатура.* КАК Номенклатура,
   Контрагент.*}
11 Sasha_uu
 
31.08.10
12:41
в итоге получаю цену последнюю
12 Ненавижу 1С
 
гуру
31.08.10
12:45
подзапрос не соединяется с ценами по периодам у вас, в итоге вы хрень должны вроде бы вообще получить
13 Sasha_uu
 
31.08.10
12:48
(12) можете написать как правильно будет?
14 Sasha_uu
 
31.08.10
12:57
(12) сейчас попробую
15 Sasha_uu
 
31.08.10
13:18
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПродажиОбороты.Номенклатура КАК Номенклатура,
   ПродажиОбороты.СтоимостьОборот КАК СуммаУчет,
   ПродажиОбороты.ДоговорКонтрагента.Владелец КАК Контрагент,
   ПродажиОбороты.КоличествоОборот КАК Количество,
   ПродажиОбороты.Номенклатура.Вес * ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК Тоннаж,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ОптоваяЦена.Цена, 0) КАК СуммаОптовая,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0) КАК СуммаТранспорт,
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ЗакупочнаяЦена.Цена, 0) КАК СуммаЗакупочная,
   ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0) КАК СуммаНаценка,
   (ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) / (ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) * 100 КАК ПроцентНаценки
{ВЫБРАТЬ
   Номенклатура.* КАК Номенклатура,
   Контрагент.*,
   СуммаУчет,
   Количество,
   Тоннаж,
   СуммаОптовая,
   СуммаТранспорт,
   СуммаЗакупочная,
   СуммаНаценка,
   ПроцентНаценки}
ИЗ
   (ВЫБРАТЬ
       МАКСИМУМ(Цена_ОПТОВАЯ.Период) КАК Период_ОПТОВАЯ_ЦЕНА,
       ПродажиОбороты.Номенклатура КАК Номенклатура,
       МАКСИМУМ(Цена_ТРАНСПОРТ.Период) КАК Период_ТРАНСПОРТ_ЦЕНА,
       МАКСИМУМ(Цена_ЗАКУП.Период) КАК Период_ЗАКУП_ЦЕНА,
       ПродажиОбороты.Период КАК Период
   ИЗ
       РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, День, ) КАК ПродажиОбороты
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ТРАНСПОРТ
           ПО ПродажиОбороты.Номенклатура = Цена_ТРАНСПОРТ.Номенклатура
               И ПродажиОбороты.Период >= Цена_ТРАНСПОРТ.Период
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ЗАКУП
           ПО ПродажиОбороты.Номенклатура = Цена_ЗАКУП.Номенклатура
               И ПродажиОбороты.Период >= Цена_ЗАКУП.Период
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ОПТОВАЯ
           ПО ПродажиОбороты.Номенклатура = Цена_ОПТОВАЯ.Номенклатура
               И ПродажиОбороты.Период >= Цена_ОПТОВАЯ.Период
   ГДЕ
       Цена_ОПТОВАЯ.ТипЦен = &ТипЦенОптовая
       И Цена_ТРАНСПОРТ.ТипЦен = &ТипЦенТранспортные
       И Цена_ЗАКУП.ТипЦен = &ТипЦенЗакупПлюс
   
   СГРУППИРОВАТЬ ПО
       ПродажиОбороты.Номенклатура,
       ПродажиОбороты.Период) КАК РасчетЦены
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ОптоваяЦена
       ПО РасчетЦены.Номенклатура = ОптоваяЦена.Номенклатура
           И РасчетЦены.Период_ОПТОВАЯ_ЦЕНА = ОптоваяЦена.Период
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ТранспортнаяЦена
       ПО РасчетЦены.Номенклатура = ТранспортнаяЦена.Номенклатура
           И РасчетЦены.Период_ТРАНСПОРТ_ЦЕНА = ТранспортнаяЦена.Период
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЗакупочнаяЦена
       ПО РасчетЦены.Номенклатура = ЗакупочнаяЦена.Номенклатура
           И РасчетЦены.Период_ЗАКУП_ЦЕНА = ЗакупочнаяЦена.Период
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, День, ) КАК ПродажиОбороты
       ПО РасчетЦены.Номенклатура = ПродажиОбороты.Номенклатура
           И РасчетЦены.Период = ПродажиОбороты.Период
ГДЕ
   ЗакупочнаяЦена.ТипЦен = &ТипЦенЗакупПлюс
   И ОптоваяЦена.ТипЦен = &ТипЦенОптовая
   И ТранспортнаяЦена.ТипЦен = &ТипЦенТранспортные
{ГДЕ
   ПродажиОбороты.Номенклатура.* КАК Номенклатура,
   ПродажиОбороты.ДоговорКонтрагента.Владелец.* КАК Контрагент,
   ПродажиОбороты.Регистратор.*}

СГРУППИРОВАТЬ ПО
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.ДоговорКонтрагента.Владелец,
   ПродажиОбороты.СтоимостьОборот,
   ПродажиОбороты.КоличествоОборот,
   ПродажиОбороты.Номенклатура.Вес * ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0),
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ОптоваяЦена.Цена, 0),
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0),
   ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ЗакупочнаяЦена.Цена, 0),
   ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0),
   (ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) / (ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ТранспортнаяЦена.Цена, 0)) * 100
{УПОРЯДОЧИТЬ ПО
   Номенклатура.*,
   Контрагент.*}
ИТОГИ
   СУММА(СуммаУчет),
   СУММА(Количество),
   СУММА(Тоннаж),
   СУММА(СуммаОптовая),
   СУММА(СуммаТранспорт),
   СУММА(СуммаЗакупочная),
   СУММА(СуммаНаценка),
   СУММА(ПроцентНаценки)
ПО
   ОБЩИЕ
{ИТОГИ ПО
   Номенклатура.* КАК Номенклатура,
   Контрагент.*}


выдает цену на последнюю дату
16 73
 
31.08.10
13:25
>>ГДЕ
       Цена_ОПТОВАЯ.ТипЦен = &ТипЦенОптовая
       И Цена_ТРАНСПОРТ.ТипЦен = &ТипЦенТранспортные
       И Цена_ЗАКУП.ТипЦен = &ТипЦенЗакупПлюс

Условия на правую таблицу. Перенеси в условия соединений.
17 73
 
31.08.10
13:27
(16)+ Типа:

         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цена_ТРАНСПОРТ
           ПО ПродажиОбороты.Номенклатура = Цена_ТРАНСПОРТ.Номенклатура
               И ПродажиОбороты.Период >= Цена_ТРАНСПОРТ.Период
               И Цена_ТРАНСПОРТ.ТипЦен = &ТипЦенТранспортные

остальные аналогично.
18 Sasha_uu
 
31.08.10
13:42
(17) в чем разница то что я написал. Одно и тоже
19 73
 
31.08.10
14:01
(17) Условие ГДЕ на правую таблицу превращает Левое соединение во Внутреннее.
20 73
 
31.08.10
14:02
(19) -> (18)