Добрый день.
Есть 2 регистра накопления (ТоварыКПпоступлению и ТоварыКОтгрузке) и есть регистр сведений (ЦеныНоменклатуры).
В регистрах накопления записаны: номенклатура, харктеристика, склад, количество
В регистре сведений: номенклатура, вид цены, цена
Мне надо для определенного вида цены, заданного периода и заданного склада вывести таблицу.
В результате таблциа должна иметь вот такой вид:
Дата Регистратор Оценка
500 (приход - расход 700+800-900-100)
01.01.2001 Приход... 700
02.02.2002 Приход... 800
03.03.2003 Расход... 900
04.04.2004 Расход... 100
Пишу вот-так:
Вторую таблицу не пойму как присоединить, чтобы получился результат, который мне нужен.
Пока что запрос выводит примерно это:
Дата Регистратор Оценка
1500
01.01.2001 Приход... 700
02.02.2002 Приход... 800
Есть 2 регистра накопления (ТоварыКПпоступлению и ТоварыКОтгрузке) и есть регистр сведений (ЦеныНоменклатуры).
В регистрах накопления записаны: номенклатура, харктеристика, склад, количество
В регистре сведений: номенклатура, вид цены, цена
Мне надо для определенного вида цены, заданного периода и заданного склада вывести таблицу.
В результате таблциа должна иметь вот такой вид:
Дата Регистратор Оценка
500 (приход - расход 700+800-900-100)
01.01.2001 Приход... 700
02.02.2002 Приход... 800
03.03.2003 Расход... 900
04.04.2004 Расход... 100
Пишу вот-так:
ВЫБРАТЬ
ТоварыКПоступлению.Регистратор КАК Регистратор,
ТоварыКПоступлению.Номенклатура КАК Номенклатура,
ТоварыКПоступлению.Характеристика КАК Характеристика,
ТоварыКПоступлению.Склад КАК Склад,
ТоварыКПоступлению.Количество КАК Количество,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ТоварыКПоступлению.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаПост
ПОМЕСТИТЬ Поступление
ИЗ
РегистрНакопления.ТоварыКПоступлению КАК ТоварыКПоступлению
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО (ТоварыКПоступлению.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
И (ТоварыКПоступлению.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыКПоступлению.Регистратор,
ТоварыКПоступлению.Склад,
ТоварыКПоступлению.Количество,
ЦеныНоменклатурыСрезПоследних.Цена,
ТоварыКПоступлению.Номенклатура,
ТоварыКПоступлению.Характеристика
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыКОтгрузке.Регистратор КАК Регистратор,
ТоварыКОтгрузке.Номенклатура КАК Номенклатура,
ТоварыКОтгрузке.Характеристика КАК Характеристика,
ТоварыКОтгрузке.Склад КАК Склад,
ТоварыКОтгрузке.Количество КАК Количество,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ТоварыКОтгрузке.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаОтгр
ПОМЕСТИТЬ Отгрузка
ИЗ
РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО ТоварыКОтгрузке.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ТоварыКОтгрузке.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
СГРУППИРОВАТЬ ПО
ТоварыКОтгрузке.Регистратор,
ТоварыКОтгрузке.Номенклатура,
ТоварыКОтгрузке.Характеристика,
ТоварыКОтгрузке.Склад,
ТоварыКОтгрузке.Количество,
ЦеныНоменклатурыСрезПоследних.Цена,
ТоварыКОтгрузке.Количество * ЦеныНоменклатурыСрезПоследних.Цена
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Поступление.Регистратор.Дата КАК РегистраторДата,
Поступление.Регистратор КАК Регистратор,
Поступление.СуммаПост КАК Оценка
ИЗ
Поступление КАК Поступление
ГДЕ
Поступление.Склад = &Склад
СГРУППИРОВАТЬ ПО
Поступление.Регистратор.Дата,
Поступление.Регистратор,
Поступление.СуммаПост
ИТОГИ
СУММА(Оценка)
ПО
ОБЩИЕ,
Регистратор
ПоказатьВторую таблицу не пойму как присоединить, чтобы получился результат, который мне нужен.
Пока что запрос выводит примерно это:
Дата Регистратор Оценка
1500
01.01.2001 Приход... 700
02.02.2002 Приход... 800
По теме из базы знаний
Найденные решения
Вот готовая вроде
Единственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
ВЫБРАТЬ
ЦеныНоменклатуры.Период КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика,
ЦеныНоменклатуры.ВидЦены,
ЦеныНоменклатуры.Цена,
ЦеныНоменклатуры.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизаций.Регистратор КАК РегистраторТО,
ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
ТоварыОрганизаций.Период КАК Период,
МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизаций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыОрганизаций.Номенклатура,
ТоварыОрганизаций.Характеристика,
ТоварыОрганизаций.Регистратор,
ТоварыОрганизаций.Период,
ТоварыОрганизаций.КоличествоОборот
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныДоИзменения
ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
ВсеЦеныНаНужныеТовары.Цена КАК Цена,
ТаблицаЦен.Период КАК Период
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ПО ТаблицаЦен.Период = ВсеЦеныНаНужныеТовары.Период
И (ВсеЦеныНаНужныеТовары.Номенклатура = ТаблицаЦен.Номенклатура)
И (ВсеЦеныНаНужныеТовары.Характеристика = ТаблицаЦен.Характеристика)
СГРУППИРОВАТЬ ПО
ТаблицаЦен.Регистратор,
ТаблицаЦен.Номенклатура,
ТаблицаЦен.Характеристика,
ВсеЦеныНаНужныеТовары.Цена,
ТаблицаЦен.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
ВсеЦеныНаНужныеТовары.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ПО ТаблицаЦен.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура
И ТаблицаЦен.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика
И ТаблицаЦен.ПериодДо = ВсеЦеныНаНужныеТовары.Период
СГРУППИРОВАТЬ ПО
ТаблицаЦен.Регистратор,
ТаблицаЦен.Номенклатура,
ТаблицаЦен.Характеристика,
ВсеЦеныНаНужныеТовары.Цена
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаНовыхЦен.Регистратор КАК Регистратор,
ТаблицаНовыхЦен.Номенклатура КАК Номенклатура,
ТаблицаНовыхЦен.Характеристика КАК Характеристика,
ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена КАК Цена,
ТаблицаНовыхЦен.Период КАК Период
ПОМЕСТИТЬ ФинальныеЦены
ИЗ
ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
ПО ТаблицаСтарыхЦен.Номенклатура = ТаблицаНовыхЦен.Номенклатура
И ТаблицаСтарыхЦен.Характеристика = ТаблицаНовыхЦен.Характеристика
ГДЕ
ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Остаток на начало периода" КАК Регистратор,
СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ИЗ
(ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ФинальныеЦены.Регистратор,
СУММА(ФинальныеЦены.Цена * ТоварыОрганизацийОбороты.КоличествоОборот)
ИЗ
ФинальныеЦены КАК ФинальныеЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &организация) КАК ТоварыОрганизацийОбороты
ПО (ФинальныеЦены.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура)
И (ФинальныеЦены.Характеристика = ТоварыОрганизацийОбороты.Характеристика)
И (ФинальныеЦены.Период >= ТоварыОрганизацийОбороты.Период)
ГДЕ
ФинальныеЦены.Период > &НачПер
СГРУППИРОВАТЬ ПО
ФинальныеЦены.Регистратор
ИТОГИ ПО
ОБЩИЕ
ПоказатьЕдинственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В последний запрос объединением добавить таблицу расхода, сумму сделать со знаком "-" просто.
Ну или если прям надо чтобы приход расход был, то добавляешь поле расход, куда сумму с плюсом и поле "Всего", куда из первой таблицы с плюсом, а из второй с минусом.
Ну или если прям надо чтобы приход расход был, то добавляешь поле расход, куда сумму с плюсом и поле "Всего", куда из первой таблицы с плюсом, а из второй с минусом.
1) Для начала определись что в итоге хочешь получить. Например, непонятно зачем ты выбираешь номенклатуру и количество, если тебе нужна только сумма и регистратор. Сразу отпадут лишние группировки
2) Используешь левое соединение, но при отсутствии цен, сумма будет нулевая. Зачем тебе такие записи, если номенклатура не нужна. Юзай внутреннее
3) Отбор по складу в последней таблице, хотя можно отобрать в первых двух. Лишние данные таскаешь
В итоге, что-то типа:
2) Используешь левое соединение, но при отсутствии цен, сумма будет нулевая. Зачем тебе такие записи, если номенклатура не нужна. Юзай внутреннее
3) Отбор по складу в последней таблице, хотя можно отобрать в первых двух. Лишние данные таскаешь
В итоге, что-то типа:
ВЫБРАТЬ
ТоварыКПоступлению.Регистратор,
ТоварыКПоступлению.Номенклатура,
ТоварыКПоступлению.Характеристика,
ТоварыКПоступлению.Количество
ПОМЕСТИТЬ ВТ_ПриходРасход
ИЗ
ТоварыКПоступлению КАК ТоварыКПоступлению
ГДЕ
ТоварыКПоступлению.Склад = &Склад
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыКОтгрузке.Регистратор,
ТоварыКОтгрузке.Номенклатура,
ТоварыКОтгрузке.Характеристика,
ТоварыКОтгрузке.Количество * -1
ИЗ
ТоварыКОтгрузке КАК ТоварыКОтгрузке
ГДЕ
ТоварыКОтгрузке.Склад = &Склад
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_ПриходРасход.Регистратор.Дата,
ВТ_ПриходРасход.Регистратор,
ВТ_ПриходРасход.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК Сумма
ИЗ
ВТ_ПриходРасход КАК ВТ_ПриходРасход
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ПО ВТ_ПриходРасход.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ВТ_ПриходРасход.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
УПОРЯДОЧИТЬ ПО
ВТ_ПриходРасход.Регистратор.Дата
Показать
(3)
Сделал по Вашему совету, добавил период вид цены и итоги, все работает хорошо.
Нашел регистр накопления Товары на складе и переделал по нему, работает так-же, только я неправильно понял условие изначально. Мне надо чтобы в расчете значение цены использовалось то, которое было на момент проведения документа
Вот код:
Мне надо добавлять период к РС или делать какое-то условие?
Сделал по Вашему совету, добавил период вид цены и итоги, все работает хорошо.
Нашел регистр накопления Товары на складе и переделал по нему, работает так-же, только я неправильно понял условие изначально. Мне надо чтобы в расчете значение цены использовалось то, которое было на момент проведения документа
Вот код:
ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата КАК Дата,
ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЦеныНоменклатурыСрезПоследних.Цена КАК Оценка
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПер, &КонПер, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО (ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
И (ТоварыНаСкладахОстаткиИОбороты.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата,
ТоварыНаСкладахОстаткиИОбороты.Регистратор,
ЦеныНоменклатурыСрезПоследних.Цена
УПОРЯДОЧИТЬ ПО
Оценка Убыв
ИТОГИ
СУММА(Оценка)
ПО
ОБЩИЕ
ПоказатьМне надо добавлять период к РС или делать какое-то условие?
(5)
Это все усложняет, т.к. в результате документов может быть много и у них у всех разные даты, а срез цен только на какую-то конкретную дату будет. Если хочется это в рамках запроса делать, то придется ещё несколько временных таблиц подключать и использовать соединение не со срезом последних, а с реальными записями. Общий смысл - сначала выбрать все даты регистраторов+номенклатуру+характеристику и соединить с РС "ЦеныНоменклатуры" по номенклатуре+характеристики+(дата регистратора >= Периода записи РС "ЦеныНоменклатуры"). Сгруппировать по регистратору,номенклатуре,характеристики, итог по "Период записи РС"(Максимум). В итоге у тебя получится таблица Регистратор+Номенклатура+Характеристика+Дата последней установки цены. К ней уже можно присоеденить конкретную запись РС "ЦеныНоменклатуры" с ценой, актуальной на момент проведения документа
Мне надо чтобы в расчете значение цены использовалось то, которое было на момент проведения документа
Это все усложняет, т.к. в результате документов может быть много и у них у всех разные даты, а срез цен только на какую-то конкретную дату будет. Если хочется это в рамках запроса делать, то придется ещё несколько временных таблиц подключать и использовать соединение не со срезом последних, а с реальными записями. Общий смысл - сначала выбрать все даты регистраторов+номенклатуру+характеристику и соединить с РС "ЦеныНоменклатуры" по номенклатуре+характеристики+(дата регистратора >= Периода записи РС "ЦеныНоменклатуры"). Сгруппировать по регистратору,номенклатуре,характеристики, итог по "Период записи РС"(Максимум). В итоге у тебя получится таблица Регистратор+Номенклатура+Характеристика+Дата последней установки цены. К ней уже можно присоеденить конкретную запись РС "ЦеныНоменклатуры" с ценой, актуальной на момент проведения документа
(6)
Вначале делал так,
работает почти правильно (выводит правильные цифры для регистраторов только после изменения цены в РС, но итог в общем правильный).
выглядит примерно так сейчас:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 60000
21.04.2011 Отчет о продажах -31000
(2ая строка в случае, если что-то уже было до введенного периода). Общий итог считает правильно, как и должно быть, но я вначале не учитывал, что было изменение цены. Поэтому мне надо иметь что-то вроде:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 30000
06.06.2008 Изменение цены 30000
21.04.2011 Отчет о продажах -31000
т.е. до изменения цены оценка (кол-во*цена) должна считаться по старой цене, а изменение цены (регистратор регистра сведений ЦеныНоменклатуры) должна отображать разницу, на которую изменилась цена (Колво * новая цена - колво * старая цена). Не пойму как это сделать.
Попробовал начало сделать Вашим вариантом, получилось как-то так:
Только итоговая оценка в этом варианте получается не правильная. Пока что не могу исправить ни 1, ни 2 вариант, чтобы выводило то что нужно.
Вначале делал так,
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ЦеныПериод
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ЦеныДо
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеПериод
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
&НачПер,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеДо
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
NULL КАК РегистраторДата,
"Остаток_До" КАК Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ВТ_АктуальныеЦены.Цена) КАК Оценка
ИЗ
ВТ_ТоварыНаСкладеДо КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЦеныДо КАК ВТ_АктуальныеЦены
ПО (ВТ_АктуальныеЦены.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ВТ_АктуальныеЦены.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_ТоварыНаСкладе.Регистратор.Дата,
ВТ_ТоварыНаСкладе.Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ВТ_АктуальныеЦены.Цена)
ИЗ
ВТ_ТоварыНаСкладеПериод КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЦеныПериод КАК ВТ_АктуальныеЦены
ПО (ВТ_АктуальныеЦены.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ВТ_АктуальныеЦены.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
СГРУППИРОВАТЬ ПО
ВТ_ТоварыНаСкладе.Регистратор,
ВТ_ТоварыНаСкладе.Регистратор.Дата
УПОРЯДОЧИТЬ ПО
РегистраторДата
ИТОГИ
СУММА(Оценка)
ПО
ОБЩИЕ
Показатьработает почти правильно (выводит правильные цифры для регистраторов только после изменения цены в РС, но итог в общем правильный).
выглядит примерно так сейчас:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 60000
21.04.2011 Отчет о продажах -31000
(2ая строка в случае, если что-то уже было до введенного периода). Общий итог считает правильно, как и должно быть, но я вначале не учитывал, что было изменение цены. Поэтому мне надо иметь что-то вроде:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 30000
06.06.2008 Изменение цены 30000
21.04.2011 Отчет о продажах -31000
т.е. до изменения цены оценка (кол-во*цена) должна считаться по старой цене, а изменение цены (регистратор регистра сведений ЦеныНоменклатуры) должна отображать разницу, на которую изменилась цена (Колво * новая цена - колво * старая цена). Не пойму как это сделать.
Попробовал начало сделать Вашим вариантом, получилось как-то так:
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеПериод
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
&НачПер,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеДо
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыНаСкладахОбороты.Регистратор КАК Регистратор,
ТоварыНаСкладахОбороты.Регистратор.Дата КАК РегистраторДата,
ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОбороты.Характеристика КАК Характеристика,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
ПОМЕСТИТЬ ДатыЦен
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, Склад = &Склад) КАК ТоварыНаСкладахОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ТоварыНаСкладахОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ТоварыНаСкладахОбороты.Характеристика = ЦеныНоменклатуры.Характеристика
И ТоварыНаСкладахОбороты.Регистратор.Дата >= ЦеныНоменклатуры.Период
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОбороты.Регистратор,
ТоварыНаСкладахОбороты.Номенклатура,
ТоварыНаСкладахОбороты.Характеристика,
ТоварыНаСкладахОбороты.Регистратор.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДатыЦен.Номенклатура КАК Номенклатура,
ДатыЦен.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ЦенаТовара
ИЗ
ДатыЦен КАК ДатыЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ДатыЦен.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ДатыЦен.Характеристика = ЦеныНоменклатуры.Характеристика
И ДатыЦен.Период = ЦеныНоменклатуры.Период
И ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ДатыЦен.Номенклатура,
ДатыЦен.Характеристика,
ЦеныНоменклатуры.Цена
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
NULL КАК РегистраторДата,
"Остаток_До" КАК Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ЦенаТовара.Цена) КАК Оценка
ИЗ
ВТ_ТоварыНаСкладеДо КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаТовара
ПО (ЦенаТовара.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ЦенаТовара.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_ТоварыНаСкладе.Регистратор.Дата,
ВТ_ТоварыНаСкладе.Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ЦенаТовара.Цена)
ИЗ
ВТ_ТоварыНаСкладеПериод КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаТовара
ПО (ЦенаТовара.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ЦенаТовара.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
СГРУППИРОВАТЬ ПО
ВТ_ТоварыНаСкладе.Регистратор,
ВТ_ТоварыНаСкладе.Регистратор.Дата
УПОРЯДОЧИТЬ ПО
РегистраторДата
ИТОГИ
СУММА(Оценка)
ПО
ОБЩИЕ
ПоказатьТолько итоговая оценка в этом варианте получается не правильная. Пока что не могу исправить ни 1, ни 2 вариант, чтобы выводило то что нужно.
(8)
Во втором варианте ошибся с РН
Исправил, но все равно не правильная оценка получается
Во втором варианте ошибся с РН
Исправил, но все равно не правильная оценка получается
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеПериод
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
&НачПер,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеДо
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор,
ТоварыОрганизацийОбороты.Регистратор.Дата КАК РегистраторДата,
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
ПОМЕСТИТЬ ДатыЦен
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(, , Регистратор, Склад = &Склад) КАК ТоварыОрганизацийОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика
И ТоварыОрганизацийОбороты.Регистратор.Дата >= ЦеныНоменклатуры.Период
СГРУППИРОВАТЬ ПО
ТоварыОрганизацийОбороты.Регистратор,
ТоварыОрганизацийОбороты.Номенклатура,
ТоварыОрганизацийОбороты.Характеристика,
ТоварыОрганизацийОбороты.Регистратор.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДатыЦен.Номенклатура КАК Номенклатура,
ДатыЦен.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ЦенаТовара
ИЗ
ДатыЦен КАК ДатыЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ДатыЦен.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ДатыЦен.Характеристика = ЦеныНоменклатуры.Характеристика
И ДатыЦен.Период = ЦеныНоменклатуры.Период
И ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ДатыЦен.Номенклатура,
ДатыЦен.Характеристика,
ЦеныНоменклатуры.Цена
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
NULL КАК РегистраторДата,
"Остаток_До" КАК Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ЦенаТовара.Цена) КАК Оценка
ИЗ
ВТ_ТоварыНаСкладеДо КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаТовара
ПО (ЦенаТовара.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ЦенаТовара.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВТ_ТоварыНаСкладе.Регистратор.Дата,
ВТ_ТоварыНаСкладе.Регистратор,
СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ЦенаТовара.Цена)
ИЗ
ВТ_ТоварыНаСкладеПериод КАК ВТ_ТоварыНаСкладе
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаТовара
ПО (ЦенаТовара.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
И (ЦенаТовара.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)
СГРУППИРОВАТЬ ПО
ВТ_ТоварыНаСкладе.Регистратор,
ВТ_ТоварыНаСкладе.Регистратор.Дата
УПОРЯДОЧИТЬ ПО
РегистраторДата
ИТОГИ
СУММА(Оценка)
ПО
ОБЩИЕ
Показать
Цены, вроде, нормально определяешь (во временных таблицах "ДатыЦен" и "ЦенаТовара"), Но вот что в остальных таблицах хочешь получить что-то не понял. Вроде сумма уже может быть посчитана в "ЦенаТовара", а ты что-то там дальше делаешь. А у тебя в ней получаются все установленные цены для Номенклатура+Характеристика, и если ты эту таблицу потом с чем-то соединяешь(как в последней выборке), кто у тебя дубли появятся. Наверное, поэтому суммы и не сходятся
(10)
Я соединяю сумму до начала периода с суммой в указанный период. Мне просто надо еще выводить как изменилась цена. Т.е. надо выводить Регистратор регистра сведений ЦеныНоменклатуры для которого должна отображаться общая сумма, на которую изменилась цена (Колво * новая цена - колво * старая цена)
Я соединяю сумму до начала периода с суммой в указанный период. Мне просто надо еще выводить как изменилась цена. Т.е. надо выводить Регистратор регистра сведений ЦеныНоменклатуры для которого должна отображаться общая сумма, на которую изменилась цена (Колво * новая цена - колво * старая цена)
(11) Что-то не понимаю, как ты хочешь вывести изменение цены, если у тебя номенклатура в отчет не выводится. Цена-то только у номенклатуры есть, а у тебя одни регистраторы. Так же непонятно зачем тебе "ВТ_ТоварыНаСкладеДо", если там цены нет, а количества тебе не нужны, цены в РС "ЦеныНоменклатуры" лежат. Общий смысл отчета сформулируй.
Если тебе нужны изменения цен, то в таблице "ЦенаТовара" присоедени ещё РС "ЦеныНоменклатуры" со срезом на дату "До" и пользуйся. Зачем все остальное-то?
Если тебе нужны изменения цен, то в таблице "ЦенаТовара" присоедени ещё РС "ЦеныНоменклатуры" со срезом на дату "До" и пользуйся. Зачем все остальное-то?
Как видно, у меня общий итог сходится, а промежуточные нет. По поводу изменения цены (это документ, который проводится в РС ценыноменклатуры) на скрине видно, там "установка цен" написано, считается так (весь товар который есть на складе на момент установки цены * Новую цену, которая указана в этом документе - весь товар который есть на складе на момент установки цены * старую цену, которая была до проведения документа). Скрин с отчета ТОРГ 29 в рознице, мне надо чтобы запросом получилось что-то наподобие этого
(17)
Чет фигня это, имхо. Документы "Установка цен" у тебя в РН "ТоварыНаСкладах" ничего не пишут, но каждое их появление должно пересчитывать остатки. Т.е. для каждого документа установки цен нужно рассчитать текущие остатки, последние и предыдущие цены и добавить ещё к обычным движениям. Одним запросом это на грани невозможно/слишком заморочено
По поводу изменения цены (это документ, который проводится в РС ценыноменклатуры) на скрине видно, там "установка цен" написано, считается так (весь товар который есть на складе на момент установки цены * Новую цену, которая указана в этом документе - весь товар который есть на складе на момент установки цены * старую цену, которая была до проведения документа)
Чет фигня это, имхо. Документы "Установка цен" у тебя в РН "ТоварыНаСкладах" ничего не пишут, но каждое их появление должно пересчитывать остатки. Т.е. для каждого документа установки цен нужно рассчитать текущие остатки, последние и предыдущие цены и добавить ещё к обычным движениям. Одним запросом это на грани невозможно/слишком заморочено
(20) Ну изменение цены-то запросом ты посчитаешь, но что бы посчитать изменение стоимости, тебе нужны остатки в количествах на дату установки цены. Как ты это запросом хочешь реализовать? Остатки запросом можно получить на одну какую-то конкретную дату, а тебе надо много разных остатков на разные даты, это только вручную обороты складывать, этож ппц в общем случае, вон как приходится извращаться, что бы только цены актуальные по регистратору получить. А тебе нужно тоже самое, только цены-то на дату указаны, а тебе придется остатки самому складывать
(22) Что-то типа этого:
У меня конфигурация чуть другая, так что там в соединениях характеристик нет
ВЫБРАТЬ
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК Приоритет,
ТоварыНаСкладахОбороты.Период,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
ТОГДА "Начальный остаток"
ИНАЧЕ ТоварыНаСкладахОбороты.Регистратор
КОНЕЦ КАК Регистратор,
ТоварыНаСкладахОбороты.Номенклатура,
ТоварыНаСкладахОбороты.КоличествоОборот,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодУстановкиЦены
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(, &КонПер, Регистратор, Склад = &Склад) КАК ТоварыНаСкладахОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ТоварыНаСкладахОбороты.Период >= ЦеныНоменклатуры.Период
И ТоварыНаСкладахОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
И (ЦеныНоменклатуры.ТипЦен = &ТипЦены)
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОбороты.Период,
ТоварыНаСкладахОбороты.Номенклатура,
ТоварыНаСкладахОбороты.КоличествоОборот,
ВЫБОР
КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
ТОГДА "Начальный остаток"
ИНАЧЕ ТоварыНаСкладахОбороты.Регистратор
КОНЕЦ
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Обороты.Приоритет,
ВТ_Обороты.Регистратор,
СУММА(ЦеныНоменклатуры.Цена * ВТ_Обороты.КоличествоОборот) КАК Сумма
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
ВТ_Обороты КАК ВТ_Обороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ВТ_Обороты.ПериодУстановкиЦены = ЦеныНоменклатуры.Период
И ВТ_Обороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
И (ЦеныНоменклатуры.ТипЦен = &ТипЦены)
СГРУППИРОВАТЬ ПО
ВТ_Обороты.Регистратор,
ВТ_Обороты.Приоритет
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Суммы.Приоритет,
ВТ_Суммы.Регистратор,
ВТ_Суммы.Сумма
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
ВТ_Суммы КАК ВТ_Суммы
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
МАКСИМУМ(3),
МАКСИМУМ("Остаток на конец"),
СУММА(ВТ_Суммы.Сумма)
ИЗ
ВТ_Суммы КАК ВТ_Суммы
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Остатки.Регистратор,
ВТ_Остатки.Сумма
ИЗ
ВТ_Остатки КАК ВТ_Остатки
УПОРЯДОЧИТЬ ПО
ВТ_Остатки.Приоритет
ПоказатьУ меня конфигурация чуть другая, так что там в соединениях характеристик нет
(25) Установка цен там, как ты хочешь, не отразится, Только цены в последующих документах будут новыми. А переоценки остатков не будет. На мой взгляд такой отчет неверен методологически будет, т.к. любой отчет должен иметь возможность проверки по первичным документам. А тут придется ему на слово верить
(27)
Что-то я ненадолго забыл про запрос. И начал делать с нуля, чтобы не вспоминать что там было, получилось чуть лучше, чем было. Сейчас все считает правильно, единственное что не выводит - это установка цен (пока еще не придумал как сделать)
Было так:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 60000
21.04.2011 Отчет о продажах -31000
Должно быть так
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 30000
06.06.2008 Изменение цены 30000
21.04.2011 Отчет о продажах -31000
Стало так
РегистраторДата Регистратор Оценка
-1000
Остаток_До 0
03.06.2008 Поступление товаров 30000
21.04.2011 Отчет о продажах -31000
Все документы зато теперь правильно считает, осталось добавить к этой таблице Изменение цены и все готово
Раньше документы прихода и расхода считались не по актуальным ценам, а по последним, поэтому общий итог был правильный, теперь считает по актуальным ценам
Что-то я ненадолго забыл про запрос. И начал делать с нуля, чтобы не вспоминать что там было, получилось чуть лучше, чем было. Сейчас все считает правильно, единственное что не выводит - это установка цен (пока еще не придумал как сделать)
Было так:
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 60000
21.04.2011 Отчет о продажах -31000
Должно быть так
РегистраторДата Регистратор Оценка
29000
Остаток_До 0
03.06.2008 Поступление товаров 30000
06.06.2008 Изменение цены 30000
21.04.2011 Отчет о продажах -31000
Стало так
РегистраторДата Регистратор Оценка
-1000
Остаток_До 0
03.06.2008 Поступление товаров 30000
21.04.2011 Отчет о продажах -31000
Все документы зато теперь правильно считает, осталось добавить к этой таблице Изменение цены и все готово
ВЫБРАТЬ
ЦеныНоменклатуры.Период КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика,
ЦеныНоменклатуры.Цена,
ЦеныНоменклатуры.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизаций.Регистратор КАК РегистраторТО,
ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
ТоварыОрганизаций.Период КАК Период,
МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизаций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
ПО (ВсеЦены.Период <= ТоварыОрганизаций.Период)
И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыОрганизаций.Номенклатура,
ТоварыОрганизаций.Характеристика,
ТоварыОрганизаций.Регистратор,
ТоварыОрганизаций.Период,
ТоварыОрганизаций.КоличествоОборот
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Остаток на начало периода" КАК Регистратор,
СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена)КАК Оценка
ИЗ
(ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
УПОРЯДОЧИТЬ ПО
Регистратор
ПоказатьРаньше документы прихода и расхода считались не по актуальным ценам, а по последним, поэтому общий итог был правильный, теперь считает по актуальным ценам
(28) Для вывода документов изменения цен попробуй делать по аналогии с ценами на дату - соединяешь с таблицей цен по условию даты "дата документа < дата цены" и берёшь минимум по "дата цены". За счет строго равенства получишь именно следующую цену.
(29)
Кажется, я что-то не то начал делать
Кажется, я что-то не то начал делать
ВЫБРАТЬ
МИНИМУМ(ЦеныНоменклатуры.Период) КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
СУММА(ЦеныНоменклатуры.Цена) КАК Цена
ИЗ
ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО (ВсеЦеныНаНужныеТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ВсеЦеныНаНужныеТовары.Характеристика = ЦеныНоменклатуры.Характеристика)
И (ВсеЦеныНаНужныеТовары.Период < ЦеныНоменклатуры.Период)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныНоменклатуры.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор
Показать
(32) Идея получения "цены на дату документа" выглядит так:
1) Получаем все цены за нужный на период, без всяких СрезПоследних.
2) По каждой номенклатуре получаем дату последней цены. А так как цены действуют по принципу - пока не сменят, то нужно брать цены, установленные не позднее даты документа. Т.е. соединение по дате будет "Документы.Дата >= Цены.Дата", но при группировке по номенклатуре и документу будет браться максимум, так как цена нужна последняя. Помещаем в ВТ. Получим таблицу вида "документ, дата-документа, товар, дата цены".
3) Берем ВТ из шага 2, и к ней добавляем цены с шага 1, соединяя по номенклатуре и периоду.
Таким образом ты сначала нашел, когда была последняя цена перед документов, а потом взял саму цену.
А теперь ты решаешь в некотором роде обратную задачу, ищешь первые цены после документа.
1) такой же как раньше.
2) Теперь соединять надо по "Документ.Дата < Цены.Дата" и при группировке брать Минимум(Цены.Дата).
3) Аналогично.
Надеюсь, это поможет разобраться.
1) Получаем все цены за нужный на период, без всяких СрезПоследних.
2) По каждой номенклатуре получаем дату последней цены. А так как цены действуют по принципу - пока не сменят, то нужно брать цены, установленные не позднее даты документа. Т.е. соединение по дате будет "Документы.Дата >= Цены.Дата", но при группировке по номенклатуре и документу будет браться максимум, так как цена нужна последняя. Помещаем в ВТ. Получим таблицу вида "документ, дата-документа, товар, дата цены".
3) Берем ВТ из шага 2, и к ней добавляем цены с шага 1, соединяя по номенклатуре и периоду.
Таким образом ты сначала нашел, когда была последняя цена перед документов, а потом взял саму цену.
А теперь ты решаешь в некотором роде обратную задачу, ищешь первые цены после документа.
1) такой же как раньше.
2) Теперь соединять надо по "Документ.Дата < Цены.Дата" и при группировке брать Минимум(Цены.Дата).
3) Аналогично.
Надеюсь, это поможет разобраться.
(34)
Что-то не совсем так получается
Первая часть
Вторая часть
Далее решил посчитать разницу, в итоге вот что
А результат должен быть такой же как тут
Вроде бы написал, как Вы и советовали
Что-то не совсем так получается
Первая часть
Вторая часть
Далее решил посчитать разницу, в итоге вот что
А результат должен быть такой же как тут
Вроде бы написал, как Вы и советовали
ВЫБРАТЬ
ЦеныНоменклатуры.Период КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика,
ЦеныНоменклатуры.ВидЦены,
ЦеныНоменклатуры.Цена,
ЦеныНоменклатуры.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизаций.Регистратор КАК РегистраторТО,
ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
ТоварыОрганизаций.Период КАК Период,
МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизаций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыОрганизаций.Номенклатура,
ТоварыОрганизаций.Характеристика,
ТоварыОрганизаций.Регистратор,
ТоварыОрганизаций.Период,
ТоварыОрганизаций.КоличествоОборот
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Остаток на начало периода" КАК Регистратор,
СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ПОМЕСТИТЬ ДокументыПоПоследнейЦене
ИЗ
(ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
ПО ТоварыДо.Номенклатура = ЦеныДо.Номенклатура
И ТоварыДо.Характеристика = ЦеныДо.Характеристика
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор,
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Период КАК ПериодТО,
МИНИМУМ(ВсеЦеныНаНужныеТовары.Период) КАК Период,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика
ПОМЕСТИТЬ ЦеныТоваровИВремяПервойЦены
ИЗ
ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ПО (ТоварыОрганизацийОбороты.Период < ВсеЦеныНаНужныеТовары.Период)
И (ТоварыОрганизацийОбороты.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура)
И (ТоварыОрганизацийОбороты.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыОрганизацийОбороты.Регистратор,
ТоварыОрганизацийОбороты.Номенклатура,
ТоварыОрганизацийОбороты.Характеристика,
ТоварыОрганизацийОбороты.Период,
ТоварыОрганизацийОбороты.КоличествоОборот
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЦеныТоваровИВремяПервойЦены.Регистратор КАК Регистратор,
СУММА(ВсеЦеныНаНужныеТовары.Цена * ЦеныТоваровИВремяПервойЦены.КоличествоОборот) КАК Оценка
ПОМЕСТИТЬ ДокументыПоПервойЦене
ИЗ
ЦеныТоваровИВремяПервойЦены КАК ЦеныТоваровИВремяПервойЦены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ПО (ВсеЦеныНаНужныеТовары.Период = ЦеныТоваровИВремяПервойЦены.Период)
И (ВсеЦеныНаНужныеТовары.Номенклатура = ЦеныТоваровИВремяПервойЦены.Номенклатура)
И (ВсеЦеныНаНужныеТовары.Характеристика = ЦеныТоваровИВремяПервойЦены.Характеристика)
ГДЕ
ВсеЦеныНаНужныеТовары.ВидЦены = &ВидЦены
И ЦеныТоваровИВремяПервойЦены.ПериодТО МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныТоваровИВремяПервойЦены.Регистратор
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДокументыПоПоследнейЦене.Регистратор КАК Регистратор,
ДокументыПоПервойЦене.Оценка - ДокументыПоПоследнейЦене.Оценка КАК Поле1
ИЗ
ДокументыПоПоследнейЦене КАК ДокументыПоПоследнейЦене
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокументыПоПервойЦене КАК ДокументыПоПервойЦене
ПО (ДокументыПоПервойЦене.Регистратор = ДокументыПоПоследнейЦене.Регистратор)
СГРУППИРОВАТЬ ПО
ДокументыПоПоследнейЦене.Регистратор,
ДокументыПоПервойЦене.Оценка - ДокументыПоПоследнейЦене.Оценка
Показать
(36)
Попробовал просчитать вручную, кажется понял почему неправильно считает, но не пойму как исправить
(34)
В результате этой части получается так
Приход01 Кроссовки 10.06.2008 01.06.2008 (цена на тот момент 2136,а количество 2 штуки)
Приход01 Мокасины 10.06.2008 02.06.2008 (1300 х 1)
Приход01 Сапоги 10.06.2008 02.06.2008 (1300 х 1)
В результате этой части получается так
Приход01 Кроссовки 10.06.2008 31.10.2008 (2136 х 2)
т.е. в 3 шагах я получаю
1 часть
Приход01 6872
2 часть
приход01 4272
Проблема в том, что при последующей цене посчитался только тот товар, который был в документе установки цены. т.е. только кроссовки. А по сути кроссовки были в документе изменения цены, но цену даже не меняли. И тут я запутался, что мне делать дальше
Попробовал просчитать вручную, кажется понял почему неправильно считает, но не пойму как исправить
(34)
2) По каждой номенклатуре получаем дату последней цены. А так как цены действуют по принципу - пока не сменят, то нужно брать цены, установленные не позднее даты документа. Т.е. соединение по дате будет "Документы.Дата >= Цены.Дата", но при группировке по номенклатуре и документу будет браться максимум, так как цена нужна последняя. Помещаем в ВТ. Получим таблицу вида "документ, дата-документа, товар, дата цены".
В результате этой части получается так
Приход01 Кроссовки 10.06.2008 01.06.2008 (цена на тот момент 2136,а количество 2 штуки)
Приход01 Мокасины 10.06.2008 02.06.2008 (1300 х 1)
Приход01 Сапоги 10.06.2008 02.06.2008 (1300 х 1)
2) Теперь соединять надо по "Документ.Дата < Цены.Дата" и при группировке брать Минимум(Цены.Дата).
3) Аналогично.
3) Аналогично.
В результате этой части получается так
Приход01 Кроссовки 10.06.2008 31.10.2008 (2136 х 2)
т.е. в 3 шагах я получаю
1 часть
Приход01 6872
2 часть
приход01 4272
Проблема в том, что при последующей цене посчитался только тот товар, который был в документе установки цены. т.е. только кроссовки. А по сути кроссовки были в документе изменения цены, но цену даже не меняли. И тут я запутался, что мне делать дальше
(41)
Решил сделать вот так,
Вроде бы вывело правильно изменение цены, сейчас буду тестировать на других периодах и складах
Решил сделать вот так,
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатуры.Период КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ УстановленныеЦеныНоменклатуры
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
&НачПер,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ПО ЦеныНоменклатуры.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура
И ЦеныНоменклатуры.Характеристика = ТоварыОрганизацийОбороты.Характеристика
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныНоменклатуры.Период < &КонПер
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
УстановленныеЦеныНоменклатуры КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК ЦеныДоИзменения
ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
УстановленныеЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК УстановленныеЦеныНоменклатуры
ПО ТаблицаЦен.Период = УстановленныеЦеныНоменклатуры.Период
И (УстановленныеЦеныНоменклатуры.Номенклатура = ТаблицаЦен.Номенклатура)
И (УстановленныеЦеныНоменклатуры.Характеристика = ТаблицаЦен.Характеристика)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
УстановленныеЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК УстановленныеЦеныНоменклатуры
ПО ТаблицаЦен.Номенклатура = УстановленныеЦеныНоменклатуры.Номенклатура
И ТаблицаЦен.Характеристика = УстановленныеЦеныНоменклатуры.Характеристика
И ТаблицаЦен.ПериодДо = УстановленныеЦеныНоменклатуры.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаНовыхЦен.Регистратор КАК Регистратор,
СУММА((ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена) * ТоварыОрганизацийОбороты.КоличествоОборот) КАК Поле1
ПОМЕСТИТЬ ИзменениеЦен
ИЗ
ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
ПО (ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор)
И (ТаблицаНовыхЦен.Номенклатура = ТаблицаСтарыхЦен.Номенклатура)
И (ТаблицаНовыхЦен.Характеристика = ТаблицаСтарыхЦен.Характеристика)
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
&НачПер,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ПО (ТаблицаНовыхЦен.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура
И ТаблицаСтарыхЦен.Характеристика = ТоварыОрганизацийОбороты.Характеристика)
СГРУППИРОВАТЬ ПО
ТаблицаНовыхЦен.Регистратор
ПоказатьВроде бы вывело правильно изменение цены, сейчас буду тестировать на других периодах и складах
(41)
Посмотрел отдельно по номенклатуре, все считает вроде правильно, только вот одной номенклатуры нет, потому что это первый документ установки цены для данной номенклатуры. Т.е. я посчитал все на 11.04 все сошлось, но не хватает 1 номенклатуры, у которой первый раз установилась цена именно этим документом, остальная номенклатура на 11.04 уже имела предыдущую цену, не пойму как исправить
Посмотрел отдельно по номенклатуре, все считает вроде правильно, только вот одной номенклатуры нет, потому что это первый документ установки цены для данной номенклатуры. Т.е. я посчитал все на 11.04 все сошлось, но не хватает 1 номенклатуры, у которой первый раз установилась цена именно этим документом, остальная номенклатура на 11.04 уже имела предыдущую цену, не пойму как исправить
(17) Хотя можно извратиться, добавить к оборотам по РН "ТоварыНаСкладах" движения по номенклатуре документов "Установка цен" с минусом, с ценами до этого документа и их же с плюсом, с ценами текущего(самого себя) документа. Но стоит ли это того, итоговую сумму по документу "Установка цен" ты ничем не проверишь и она каждый раз может быть разной
Вот готовая вроде
Единственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
ВЫБРАТЬ
ЦеныНоменклатуры.Период КАК Период,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика,
ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика,
ЦеныНоменклатуры.ВидЦены,
ЦеныНоменклатуры.Цена,
ЦеныНоменклатуры.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТоварыОрганизаций.Регистратор КАК РегистраторТО,
ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
ТоварыОрганизаций.Период КАК Период,
МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизаций
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)
СГРУППИРОВАТЬ ПО
ТоварыОрганизаций.Номенклатура,
ТоварыОрганизаций.Характеристика,
ТоварыОрганизаций.Регистратор,
ТоварыОрганизаций.Период,
ТоварыОрганизаций.КоличествоОборот
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
ЦеныНоменклатуры.Регистратор КАК Регистратор,
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныДоИзменения
ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)
СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Регистратор,
ЦеныНоменклатуры.Номенклатура,
ЦеныНоменклатуры.Характеристика
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
ВсеЦеныНаНужныеТовары.Цена КАК Цена,
ТаблицаЦен.Период КАК Период
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ПО ТаблицаЦен.Период = ВсеЦеныНаНужныеТовары.Период
И (ВсеЦеныНаНужныеТовары.Номенклатура = ТаблицаЦен.Номенклатура)
И (ВсеЦеныНаНужныеТовары.Характеристика = ТаблицаЦен.Характеристика)
СГРУППИРОВАТЬ ПО
ТаблицаЦен.Регистратор,
ТаблицаЦен.Номенклатура,
ТаблицаЦен.Характеристика,
ВсеЦеныНаНужныеТовары.Цена,
ТаблицаЦен.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаЦен.Регистратор КАК Регистратор,
ТаблицаЦен.Номенклатура КАК Номенклатура,
ТаблицаЦен.Характеристика КАК Характеристика,
ВсеЦеныНаНужныеТовары.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
ТаблицаЦен КАК ТаблицаЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
ПО ТаблицаЦен.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура
И ТаблицаЦен.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика
И ТаблицаЦен.ПериодДо = ВсеЦеныНаНужныеТовары.Период
СГРУППИРОВАТЬ ПО
ТаблицаЦен.Регистратор,
ТаблицаЦен.Номенклатура,
ТаблицаЦен.Характеристика,
ВсеЦеныНаНужныеТовары.Цена
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТаблицаНовыхЦен.Регистратор КАК Регистратор,
ТаблицаНовыхЦен.Номенклатура КАК Номенклатура,
ТаблицаНовыхЦен.Характеристика КАК Характеристика,
ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена КАК Цена,
ТаблицаНовыхЦен.Период КАК Период
ПОМЕСТИТЬ ФинальныеЦены
ИЗ
ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
ПО ТаблицаСтарыхЦен.Номенклатура = ТаблицаНовыхЦен.Номенклатура
И ТаблицаСтарыхЦен.Характеристика = ТаблицаНовыхЦен.Характеристика
ГДЕ
ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
"Остаток на начало периода" КАК Регистратор,
СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ИЗ
(ВЫБРАТЬ
ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&НачПер,
Регистратор,
Склад = &Склад
И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
ЦеныНоменклатуры.ВидЦены = &ВидЦены
И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ФинальныеЦены.Регистратор,
СУММА(ФинальныеЦены.Цена * ТоварыОрганизацийОбороты.КоличествоОборот)
ИЗ
ФинальныеЦены КАК ФинальныеЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
,
&КонПер,
Регистратор,
Склад = &Склад
И Организация = &организация) КАК ТоварыОрганизацийОбороты
ПО (ФинальныеЦены.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура)
И (ФинальныеЦены.Характеристика = ТоварыОрганизацийОбороты.Характеристика)
И (ФинальныеЦены.Период >= ТоварыОрганизацийОбороты.Период)
ГДЕ
ФинальныеЦены.Период > &НачПер
СГРУППИРОВАТЬ ПО
ФинальныеЦены.Регистратор
ИТОГИ ПО
ОБЩИЕ
ПоказатьЕдинственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот