Имя: Пароль:
1C
 
Отчет, кнопка сформировать. Вставить свою процедуру
0 wwwqwert2014
 
09.10.14
12:38
Необходимо при нажатии по кнопке "Сформировать" перезаполнить регистр (актуализировать информацию).
Захожу в Отладка/Остановить в конфигураторе, затем жму на кнопку "Сформировать" в режиме Предприятие и ничего не останавливается. Нужно сделать так, чтобы выполнялась своя процедура при щелчке по этой кнопке.
Комплексная автоматизация 1.1
1 PR
 
09.10.14
12:39
(0) Хвастаешься?
2 lxndr
 
09.10.14
12:39
прикрути свою кнопку
3 Chai Nic
 
09.10.14
12:39
Остановить можно только то, что выполняется. Вот если нажал на кнопку, и она запустила какой-то длительный алгоритм - его можно остановить. А в твоём случае надо ставить точку останова на процедуру-обработчик.
4 wwwqwert2014
 
09.10.14
12:41
Я не могу найти процедуру-обработчик, который вызывается при нажатии на кнопку Сформировать
5 wwwqwert2014
 
09.10.14
12:41
В этом-то и есть проблема
6 PR
 
09.10.14
12:43
(4) Ее нет
7 PR
 
09.10.14
12:43
ПриКомпоновкеРезультата есть, если СКД
8 ИС-2
 
naïve
09.10.14
12:44
(4) а ее и нет. Выполняется стандартное действие Сформировать.

Для СКД код новой кнопки будет примерно таким:

ЗаполнитьРегистр()
Скомпоновать(ТабДок)

Вот только интересно, что случиться с сервером, когда 2 пользователя одновременно нажмут на кнопку...
9 elCust
 
09.10.14
12:44
(0) Учи матчасть, потом делай. Блин понаберут по объявлению...
10 ИС-2
 
naïve
09.10.14
12:45
не, тут другая гениальная задача от руководства - надо отследить сколько раз человек формировал отчет
11 shuhard
 
09.10.14
12:47
(4) а отчет то на каком движке построен
- универсальный отчет
- СКД
- черепашка ?
12 wwwqwert2014
 
09.10.14
12:54
Ну я создал схему компоновки данных и форму отчета. В модуле формы прописал установку параметров. Все.
13 shuhard
 
09.10.14
12:58
(12) угу
вот пример отчета на СКД с выводом картинки
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДокументРезультат.Очистить();
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    
    //Создадим и инициализируем процессор компоновки
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
    ПроцессорТЗ=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТЗ=Новый ТаблицаЗначений;
    ПроцессорТЗ.УстановитьОбъект(ТЗ);
    ПроцессорТЗ.Вывести(ПроцессорКомпоновки);
    // обход ТЗ, извлечение картинки, формирование отчета
    Таб = ДокументРезультат;
    Макет = ПолучитьМакет("МакетСКартинкой");
    ОблШапки = Макет.ПолучитьОбласть("Шапка");
    ОблШапки.Параметры.ДатаСреза=Формат(МакетКомпоновки.ЗначенияПараметров.ДатаСреза.Значение,"ДЛФ=DD");
    Таб.Вывести(ОблШапки);
    ОблС = Макет.ПолучитьОбласть("Строка");
    Ст=1;
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        ОблС.Параметры.НомерПоПорядку=Ст;
        ОблС.Параметры.Номенклатура=СтрокаТЗ.НоменклатураСсылка;    
        ТМЦ=СтрокаТЗ.НоменклатураСсылка;
        Если ТМЦ.ОсновноеИзображение.Хранилище.Получить() = Неопределено Тогда
            Вставка = Новый Картинка;
        Иначе
            Вставка =ТМЦ.ОсновноеИзображение.Хранилище.Получить();
        КонецЕсли;
        ОблС.Рисунки.Карт.Картинка  = Вставка;
        ОблС.Параметры.Характеристика=СтрокаТЗ.ХарактеристикаНоменклатуры;
        ОблС.Параметры.ОстатокпоУчету=СтрокаТЗ.КоличествоОстаток;
        ОблС.Параметры.НоменклатураКод=СтрокаТЗ.НоменклатураКод;
        Таб.Вывести(ОблС);
        Ст=Ст+1;
    КонецЦикла;    
    Таб.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
    Таб.АвтоМасштаб = Истина;
    Таб.ОтображатьСетку = Ложь;
14 wwwqwert2014
 
09.10.14
13:02
Я все сделал, только я не совсем понимаю как показать изменения программно. У меня есть элементФормы Результат.
Программно я данные поместил в ТабДок. Вот только если я пишу ТабДок.Показать(), то всё некрасиво в отдельном окне выводится.
А как мне по-типовому сформировать бы?
15 lxndr
 
09.10.14
13:05
(14) см (8)
16 wwwqwert2014
 
09.10.14
13:06
// Вставить содержимое обработчика.
    СКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = СКД.НастройкиПоУмолчанию;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
    
    ДокументРезультат = Новый ТабличныйДокумент;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
    //ДокументРезультат.Показать();
    СкомпоноватьРезультат(ДокументРезультат);
17 wwwqwert2014
 
09.10.14
13:07
Функции Скомпоновать() нет в СП
18 wwwqwert2014
 
09.10.14
13:10
то что я в(16) написал, не выподит отчет
19 lxndr
 
09.10.14
13:12
(17)
ОтчетОбъект.<Имя отчета>.СкомпоноватьРезультат (ReportObject.<Имя отчета>.ComposeResult)
ОтчетОбъект.<Имя отчета> (ReportObject.<Имя отчета>)
СкомпоноватьРезультат (ComposeResult)
Синтаксис:

СкомпоноватьРезультат(<Результат>, <ИнформацияРасшифровки>)
Параметры:

<Результат> (обязательный)

Тип: ТабличныйДокумент.
Табличный документ, в который будет выводиться результат.
<ИнформацияРасшифровки> (необязательный)

Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
Описание:

Выполняет компоновку.

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

Сервер, толстый клиент, внешнее соединение.
Примечание:

Пользователь может при помощи комбинации клавиш Ctrl+Break прервать выполнение отчета. При этом будет вызвано исключение.
20 wwwqwert2014
 
09.10.14
13:27
Я это понял. Как мне отобразить результат в поле для вывода результата?
21 tank68
 
09.10.14
14:16
Процедура ВыполнениеОтчета()
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    СхемаКомпоновкиДанных.Параметры.ДатаНачала.Значение = ДатаНачала;  
    СхемаКомпоновкиДанных.Параметры.ДатаОкончания.Значение = ДатаОкончания;
    
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    табДок = новый ТабличныйДокумент;
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    табДок.Показать();
    
КонецПроцедуры
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший