Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 21:12

Формирование Отчета

Автор Evgeny, 28 фев 2011, 11:24

0 Пользователей и 2 гостей просматривают эту тему.

Evgeny

Сделал Отчет который при открытии формируется сам, на форме есть поле выбора с ФИО, при выборе фамилии осуществляется отбор,  по замыслу отчет должен переформироваться только вывести данные удовлетворяющие отбору. Получилось так что при открытии отчет формируется, выбираем ФИО в ПолеВыбора, Отчет переформировывается один раз, все Ок, но дальше все сколько ФИО не меняй замертво стоит, А на Кнопку "Сформировать" вообще не реагирует никак. Как Сделать чтобы при каждом изменении ПолеВыбора отчет менялся?


   Перем настройки;
   
Процедура ПриОткрытии()
СхемаКомпоновкиДанных=Отчеты.тестПолеВыбора1.ПолучитьМакет("ОсновнаясхемаКомпоновкиДанных");
//настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

СформироватьОтчет();

КонецПроцедуры

 
Процедура фиоПриИзменении(Элемент)   
УстановитьНастройки();
СформироватьОтчет();
КонецПроцедуры

Процедура УстановитьНастройки()


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

ПараметрВывода=настройки.ПараметрыВывода.НайтиЗначениеПараметра(новый ПараметрКомпоновкиДанных("ВыводитьОтбор"));
ПараметрВывода.Использование=Истина;
ПараметрВывода.Значение=ТипВыводаТекстаКомпоновкиДанных.НеВыводить;

КонецПроцедуры

Процедура СформироватьОтчет() Экспорт
Настройки=КомпоновщикНастроек.Настройки;
КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);

ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);

ЭлементыФормы.Результат.Очистить();
ДокументРезультат=ЭлементыФормы.Результат;
ПроцессорВывода=Новый ПроцессорВыводарезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники1.Наименование
|ИЗ
| Справочник.Сотрудники КАК Сотрудники1";
ЭлементыФормы.ПолеВыбора.СписокВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование"));


Код наверно ужасен сегодня у меня месяц работы в 1с =)
О_о Кто здесь?

Evgeny

что то код не красиво вставился
ЦитироватьПерем настройки;
   
Процедура ПриОткрытии()
   СхемаКомпоновкиДанных=Отчеты.тестПолеВыбора1.ПолучитьМакет("ОсновнаясхемаКомпоновкиДанных");
   //настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   
   СформироватьОтчет();
       
КонецПроцедуры

 
Процедура фиоПриИзменении(Элемент)   
УстановитьНастройки();
СформироватьОтчет();
КонецПроцедуры

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

ПараметрВывода=настройки.ПараметрыВывода.НайтиЗначениеПараметра(новый ПараметрКомпоновкиДанных("ВыводитьОтбор"));
ПараметрВывода.Использование=Истина;
ПараметрВывода.Значение=ТипВыводаТекстаКомпоновкиДанных.НеВыводить;

КонецПроцедуры

Процедура СформироватьОтчет() Экспорт
   Настройки=КомпоновщикНастроек.Настройки;
   КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
   
   ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
   
   ЭлементыФормы.Результат.Очистить();
   ДокументРезультат=ЭлементыФормы.Результат;
   ПроцессорВывода=Новый ПроцессорВыводарезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры


Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Сотрудники1.Наименование
   |ИЗ
   |   Справочник.Сотрудники КАК Сотрудники1";
   ЭлементыФормы.фио.СписокВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование"));
О_о Кто здесь?

Klyacksa

Вот эта строка:
Настройки=КомпоновщикНастроек.Настройки;

Должна быть либо в ПриОткрытии, либо вообще в теле модуля, а не в СформироватьОтчет.
Иначе у Вас получается, что в фиоПриИзменении в начале изменяется переменная Настройки, а потом вызывается СформироватьОтчет и переменная Настройки перезаписывается совершенно другими данными.

А вообще - не вижу смысла, зачем Вы ее вообще вводили. Уберите переменную Настройки и обращайтесь уже к ним как:
КомпоновщикНастроек.Настройки.
То есть:
ЭлементОтбора=КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип ("ЭлементОтбораКомпоновкиДанных"));
Тогда не будет косяков с переопределением.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Evgeny

отключил ПараметрыВывода отбора и ужаснулся,
при каждом выборе в ПолеВыбора добавляется еще один отбор "И"

Цитировать"Наименование Равно ""Иванов"" И
Наименование Равно ""Петров"" И
Наименование Равно ""Соколов"" И
Наименование Равно ""ФИО1"""

я недавно изучаю 1с, но думаю надо добавить в какуенибудь отчистку в процедуру "УстановитьНастройки"
О_о Кто здесь?

Klyacksa

Цитироватьпри каждом выборе в ПолеВыбора добавляется еще один отбор "И"
Да, и это тоже.
Очистка, скорее всего, как-то так:
КомпоновщикНастроек.Настройки.Отбор.Очистить();
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

А что нить вроде

КомпоновщикНастроек.Настройки.Отбор.Наименование.Установить(ЭлементыФормы.Фио.Значение);

не прокатит?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Evgeny

ну почти, спасибо за помощь

КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();


А еще в догонку не подскажите как сделать, добавил процедуру фиоОчистка, при на жатии на полеВыбора кнопки Очистки формировалсябы отчет но уже без отбора, никак не получается его удалить.
при использовании:
КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить();

ругается
Цитировать{Отчет.ТестПолеВыбора1.Форма.ФормаОтчета.Форма(15)}: Недостаточно фактических параметров
   КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить();
О_о Кто здесь?

Evgeny

Или может быть добавить условие в процедуру УстановитьНастройки?

P.S. не смог найти кнопки редактирование сообщения
О_о Кто здесь?

Klyacksa

Методу "Удалить" нужно в параметр передать элемент, который нужно удалить :)

А вопроса не поняла, почему Очистить() не устраивает
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

"Недостаточно фактических параметров"

Вызовите справку по методу удалить() (но только применительно к отбору!).
и посмотрите что за параметры ему нужны,
особенно помеченные как обязательный.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск