Имя: Пароль:
1C
1С v8
8.2 Программное изменение запроса СКД
0 Антон Мак
 
08.08.11
11:30
Эта тема уже не раз появлялась здесь, но ни в одной из них я не нашел решения.
8.2, тонкий клиент. Есть внешний отчет на СКД, на форму добавляем свои кнопочки, которые должны изменять запрос. Однако изменить первоначальный запрос никак не удается. Как это сделать?
1 Axel2009
 
08.08.11
11:35
(0) зачем изменять запрос??
2 Axel2009
 
08.08.11
11:36
(1)+ на 99% все можно решить без изменения запроса, но если сильно хочется через 5ую точку все сделать, тогда
коллекция СхемаКомпоновкиДанных.НаборыДанных:

НаборДанныхЗапросСхемыКомпоновкиДанных (DataCompositionSchemaDataSetQuery)
Свойства:
АвтоЗаполнениеДоступныхПолей (AutoFillAvailableFields)
Запрос (Query)
Имя (Name)
ИсточникДанных (DataSource)
Поля (Fields)

Описание:
Содержит описание набора данных схемы компоновки данных - запрос.
Поддержка отображения в XDTO; пространство имен: {http://v8.1c.ru/8.1/data-composition-system/schema}. Имя типа XDTO: DataSetQuery.
3 lubja
 
08.08.11
11:36
(1) видимо, имеется в виду изменение запроса от каких-либо условий
4 Wobland
 
08.08.11
11:37
(1) я как-то видел такое в типовом решении, вроде в БГУ. тоже мучаюсь этим вопросом ;)
5 Inform
 
08.08.11
11:40
Схема = Отчеты.<ИмяОтчета>.ПолучитьМакет("<ИмяМакета>");
Схема.НаборыДанных.<ИмяНабора>.Запрос = <НовыйТекстЗапроса>;
6 Антон Мак
 
08.08.11
11:50
Проблема не в том, что я не могу получить доступ к тексту запроса, а в том, что новый текст запроса не сохраняется.
Вот как у меня сделано:

ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ОтчетОбъект.ЭтотОбъект.СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = НовыйТекстЗапроса;
ЗначениеВРеквизитФормы(ОтчетОбъект, "Отчет");
7 Inform
 
08.08.11
12:06
Т.е. после строки
ЗначениеВРеквизитФормы(ОтчетОбъект, "Отчет");
ТекстЗапроса снова старый или при выводе отчета изменений не видно?
8 Inform
 
08.08.11
12:12
Если только при выводе отчета не видно изменений, то скорее всего при выводе отчета схема заново инициализируется из макета и используется без твоих изменений.
В зависимости от настроек (реквизитами (формы) регулируй) попробуй в процедуре формирования отчета менять текст запроса перед:
КомпоновщикМакета.Выполнить(...)
чтобы наверняка...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший