Нужна помощь с запросом

1. user1302499 27.09.23 15:57 Сейчас в теме
Возник вопрос с запросом. Есть 2 таблицы (скрин 1), доп расходы начисляются ежедневно, можно ли к допрасходам прикрутить себестоимость с прихода, который был не день в день с доп расходом? (скрин 2)

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ДополнительныеРасходы.День КАК День,
ДополнительныеРасходы.Товар КАК Товар,
ДополнительныеРасходы.ДопРасходыПриход КАК ДопРасходыПриход,
Себестоимость.СебестоимостьПриход КАК СебестоимостьПриход
ИЗ
ДополнительныеРасходы КАК ДополнительныеРасходы
ЛЕВОЕ СОЕДИНЕНИЕ Себестоимость КАК Себестоимость
ПО (ДополнительныеРасходы.День = Себестоимость.День
И ДополнительныеРасходы.Товар = Себестоимость.Товар)
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. glek 120 27.09.23 16:32 Сейчас в теме
(1) Можно. Если в СКД, то я использовал 2 набора данных.
У меня была задача связать план продаж и фактические продажи. При этом план продаж вносился всегда за месяц но несколькими датами и всегда с 1 числа. Использовал следующий алгоритм: запросом определял какие даты фактических продаж относятся к какому периоду плана и с помощью 2 наборов данных (ведущим выступал план) соединял по этим датам.
2. makfromkz 35 27.09.23 16:18 Сейчас в теме
Я так понимаю, себестоимость считают на конец периода, например месяца, поэтому будут собираться расходы/затраты этого периода по номенклатуре или (укрупненно) по номенклатурной группе, и косвенные затраты будут распределяться согласно правилам их распределения.
5. user1302499 27.09.23 20:35 Сейчас в теме
(2) доп расходы начисляются ежедневно. Это для тестового задания
4. Dr.HiHi 2 27.09.23 19:29 Сейчас в теме
можно, только, скорее всего, вопрос не правильно поставлен
и Вам нужны остатки на каждое движение
Вы же не знаете, что доп. расходы относятся к конкретному приходу??
тем более если выберут период, где не будет прихода, а будет только доп.расходы
6. user1302499 28.09.23 12:46 Сейчас в теме
(4)
(4) Вы правы, не понятно как это сделать
7. Said-We 28.09.23 13:38 Сейчас в теме
(1) Результат, который должен получиться на бумаге нарисуйте. Я правильно понимаю, что надо максимальный по дате приход, но равный или меньший от даты начисления доп расходов? Если да, то в чём вопрос?
8. user1302499 28.09.23 13:53 Сейчас в теме
(7) Не Ваш понял вопрос... в Отчете должно быть, как я думаю, период из регистра, товар и (ДопРасходы+СебестоимостьПервоначальная)/СебестоимостьПервоначальна*100 = Процент. Не понимаю как организовать регистр чтобы вытаскивать себестоимость первоначальную на любой день. Чтобы подсчитать процент
9. Said-We 28.09.23 14:10 Сейчас в теме
(8) Чем данная задача отличается от вытаскивания цены на товар, например при перемещении?
Цена тоже не каждый день устанавливается, а перемещение как есть так и есть.
10. Said-We 28.09.23 14:19 Сейчас в теме
(1) Вам вот это надо?
Прикрепленные файлы:
11. user1302499 28.09.23 14:30 Сейчас в теме
14. Said-We 28.09.23 14:38 Сейчас в теме
(11) Отлично. Тогда решение в (10), только осталось запрос перевести на язык запросов 1С.
В 1С это стандартная задача решается через поиск ближайшей даты, на которую надо брать и потом прицеплять уже по связи товар + дата, либо коррелированный запрос, в котором это делается сразу.
12. user1302499 28.09.23 14:37 Сейчас в теме
(10) На 1С этот запрос возможно переписать?
15. Said-We 28.09.23 14:41 Сейчас в теме
(12) Конечно. Производительность и читабельность такого запроса серьёзно храмает по сравнению с (10), но можно. И это стандартная задача для 1С, со стандартным решением.
13. user1302499 28.09.23 14:37 Сейчас в теме
(10) Это вложенный запрос?
16. Said-We 28.09.23 14:43 Сейчас в теме
(13) Нет. Это не вложенный запрос. Хотя визуально да.
Вложенным обычно считают запрос который внутри FROM.
Внутри SELECT это не считается вложенным запросом. И такую стандартную конструкцию 1С не поддерживает. Только через LEFT JOIN.
17. user1302499 28.09.23 14:53 Сейчас в теме
(16)
ВЫБРАТЬ
         КурсыВалютСрезПоследних.Валюта,
         КурсыВалютСрезПоследних.Период КАК ПоследняяДата,
         КурсыВалют.Период КАК ПредпоследняяДата,
         КурсыВалютСрезПоследних.Курс КАК ПоследнийКурс,
         КурсыВалют.Курс КАК ПредпоследнийКурс
