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

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

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

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

Но на выходе пустая дата.
Что не так?
На момент формирования запроса Ссылка заполнена.
5. herfis 498 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 498 20.09.17 10:06 Сейчас в теме
По-моему, на передачу параметров виртуальных таблиц действуют ограничения, не позволяющие впихнуть туда результат подзапроса (ВЫРАЗИТЬ с разименованием и получением реквизита - частный случай такого подзапроса).
MyNameNoName; +1 Ответить
8. starik-2005 3033 20.09.17 10:36 Сейчас в теме
9. herfis 498 20.09.17 10:38 Сейчас в теме
(8) Не. Так не взлетит.
MyNameNoName; +1 Ответить
10. starik-2005 3033 20.09.17 10:40 Сейчас в теме
(9) если в параметре указывать в поле "выражение", то взлетит. Не в запросе, а в самой схеме.
MyNameNoName; +1 Ответить
11. herfis 498 20.09.17 11:43 Сейчас в теме
(10) Не, даже там не взлетит. Да и как именно заполнять доп-параметр, если уж через него делать - не суть важно.
MyNameNoName; +1 Ответить
13. starik-2005 3033 20.09.17 11:59 Сейчас в теме
(11) ну у меня взлетает все. Пример тут.
Прикрепленные файлы:
MyNameNoName; +1 Ответить
14. herfis 498 20.09.17 12:01 Сейчас в теме
(13) Пример не релевантен. &Период - это не ссылка на объект БД.
MyNameNoName; +1 Ответить
15. starik-2005 3033 20.09.17 12:03 Сейчас в теме
(14) а какая разница? Выражение - это примерно то же самое, что можно засунуть в "Выполнить". Вы считаете, что Выполнить("Дата = Период.Дата") отработает, а Выполнить("Дата = Документ.Дата") нет?
MyNameNoName; +1 Ответить
16. herfis 498 20.09.17 12:08 Сейчас в теме
(15) Разница есть. И убедиться в этом очень легко. Ключевое слово в вашей гипотезе - "примерно".
MyNameNoName; +1 Ответить
17. spacecraft 20.09.17 12:14 Сейчас в теме
(15) Период это стандартная таблица типа СтандартныйПериод.
Совсем не одно и тоже...
MyNameNoName; +1 Ответить
18. herfis 498 20.09.17 12:22 Сейчас в теме
Стандартный период - это не таблица. Это просто объект в памяти без отображения в БД.
Язык выражений СКД можно сравнивать с Выполнить() весьма условно. Он отрабатывает в своем отдельном контексте, имеет ряд своих ограничений и строго валидируется еще при конфигурировании. Это отдельный DSL (пусть и частично пересекающийся с функционалом одновременно языка запросов и 1С), а Выполнить() - просто выполнение произвольного кода 1С в контексте своего вызова.
Что касается моих предыдущих высказываний про ограничения в параметрах виртуальных таблиц - они касаются конечно же именно параметров периодов. Я как-то это не акцентировал.
MyNameNoName; +1 Ответить
20. spacecraft 20.09.17 12:33 Сейчас в теме
(18)
Стандартный период - это не таблица. Это просто объект в памяти без отображения в БД.

Это игра слов. Виртуальная таблица тоже не хранится в БД, однако от этого она не перестает быть таблицей.
Не интересовало, где точно хранятся значения Стандартного периода ("Сегодня", "Эта неделе" и т.д.), но логичнее это хранить в БД, чем в коде.
MyNameNoName; +1 Ответить
21. herfis 498 20.09.17 12:52 Сейчас в теме
(20) Не согласен ни с первым, ни со вторым. Но согласен с отсутствием большого смысла в обсуждении этого.
22. starik-2005 3033 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 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)