Как из параметра Сылка на документ получить его дату

1. MyNameNoName 19.09.17 22:25 Сейчас в теме
Здравствуйте.
В отчете на СКД в параметр передается ссылка на документ.
Как в другой параметр передать дату этого документа?
Необходимо для установки параметров на виртуальную таблицу.
Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 19.09.17 23:29 Сейчас в теме
(1)
ВЫРАЗИТЬ(&СсылкаДок КАК Документ.ИмяДокумента).Дата
Vovanches; MyNameNoName; +2 Ответить
7. Xershi 1484 20.09.17 10:10 Сейчас в теме
(1) задай параметр программно.
MyNameNoName; +1 Ответить
3. MyNameNoName 20.09.17 09:50 Сейчас в теме
Пробовал через параметр это сделать:
Имеется параметр Ссылка (приходит из запроса параметр).
Его тип ДокументСсылка.ЗаказПоставщику
Имеется другой параметр ДатаДок, его Тип Дата
В выражении параметра датаДок пишу:
ВЫРАЗИТЬ(&Ссылка КАК Документ.ЗаказПоставщику).Дата

Пишет синтаксическая ошибка.
Видимо выразить нужно в запросе использовать.

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

Но на выходе пустая дата.
Что не так?
На момент формирования запроса Ссылка заполнена.
5. herfis 499 20.09.17 10:04 Сейчас в теме
(3) Через ВЫРАЗИТЬ никогда не пробовал. Если нужно реквизит параметра передать параметром в виртуальную таблицу - всегда передавал отдельным параметром. А "простейший пример" проще всего так переписать:
ВЫБРАТЬ
    ЗаказПоставщикуТовары.Номенклатура,
    ВыручкаИСебестоимостьПродажОборотыЭтотГод.КоличествоОборот КАК КоличествоЭтотГод,
    ЗаказПоставщикуТовары.ДатаДок
ИЗ
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
        ЗаказПоставщикуТовары.Ссылка.ДатаДок КАК ДатаДок
    ИЗ
        Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
    ГДЕ
        ЗаказПоставщикуТовары.Ссылка = &Ссылка) КАК ЗаказПоставщикуТовары
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
            ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот
        ИЗ
            РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериодаЭтотГод, &КонецПериодаЭтотГод, , ) КАК ВыручкаИСебестоимостьПродажОбороты) КАК ВыручкаИСебестоимостьПродажОборотыЭтотГод
        ПО ЗаказПоставщикуТовары.Номенклатура = ВыручкаИСебестоимостьПродажОборотыЭтотГод.АналитикаУчетаНоменклатуры.Номенклатура
Показать
MyNameNoName; +1 Ответить
12. spacecraft 20.09.17 11:44 Сейчас в теме
(3) что-то я не увидел в этом коде: "Необходимо для установки параметров на виртуальную таблицу."
Вот рабочий код:
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Период,
	ЦеныНоменклатурыСрезПоследних.Регистратор.Ссылка,
	ЦеныНоменклатурыСрезПоследних.ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Регистратор.Дата = НАЧАЛОПЕРИОДА(ВЫРАЗИТЬ(&СсылкаДок КАК Документ.УстановкаЦенНоменклатуры).Дата, ДЕНЬ)) КАК ЦеныНоменклатурыСрезПоследних
Показать
MyNameNoName; +1 Ответить
19. spacecraft 20.09.17 12:23 Сейчас в теме
(3) по самому запросу. Все должно отрабатывать.
Если "на выходе пустая дата", то это говорит только о том, что при левом соединении нет сопоставимых данных в правой таблице. Соответственно там null.
MyNameNoName; +1 Ответить
4. MyNameNoName 20.09.17 09:52 Сейчас в теме
Получается значение из одного вложенного запроса в другой не передается?
6. herfis 499 20.09.17 10:06 Сейчас в теме
По-моему, на передачу параметров виртуальных таблиц действуют ограничения, не позволяющие впихнуть туда результат подзапроса (ВЫРАЗИТЬ с разименованием и получением реквизита - частный случай такого подзапроса).
MyNameNoName; +1 Ответить
8. starik-2005 3037 20.09.17 10:36 Сейчас в теме
9. herfis 499 20.09.17 10:38 Сейчас в теме
(8) Не. Так не взлетит.
MyNameNoName; +1 Ответить
10. starik-2005 3037 20.09.17 10:40 Сейчас в теме
(9) если в параметре указывать в поле "выражение", то взлетит. Не в запросе, а в самой схеме.
MyNameNoName; +1 Ответить
11. herfis 499 20.09.17 11:43 Сейчас в теме
(10) Не, даже там не взлетит. Да и как именно заполнять доп-параметр, если уж через него делать - не суть важно.
MyNameNoName; +1 Ответить
13. starik-2005 3037 20.09.17 11:59 Сейчас в теме
(11) ну у меня взлетает все. Пример тут.
Прикрепленные файлы:
MyNameNoName; +1 Ответить
14. herfis 499 20.09.17 12:01 Сейчас в теме
(13) Пример не релевантен. &Период - это не ссылка на объект БД.
MyNameNoName; +1 Ответить
15. starik-2005 3037 20.09.17 12:03 Сейчас в теме
(14) а какая разница? Выражение - это примерно то же самое, что можно засунуть в "Выполнить". Вы считаете, что Выполнить("Дата = Период.Дата") отработает, а Выполнить("Дата = Документ.Дата") нет?
MyNameNoName; +1 Ответить
16. herfis 499 20.09.17 12:08 Сейчас в теме
(15) Разница есть. И убедиться в этом очень легко. Ключевое слово в вашей гипотезе - "примерно".
MyNameNoName; +1 Ответить
17. spacecraft 20.09.17 12:14 Сейчас в теме
(15) Период это стандартная таблица типа СтандартныйПериод.
Совсем не одно и тоже...
MyNameNoName; +1 Ответить
18. herfis 499 20.09.17 12:22 Сейчас в теме
Стандартный период - это не таблица. Это просто объект в памяти без отображения в БД.
Язык выражений СКД можно сравнивать с Выполнить() весьма условно. Он отрабатывает в своем отдельном контексте, имеет ряд своих ограничений и строго валидируется еще при конфигурировании. Это отдельный DSL (пусть и частично пересекающийся с функционалом одновременно языка запросов и 1С), а Выполнить() - просто выполнение произвольного кода 1С в контексте своего вызова.
Что касается моих предыдущих высказываний про ограничения в параметрах виртуальных таблиц - они касаются конечно же именно параметров периодов. Я как-то это не акцентировал.
MyNameNoName; +1 Ответить
20. spacecraft 20.09.17 12:33 Сейчас в теме
(18)
Стандартный период - это не таблица. Это просто объект в памяти без отображения в БД.

Это игра слов. Виртуальная таблица тоже не хранится в БД, однако от этого она не перестает быть таблицей.
Не интересовало, где точно хранятся значения Стандартного периода ("Сегодня", "Эта неделе" и т.д.), но логичнее это хранить в БД, чем в коде.
MyNameNoName; +1 Ответить
21. herfis 499 20.09.17 12:52 Сейчас в теме
(20) Не согласен ни с первым, ни со вторым. Но согласен с отсутствием большого смысла в обсуждении этого.
22. starik-2005 3037 20.09.17 13:07 Сейчас в теме
Как оказалось, действительно не умеет 1С так. Такой обломинго, аднака )))
MyNameNoName; +1 Ответить
23. MyNameNoName 20.09.17 23:11 Сейчас в теме
Проблема в том что мне необходимо это значение передать в параметры виртуальной таблицы.
И если схема
ВЫРАЗИТЬ(&Ссылка КАК Документ.ЗаказПоставщику).Дата 

в значениях реквизита работает, то в виртуальной таблицы уже нет.
Какие варианты решения возможны?
24. spacecraft 20.09.17 23:14 Сейчас в теме
(23) уточните, что нужно конкретно? В (12) пример как раз параметра виртуальной таблицы.
MyNameNoName; +1 Ответить
25. MyNameNoName 20.09.17 23:23 Сейчас в теме
На СКД в отчет параметром передается необходимый заказ покупателя.
Из него беру номенклатуру и анализирую продажи за определенные периоды: на месяц назад от даты документа, аналогичный период за прошлый год и т.д.
Соответственно необходимо дату документа в параметры виртуальной таблицы передавать.
26. MyNameNoName 20.09.17 23:29 Сейчас в теме
Я пробовал как в 12, не работает
На начало периода не смотрите - написал что-нибудь.
Прикрепленные файлы:
27. MyNameNoName 20.09.17 23:39 Сейчас в теме
В примере в параметрах виртуальной таблицы ограничение накладывается на условие - там все работает.
А вот с периодом такие фокусы не работают.
28. spacecraft 21.09.17 01:16 Сейчас в теме
(27) а с периодом и не сработает. СКД нужно знать период еще до выполнения запроса. Его нельзя вычислить из получаемых данных.
MyNameNoName; +1 Ответить
Оставьте свое сообщение

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