ИЗ
       РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО ((КурсыВалют.Валюта, КурсыВалют.Период) В
            (ВЫБРАТЬ
                      КурсыВалют.Валюта,
                      МАКСИМУМ(КурсыВалют.Период) КАК Период
              ИЗ
                      РегистрСведений.КурсыВалют КАК КурсыВалют
              ГДЕ
              КурсыВалют.Период < КурсыВалютСрезПоследних.Период
              И КурсыВалют.Валюта = КурсыВалютСрезПоследних.Валюта
              СГРУППИРОВАТЬ ПО
              КурсыВалют.Валюта))
Показать


Нашел пример в инете, как-то так должно выглядеть?
18. Said-We 28.09.23 14:58 Сейчас в теме
19. user1302499 28.09.23 15:37 Сейчас в теме
(18)
У меня почему то как полное соединение отрабатывает?

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

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДополнительныеРасходы.День КАК День,
	ДополнительныеРасходы.Товар КАК Товар,
	ДополнительныеРасходы.ДопРасходыПриход КАК ДопРасходыПриход,
	Себестоимость.СебестоимостьПриход КАК СебестоимостьПриход
ИЗ
	ДополнительныеРасходы КАК ДополнительныеРасходы
		ЛЕВОЕ СОЕДИНЕНИЕ Себестоимость КАК Себестоимость
		ПО ((ДополнительныеРасходы.День, ДополнительныеРасходы.Товар) В
				(ВЫБРАТЬ
					МАКСИМУМ(Себестоимость.День),
					Себестоимость.Товар
				ИЗ
					Себестоимость
				ГДЕ
					Себестоимость.День <= ДополнительныеРасходы.День
					И ДополнительныеРасходы.Товар = Себестоимость.Товар
				СГРУППИРОВАТЬ ПО
					Себестоимость.Товар)) 
Показать
Прикрепленные файлы:
21. Said-We 28.09.23 19:09 Сейчас в теме
(19) А если так (писал на коленке - проверяйте)....
ВЫБРАТЬ
    ДополнительныеРасходы.День КАК День,
    ДополнительныеРасходы.Товар КАК Товар,
    ДополнительныеРасходы.ДопРасходыПриход КАК ДопРасходыПриход,
    Себестоимость.СебестоимостьПриход КАК СебестоимостьПриход
ИЗ
    ДополнительныеРасходы КАК ДополнительныеРасходы
        ЛЕВОЕ СОЕДИНЕНИЕ Себестоимость КАК Себестоимость
        ПО ДополнительныеРасходы.Товар = Себестоимость.Товар
                И Себестоимость.День В
                (ВЫБРАТЬ
                    МАКСИМУМ(Себестоимость.День),
                    Себестоимость.Товар
                ИЗ
                    Себестоимость
                ГДЕ
                    Себестоимость.День <= ДополнительныеРасходы.День
                    И ДополнительныеРасходы.Товар = Себестоимость.Товар
                СГРУППИРОВАТЬ ПО
                    Себестоимость.Товар) 
