СКД ВычислитьВыражение - Остаток на начало/конец

1. ciddex 10.10.19 13:57 Сейчас в теме
Добрый день! Я из регистра накопления по продажам (где только СуммаОборот и КоличествоОборот) собираю отчет с Начальным остатком и Конечным остатком на период (т.е. СуммаПродаж - СуммаРасходов).

НачальныйОстаток вычисляю по ВычислитьВыражение("Сумма(СуммаПриход)-Сумма(СуммаРасход)", , , "Первая", "Предыдущая")
КонечныйОстаток вычисляю по ВычислитьВыражение("Сумма(СуммаПриход)-Сумма(СуммаРасход)", , , "Первая", "Текущая")

Приход, Расход Конечный остаток все выводится верно, но вот НачальныйОстаток пуст на начало периода. Да я понимаю, что данным взяться неоткуда, т.к. смотрю отчет за месяц. Но как это можно исправить? Нужно чтобы при выборе периода ЭтотМесяц Начальный остаток был (Сумма(СуммаПриход) - Сумма(СуммаРасход)) <= &ДатаНачала


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

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цены
	ПО (вз.Период = Цены.Период
		И вз.Номенклатура = Цены.Номенклатура
		И вз.Характеристика = Цены.Характеристика
		И Цены.ВидЦены.Наименование = "Цена Р")
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. neuro88 10.10.19 14:43 Сейчас в теме
(1) прочитал по диагонали, поэтому наверняка что-то упустил, но...

регистр - оборотный? остатков нет?

тогда, как вариант, добавить еще один набор данных, в нем получить остаток на дату ,- и далее полученное значение использовать...
7. ciddex 10.10.19 14:50 Сейчас в теме
(6) Есть только Сумма Оборот и Количество оборот. Начального, конечного, прихода и расхода нет
2. VmvLer 10.10.19 14:27 Сейчас в теме
хотел помочь
передумал, уж больно большие костыли в решении задачи

лучше все выбросить и написать заново ...пусть это сделает кто-то другой
3. ciddex 10.10.19 14:29 Сейчас в теме
4. VmvLer 10.10.19 14:32 Сейчас в теме
(3) трудно сказать, просто он так огромен, что его сложно описать.
это все равно когда муравей у муравья спросит: "слона не видел?"
5. ciddex 10.10.19 14:39 Сейчас в теме
(4) Там нет костылей. Внутри запроса идут отборы по цене на дату документа и отбор по магазину. Вопрос не в запросе, а как мне получить начальный остаток и нарастающий итог по этим данным? Есть совет или может знаешь решение? Запрос переписать не проблема
9. VmvLer 10.10.19 14:53 Сейчас в теме
(5) я знаю решение получения остатка нарастающим итогом, но не скажу, ибо это банальная догма.

В вашем запросе я вижу принципиально новый подход и потенциал, который я ошибочно принял за костыли.
Поэтому я буду молчать насчет догм, что-то мне подсказывает, что вы можете создать шедевр.
11. ciddex 10.10.19 15:04 Сейчас в теме
(9) Так вы не знаете для чего я получил эти данные таким запросом и называете это костылем? Предложите свой вариант, если конечно он у вас есть
13. VmvLer 10.10.19 15:07 Сейчас в теме
(11) Я ошибся насчет костыля, извините.
Теперь я это называю перспективной технологией и как раз непонимание всей глубины вашей идеи
мешает предлагать варианты.
14. ciddex 10.10.19 15:09 Сейчас в теме
(13) Забудьте про мой вариант. Подскажите как я могу это реализовать? Почему вы на ровном месте начинаете оскорблять? Я начинающий разработчик, а не специалист со стажем 7 лет
15. VmvLer 10.10.19 15:16 Сейчас в теме
(14) Ни в коем разе - просто я понял, что пути решения подобной задачи вам необходимо найти методом размышлений. что в в этом зазорного.

просто я еще не видел когда из начинающего получался спец, который не смог получить остатки в запросе.
17. ciddex 10.10.19 15:22 Сейчас в теме
(15) Я вас понял, у вас знаний не больше чем у меня судя по ответам. Решили просто подзаработать комментариев
19. VmvLer 10.10.19 15:25 Сейчас в теме
(17) да, коплю на "Москвич-2041"
8. ciddex 10.10.19 14:51 Сейчас в теме
Неужели никак нельзя получить начальным остатком Сумму до Даты начала?
10. dhurricane 10.10.19 14:55 Сейчас в теме
(8) Уточните, пожалуйста. А как Вы его себе представляете. СКД оперирует лишь теми данными, которые Вы ей предоставляете. Т.е. то, что вернет запрос. Так откуда взять начальный остаток?
12. ciddex 10.10.19 15:06 Сейчас в теме
(10) Я думал через объединение получить и остатки на период <= Датаначала, чтобы получить начальный остаток. Но как это потом применить, чтобы начальный остаток заполнялся и расчет счет от него, а не пустого значения?
16. dhurricane 10.10.19 15:18 Сейчас в теме
(12) Ну так в той же формуле ресурса. Что-то вроде:
Максимум(СуммаСамыйНачальныйОстаток) + ВычислитьВыражение("Сумма(СуммаПриход)-Сумма(СуммаРасход)", , , "Первая", "Предыдущая")

Функция "Максимум" здесь используется потому, что если Вы будете получать начальный остаток прямо в запросе, он у Вас будет задублирован для каждого из регистратора.

Решение так себе, но раз Вы не брезгуете "хардкодингом", то Вам должно подойти. :-)
18. ciddex 10.10.19 15:23 Сейчас в теме
(16) А есть иное решение? Облазил кучу форумов, но ответа на свой вопрос не смог найти..(
20. dhurricane 10.10.19 15:26 Сейчас в теме
(18) Ну Валерий Вам, хоть и в язвительной форме, но пытался дать наводку. Почему же Вы не используете виртуальную таблицу "ОстаткиИОбороты"?
21. ciddex 10.10.19 15:31 Сейчас в теме
(20) В конфигурации Комплексная автоматизация есть регистр только оборотов, в котором соответственно нет ресурсов по остаткам на начало и конец периода. Скрины приложил
Прикрепленные файлы:
22. dhurricane 10.10.19 15:35 Сейчас в теме
(21) Тогда что для Вас начальный остаток? Та же сумма, только рассчитанная от начала времен? Боюсь, с учетом того, что Вы используете расчет цены на каждую секунду, такой расчет может очень скоро "загнуть" Ваше сервер 1С.

P.S. Быть может стоит "поискать" другой регистр для Ваших целей?
24. ciddex 10.10.19 15:42 Сейчас в теме
(22) Да, та же сумма. На счет цен согласен, я объяснял моему начальству, что данный способ будет нагружать сервер, тем более когда база разрастется. Но им вариант со срезом последних не заинтересовал. Они получаются просто на каждый документ, а не на каждую секунду. Т.е. ближайшая цена к дате регистратора
23. ciddex 10.10.19 15:37 Сейчас в теме
(16)
Максимум(СуммаСамыйНачальныйОстаток)
объясните пожалуйста эту строчку, если Вам не сложно. Как должен получить значение СуммаСамыйНачальныйОстаток? Суммировать сумму оборота за период <= ДатаНачала в запросе? (отдельном)
25. dhurricane 10.10.19 15:43 Сейчас в теме
26. ciddex 10.10.19 16:11 Сейчас в теме
(25) Добавилась пустая строка и колонка с нач остатком пустая
Прикрепленные файлы:
28. dhurricane 11.10.19 08:01 Сейчас в теме
(26) Для получения остатка пользуйтесь не объединением, а соединением. Можно даже добавить отдельный набор данных, где и получать остаток запросом.
27. ciddex 11.10.19 01:08 Сейчас в теме
Никто не знает как это реализовать? Перепробовал все.. моих знаний не хватает. Помогите пожалуйста кто знает
29. karamazoff 118 13.10.19 14:25 Сейчас в теме
Не совсем понял ваш запрос, но, если Кон остаток, приход и расход за период, выводятся верно (из 1-го сообщения), почему бы это не запихнуть во вложенный запрос, а потом по результатам вложенного посчитать нач.остаток = кон.остаток - (приход-расход)...
30. den_vrn 13 14.10.19 14:52 Сейчас в теме
Мне кажется что постановка задачи у вас не корректная, сформулируйте саму задачу, что нужно сделать?


по запросу
1. Не ставьте условия по наименованию, переделайте с параметром у виртуальной таблицы
НЕ АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры.Родитель.Наименование В (&СписУслуг)
И НЕ АналитикаУчетаПоПартнерам.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
И Склад = &МагазинБелыйГород
2. Вместо вложенного запроса лучше использовать, временные таблицы и по необходимости индексацию
3. Можно через объединение попробовать вывести первой строкой только расчет начального остатка на дату &НачалоПериода
Оставьте свое сообщение

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