выражение для параметра в СКД

1. tired 21.11.18 12:24 Сейчас в теме
в запросе одного набора данных есть строка
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, )


запрос другого набора данных:
ВЫБРАТЬ
	ПланЗакупок.ДатаПланирования КАК ДатаПланирования
ИЗ
	Документ.ПланЗакупок КАК ПланЗакупок


в параметрах числится "ДатаПлана", для которого стоит выражение:
ДатаПланирования


при попытке сформировать отчёт выдаёт:
Ошибка исполнения отчета по причине:
Ошибка в выражении "ДатаПланирования"


как правильно написать выражение? может, это вообще по-другому делается?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vadim1011985 99 21.11.18 12:31 Сейчас в теме
(1) в данном случае надо делать через связи наборов данных с указанием параметра связи
5. tired 21.11.18 12:58 Сейчас в теме
(2) спасибо за наводку. указал в качестве источника связи второй набор данных, приёмника связи - первый набор, в параметре связи - ДатаПлана. ошибка та же. нужно что-то ещё указать? просто я только начинаю с 1С разбираться. даже элементарных вещей ещё не знаю.
6. vadim1011985 99 21.11.18 13:05 Сейчас в теме
(5) в колонке параметр нна закладке Связи необходимо указать ваш параметр ДатаПлана выложите скриншот СКД (запросы к наборам данных и закладку связи)
7. tired 21.11.18 13:35 Сейчас в теме
(6) да я, вроде, так и сделал.
Прикрепленные файлы:
8. antz 21.11.18 13:50 Сейчас в теме
(7) А почему по ссылке не соединять? На одну дату может быть несколько планов?
13. tired 21.11.18 15:46 Сейчас в теме
(8) нет, план только один. боюсь, что я не понял смысл вашего предложения соединять по ссылке. можно попросить вас уточнить, что вы имели в виду?
14. vadim1011985 99 21.11.18 15:49 Сейчас в теме
15. tired 21.11.18 15:51 Сейчас в теме
16. antz 21.11.18 16:03 Сейчас в теме
(13) Зачем вообще нужен второй набор?
17. tired 21.11.18 16:06 Сейчас в теме
(16) чтобы выбрать план закупок и взять из него дату планирования, на которую будут формироваться начальные остатки.
18. antz 21.11.18 16:11 Сейчас в теме
(17) А почему в первом наборе это не делать?

ПланЗакупокСоставПлана.Ссылка.ДатаПланирования

У всех табличных частей документов есть реквизит Ссылка - это ссылка на документ.
21. tired 22.11.18 06:52 Сейчас в теме
(18) по-моему, в моём случае можно обратиться к дате и так: ПланЗакупок.ДатаПланирования.

но только зачем мне целая колонка, заполненная одним и тем же значением, если эта дата нужна только для того, чтобы подставить в ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) для получения колонки с остатками на дату планирования.

а во втором наборе это будет только одна строчка. надо только как-то сделать значение из колонки ДатаПланирования параметром для первого набора.

но мне кажется, что в 1С должен быть какой-то другой механизм для этого, а то что-то уж больно мудрёно всё получается.
22. antz 22.11.18 10:27 Сейчас в теме
(21) Что-то мудрите, по-моему, как раз вы) Вам нужно выбрать несколько документов плана закупки и на дату плана каждого документа вытащить остатки? Или один документ плана на дату планирования и на эту дату вытащить остатки? И то и другое решается одним запросом безо всяких вторых наборов данных.
23. tired 22.11.18 10:38 Сейчас в теме
(22) возможно, что и я мудрю. нужно выбрать один план и остатки на дату этого плана. не подскажете, как это сделать одним запросом? я пока не понимаю.
24. antz 22.11.18 10:44 Сейчас в теме
(23)

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


И всё!
25. tired 22.11.18 12:34 Сейчас в теме
(24) выдаёт пустую табличку. как только убираю условие ГДЕ, то таблица нормально заполняется, хоть начальные остатки и берутся на текущую дату.

на данный момент запрос выглядит так:

ВЫБРАТЬ
	ПланЗакупок.Ссылка,
	ПланЗакупокСоставПлана.Номенклатура,
	ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры,
	ПланЗакупокСоставПлана.ЕдиницаИзмерения,
	ПланЗакупокСоставПлана.Количество,
	ТоварыНаСкладахОстатки.КоличествоОстаток,
	НачальныеОстатки.КоличествоОстаток КАК НачальныйОстаток
ИЗ
	Документ.ПланЗакупок КАК ПланЗакупок
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПланЗакупок.СоставПлана КАК ПланЗакупокСоставПлана
		ПО ПланЗакупок.Ссылка = ПланЗакупокСоставПлана.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
		ПО (ПланЗакупокСоставПлана.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура)
			И (ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) КАК НачальныеОстатки
		ПО (ПланЗакупокСоставПлана.Номенклатура = НачальныеОстатки.Номенклатура)
			И (ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = НачальныеОстатки.ХарактеристикаНоменклатуры)
ГДЕ
	ПланЗакупокСоставПлана.Ссылка.ДатаПланирования = &ДатаПлана
Показать
26. antz 22.11.18 12:36 Сейчас в теме
(25) Какой состав даты в реквизите ДатаПланирования и в параметре отчета? Дата планирования в документе чему равна? Попробуйте так:

ГДЕ
НачалоПериода(ПланЗакупокСоставПлана.Ссылка.ДатаПланирования, День) = НачалоПериода(&ДатаПлана, День)
27. tired 22.11.18 12:45 Сейчас в теме
(26) состав даты: Дата, тип параметра ДатаПлана: Дата.
в плане закупок, который выбираю для формирования отчёта, стоит дата 01.11.2018.

с новым условием ГДЕ тоже выдаёт пустую таблицу.
28. antz 22.11.18 12:52 Сейчас в теме
(27)
в плане закупок, который выбираю для формирования отчёта


Так вы документ в отчете выбираете или дату? Я чот запутался.
29. tired 22.11.18 13:08 Сейчас в теме
(28) документ, из которого берётся дата планирования и состав плана.
30. antz 22.11.18 13:57 Сейчас в теме
Тогда можно попробовать убрать его из отбора, запрос будет выглядеть как

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


в выражении параметра ДатаПлана написать &Ссылка.ДатаПланирования.
31. tired 22.11.18 14:03 Сейчас в теме
(30) а как пользователь будет выбирать документ "План закупок"?
32. antz 22.11.18 14:05 Сейчас в теме
(31) так же как и выбирал, просто вместо отбора будет выбор параметра.
33. tired 22.11.18 14:13 Сейчас в теме
(32) при попытке сформировать отчёт выдаёт ошибку:

Ошибка исполнения отчета
по причине:
Ошибка в элементе отбора: глобальные элементы отбора обязательно должны использовать поля "ПараметрыДанных.Ссылка Равно План закупок 00000000011 от 01.11.2018 12:00:00"
Прикрепленные файлы:
34. antz 22.11.18 14:18 Сейчас в теме
(33) Из отбора эту строчку убрать вообще. Выражение для параметра ДатаПлана написать на вкладке Параметры в колонке Выражение.
Прикрепленные файлы:
35. tired 22.11.18 14:29 Сейчас в теме
(34)
Прикрепленные файлы:
36. antz 22.11.18 14:40 Сейчас в теме
(35) у себя слепил аналогичный отчёт, нажал нет - заработало.
37. tired 22.11.18 15:22 Сейчас в теме
(36) а как выбирал план закупок? в отборе же его теперь нет.
38. antz 22.11.18 15:34 Сейчас в теме
(37) На вкладке "Параметры" вкладки "Настройки" в СКД параметр "Ссылка" есть? Как сделать, чтобы он на форме показался знаешь? Так же, как и с отбором.
Прикрепленные файлы:
39. tired 22.11.18 15:56 Сейчас в теме
(38) в конфигураторе есть, если поставить флажок "Отображать недоступные параметры". а у пользователя нет. до формы я ещё не дошёл.
Прикрепленные файлы:
40. antz 22.11.18 16:09 Сейчас в теме
(39) Очень, очень советую прочитать книжку Хрусталевой "Разработка сложных отчетов в 1С. Предприятии 8. Система компоновки данных". От корки до корки прям.
Прикрепленные файлы:
43. tired 23.11.18 06:39 Сейчас в теме
(40) спасибо за совет. обязательно прочитаю, когда появится хоть какое-то свободное время. а то я пока на испытательном сроке - надо проявить себя. этот отчёт - только одна из поставленных задач.
41. antz 22.11.18 16:12 Сейчас в теме
(39) Да, и вот эту галку снять.
Прикрепленные файлы:
44. tired 23.11.18 06:56 Сейчас в теме
(41) да, табличка теперь заполняется. это уже хорошо. единственная проблема, которую сейчас вижу, - это то, что когда меняется параметр "Период", то остатки меняются как в колонке КоличествоОстаток (что правильно), так и в колонке НачальныйОстаток (что неправильно, т.к. начальные остатки должны всегда браться на дату планирования).

запрос сейчас такой:

ВЫБРАТЬ
	ПланЗакупокСоставПлана.Номенклатура,
	ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры,
	ПланЗакупокСоставПлана.ЕдиницаИзмерения,
	ПланЗакупокСоставПлана.Количество,
	ТоварыНаСкладахОстатки.КоличествоОстаток,
	НачальныеОстатки.КоличествоОстаток КАК НачальныйОстаток
ИЗ
	Документ.ПланЗакупок.СоставПлана КАК ПланЗакупокСоставПлана
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
		ПО ПланЗакупокСоставПлана.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
			И ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) КАК НачальныеОстатки
		ПО ПланЗакупокСоставПлана.Номенклатура = НачальныеОстатки.Номенклатура
			И ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = НачальныеОстатки.ХарактеристикаНоменклатуры
ГДЕ
	ПланЗакупокСоставПлана.Ссылка = &Ссылка
Показать
Прикрепленные файлы:
46. antz 23.11.18 10:36 Сейчас в теме
(44) Параметр "Период" трогать не надо, это параметр, создаваемый самой СКД. Ему нужно как раз ограничить доступность и забыть о нем, а если нужен отбор по периоду - добавить свой.
47. tired 23.11.18 14:55 Сейчас в теме
(46) попробовал сделать, но теперь и начальные остатки, и остатки на указанную дату берутся текущие, а не на соответствующие даты. опять какой-то затык.

текущий запрос:

ВЫБРАТЬ
	ПланЗакупокСоставПлана.Номенклатура,
	ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры,
	ПланЗакупокСоставПлана.ЕдиницаИзмерения,
	ПланЗакупокСоставПлана.Количество КАК Потребность,
	ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокНаДату,
	НачальныеОстатки.КоличествоОстаток КАК НачальныйОстаток
ИЗ
	Документ.ПланЗакупок.СоставПлана КАК ПланЗакупокСоставПлана
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, ) КАК ТоварыНаСкладахОстатки
		ПО ПланЗакупокСоставПлана.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
			И ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) КАК НачальныеОстатки
		ПО ПланЗакупокСоставПлана.Номенклатура = НачальныеОстатки.Номенклатура
			И ПланЗакупокСоставПлана.ХарактеристикаНоменклатуры = НачальныеОстатки.ХарактеристикаНоменклатуры
ГДЕ
	ПланЗакупокСоставПлана.Ссылка = &Ссылка
Показать
Прикрепленные файлы:
48. antz 23.11.18 15:32 Сейчас в теме
(47) Вроде правильно все. Остатки точно менялись?
49. tired 23.11.18 15:52 Сейчас в теме
(48) проверял по отчёту "Товары на складах". на дату планирования должно быть, например, 2 755 шт., а в моём отчёте показывает 6 255, что является текущим остатком. какую бы дату остатков и план продаж я не выбирал.
50. antz 23.11.18 15:55 Сейчас в теме
(49) Интересно) Скинь отчет еще раз.
51. tired 23.11.18 16:00 Сейчас в теме
52. antz 23.11.18 16:16 Сейчас в теме
(51) Дату остатков в пользовательские настройки не включил? Где ты ее выбираешь?
53. antz 23.11.18 18:15 Сейчас в теме
(51) короче, все фигня, давай по-новой)

У параметра "ДатаПлана" ограничение убираем, из колонки "Выражение" всю эту чушь стираем, на вкладке Настройки-Параметры в пользовательских настройках элемента ставим галку "Включить в пользовательские настройки", режим редактирования - "Недоступный".
Открываем модуль объекта, там пишем:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	Элементы = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
	Ссылка = Новый ПараметрКомпоновкиДанных("Ссылка");
	Для каждого Элемент Из Элементы Цикл
		Если Элемент.Параметр = Ссылка Тогда
			ДатаПлана = Элемент.Значение.ДатаПланирования;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	ДатаПланаПараметр = Новый ПараметрКомпоновкиДанных("ДатаПлана");
	Для каждого Элемент Из Элементы Цикл
		Если Элемент.Параметр = ДатаПланаПараметр Тогда
			Элемент.Значение = ДатаПлана;
			Прервать;
		КонецЕсли;
	КонецЦикла;	
	
КонецПроцедуры
Показать
Прикрепленные файлы:
54. tired 26.11.18 10:06 Сейчас в теме
(53) &ДатаОстатков заключил в запросе в фигурные скобочки. теперь остатки на дату выводятся корректно.

что касается предложенных изменений, то я всё сделал, но с выбранным планом закупок, например, на январь начальные остатки по-прежнему выводятся текущие.
Прикрепленные файлы:
ПланЗакупокОстаткиДефицит.erf
3. alex-l19041 8 21.11.18 12:36 Сейчас в теме
(1) может вот так должно быть &ДатаПланирования в выражении
4. tired 21.11.18 12:41 Сейчас в теме
(3) тогда выдаёт ошибку: "Параметр не найден: ДатаПланирования"
9. vadim1011985 99 21.11.18 13:51 Сейчас в теме
Надо указать выражение источника и выражение приемника это те роля по которому идёт соединение 2-х наборов
10. tired 21.11.18 14:54 Сейчас в теме
(9) в выражении-источнике выбрать ДатаПланирования? а что нужно выбирать в выражении-приёмнике? там есть Качество, Номенклатура, ЕдиницаИзмерения, ХарактеристикаНоменклатуры, Количество, КоличествоОстаток, Склад, СерияНоменклатуры и НачальныйОстаток.
11. vadim1011985 99 21.11.18 15:20 Сейчас в теме
(10) если во втором наборе нет поле с типом дата (например период ) то можете использовать свой параметр в качестве поля

т.е.

Выбрать 
МояТаб.Качество,
МояТаб.Номенклатура 
....
....
....
&ДатаПлана КАК ДатаПланирования
ИЗ 
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) КАК МояТаблица
 
Показать
12. tired 21.11.18 15:43 Сейчас в теме
(11) Качество, Номенклатура и т.д. у меня в первом наборе. может, в него надо добавлять поле &ДатаПлана?
19. vadim1011985 99 21.11.18 16:13 Сейчас в теме
вот что я имел ввиду , и теперь на закладке связи в источнике и приемнике выбираешь ДатаПланирования
Прикрепленные файлы:
20. tired 22.11.18 06:39 Сейчас в теме
(19) я в (12) и предлагал в первый набор это поле добавить. но тогда, если я всё правильно понимаю, в таблице первого набора будет колонка ДатаПланирования, которая будет заполнена одним и тем же значением, хотя эта дата мне нужна только для того, чтобы подставить в ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПлана, ) для получения колонки с остатками на дату планирования.

наверное, это как-то по другому должно делаться, просто я не знаю этого.
42. VZyryanov 22.11.18 17:14 Сейчас в теме
Перенесите запрос для определения даты планирования в функцию общего модуля (экспорт). В выражении для параметра используйте вызов функции общего модуля, например,
МойОбщийМодульСервер.ПолучитьДатуПланирования()
45. tired 23.11.18 07:04 Сейчас в теме
(42) спасибо за то, что отозвались. пока у нас, вроде, получается без участия модулей (44).
55. tired 26.11.18 10:17 Сейчас в теме
(42) нет, мы всё-таки полезли в модуль объекта (53) ;-)

но поскольку я ещё не очень хорошо ориентируюсь в 1С, то не совсем понял смысл вашего предложения.
Оставьте свое сообщение

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