Версия для печати темы (https://pro1c.org.ua/index.php?s=5ca42d90ff6c9f8b7e082e687bde734c&showtopic=67021)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Получение текущей и будущей цены из регистра сведений

Автор: vasilijgrafeev 12.07.22, 9:39

Добрый день, есть регистр сведений - "Цены", нужно получить цену на сегодня, и цену если есть на будущее. Цена на сегодня Период=&Дата, цена на будущее Период>&Дата, но если цены на будущее нету то нету и записи, как получить 0 или любое значение -"цена на будущее не установлена" ?


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 4
 

Автор: sava1 12.07.22, 10:07

а получаете цену как? запросом или через объект?

Автор: vasilijgrafeev 12.07.22, 10:09

sava1 @ Сегодня, 11:07 * ,
Запросом

Автор: sava1 12.07.22, 10:16

делаете выборку, если пустая - цена=0
или
в запросе добавляете заведомую "пустышку" с ценой=0 и через юнион олл свой запрос + сгруппировать - в результате цена будет обязательно (или 0 или установленная)

Автор: vasilijgrafeev 12.07.22, 10:20

sava1 @ Сегодня, 11:16 * ,
sava1 @ Сегодня, 11:07 * ,
Запросом, в регистре есть Номенклатура, Период, Цена, текущая цена Период=&ТекущаяДата, будущая цена Период>&ТекущаяДата. Если в регистре есть запись с датой больше текущей все ок, но если записи нету то возникает проблема как заполнить поле. Таблица выгладит следующим образом Номенклатура-ЦенаТекушая-ЦенаНовая. Номенклатуру знаем, цену текущую знаем, а новую цену нужно проверять или заполнен регистр датой больше текущей. Если дата есть то установить цену, если даты нету поставить 0

Автор: sava1 12.07.22, 10:25

запрос покажите

Автор: vasilijgrafeev 12.07.22, 10:27

sava1 @ Сегодня, 11:25 * ,
ВЫБРАТЬ
ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныСрезПоследних.Цена КАК ЦенаТекущая,
Цены.Цена КАК ЦенаНовая
ИЗ
РегистрСведений.Цены.СрезПоследних(&Дата, ) КАК ЦеныСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО ЦеныСрезПоследних.Номенклатура = Цены.Номенклатура
ГДЕ
ЦеныСрезПоследних.Период <= &Дата
И ЦеныСрезПоследних.Номенклатура = &Номенклатура
И Цены.Период > &Дата

Автор: sava1 12.07.22, 10:37

1. цены обе надо получать из виртуальной таблицы


ВЫБРАТЬ
Номенклатура,
максимум(IsNULL(ЦенаТекущая,0) ,
максимум(IsNULL(ЦенаНовая,0)
ИЗ (

ВЫБРАТЬ
ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныСрезПоследних.Цена КАК ЦенаТекущая,
0 КАК ЦенаНовая
ИЗ
РегистрСведений.Цены.СрезПоследних(&Дата, ) КАК ЦеныСрезПоследних

ОбЪЕдинить все

ВЫБРАТЬ
ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
0 КАК ЦенаТекущая,
ЦеныСрезПоследних.Цена КАК ЦенаНовая
ИЗ
РегистрСведений.Цены.СрезПоследних(&ДатаНовая, ) КАК ЦеныСрезПоследних

) как твр

СГРУППИРОВАТЬ ПО Номенклатура



типо так - ошибки могут быть из-за ручной печати

Номенклатуру и типЦена - в параметры вирт. таблицы

Автор: vasilijgrafeev 13.07.22, 10:14

sava1 @ Вчера, 11:37 * ,
Вариант супер, спасибо, но есть минус. Нужно заполнять &ДатаНовая. Ваш вариант супер. Как поправить чтобы пока не наступит ДатаНовая устанавливался 0 на ЦенаНовая. Буду благодарен, только учусь. 32000000.gif

Автор: andr_andrey 15.07.22, 10:24

Цитата(vasilijgrafeev @ 13.07.22, 11:14) *
Как поправить чтобы пока не наступит ДатаНовая устанавливался 0 на ЦенаНовая.

Що означає "пока не наступит ДатаНовая"?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua