Имя: Пароль:
1C
1С v8
v8: СКД. как изменить запрос отчета?
0 2version
 
18.02.13
22:39
Уважаемые форумчане, не подскажите как изменить запрос отчета? Изменял уже по разному, но получается так, что я изменяю а отчет остается прежним. Я так понял работаю с виртуальной частью СКД (Копией). Уже достаточно много форумов перерыл и справку уже задолбать успел.
Это последняя версия попытки смены:
*********************************************************************
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//    Макет = Отчеты.Результат.ПолучитьМакет("РезультатОтчета");
   СхемаКомпоновкиДанных =Отчеты.Результат.ПолучитьМакет("РезультатОтчета");  
   ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос;
   Запрос = "
   |ВЫБРАТЬ
   |    Сотрудники.Имя,
   |    Сотрудники.Фамилия,
   |    Сотрудники.Отчество,
   |    Сотрудники.Должность,
   |    Сотрудники.Где_работает,
   |    Авто.Тип_обслуживания,
   |    Авто.Заезд
   |ИЗ
   |    Справочник.Сотрудники КАК Сотрудники,
   |    Справочник.Авто КАК Авто";
   
   ТекстрЗапроса2 = СтрЗаменить(ТекстЗапроса,ТекстЗапроса,Запрос);
   СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстрЗапроса2;
  // Сообщить(СхемаКомпоновкиДанных.НаборыДанных[0].Запрос);
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки, );
   
*********************************************************************
А раньше делал переприсвоением, т.е. вот так:
*********************************************************************
СКД = Отчеты.Результат.ПолучитьМакет("РезультатОтчета");
     ТекстЗапроса =
       "ВЫБРАТЬ
   |    Сотрудники.Имя,
   |    Сотрудники.Фамилия,
   |    Сотрудники.Отчество,
   |    Сотрудники.Должность,
   |    Сотрудники.Где_работает,
   |    Авто.Тип_обслуживания,
   |    Авто.Заезд
       |ИЗ
   |    Справочник.Сотрудники КАК Сотрудники,
   |    Справочник.Авто КАК Авто";

     СКД.НаборыДанных[0].Запрос = СтрЗаменить(СКД.НаборыДанных[0].Запрос,СКД.НаборыДанных[0].Запрос,ТекстЗапроса);
Отчеты.Результат.ПолучитьМакет("РезультатОтчета").НаборыДанных[0].Запрос = ТекстЗапроса;
Сообщить(Отчеты.Результат.ПолучитьМакет("РезультатОтчета").НаборыДанных[0].Запрос);
**********************************************************************
В общем не получилось у меня ничего. Может быть вы чего подскажите.
1 2version
 
18.02.13
23:03
Никто не знает ответа, или тема уже надоела?
2 GANR
 
18.02.13
23:29
(1) исходных данных маловато для решения задачи, но могу дать инструмент - внимательно читай сообщение №4 в ветке v8: СКД: полностью программное заполнение схемы.
3 2version
 
18.02.13
23:33
Спасибо, не знаю поможет ли, но все равно спасибо.
4 GANR
 
18.02.13
23:45
(3) главное не бросать задачу
5 2version
 
19.02.13
00:11
GANR, проделал все, что там написано. Запросы не отличаются, а вот загрузка озадачила. Вы мне советуете искать в XML файле свой запрос, менять его там и потом грузить в отчет?
6 GANR
 
19.02.13
00:15
Вероятно, код не меняет запрос. (5) Лучше в конструктор СКД загрузить оба файла, как сказано в (2) - сразу будет ясно, что и почему не работает. Сразу

ТекстрЗапроса2 = СтрЗаменить(ТекстЗапроса,ТекстЗапроса,Запрос);
   СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстрЗапроса2;

замените этим

СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = Запрос;
7 GANR
 
19.02.13
00:16
хотя пардон - не надо последнее делать
8 GANR
 
19.02.13
00:17
запутался, если честно
ТекстрЗапроса2 = СтрЗаменить(ТекстЗапроса,ТекстЗапроса,Запрос);
9 GANR
 
19.02.13
00:22
2-й вариант в (0) - заведомо нерабочий Отчеты.Результат.ПолучитьМакет("РезультатОтчета") просто заново перечитывает СКД с диска и затирает все, что сделано кодом
10 2version
 
19.02.13
00:23
Запрос поменялся, но отчет стоит на своем.
11 2version
 
19.02.13
00:25
Я хотел сделать так, чтобы весь запрос изменялся. Для этого в запросе к отчету еще докинуто поле: "Марка Машины". В этом запросе он отсутствует. Получается в виртуальной части присвоением меняется, а в реальной - нет.
12 GANR
 
19.02.13
00:26
(10) у набора данных Запрос есть галочка Автозаполнение - что будет если её в Истина поставить?
13 2version
 
19.02.13
00:27
Оно уже стоит на этом положении. Без этой галочки отчет вообще не заполняется.
14 GANR
 
19.02.13
00:27
(2) нужно лишь для того, чтобы наглядно увидеть как выглядит в конструкторе СКД то, что сделано кодом
15 2version
 
19.02.13
00:28
У меня без неё отчет вообще выводиться не хочет.
16 2version
 
19.02.13
00:29
По твоему коду СКД вышло вот таким:
************************************************************
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <dataSource>
       <name>ИсточникДанных1</name>
       <dataSourceType>Local</dataSourceType>
   </dataSource>
   <dataSet xsi:type="DataSetQuery">
       <name>НаборДанных1</name>
       <field xsi:type="DataSetFieldField">
           <dataPath>Где_работает</dataPath>
           <field>Где_работает</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Должность</dataPath>
           <field>Должность</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Заезд</dataPath>
           <field>Заезд</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Имя</dataPath>
           <field>Имя</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Марка</dataPath>
           <field>Марка</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Отчество</dataPath>
           <field>Отчество</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Тип_обслуживания</dataPath>
           <field>Тип_обслуживания</field>
       </field>
       <field xsi:type="DataSetFieldField">
           <dataPath>Фамилия</dataPath>
           <field>Фамилия</field>
       </field>
       <dataSource>ИсточникДанных1</dataSource>
       <query>
ВЫБРАТЬ
   Сотрудники.Имя,
   Сотрудники.Фамилия,
   Сотрудники.Отчество,
   Сотрудники.Должность,
   Сотрудники.Где_работает,
   Авто.Тип_обслуживания,
   Авто.Заезд
ИЗ
   Справочник.Сотрудники КАК Сотрудники,
   Справочник.Авто КАК Авто</query>
   </dataSet>
   <settingsVariant>
       <dcsset:name>Основной</dcsset:name>
       <dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
       <dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
           <dcsset:selection>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Где_работает</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Должность</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Заезд</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Имя</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Марка</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Отчество</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Тип_обслуживания</dcsset:field>
               </dcsset:item>
               <dcsset:item xsi:type="dcsset:SelectedItemField">
                   <dcsset:field>Фамилия</dcsset:field>
               </dcsset:item>
           </dcsset:selection>
           <dcsset:item xsi:type="dcsset:StructureItemGroup">
               <dcsset:order>
                   <dcsset:item xsi:type="dcsset:OrderItemAuto"/>
               </dcsset:order>
               <dcsset:selection>
                   <dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
               </dcsset:selection>
           </dcsset:item>
       </dcsset:settings>
   </settingsVariant>
</DataCompositionSchema>
***********************************************************
17 2version
 
19.02.13
00:29
При этом реально в отчете висит вот такой запрос:
***********************************************************
ВЫБРАТЬ
Сотрудники.Имя,
Сотрудники.Фамилия,
Сотрудники.Отчество,
Сотрудники.Должность,
Сотрудники.Где_работает,
Авто.Марка,
Авто.Тип_обслуживания,
Авто.Заезд
ИЗ
Справочник.Сотрудники КАК Сотрудники,
Справочник.Авто КАК Авто
***********************************************************
18 GANR
 
19.02.13
00:34
Нужно ведь ещё настройки компоновки инициализировать и заполнить структуру отчета - они же, судя по коду (0), пустые.

КомпоновщикНастроек.Инициализировать(СхемаКомпоновкиДанных); // вроде так -конфигуратора перед глазами нет

И загрузить в нее вариант по умолчанию
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию)// это смотри по отладчику и синтаксис-помощнику
19 2version
 
19.02.13
00:51
Первое точно не катит, там в качестве параметра идет источник доступных настроек. В СКД такого нету, только по умолчанию разве что, оно прошло.

КомпоновщикНастроек.Инициализировать(СхемаКомпоновкиДанных);
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию) ;

Инициализировать (Initialize)
Синтаксис:

Инициализировать(<ИсточникДоступныхНастроек>)
Параметры:

<ИсточникДоступныхНастроек> (обязательный)

Тип: ИсточникДоступныхНастроекКомпоновкиДанных; Неопределено. Схема компоновки данных, из которой будут получаться доступные настройки для настройки системы компоновки данных.
Для того, что бы удалить источник доступных настроек из компоновщика настроек параметр должен иметь значение Неопределено.
Описание:

Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек.

Доступность:

Сервер, толстый клиент, внешнее соединение.
20 GANR
 
19.02.13
00:54
(19) ну да, ИсточникДоступныхНастроек - без конфигуратора не помню синтаксис просто
21 2version
 
19.02.13
01:00
Сделал вот так, может быть перемудрил, не знаю:
*************************************************************
   КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
   КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию) ;
*************************************************************
Но это не помогает, запрос как был прежним так и остался.
22 2version
 
19.02.13
13:55
up
Основная теорема систематики: Новые системы плодят новые проблемы.