Объединение результатов двух запросов

1. user719210 07.06.17 12:32 Сейчас в теме
Добрый день.

Есть 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
По теме из базы знаний
Найденные решения
48. user719210 26.06.17 11:44 Сейчас в теме
Вот готовая вроде
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика,
	ЦеныНоменклатуры.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизаций.Регистратор КАК РегистраторТО,
	ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
	ТоварыОрганизаций.Период КАК Период,
	МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
	ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
	ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизаций
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
		ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
			И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
			И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизаций.Номенклатура,
	ТоварыОрганизаций.Характеристика,
	ТоварыОрганизаций.Регистратор,
	ТоварыОрганизаций.Период,
	ТоварыОрганизаций.КоличествоОборот
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
	ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныДоИзменения
		ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
			И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	ВсеЦеныНаНужныеТовары.Цена КАК Цена,
	ТаблицаЦен.Период КАК Период
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ПО ТаблицаЦен.Период = ВсеЦеныНаНужныеТовары.Период
			И (ВсеЦеныНаНужныеТовары.Номенклатура = ТаблицаЦен.Номенклатура)
			И (ВсеЦеныНаНужныеТовары.Характеристика = ТаблицаЦен.Характеристика)

СГРУППИРОВАТЬ ПО
	ТаблицаЦен.Регистратор,
	ТаблицаЦен.Номенклатура,
	ТаблицаЦен.Характеристика,
	ВсеЦеныНаНужныеТовары.Цена,
	ТаблицаЦен.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	ВсеЦеныНаНужныеТовары.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ПО ТаблицаЦен.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура
			И ТаблицаЦен.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика
			И ТаблицаЦен.ПериодДо = ВсеЦеныНаНужныеТовары.Период

СГРУППИРОВАТЬ ПО
	ТаблицаЦен.Регистратор,
	ТаблицаЦен.Номенклатура,
	ТаблицаЦен.Характеристика,
	ВсеЦеныНаНужныеТовары.Цена
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаНовыхЦен.Регистратор КАК Регистратор,
	ТаблицаНовыхЦен.Номенклатура КАК Номенклатура,
	ТаблицаНовыхЦен.Характеристика КАК Характеристика,
	ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена КАК Цена,
	ТаблицаНовыхЦен.Период КАК Период
ПОМЕСТИТЬ ФинальныеЦены
ИЗ
	ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
		ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
		ПО ТаблицаСтарыхЦен.Номенклатура = ТаблицаНовыхЦен.Номенклатура
			И ТаблицаСтарыхЦен.Характеристика = ТаблицаНовыхЦен.Характеристика
ГДЕ
	ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Остаток на начало периода" КАК Регистратор,
	СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ИЗ
	(ВЫБРАТЬ
		ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
		ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
		ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
		ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
	ИЗ
		РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&НачПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
			ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		ИЗ
			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
		ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
			И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
	СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
	ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
		ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
			И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
			И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ФинальныеЦены.Регистратор,
	СУММА(ФинальныеЦены.Цена * ТоварыОрганизацийОбороты.КоличествоОборот)
ИЗ
	ФинальныеЦены КАК ФинальныеЦены
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&КонПер,
				Регистратор,
				Склад = &Склад
					И Организация = &организация) КАК ТоварыОрганизацийОбороты
		ПО (ФинальныеЦены.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура)
			И (ФинальныеЦены.Характеристика = ТоварыОрганизацийОбороты.Характеристика)
			И (ФинальныеЦены.Период >= ТоварыОрганизацийОбороты.Период)
ГДЕ
	ФинальныеЦены.Период > &НачПер

СГРУППИРОВАТЬ ПО
	ФинальныеЦены.Регистратор
ИТОГИ ПО
	ОБЩИЕ
Показать


Единственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DimDiemon 79 07.06.17 12:35 Сейчас в теме
В последний запрос объединением добавить таблицу расхода, сумму сделать со знаком "-" просто.
Ну или если прям надо чтобы приход расход был, то добавляешь поле расход, куда сумму с плюсом и поле "Всего", куда из первой таблицы с плюсом, а из второй с минусом.
user719210; +1 Ответить
3. ResetAtreides 07.06.17 13:52 Сейчас в теме
1) Для начала определись что в итоге хочешь получить. Например, непонятно зачем ты выбираешь номенклатуру и количество, если тебе нужна только сумма и регистратор. Сразу отпадут лишние группировки
2) Используешь левое соединение, но при отсутствии цен, сумма будет нулевая. Зачем тебе такие записи, если номенклатура не нужна. Юзай внутреннее
3) Отбор по складу в последней таблице, хотя можно отобрать в первых двух. Лишние данные таскаешь
В итоге, что-то типа:
ВЫБРАТЬ
	ТоварыКПоступлению.Регистратор,
	ТоварыКПоступлению.Номенклатура,
	ТоварыКПоступлению.Характеристика,
	ТоварыКПоступлению.Количество
ПОМЕСТИТЬ ВТ_ПриходРасход
ИЗ
	ТоварыКПоступлению КАК ТоварыКПоступлению
ГДЕ
	ТоварыКПоступлению.Склад = &Склад

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыКОтгрузке.Регистратор,
	ТоварыКОтгрузке.Номенклатура,
	ТоварыКОтгрузке.Характеристика,
	ТоварыКОтгрузке.Количество * -1
ИЗ
	ТоварыКОтгрузке КАК ТоварыКОтгрузке
ГДЕ
	ТоварыКОтгрузке.Склад = &Склад
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ПриходРасход.Регистратор.Дата,
	ВТ_ПриходРасход.Регистратор,
	ВТ_ПриходРасход.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК Сумма
ИЗ
	ВТ_ПриходРасход КАК ВТ_ПриходРасход
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
		ПО ВТ_ПриходРасход.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
			И ВТ_ПриходРасход.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика 

УПОРЯДОЧИТЬ ПО
	ВТ_ПриходРасход.Регистратор.Дата
Показать
Vitaly1C8; user719210; +2 Ответить
5. user719210 08.06.17 07:01 Сейчас в теме
(3)
Сделал по Вашему совету, добавил период вид цены и итоги, все работает хорошо.
Нашел регистр накопления Товары на складе и переделал по нему, работает так-же, только я неправильно понял условие изначально. Мне надо чтобы в расчете значение цены использовалось то, которое было на момент проведения документа
Вот код:

ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата КАК Дата,
	ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЦеныНоменклатурыСрезПоследних.Цена КАК Оценка
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПер, &КонПер, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
		ПО (ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
			И (ТоварыНаСкладахОстаткиИОбороты.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата,
	ТоварыНаСкладахОстаткиИОбороты.Регистратор,
	ЦеныНоменклатурыСрезПоследних.Цена

УПОРЯДОЧИТЬ ПО
	Оценка Убыв
ИТОГИ
	СУММА(Оценка)
ПО
	ОБЩИЕ
Показать

Мне надо добавлять период к РС или делать какое-то условие?
6. ResetAtreides 08.06.17 12:39 Сейчас в теме
(5)
Мне надо чтобы в расчете значение цены использовалось то, которое было на момент проведения документа

Это все усложняет, т.к. в результате документов может быть много и у них у всех разные даты, а срез цен только на какую-то конкретную дату будет. Если хочется это в рамках запроса делать, то придется ещё несколько временных таблиц подключать и использовать соединение не со срезом последних, а с реальными записями. Общий смысл - сначала выбрать все даты регистраторов+номенклатуру+характеристику и соединить с РС "ЦеныНоменклатуры" по номенклатуре+характеристики+(дата регистратора >= Периода записи РС "ЦеныНоменклатуры"). Сгруппировать по регистратору,номенклатуре,характеристики, итог по "Период записи РС"(Максимум). В итоге у тебя получится таблица Регистратор+Номенклатура+Характеристика+Дата последней установки цены. К ней уже можно присоеденить конкретную запись РС "ЦеныНоменклатуры" с ценой, актуальной на момент проведения документа
user719210; +1 Ответить
7. user719210 09.06.17 03:49 Сейчас в теме
(6)Спасибо, буду пробовать
8. user719210 13.06.17 05:37 Сейчас в теме
(6)
Вначале делал так,
ВЫБРАТЬ
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ЦеныПериод
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ЦеныДо
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
	ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеПериод
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			&НачПер,
			&КонПер,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
	ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеДо
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			&НачПер,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	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 вариант, чтобы выводило то что нужно.
9. user719210 13.06.17 06:12 Сейчас в теме
(8)
Во втором варианте ошибся с РН
Исправил, но все равно не правильная оценка получается
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
	ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеПериод
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			&НачПер,
			&КонПер,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
	ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ТоварыНаСкладеДо
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			&НачПер,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор,
	ТоварыОрганизацийОбороты.Регистратор.Дата КАК РегистраторДата,
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период
ПОМЕСТИТЬ ДатыЦен
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(, , Регистратор, Склад = &Склад) КАК ТоварыОрганизацийОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика
			И ТоварыОрганизацийОбороты.Регистратор.Дата >= ЦеныНоменклатуры.Период

СГРУППИРОВАТЬ ПО
	ТоварыОрганизацийОбороты.Регистратор,
	ТоварыОрганизацийОбороты.Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика,
	ТоварыОрганизацийОбороты.Регистратор.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДатыЦен.Номенклатура КАК Номенклатура,
	ДатыЦен.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ЦенаТовара
ИЗ
	ДатыЦен КАК ДатыЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ДатыЦен.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И ДатыЦен.Характеристика = ЦеныНоменклатуры.Характеристика
			И ДатыЦен.Период = ЦеныНоменклатуры.Период
			И ВидЦены = &ВидЦены

СГРУППИРОВАТЬ ПО
	ДатыЦен.Номенклатура,
	ДатыЦен.Характеристика,
	ЦеныНоменклатуры.Цена
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	NULL КАК РегистраторДата,
	"Остаток_До" КАК Регистратор,
	СУММА(ВТ_ТоварыНаСкладе.КоличествоОборот * ЦенаТовара.Цена) КАК Оценка
ИЗ
	ВТ_ТоварыНаСкладеДо КАК ВТ_ТоварыНаСкладе
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаТовара 
		ПО (ЦенаТовара.Номенклатура = ВТ_ТоварыНаСкладе.Номенклатура)
			И (ЦенаТовара.Характеристика = ВТ_ТоварыНаСкладе.Характеристика)

ОБЪЕДИНИТЬ ВСЕ

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

УПОРЯДОЧИТЬ ПО
	РегистраторДата
ИТОГИ
	СУММА(Оценка)
ПО
	ОБЩИЕ
Показать
4. ResetAtreides 07.06.17 13:58 Сейчас в теме
ещё группировку и итог добавь, как у тебя в начале было.Без работающего конструктора непросто их корректно прописать )
user719210; +1 Ответить
10. ResetAtreides 13.06.17 13:54 Сейчас в теме
Цены, вроде, нормально определяешь (во временных таблицах "ДатыЦен" и "ЦенаТовара"), Но вот что в остальных таблицах хочешь получить что-то не понял. Вроде сумма уже может быть посчитана в "ЦенаТовара", а ты что-то там дальше делаешь. А у тебя в ней получаются все установленные цены для Номенклатура+Характеристика, и если ты эту таблицу потом с чем-то соединяешь(как в последней выборке), кто у тебя дубли появятся. Наверное, поэтому суммы и не сходятся
11. user719210 14.06.17 02:53 Сейчас в теме
(10)
Я соединяю сумму до начала периода с суммой в указанный период. Мне просто надо еще выводить как изменилась цена. Т.е. надо выводить Регистратор регистра сведений ЦеныНоменклатуры для которого должна отображаться общая сумма, на которую изменилась цена (Колво * новая цена - колво * старая цена)
15. ResetAtreides 14.06.17 10:10 Сейчас в теме
(11) Что-то не понимаю, как ты хочешь вывести изменение цены, если у тебя номенклатура в отчет не выводится. Цена-то только у номенклатуры есть, а у тебя одни регистраторы. Так же непонятно зачем тебе "ВТ_ТоварыНаСкладеДо", если там цены нет, а количества тебе не нужны, цены в РС "ЦеныНоменклатуры" лежат. Общий смысл отчета сформулируй.
Если тебе нужны изменения цен, то в таблице "ЦенаТовара" присоедени ещё РС "ЦеныНоменклатуры" со срезом на дату "До" и пользуйся. Зачем все остальное-то?
16. user719210 14.06.17 10:37 Сейчас в теме
(15)
Должно быть что-то наподобие этого
Прикрепленные файлы:
12. user719210 14.06.17 03:11 Сейчас в теме
(10)
В 1ом варианте итог хотя бы правильный, а во втором итог получается меньше, чем должен быть
13. user719210 14.06.17 03:15 Сейчас в теме
Вот результаты запросов: 1ый
Прикрепленные файлы:
14. user719210 14.06.17 03:16 Сейчас в теме
а вот второй
Прикрепленные файлы:
17. user719210 14.06.17 10:41 Сейчас в теме
Как видно, у меня общий итог сходится, а промежуточные нет. По поводу изменения цены (это документ, который проводится в РС ценыноменклатуры) на скрине видно, там "установка цен" написано, считается так (весь товар который есть на складе на момент установки цены * Новую цену, которая указана в этом документе - весь товар который есть на складе на момент установки цены * старую цену, которая была до проведения документа). Скрин с отчета ТОРГ 29 в рознице, мне надо чтобы запросом получилось что-то наподобие этого
18. ResetAtreides 14.06.17 11:39 Сейчас в теме
(17)
По поводу изменения цены (это документ, который проводится в РС ценыноменклатуры) на скрине видно, там "установка цен" написано, считается так (весь товар который есть на складе на момент установки цены * Новую цену, которая указана в этом документе - весь товар который есть на складе на момент установки цены * старую цену, которая была до проведения документа)

Чет фигня это, имхо. Документы "Установка цен" у тебя в РН "ТоварыНаСкладах" ничего не пишут, но каждое их появление должно пересчитывать остатки. Т.е. для каждого документа установки цен нужно рассчитать текущие остатки, последние и предыдущие цены и добавить ещё к обычным движениям. Одним запросом это на грани невозможно/слишком заморочено
20. user719210 14.06.17 11:51 Сейчас в теме
(18)
Я хотел изменение цены посчитать отдельным запросом, а потом объединить с результатом того запроса, т.е. вывести приход и расход, после вывести изменение цены и по всему этому посчитать общие итоги
21. ResetAtreides 14.06.17 11:56 Сейчас в теме
(20) Ну изменение цены-то запросом ты посчитаешь, но что бы посчитать изменение стоимости, тебе нужны остатки в количествах на дату установки цены. Как ты это запросом хочешь реализовать? Остатки запросом можно получить на одну какую-то конкретную дату, а тебе надо много разных остатков на разные даты, это только вручную обороты складывать, этож ппц в общем случае, вон как приходится извращаться, что бы только цены актуальные по регистратору получить. А тебе нужно тоже самое, только цены-то на дату указаны, а тебе придется остатки самому складывать
22. user719210 14.06.17 12:01 Сейчас в теме
(21)
Не знаю как, буду пытаться хотя бы тот запрос доделать, чтобы считал правильно приход и расход, без учета изменения цены
23. ResetAtreides 14.06.17 12:05 Сейчас в теме
(22) Что-то типа этого:
ВЫБРАТЬ 
	ВЫБОР
		КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК Приоритет,
	ТоварыНаСкладахОбороты.Период,
	ВЫБОР
		КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
			ТОГДА "Начальный остаток"
		ИНАЧЕ ТоварыНаСкладахОбороты.Регистратор
	КОНЕЦ КАК Регистратор,
	ТоварыНаСкладахОбороты.Номенклатура,
	ТоварыНаСкладахОбороты.КоличествоОборот,
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодУстановкиЦены
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Обороты(, &КонПер, Регистратор, Склад = &Склад) КАК ТоварыНаСкладахОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ТоварыНаСкладахОбороты.Период >= ЦеныНоменклатуры.Период
			И ТоварыНаСкладахОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И (ЦеныНоменклатуры.ТипЦен = &ТипЦены)

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладахОбороты.Период,
	ТоварыНаСкладахОбороты.Номенклатура,
	ТоварыНаСкладахОбороты.КоличествоОборот,
	ВЫБОР
		КОГДА ТоварыНаСкладахОбороты.Период < &НачПер
			ТОГДА "Начальный остаток"
		ИНАЧЕ ТоварыНаСкладахОбороты.Регистратор
	КОНЕЦ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Обороты.Приоритет,
	ВТ_Обороты.Регистратор,
	СУММА(ЦеныНоменклатуры.Цена * ВТ_Обороты.КоличествоОборот) КАК Сумма
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
	ВТ_Обороты КАК ВТ_Обороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ВТ_Обороты.ПериодУстановкиЦены = ЦеныНоменклатуры.Период
			И ВТ_Обороты.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И (ЦеныНоменклатуры.ТипЦен = &ТипЦены)

СГРУППИРОВАТЬ ПО
	ВТ_Обороты.Регистратор,
	ВТ_Обороты.Приоритет
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Суммы.Приоритет,
	ВТ_Суммы.Регистратор,
	ВТ_Суммы.Сумма
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
	ВТ_Суммы КАК ВТ_Суммы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	МАКСИМУМ(3),
	МАКСИМУМ("Остаток на конец"),
	СУММА(ВТ_Суммы.Сумма)
ИЗ
	ВТ_Суммы КАК ВТ_Суммы
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Остатки.Регистратор,
	ВТ_Остатки.Сумма
ИЗ
	ВТ_Остатки КАК ВТ_Остатки

УПОРЯДОЧИТЬ ПО
	ВТ_Остатки.Приоритет
Показать

У меня конфигурация чуть другая, так что там в соединениях характеристик нет
user719210; +1 Ответить
25. user719210 14.06.17 12:30 Сейчас в теме
(23)
Попробовал таким способом считает правильно только до установки цен
27. ResetAtreides 14.06.17 13:25 Сейчас в теме
(25) Установка цен там, как ты хочешь, не отразится, Только цены в последующих документах будут новыми. А переоценки остатков не будет. На мой взгляд такой отчет неверен методологически будет, т.к. любой отчет должен иметь возможность проверки по первичным документам. А тут придется ему на слово верить
28. user719210 23.06.17 10:09 Сейчас в теме
(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

Все документы зато теперь правильно считает, осталось добавить к этой таблице Изменение цены и все готово
 ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизаций.Регистратор КАК РегистраторТО,
	ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
	ТоварыОрганизаций.Период КАК Период,
	МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
	ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
	ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизаций
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
		ПО (ВсеЦены.Период <= ТоварыОрганизаций.Период)
			И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
			И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизаций.Номенклатура,
	ТоварыОрганизаций.Характеристика,
	ТоварыОрганизаций.Регистратор,
	ТоварыОрганизаций.Период,
	ТоварыОрганизаций.КоличествоОборот
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Остаток на начало периода" КАК Регистратор,
	СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена)КАК Оценка
ИЗ
	(ВЫБРАТЬ
		ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
		ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
		ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
		ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
	ИЗ
		РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&НачПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
			ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		ИЗ
			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
		ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
			И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
	СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
	ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
			И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
			И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО

УПОРЯДОЧИТЬ ПО
	Регистратор
Показать


Раньше документы прихода и расхода считались не по актуальным ценам, а по последним, поэтому общий итог был правильный, теперь считает по актуальным ценам
29. comptr 33 23.06.17 10:29 Сейчас в теме
(28) Для вывода документов изменения цен попробуй делать по аналогии с ценами на дату - соединяешь с таблицей цен по условию даты "дата документа < дата цены" и берёшь минимум по "дата цены". За счет строго равенства получишь именно следующую цену.
user719210; +1 Ответить
30. user719210 23.06.17 10:53 Сейчас в теме
(29)
Хмм, попробую, спасибо за совет
31. user719210 23.06.17 11:43 Сейчас в теме
(29)
что-то не очень получается, по-всякому пробовал, видимо понял Вас не до конца
32. user719210 23.06.17 12:14 Сейчас в теме
(29)
Кажется, я что-то не то начал делать
ВЫБРАТЬ
	МИНИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	СУММА(ЦеныНоменклатуры.Цена) КАК Цена
ИЗ
	ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО (ВсеЦеныНаНужныеТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ВсеЦеныНаНужныеТовары.Характеристика = ЦеныНоменклатуры.Характеристика)
			И (ВсеЦеныНаНужныеТовары.Период < ЦеныНоменклатуры.Период)
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныНоменклатуры.Период МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор
Показать
33. comptr 33 23.06.17 14:15 Сейчас в теме
(32) Зачем при получении остатка на начало обороты? Может лучше обратиться к таблице остатков?
Сейчас внимательнее запрос гляну
34. comptr 33 23.06.17 14:34 Сейчас в теме
(32) Идея получения "цены на дату документа" выглядит так:
1) Получаем все цены за нужный на период, без всяких СрезПоследних.
2) По каждой номенклатуре получаем дату последней цены. А так как цены действуют по принципу - пока не сменят, то нужно брать цены, установленные не позднее даты документа. Т.е. соединение по дате будет "Документы.Дата >= Цены.Дата", но при группировке по номенклатуре и документу будет браться максимум, так как цена нужна последняя. Помещаем в ВТ. Получим таблицу вида "документ, дата-документа, товар, дата цены".
3) Берем ВТ из шага 2, и к ней добавляем цены с шага 1, соединяя по номенклатуре и периоду.
Таким образом ты сначала нашел, когда была последняя цена перед документов, а потом взял саму цену.


А теперь ты решаешь в некотором роде обратную задачу, ищешь первые цены после документа.
1) такой же как раньше.
2) Теперь соединять надо по "Документ.Дата < Цены.Дата" и при группировке брать Минимум(Цены.Дата).
3) Аналогично.

Надеюсь, это поможет разобраться.
user719210; +1 Ответить
35. user719210 26.06.17 03:55 Сейчас в теме
(34)
Спасибо, буду пробовать
36. user719210 26.06.17 04:40 Сейчас в теме
(34)
Что-то не совсем так получается

Первая часть




Вторая часть




Далее решил посчитать разницу, в итоге вот что




А результат должен быть такой же как тут




Вроде бы написал, как Вы и советовали
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика,
	ЦеныНоменклатуры.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизаций.Регистратор КАК РегистраторТО,
	ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
	ТоварыОрганизаций.Период КАК Период,
	МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
	ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
	ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизаций
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
		ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
			И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
			И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизаций.Номенклатура,
	ТоварыОрганизаций.Характеристика,
	ТоварыОрганизаций.Регистратор,
	ТоварыОрганизаций.Период,
	ТоварыОрганизаций.КоличествоОборот
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Остаток на начало периода" КАК Регистратор,
	СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ПОМЕСТИТЬ ДокументыПоПоследнейЦене
ИЗ
	(ВЫБРАТЬ
		ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
		ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
		ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
		ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
	ИЗ
		РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&НачПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
			ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		ИЗ
			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
		ПО ТоварыДо.Номенклатура = ЦеныДо.Номенклатура
			И ТоварыДо.Характеристика = ЦеныДо.Характеристика

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
	СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
	ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
		ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
			И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
			И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизацийОбороты.Регистратор КАК Регистратор,
	ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
	ТоварыОрганизацийОбороты.Период КАК ПериодТО,
	МИНИМУМ(ВсеЦеныНаНужныеТовары.Период) КАК Период,
	ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
	ТоварыОрганизацийОбороты.Характеристика КАК Характеристика
ПОМЕСТИТЬ ЦеныТоваровИВремяПервойЦены
ИЗ
	ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&КонПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ПО (ТоварыОрганизацийОбороты.Период < ВсеЦеныНаНужныеТовары.Период)
			И (ТоварыОрганизацийОбороты.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура)
			И (ТоварыОрганизацийОбороты.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизацийОбороты.Регистратор,
	ТоварыОрганизацийОбороты.Номенклатура,
	ТоварыОрганизацийОбороты.Характеристика,
	ТоварыОрганизацийОбороты.Период,
	ТоварыОрганизацийОбороты.КоличествоОборот
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныТоваровИВремяПервойЦены.Регистратор КАК Регистратор,
	СУММА(ВсеЦеныНаНужныеТовары.Цена * ЦеныТоваровИВремяПервойЦены.КоличествоОборот) КАК Оценка
ПОМЕСТИТЬ ДокументыПоПервойЦене
ИЗ
	ЦеныТоваровИВремяПервойЦены КАК ЦеныТоваровИВремяПервойЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ПО (ВсеЦеныНаНужныеТовары.Период = ЦеныТоваровИВремяПервойЦены.Период)
			И (ВсеЦеныНаНужныеТовары.Номенклатура = ЦеныТоваровИВремяПервойЦены.Номенклатура)
			И (ВсеЦеныНаНужныеТовары.Характеристика = ЦеныТоваровИВремяПервойЦены.Характеристика)
ГДЕ
	ВсеЦеныНаНужныеТовары.ВидЦены = &ВидЦены
	И ЦеныТоваровИВремяПервойЦены.ПериодТО МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныТоваровИВремяПервойЦены.Регистратор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДокументыПоПоследнейЦене.Регистратор КАК Регистратор,
	ДокументыПоПервойЦене.Оценка - ДокументыПоПоследнейЦене.Оценка КАК Поле1
ИЗ
	ДокументыПоПоследнейЦене КАК ДокументыПоПоследнейЦене
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокументыПоПервойЦене КАК ДокументыПоПервойЦене
		ПО (ДокументыПоПервойЦене.Регистратор = ДокументыПоПоследнейЦене.Регистратор)

СГРУППИРОВАТЬ ПО
	ДокументыПоПоследнейЦене.Регистратор,
	ДокументыПоПервойЦене.Оценка - ДокументыПоПоследнейЦене.Оценка
Показать
39. user719210 26.06.17 05:41 Сейчас в теме
(36)
Заметил, что если в результирующей таблице из 251850 отнять 16200 , то получится 235650 (такое жи число как первая установка цены), а вот остальные никак не сходятся
40. user719210 26.06.17 07:20 Сейчас в теме
(36)
Попробовал просчитать вручную, кажется понял почему неправильно считает, но не пойму как исправить
(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) Аналогично.

В результате этой части получается так
Приход01 Кроссовки 10.06.2008 31.10.2008 (2136 х 2)

т.е. в 3 шагах я получаю
1 часть
Приход01 6872

2 часть
приход01 4272

Проблема в том, что при последующей цене посчитался только тот товар, который был в документе установки цены. т.е. только кроссовки. А по сути кроссовки были в документе изменения цены, но цену даже не меняли. И тут я запутался, что мне делать дальше
41. comptr 33 26.06.17 09:27 Сейчас в теме
(40) В (36) пример того, как должно быть, берется из Торг-29, если я правильно помню. Она считает приход, расход, изменение цены. Почему бы тогда не взять её за основу?
42. user719210 26.06.17 09:34 Сейчас в теме
(41)
Правильно, надо сделать запрос, который выводит практически тоже самое, что и в ТОРГ-29. Я пытался в нем разобраться и сделать так же, но не получилось( Мне осталось только посчитать изменение цены и объединить с запросом ДокументыПоПоследнейЦене
43. user719210 26.06.17 09:52 Сейчас в теме
(41)
Решил сделать вот так,
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ УстановленныеЦеныНоменклатуры
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
				&НачПер,
				&КонПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ПО ЦеныНоменклатуры.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура
			И ЦеныНоменклатуры.Характеристика = ТоварыОрганизацийОбороты.Характеристика
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныНоменклатуры.Период < &КонПер
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
	УстановленныеЦеныНоменклатуры КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК ЦеныДоИзменения
		ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
			И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	УстановленныеЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК УстановленныеЦеныНоменклатуры
		ПО ТаблицаЦен.Период = УстановленныеЦеныНоменклатуры.Период
			И (УстановленныеЦеныНоменклатуры.Номенклатура = ТаблицаЦен.Номенклатура)
			И (УстановленныеЦеныНоменклатуры.Характеристика = ТаблицаЦен.Характеристика)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	УстановленныеЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ УстановленныеЦеныНоменклатуры КАК УстановленныеЦеныНоменклатуры
		ПО ТаблицаЦен.Номенклатура = УстановленныеЦеныНоменклатуры.Номенклатура
			И ТаблицаЦен.Характеристика = УстановленныеЦеныНоменклатуры.Характеристика
			И ТаблицаЦен.ПериодДо = УстановленныеЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаНовыхЦен.Регистратор КАК Регистратор,
	СУММА((ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена) * ТоварыОрганизацийОбороты.КоличествоОборот) КАК Поле1
ПОМЕСТИТЬ ИзменениеЦен
ИЗ
	ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
		ПО (ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор)
			И (ТаблицаНовыхЦен.Номенклатура = ТаблицаСтарыхЦен.Номенклатура)
			И (ТаблицаНовыхЦен.Характеристика = ТаблицаСтарыхЦен.Характеристика)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
				&НачПер,
				&КонПер,
				Регистратор,
				Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ПО (ТаблицаНовыхЦен.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура
				И ТаблицаСтарыхЦен.Характеристика = ТоварыОрганизацийОбороты.Характеристика)

СГРУППИРОВАТЬ ПО
	ТаблицаНовыхЦен.Регистратор
Показать


Вроде бы вывело правильно изменение цены, сейчас буду тестировать на других периодах и складах
45. user719210 26.06.17 10:25 Сейчас в теме
(41)
Посмотрел отдельно по номенклатуре, все считает вроде правильно, только вот одной номенклатуры нет, потому что это первый документ установки цены для данной номенклатуры. Т.е. я посчитал все на 11.04 все сошлось, но не хватает 1 номенклатуры, у которой первый раз установилась цена именно этим документом, остальная номенклатура на 11.04 уже имела предыдущую цену, не пойму как исправить
46. user719210 26.06.17 10:42 Сейчас в теме
(45)
Нет, ошибка не в этом. Почему то количество номенклатуры на складе неправильно смотрит
47. user719210 26.06.17 11:26 Сейчас в теме
(41)
Все-таки удалось посчитать изменение цен, сейчас все приведу в нормальный вид и выложу код
49. user719210 26.06.17 12:03 Сейчас в теме
(41)
Благодарю за помощь, ваша подсказка очень помогла
19. ResetAtreides 14.06.17 11:46 Сейчас в теме
(17) Хотя можно извратиться, добавить к оборотам по РН "ТоварыНаСкладах" движения по номенклатуре документов "Установка цен" с минусом, с ценами до этого документа и их же с плюсом, с ценами текущего(самого себя) документа. Но стоит ли это того, итоговую сумму по документу "Установка цен" ты ничем не проверишь и она каждый раз может быть разной
24. ResetAtreides 14.06.17 12:07 Сейчас в теме
"Приоритет" можно выкинуть, это чтоб остатки на начало и конец вверху и внизу результата были
user719210; +1 Ответить
26. user719210 14.06.17 12:35 Сейчас в теме
(24)
А вот эта хорошая идея, позаимствую, спасибо)
37. user719210 26.06.17 04:59 Сейчас в теме
Кажется, мне надо после того как получил дату последней цены, брать дату предыдущей цены, а не первой после установки.
38. user719210 26.06.17 05:30 Сейчас в теме
(37)
Хотя впринципе и по следующему тоже можно
44. user719210 26.06.17 09:53 Сейчас в теме
А вот для других неправильно
48. user719210 26.06.17 11:44 Сейчас в теме
Вот готовая вроде
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ ВсеЦеныНаНужныеТовары
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизацийОбороты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО (ТоварыОрганизацийОбороты.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ТоварыОрганизацийОбороты.Характеристика = ЦеныНоменклатуры.Характеристика)
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика,
	ЦеныНоменклатуры.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыОрганизаций.Регистратор КАК РегистраторТО,
	ТоварыОрганизаций.Номенклатура КАК НоменклатураТО,
	ТоварыОрганизаций.Период КАК Период,
	МАКСИМУМ(ВсеЦены.Период) КАК ПериодТО,
	ТоварыОрганизаций.Характеристика КАК ХарактеристикаТО,
	ТоварыОрганизаций.КоличествоОборот
ПОМЕСТИТЬ ЦеныТоваровИВремяПоследнейЦены
ИЗ
	РегистрНакопления.ТоварыОрганизаций.Обороты(
			,
			,
			Регистратор,
			Склад = &Склад
				И Организация = &Организация) КАК ТоварыОрганизаций
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦены
		ПО ТоварыОрганизаций.Период >= ВсеЦены.Период
			И (ВсеЦены.Номенклатура = ТоварыОрганизаций.Номенклатура)
			И (ВсеЦены.Характеристика = ТоварыОрганизаций.Характеристика)

СГРУППИРОВАТЬ ПО
	ТоварыОрганизаций.Номенклатура,
	ТоварыОрганизаций.Характеристика,
	ТоварыОрганизаций.Регистратор,
	ТоварыОрганизаций.Период,
	ТоварыОрганизаций.КоличествоОборот
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	МАКСИМУМ(ЦеныДоИзменения.Период) КАК ПериодДо,
	ЦеныНоменклатуры.Регистратор КАК Регистратор,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика
ПОМЕСТИТЬ ТаблицаЦен
ИЗ
	ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныДоИзменения
		ПО ЦеныНоменклатуры.Период > ЦеныДоИзменения.Период
			И (ЦеныДоИзменения.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ЦеныДоИзменения.Характеристика = ЦеныНоменклатуры.Характеристика)

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Регистратор,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Характеристика
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	ВсеЦеныНаНужныеТовары.Цена КАК Цена,
	ТаблицаЦен.Период КАК Период
ПОМЕСТИТЬ ТаблицаНовыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ПО ТаблицаЦен.Период = ВсеЦеныНаНужныеТовары.Период
			И (ВсеЦеныНаНужныеТовары.Номенклатура = ТаблицаЦен.Номенклатура)
			И (ВсеЦеныНаНужныеТовары.Характеристика = ТаблицаЦен.Характеристика)

СГРУППИРОВАТЬ ПО
	ТаблицаЦен.Регистратор,
	ТаблицаЦен.Номенклатура,
	ТаблицаЦен.Характеристика,
	ВсеЦеныНаНужныеТовары.Цена,
	ТаблицаЦен.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаЦен.Регистратор КАК Регистратор,
	ТаблицаЦен.Номенклатура КАК Номенклатура,
	ТаблицаЦен.Характеристика КАК Характеристика,
	ВсеЦеныНаНужныеТовары.Цена КАК Цена
ПОМЕСТИТЬ ТаблицаСтарыхЦен
ИЗ
	ТаблицаЦен КАК ТаблицаЦен
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ВсеЦеныНаНужныеТовары
		ПО ТаблицаЦен.Номенклатура = ВсеЦеныНаНужныеТовары.Номенклатура
			И ТаблицаЦен.Характеристика = ВсеЦеныНаНужныеТовары.Характеристика
			И ТаблицаЦен.ПериодДо = ВсеЦеныНаНужныеТовары.Период

СГРУППИРОВАТЬ ПО
	ТаблицаЦен.Регистратор,
	ТаблицаЦен.Номенклатура,
	ТаблицаЦен.Характеристика,
	ВсеЦеныНаНужныеТовары.Цена
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаНовыхЦен.Регистратор КАК Регистратор,
	ТаблицаНовыхЦен.Номенклатура КАК Номенклатура,
	ТаблицаНовыхЦен.Характеристика КАК Характеристика,
	ТаблицаНовыхЦен.Цена - ТаблицаСтарыхЦен.Цена КАК Цена,
	ТаблицаНовыхЦен.Период КАК Период
ПОМЕСТИТЬ ФинальныеЦены
ИЗ
	ТаблицаСтарыхЦен КАК ТаблицаСтарыхЦен
		ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНовыхЦен КАК ТаблицаНовыхЦен
		ПО ТаблицаСтарыхЦен.Номенклатура = ТаблицаНовыхЦен.Номенклатура
			И ТаблицаСтарыхЦен.Характеристика = ТаблицаНовыхЦен.Характеристика
ГДЕ
	ТаблицаНовыхЦен.Регистратор = ТаблицаСтарыхЦен.Регистратор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	"Остаток на начало периода" КАК Регистратор,
	СУММА(ТоварыДо.КоличествоОборот * ЦеныДо.Цена) КАК Оценка
ИЗ
	(ВЫБРАТЬ
		ТоварыОрганизацийОбороты.Номенклатура КАК Номенклатура,
		ТоварыОрганизацийОбороты.Характеристика КАК Характеристика,
		ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
		ТоварыОрганизацийОбороты.Регистратор КАК Регистратор
	ИЗ
		РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&НачПер,
				Регистратор,
				Склад = &Склад
					И Организация = &Организация) КАК ТоварыОрганизацийОбороты) КАК ТоварыДо
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
			ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
			ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		ИЗ
			РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачПер, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныДо
		ПО (ТоварыДо.Номенклатура = ЦеныДо.Номенклатура)
			И (ТоварыДо.Характеристика = ЦеныДо.Характеристика)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО,
	СУММА(ЦеныНоменклатуры.Цена * ЦеныТоваровИВремяПоследнейЦены.КоличествоОборот)
ИЗ
	ЦеныТоваровИВремяПоследнейЦены КАК ЦеныТоваровИВремяПоследнейЦены
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦеныНаНужныеТовары КАК ЦеныНоменклатуры
		ПО ЦеныТоваровИВремяПоследнейЦены.НоменклатураТО = ЦеныНоменклатуры.Номенклатура
			И ЦеныТоваровИВремяПоследнейЦены.ХарактеристикаТО = ЦеныНоменклатуры.Характеристика
			И ЦеныТоваровИВремяПоследнейЦены.ПериодТО = ЦеныНоменклатуры.Период
ГДЕ
	ЦеныНоменклатуры.ВидЦены = &ВидЦены
	И ЦеныТоваровИВремяПоследнейЦены.Период МЕЖДУ &НачПер И &КонПер

СГРУППИРОВАТЬ ПО
	ЦеныТоваровИВремяПоследнейЦены.РегистраторТО

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ФинальныеЦены.Регистратор,
	СУММА(ФинальныеЦены.Цена * ТоварыОрганизацийОбороты.КоличествоОборот)
ИЗ
	ФинальныеЦены КАК ФинальныеЦены
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты(
				,
				&КонПер,
				Регистратор,
				Склад = &Склад
					И Организация = &организация) КАК ТоварыОрганизацийОбороты
		ПО (ФинальныеЦены.Номенклатура = ТоварыОрганизацийОбороты.Номенклатура)
			И (ФинальныеЦены.Характеристика = ТоварыОрганизацийОбороты.Характеристика)
			И (ФинальныеЦены.Период >= ТоварыОрганизацийОбороты.Период)
ГДЕ
	ФинальныеЦены.Период > &НачПер

СГРУППИРОВАТЬ ПО
	ФинальныеЦены.Регистратор
ИТОГИ ПО
	ОБЩИЕ
Показать


Единственный минус, это строчка с изменением цены, где 0. Пробовал убрать через условие на ЕСТЬ NULL, но не получилось
Вот строчку где установка цены = 0 , не могу убрать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот