helpf.pro
Регистрация

v8: Построитель Отчета

Bell
26.06.2013 10:02Прочитано: 5164
Здравствуйте
Есть запросПостритель
Активизируется ПриОткрытии() обработки (все работает нормально)
При нажатии на ваполнить обработку тоже все нормально
Выставлияю параметры срез последних ДатаАктуальности (реквизит формы)
Ругается
{Обработка.ОтборСпискаСотрудников.Форма.ФормаПодбора.Форма(257)}: Ошибка при получении значения атрибута контекста (Результат)
ТЗ = Построитель.Результат.Выгрузить();
по причине:
{(13, 46)}: Не задано значение параметра "ДатаАктуальности"
РегистрСведений.РС_Сотрудники.СрезПоследних(<<?>>&ДатаАктуальности, ) КАК ПериодическиеДанныеСотрудника

Что не так?(делал и через скобки) В консоли запроса все идет прекрасно.


Код 1C v 8.х
 Процедура ЗапросПостроитель()

Построитель.ТекстЗаголовка = "Отбор сотрудников из списка...";
Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ДатаАктуальности", КонецДня(ДатаАктуальности));

Запрос.Текст =
"ВЫБРАТЬ
| Справочник.Ссылка,
| ПериодическиеДанныеСотрудника.Сотрудники.Код КАК Код,
| ПериодическиеДанныеСотрудника.Сотрудники,
| ПериодическиеДанныеСотрудника.Подразделение,
| ПериодическиеДанныеСотрудника.Отдел,
| ПериодическиеДанныеСотрудника.Должность,
| ПериодическиеДанныеСотрудника.ГрафикРаботы,
| ПериодическиеДанныеСотрудника.Статус,
| ПериодическиеДанныеСотрудника.ДатаПриема,
| ПериодическиеДанныеСотрудника.ДатаУвольнения
|{ВЫБРАТЬ
| Сотрудники.*,
| Подразделение.*,
| Отдел.*,
| Должность.*,
| ГрафикРаботы.*,
| Статус.*,
| ДатаПриема,
| ДатаУвольнения}
|ИЗ
| РегистрСведений.РС_Сотрудники.СрезПоследних(&ДатаАктуальности, ) КАК ПериодическиеДанныеСотрудника
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗП_Сотрудники КАК Справочник
| ПО ПериодическиеДанныеСотрудника.Сотрудники = Справочник.Ссылка
|{ГДЕ
| Справочник.Ссылка.*}
|{УПОРЯДОЧИТЬ ПО
| Сотрудники.*,
| Подразделение.*,
| Отдел.*,
| Должность.*,
| ГрафикРаботы.*,
| Статус.*,
| Ссылка.*}";

Построитель.Текст = Запрос.Текст;
Если Построитель.Отбор.Количество() = 0 Тогда
Построитель.ЗаполнитьНастройки();
КонецЕсли;
Построитель.Отбор.Добавить("Сотрудники");
Построитель.Отбор.Сотрудники.Использование = Ложь;
Построитель.Отбор.Сотрудники.ВидСравнения = ВидСравнения.ВСписке;
Построитель.Отбор.Добавить("Подразделение");
Построитель.Отбор.Добавить("Отдел");
Построитель.Отбор.Добавить("Должность");
Построитель.Отбор.Добавить("ГрафикРаботы");
Построитель.Отбор.ГрафикРаботы.Использование = Ложь;
Построитель.Отбор.ГрафикРаботы.ВидСравнения = ВидСравнения.ВСписке;

КнопкаВыполнитьОбработку = ЭлементыФормы.КоманднаяПанельТабличноыеПолеОтбор.Кнопки.ВыполнитьОбработку;
КнопкаВыполнитьОбработку.Пометка = НЕ КнопкаВыполнитьОбработку.Пометка;
Если КнопкаВыполнитьОбработку.Пометка = Ложь Тогда
Построитель.Выполнить();
Корзина.Загрузить(Построитель.Результат.Выгрузить());
КнопкаВыполнитьОбработку.Пометка = НЕ КнопкаВыполнитьОбработку.Пометка;
Иначе
Построитель.Выполнить();
КонецЕсли;
КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
26.06.2013 11:08Ответ № 1
А где Вы задаёте параметр &ДатаАктуальности для построителя? Ведь Построитель.Текст = Запрос.Текст; передаёт только текст запроса, но не сам запрос с параметрами... вот тут и ошибка. Вообще это лишнее телодвижение.
Лучше сразу;
ТекстЗапроса = "...";
Построитель.Текст = ТекстЗапроса;
Построитель.Параметры.Вставить("ДатаАктуальности", КонецДня(ДатаАктуальности));
Изменено 26.06.13 11:09:03
Bell
26.06.2013 12:51Ответ № 2
Спасибо. Про это я как то не прочитал нигде.
Bell
26.06.2013 13:03Ответ № 3
Тогда еще вопрос
А как тогда грамотно сделать (передавать параметры) которые будут находиться в Отборе
(ТабличноеПолеОтбор)
Mokey
26.06.2013 16:15Ответ № 4
(3) Bell, это надо запрос такой для построителя писать, с фигурными скобками, вот тогда отрабатывает отбор, а не параметры, например:
| .......
|{ГДЕ
| Сотрудники.*,
| Подразделение.*,
| Отдел.*,
| Должность.*,
| ГрафикРаботы.*,
| Статус.*,
| ДатаПриема,
| ДатаУвольнения}

если отбор пуст, то блок ГДЕ вообще в текст запроса не подставляется, иначе подставятся только те отборы, у которых выставлен флажок Использование
Mokey
26.06.2013 16:17Ответ № 5
кстати, можно и так сделать:
РегистрСведений.РС_Сотрудники.СрезПоследних({ДатаАктуальности}, ) КАК ПериодическиеДанныеСотрудника
тогда ДатаАктуальности превращается из параметра в отбор))))
Bell
26.06.2013 17:06Ответ № 6
Еще тогда вопрос
Переметров сейчас много, есть или у построителя, если выбраны все реквизиты в ГДЕ чтобы заменить их на (*)
Как будет синтаксис
(4) MokeyПеределал так, все идет
|{ГДЕ
| ПериодическиеДанныеСотрудника.Сотрудники.*,
| ПериодическиеДанныеСотрудника.Подразделение.*,
| ПериодическиеДанныеСотрудника.Отдел.*,
| ПериодическиеДанныеСотрудника.Должность.*,
| ПериодическиеДанныеСотрудника.ГрафикРаботы.*,
| ПериодическиеДанныеСотрудника.Статус.*,
| ПериодическиеДанныеСотрудника.ДатаПриема,
| ПериодическиеДанныеСотрудника.ДатаУвольнения,
| Справочник.Ссылка.*}";

Построитель.Текст = Запрос.Текст;
Построитель.Параметры.Вставить("ДатаАктуальности", КонецДня(ДатаАктуальности));
Если Построитель.Отбор.Количество() = 0 Тогда

Построитель.ЗаполнитьНастройки();

Построитель.Отбор.Добавить("Сотрудники");
Построитель.Отбор.Сотрудники.Использование = Ложь;
Построитель.Отбор.Сотрудники.ВидСравнения = ВидСравнения.ВСписке;
Построитель.Отбор.Добавить("Подразделение");
Построитель.Отбор.Добавить("Отдел");
Построитель.Отбор.Добавить("Должность");
Построитель.Отбор.Добавить("ГрафикРаботы");
Построитель.Отбор.ГрафикРаботы.Использование = Ложь;
Построитель.Отбор.ГрафикРаботы.ВидСравнения = ВидСравнения.ВСписке;
КонецЕсли;
,
Mokey
27.06.2013 11:08Ответ № 7
(6) Bell, я немного не въехал в вопрос, уточните, пожалуйста
Bell
27.06.2013 14:28Ответ № 8
Возможно ли использование в пострителе Звездочки в ГДЕ, если выбраны все реквизиты чтобы уменьшить размер запроса. К пример ГДЕ ( *.*) как то так или по другому
Как в обычном запросе.
Выбрать
* // ??? (я руками это длеаю всегда ,если выбираю все реквзиты для уменьшения запроса и лучшей читабельности)
ИЗ
Документ.Доверенность
Mokey
27.06.2013 15:12Ответ № 9
(8) Bell, нет, к сожалению нет.
А вообще-то попробовали бы, быстрее получилось бы, нежели ждать ответа)))
Изменено 27.06.13 15:13:12
Bell
27.06.2013 17:55Ответ № 10
Я уже пробовал по разному.
Все ВОПРОС ЗАКРЫТ.
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.