Показать
20. Dr.HiHi 2 28.09.23 17:11 Сейчас в теме
(19) приблизительно, но могу ошибаться
ВЫБРАТЬ
	&НачалоПериода КАК Период,
	СебестоимостьТоваров.ТоварКАК Товар,
	СебестоимостьТоваров.СтоимостьОстаток КАК СебестоимостьНачальныйОстаток,
	0 КАК СебестоимостьОборот,
	СебестоимостьТоваров.СуммаДопРасходовОстаток КАК ДопРасходыНачальныйОстаток,
	0 КАК ДопРасходыОборот
ПОМЕСТИТЬ СебестоимостьТоваров
ИЗ
	РегистрНакопления.СебестоимостьТоваров.Остатки(&НачалоПериода, ) КАК СебестоимостьТоваров

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

ВЫБРАТЬ
	СебестоимостьТоваров.Период,
	СебестоимостьТоваров.Товар,
	0,
	СебестоимостьТоваров.СтоимостьОборот,
	0,
	СебестоимостьТоваров.СуммаДопРасходовОборот
ИЗ
	РегистрНакопления.СебестоимостьТоваров.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК СебестоимостьТоваров
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СебестоимостьТоваров.Период КАК Период,
	СебестоимостьТоваров.Товар,
	МАКСИМУМ(СебестоимостьТоваров.СебестоимостьНачальныйОстаток) + СУММА(ЕСТЬNULL(СебестоимостьТоваров1.СебестоимостьНачальныйОстаток, 0) + ЕСТЬNULL(СебестоимостьТоваров1.СебестоимостьОборот, 0)) КАК СебестоимостьНачальныйОстаток,
	МАКСИМУМ(СебестоимостьТоваров.СебестоимостьОборот) КАК СебестоимостьОборот,
	МАКСИМУМ(СебестоимостьТоваров.СебестоимостьНачальныйОстаток + СебестоимостьТоваров.СебестоимостьОборот) + СУММА(ЕСТЬNULL(СебестоимостьТоваров1.СебестоимостьНачальныйОстаток, 0) + ЕСТЬNULL(СебестоимостьТоваров1.СебестоимостьОборот, 0)) КАК СебестоимостьКонечныйОстаток,
	МАКСИМУМ(СебестоимостьТоваров.ДопРасходыНачальныйОстаток) + СУММА(ЕСТЬNULL(СебестоимостьТоваров1.ДопРасходыНачальныйОстаток, 0) + ЕСТЬNULL(СебестоимостьТоваров1.ДопРасходыОборот, 0)) КАК ДопРасходыНачальныйОстаток,
	МАКСИМУМ(СебестоимостьТоваров.ДопРасходыОборот) КАК ДопРасходыОборот,
	МАКСИМУМ(СебестоимостьТоваров.ДопРасходыНачальныйОстаток + СебестоимостьТоваров.ДопРасходыОборот) + СУММА(ЕСТЬNULL(СебестоимостьТоваров1.ДопРасходыНачальныйОстаток, 0) + ЕСТЬNULL(СебестоимостьТоваров1.ДопРасходыОборот, 0)) КАК ДопРасходыКонечныйОстаток
ИЗ
	СебестоимостьТоваров КАК СебестоимостьТоваров
		ЛЕВОЕ СОЕДИНЕНИЕ СебестоимостьТоваров КАК СебестоимостьТоваров1
		ПО СебестоимостьТоваров.Товар = СебестоимостьТоваров1.Товар
			И СебестоимостьТоваров.Период > СебестоимостьТоваров1.Период

СГРУППИРОВАТЬ ПО
	СебестоимостьТоваров.Период,
	СебестоимостьТоваров.Товар
Показать
22. Said-We 29.09.23 00:46 Сейчас в теме
К (21) Вместо:
...(ВЫБРАТЬ
                    МАКСИМУМ(Себестоимость.День),
                    Себестоимость.Товар
                ИЗ...
Точно минимум поправить на:
...(ВЫБРАТЬ
                    МАКСИМУМ(Себестоимость.День)
                ИЗ...
Может ещё где "навоял" :-)
23. Said-We 29.09.23 17:07 Сейчас в теме
+ К (22) И группировка тут тоже не сильно нужна. :-)
В общем смотрите, корректируйте.
Оставьте свое сообщение

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