Имя: Пароль:
1C
 
Как подменить текст запроса у постротеля
0 Sasha_H
 
05.03.09
15:26
Поступила задача в ведомость товара добавить код производителя, этот код находиться в РС "Штрихкоды". Ну я решил сделать подмену текста запроса в ведомости и сделал это. Но натолкнулся на одну плохую вещь, когда делать такую подмену, то при выборе пользователем флага "Отобразить свойства и категории" визуально отображаються не имена свойств или категорий, а их Ключи в запросе.

То есть слетают настройки. Я прошёлся отладчиком и не раз и список сопоставлений в нормальном состоянии, а отображается криво!

В чем косяк?
1 Defender aka LINN
 
05.03.09
15:27
Представления восстанови
2 Sasha_H
 
05.03.09
15:29
а есть кусок рабочего кода как это сделать только именно с универсальными механизмами...
3 Defender aka LINN
 
05.03.09
15:31
В типовых отчетах смотри
4 Sasha_H
 
05.03.09
15:33
ну дык типовые отчеты не подменюют запрос у построителя.

А я уже готовый запрос, получаю и корректирую его то есть добавляю соединения к РС штрикоды и отдаю его обратно построителю.
5 Defender aka LINN
 
05.03.09
15:35
Нет типовых под рукой. Что-то типа "ЗаполнитьПредставленияПолей" или как-то так.
6 НЕА123
 
05.03.09
15:35
в какой момент происходит подмена?
7 Sasha_H
 
05.03.09
15:44
даже так слетит:

ТекстЗапроса = УниверсальныйОтчет.ПостроительОтчета.Текст;

УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
8 НЕА123
 
05.03.09
15:47
ответь на (6)
9 Sasha_H
 
05.03.09
15:55
Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт

УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);

УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";

УниверсальныйОтчет.ДобавитьПолеГруппировка("БазоваяЕдиницаИзмерения", "Номенклатура", "БазоваяЕдиницаИзмерения", "Базовая единица измерения");
   
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоЕдиницОтчетовНачальныйОстаток", "ИсточникДанных.КоличествоНачальныйОстаток * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Номенклатура.ЕдиницаДляОтчетов.Коэффициент", "Количество (в ед. отчетов) (нач. ост.)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоЕдиницОтчетовПриход",           "ИсточникДанных.КоличествоПриход * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Номенклатура.ЕдиницаДляОтчетов.Коэффициент", "Количество (в ед. отчетов) (приход)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоЕдиницОтчетовРасход",           "ИсточникДанных.КоличествоРасход * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Номенклатура.ЕдиницаДляОтчетов.Коэффициент", "Количество (в ед. отчетов) (расход)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоЕдиницОтчетовКонечныйОстаток",  "ИсточникДанных.КоличествоКонечныйОстаток  * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Номенклатура.ЕдиницаДляОтчетов.Коэффициент", "Количество (в ед. отчетов) (кон. ост.)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоЕдиницОтчетовОборот",           "ИсточникДанных.КоличествоОборот * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / Номенклатура.ЕдиницаДляОтчетов.Коэффициент", "Количество (в ед. отчетов) (оборот)");
   
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоБазовыхЕдНачальныйОстаток",     "ИсточникДанных.КоличествоНачальныйОстаток * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент", "Количество (в базовых единицах) (нач. ост.)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоБазовыхЕдПриход",               "ИсточникДанных.КоличествоПриход * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент", "Количество (в базовых единицах) (приход)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоБазовыхЕдРасход",               "ИсточникДанных.КоличествоРасход * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент", "Количество (в базовых единицах) (расход)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоБазовыхЕдКонечныйОстаток",      "ИсточникДанных.КоличествоКонечныйОстаток  * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент", "Количество (в базовых единицах) (кон. ост.)");
   УниверсальныйОтчет.ДобавитьПолеРесурс("КоличествоБазовыхЕдОборот",               "ИсточникДанных.КоличествоОборот * ИсточникДанных.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент", "Количество (в базовых единицах) (оборот)");
   
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоБазовыхЕдНачальныйОстаток", "Начальный остаток", Истина, "ЧЦ=15; ЧДЦ=3", "КолБазовыхЕд", "Количество (в базовых единицах)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоБазовыхЕдПриход",           "Приход",            Истина, "ЧЦ=15; ЧДЦ=3", "КолБазовыхЕд", "Количество (в базовых единицах)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоБазовыхЕдРасход",           "Расход",            Истина, "ЧЦ=15; ЧДЦ=3", "КолБазовыхЕд", "Количество (в базовых единицах)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоБазовыхЕдКонечныйОстаток",  "Конечный остаток",  Истина, "ЧЦ=15; ЧДЦ=3", "КолБазовыхЕд", "Количество (в базовых единицах)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоБазовыхЕдОборот",           "Оборот",              Ложь, "ЧЦ=15; ЧДЦ=3", "КолБазовыхЕд", "Количество (в базовых единицах)");
   
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоЕдиницОтчетовНачальныйОстаток", "Начальный остаток", Ложь, "ЧЦ=15; ЧДЦ=3", "КоличествоЕдиницОтчетов", "Количество (в ед. отчетов)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоЕдиницОтчетовПриход",           "Приход",            Ложь, "ЧЦ=15; ЧДЦ=3", "КоличествоЕдиницОтчетов", "Количество (в ед. отчетов)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоЕдиницОтчетовРасход",           "Расход",            Ложь, "ЧЦ=15; ЧДЦ=3", "КоличествоЕдиницОтчетов", "Количество (в ед. отчетов)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоЕдиницОтчетовКонечныйОстаток",  "Конечный остаток",  Ложь, "ЧЦ=15; ЧДЦ=3", "КоличествоЕдиницОтчетов", "Количество (в ед. отчетов)");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоЕдиницОтчетовОборот",           "Оборот",            Ложь, "ЧЦ=15; ЧДЦ=3", "КоличествоЕдиницОтчетов", "Количество (в ед. отчетов)");
   
   // Заполнение начальных настроек универсального отчета
   УниверсальныйОтчет.УстановитьНачальныеНастройки(Истина);

ТекстЗапроса = УниверсальныйОтчет.ПостроительОтчета.Текст;
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                                       |    ИсточникДанных.Склад КАК Склад,",
                                                       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                                                       |    ИсточникДанных.Склад КАК Склад,
                                                       |    Штрихкоды.Штрихкод КАК КодПроизводителя,");
                                                       
                                                       
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,    "{ВЫБРАТЬ
                                                   |    Склад.*,",
                                                   "{ВЫБРАТЬ
                                                   |    Склад.*,
                                                   |    Штрихкоды.Штрихкод КАК КодПроизводителя,");

                                                                                                       
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,    ") КАК ИсточникДанных", ") КАК ИсточникДанных
                                                   |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
                                                   |ПО ИсточникДанных.Номенклатура = Штрихкоды.Владелец}");
                                                   //|    И (Штрихкоды.ТипШтрихкода = &ТипШтрихкода)}");
                                                   
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,    "ИТОГИ
                                                   |    СУММА(КоличествоНачальныйОстаток),",
                                                   "ИТОГИ
                                                   |    СУММА(КоличествоНачальныйОстаток),
                                                   |    МАКСИМУМ(КодПроизводителя),");
       
       
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,    "{ИТОГИ ПО
                                                   |    Склад.*,",
                                                   "{ИТОГИ ПО
                                                   |    Склад.*,
                                                   |    Штрихкоды.Штрихкод КАК КодПроизводителя,");

                                                   
                                                   //        
       //Сообщить(ТекстЗапроса);

       УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
       //ТекстЗапроса = УниверсальныйОтчет.ПостроительОтчета.Текст;
       УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);


УниверсальныйОтчет.ДобавитьПоказатель("КоличествоНачальныйОстаток",, Ложь,, "Количество");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоПриход",,           Ложь,, "Количество");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоРасход",,           Ложь,, "Количество");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоКонечныйОстаток",,  Ложь,, "Количество");
   УниверсальныйОтчет.ДобавитьПоказатель("КоличествоОборот",,           Ложь,, "Количество");
   
   // Добавление предопределенных группировок строк отчета.
   // Необходимо вызывать для каждой добавляемой группировки строки.
   // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
   УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Склад");
   УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
   
   // Добавление предопределенных группировок колонок отчета.
   // Необходимо вызывать для каждой добавляемой группировки колонки.
   // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);
   
   // Добавление предопределенных отборов отчета.
   // Необходимо вызывать для каждого добавляемого отбора.
   // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
   УниверсальныйОтчет.ДобавитьОтбор("Склад");
   УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

УниверсальныйОтчет.ДобавитьДополнительноеПоле("БазоваяЕдиницаИзмерения");
   
КонецПроцедуры // УстановитьНачальныеНастройки()
10 НЕА123
 
05.03.09
16:06
все правильно. ты спутал, батя... (с)

сначала текст присвой,
после

УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";

ТекстЗапроса......
....
установитьначальныенастройки один раз в самом низу.
11 Михаил Козлов
 
05.03.09
16:17
(7) Да. При присвоении текста у построителя слетают настройки. Их нужно перед сменой текста получить, а потом восстановить.
12 Sasha_H
 
05.03.09
16:21
(10)  если сделать УниверсальныйОтчет.УстановитьНачальныеНастройки(Истина);

Тогда моего изменения текста запроса не будет так как он перезаполняет текст запроса!
13 Sasha_H
 
05.03.09
16:22
(11) Да я полнял что нужно их востановить а как?
14 НЕА123
 
05.03.09
16:23
на куй истина. ложь пусть остается.
15 НЕА123
 
05.03.09
16:29
в (10) я написал, что просто надо  сначала присвоить текст а потом уж всякая лабуда.
а текст без всякой там заменить жестко вставь. подсмотри анализ заказа покупателей.
16 Sasha_H
 
05.03.09
17:34
собственно нашел

УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
17 Михаил Козлов
 
05.03.09
18:05
(13) вроде настройки = Построитель.ПолучитьНастройки() и Построитель.УстановитьНастройки(настройки);
18 Sasha_H
 
05.03.09
19:54
(17) Не много фактических параметров при установке настроек
19 Михаил Козлов
 
05.03.09
20:49
(18) В смысле?

ПостроительОтчета (ReportBuilder)
УстановитьНастройки (SetSettings)
Синтаксис:
УстановитьНастройки(<Настройки>, <Отбор>, <Порядок>, <Измерения>, <Выбранные поля>, <Условное оформление>)
Параметры:
<Настройки> (обязательный)
Тип: НастройкиПостроителяОтчета. Устанавливаемые настройки.
<Отбор> (необязательный)
Тип: Булево. Признак необходимости установки отбора.
Значение по умолчанию: Истина
<Порядок> (необязательный)
Тип: Булево. Признак необходимости установки порядка.
Значение по умолчанию: Истина
<Измерения> (необязательный)
Тип: Булево. Признак необходимости установки настроек измерений.
Значение по умолчанию: Истина
<Выбранные поля> (необязательный)
Тип: Булево. Признак необходимости установки выбранных полей.
Значение по умолчанию: Истина
<Условное оформление> (необязательный)
Тип: Булево. Признак необходимости установки условного оформления.
Значение по умолчанию: Истина
Описание:
Устанавливает настройки.
Примечание:
Загружает настройки построителя отчета, только в том случае, если текст запроса позволяет использовать такие настройки.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший