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



По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) я знаю решение получения остатка нарастающим итогом, но не скажу, ибо это банальная догма.
В вашем запросе я вижу принципиально новый подход и потенциал, который я ошибочно принял за костыли.
Поэтому я буду молчать насчет догм, что-то мне подсказывает, что вы можете создать шедевр.
В вашем запросе я вижу принципиально новый подход и потенциал, который я ошибочно принял за костыли.
Поэтому я буду молчать насчет догм, что-то мне подсказывает, что вы можете создать шедевр.
(12) Ну так в той же формуле ресурса. Что-то вроде:
Функция "Максимум" здесь используется потому, что если Вы будете получать начальный остаток прямо в запросе, он у Вас будет задублирован для каждого из регистратора.
Решение так себе, но раз Вы не брезгуете "хардкодингом", то Вам должно подойти. :-)
Максимум(СуммаСамыйНачальныйОстаток) + ВычислитьВыражение("Сумма(СуммаПриход)-Сумма(СуммаРасход)", , , "Первая", "Предыдущая")
Функция "Максимум" здесь используется потому, что если Вы будете получать начальный остаток прямо в запросе, он у Вас будет задублирован для каждого из регистратора.
Решение так себе, но раз Вы не брезгуете "хардкодингом", то Вам должно подойти. :-)
(21) Тогда что для Вас начальный остаток? Та же сумма, только рассчитанная от начала времен? Боюсь, с учетом того, что Вы используете расчет цены на каждую секунду, такой расчет может очень скоро "загнуть" Ваше сервер 1С.
P.S. Быть может стоит "поискать" другой регистр для Ваших целей?
P.S. Быть может стоит "поискать" другой регистр для Ваших целей?
(22) Да, та же сумма. На счет цен согласен, я объяснял моему начальству, что данный способ будет нагружать сервер, тем более когда база разрастется. Но им вариант со срезом последних не заинтересовал. Они получаются просто на каждый документ, а не на каждую секунду. Т.е. ближайшая цена к дате регистратора
Не совсем понял ваш запрос, но, если Кон остаток, приход и расход за период, выводятся верно (из 1-го сообщения), почему бы это не запихнуть во вложенный запрос, а потом по результатам вложенного посчитать нач.остаток = кон.остаток - (приход-расход)...
Мне кажется что постановка задачи у вас не корректная, сформулируйте саму задачу, что нужно сделать?
по запросу
1. Не ставьте условия по наименованию, переделайте с параметром у виртуальной таблицы
НЕ АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры.Родитель.Наименование В (&СписУслуг)
И НЕ АналитикаУчетаПоПартнерам.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
И Склад = &МагазинБелыйГород
2. Вместо вложенного запроса лучше использовать, временные таблицы и по необходимости индексацию
3. Можно через объединение попробовать вывести первой строкой только расчет начального остатка на дату &НачалоПериода
по запросу
1. Не ставьте условия по наименованию, переделайте с параметром у виртуальной таблицы
НЕ АналитикаУчетаНоменклатуры.Номенклатура.ВидНоменклатуры.Родитель.Наименование В (&СписУслуг)
И НЕ АналитикаУчетаПоПартнерам.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
И Склад = &МагазинБелыйГород
2. Вместо вложенного запроса лучше использовать, временные таблицы и по необходимости индексацию
3. Можно через объединение попробовать вывести первой строкой только расчет начального остатка на дату &НачалоПериода
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот