Колонка типа "Булево" в динамически создаваемом отчете

  • Автор темы Marija
  • Дата начала
M

Marija

#1
Помогите, пожалуйста!
Мне в отчет "Анализ заказов покупателей" в типовой УТ v8 нужно вставить столбик с "галочками", чтобы можно было выбирать определенную номенклатуру (т.е. нужно еще каким-то образом связать Номенклатуру с флажком), которая потом по кнопке "Сформировать заказ поставщику" попадала в ТЧ этого док-та. Причем сам отчет формируется "динамически"...
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
А если, например, добавить обработку расшифровки, и в момент щелчка определять координаты. Затем обращаться к номенклатуре в строке?
 
M

Marija

#3
Ну я пока придумала обработать событие ПолеТабличногоДокументаРезультатПриАктивизацииОбласти и заносить выбранную номенклатуру в отдельный список значений...,и окрашивать ее в какой-то цвет, но тут тоже есть проблемы... Почему-то при выборе ячейки поля один раз, это событие возникает 2 раза...(((
 
M

Marija

#5
может ОбработкаРасшифровки (DetailProcessing)
А как с помощью этой обработки при выборе ячейки (один раз левой кл.мыши) добавить содержимое в отдельный список??? Или что вы имеете в виду?

Вот текст моей процедуры... т.к. событие возникает 2 раза для одной и той же ячейки, ничего не выделяется и не добавляется в мой список...(((
Код:
Процедура ПолеТабличногоДокументаРезультатПриАктивизацииОбласти(Элемент)
Попытка			
Если ТипЗнч(Элемент.ВыделенныеОбласти[0]) = ТипЗнч(ЭлементыФормы.ПолеТабличногоДокументаРезультат.Область()) Тогда // ОбластьЯчеекТабличногоДокумента

Номенкл = Элемент.ТекущаяОбласть.Расшифровка.Номенклатура;				

ЗеленыйЦвет = Новый Цвет(190, 245, 116); // зеленый
БелыйЦвет = Новый Цвет(255, 255, 255); // белый

Если Элемент.ТекущаяОбласть.Текст = Элемент.ТекущаяОбласть.Расшифровка.Номенклатура.Наименование Тогда

Если Элемент.ТекущаяОбласть.ЦветФона = ЗеленыйЦвет Тогда 
Элемент.ТекущаяОбласть.ЦветФона = БелыйЦвет;
Если Список.НайтиПоЗначению(Номенкл) <> Неопределено Тогда
Список.Удалить(Номенкл);						
КонецЕсли;										 
Иначе	
Элемент.ТекущаяОбласть.ЦветФона = ЗеленыйЦвет;
Если Список.Количество() = 0 Тогда
Список.Добавить(Номенкл);						
ИначеЕсли Список.НайтиПоЗначению(Номенкл) = Неопределено Тогда
Список.Добавить(Номенкл);						
КонецЕсли;					
КонецЕсли;	
КонецЕсли;
КонецЕсли;	
Исключение
КонецПопытки;
КонецПроцедуры
 
B

Buster

#6
Я вот как бы забабахал... из этого можно сделать что угодно.
Я не знаю только как сделать, чтобы в форме отображались "флажки", и можно было по одному клику например менять значение.

Вернее даже как, по одному клику возможно можно через ПриАктивизации, но просто пробовать не охота :) Я думаю пользователя не затруднит 2 раза покликать :)

Сделано через ОбработкаВыбора

З.Ы. потестил через при активизации, тоже все можно сделать без проблем ) Эт для ленивых пользователей, если им уж лень 2 раза кликать ) Отчет прикрепленный правда не обновлял, поэтому сами доделаете, если еще надо конечно :)

Otchet2.erf
 
M

Marija

#7
Я вот как бы забабахал... из этого можно сделать что угодно (...)
Спасибо за идею! Хотя я и реализовала свою...
Я избегала двойного клика, т.к. он уже забит расшифровкой. И условие у меня еще было, что отчет формируется без фиксированного макета - динамически. В моем (более сложном) отчете в строчках присутствуют не только позиции номенклатуры, а так же есть группировка по Заказу покупателя, Договору к/а, контрагенту и т.д. в зависимости от выбора пользователя, поэтому, я думаю, что будет более сложным добавить подобный столбец "Включить в расчет", напротив каждой позиции товара...
Свою идею я реализовала в процедуре ПолеТабличногоДокументаРезультатОбработкаРасшифровки, в случае: Если Элемент.ТекущаяОбласть.Текст = Элемент.ТекущаяОбласть.Расшифровка.Номенклатура.Наименование у меня при двойном нажатии ячейка окрашивается в зеленый и попадает в отдельный список, при повторном двойном нажатии на эту ячейку она снова красится в белый и эта позиция удаляется из списка. Этот список потом используется при формировании док. Заказ поставщику. Хотя пришлось из этой ячейки убрать расшифровку, но она осталась так же в строчке, которая содержит эту ячейку... так что вот.
 

Darlock

Well-known member
04.01.2008
560
1
#9
Спасибо за идею! Хотя я и реализовала свою...
Я избегала двойного клика, т.к. он уже забит расшифровкой. И условие у меня еще было, что отчет формируется без фиксированного макета - динамически. В моем (более сложном) отчете в строчках присутствуют не только позиции номенклатуры, а так же есть группировка по Заказу покупателя, Договору к/а, контрагенту и т.д. в зависимости от выбора пользователя, поэтому, я думаю, что будет более сложным добавить подобный столбец "Включить в расчет", напротив каждой позиции товара...
Свою идею я реализовала в процедуре ПолеТабличногоДокументаРезультатОбработкаРасшифровки, в случае: Если Элемент.ТекущаяОбласть.Текст = Элемент.ТекущаяОбласть.Расшифровка.Номенклатура.Наименование у меня при двойном нажатии ячейка окрашивается в зеленый и попадает в отдельный список, при повторном двойном нажатии на эту ячейку она снова красится в белый и эта позиция удаляется из списка. Этот список потом используется при формировании док. Заказ поставщику. Хотя пришлось из этой ячейки убрать расшифровку, но она осталась так же в строчке, которая содержит эту ячейку... так что вот.
Ну и что, что занят расшифровкой, что мешает вам самой собрать контекстное меню для обработки расшифровки? где добавить строку, что-то типа "Добавить в заказ". А потом обрабатывать уже дальше. Вы же работаете с полем табличного документа, куда проще работать с методами не целой области, а конкретной выделенной ячейкой.
 
M

Marija

#10
оу, как я понимаю у вас даже макета нет? т.е. вы формируете табличный документ полностью программно?
Именно! Извиняюсь за столь поздний ответ, давно сюда не заходила )

Добавлено:
Ну и что, что занят расшифровкой, что мешает вам самой собрать контекстное меню для обработки расшифровки? где добавить строку, что-то типа "Добавить в заказ". А потом обрабатывать уже дальше. Вы же работаете с полем табличного документа, куда проще работать с методами не целой области, а конкретной выделенной ячейкой.
"самой собрать контекстное меню для обработки расшифровки"
Не особо пока представляю как это сделать...
 

Darlock

Well-known member
04.01.2008
560
1
#11
Именно! Извиняюсь за столь поздний ответ, давно сюда не заходила )

Добавлено:

"самой собрать контекстное меню для обработки расшифровки"
Не особо пока представляю как это сделать...
Есть предопределенная процедура "ОбработкаРасшифровки" Она доступна будет только в том случае, если табличный документ имеет форму. Т.е. ваш динамический макет выводится в элемент управления. Один из параметров (первый кажется) отвечает за формирование контекстного меню обработки расшифровки.
 
M

Marija

#12
Есть предопределенная процедура "ОбработкаРасшифровки" Она доступна будет только в том случае, если табличный документ имеет форму. Т.е. ваш динамический макет выводится в элемент управления. Один из параметров (первый кажется) отвечает за формирование контекстного меню обработки расшифровки.
А не подскажете, как в стандартной обработке расшифровки в контекстное меню добавить еще свои строчки с действиями... какой-ниб. пример...?
 

Darlock

Well-known member
04.01.2008
560
1
#13
Код:
Процедура ПолеТабличногоДокументаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если ТипЗнч(Расшифровка)=Тип("Структура") Тогда
СтандартнаяОбработка = Ложь;
Если Расшифровка.Тип="Меню" Тогда
Сп = Новый СписокЗначений;
Сп.Добавить(1,"Открыть заказ на автомобиль");
Сп.Добавить(2,"Открыть карточку клиента");
Сп.Добавить(3,"Оформить продажу");
Выб = ВыбратьИзМеню(Сп);
Если Выб<>Неопределено Тогда
Если Выб.Значение = 1 Тогда
Расшифровка.Заказ.ПолучитьФорму().Открыть();
ИначеЕсли Выб.Значение = 2 Тогда
Клиент = Расшифровка.Клиент;
Если ТипЗнч(Клиент)=Тип("СправочникСсылка.Контрагенты") и не Клиент.Пустая() Тогда
Клиент.ПолучитьФорму().Открыть();
Иначе
Предупреждение("Клиент не выбран!");
КонецЕсли;
ИначеЕсли Выб.Значение = 3 Тогда
Д = Документы.ЗаказНаАвтомобиль.СоздатьДокумент();
Д.ОбработкаЗаполнения(Расшифровка.Заказ);
Д.ХозОперация=Справочники.ХозОперации.ЗаказНаАвтомобиль;
ФормаД = Д.ПолучитьФорму();
ФормаД.Открыть();
ФормаД.ДокументОбъект.Контрагент = Неопределено;
ФормаД.ДокументОбъект.ОбработкаРеквизита("Контрагент",,ФормаД);
ФормаД.ДокументОбъект.Заказчик = Неопределено;
ФормаД.ДокументОбъект.ОбработкаРеквизита("Заказчик",,ФормаД);

КонецЕсли;
КонецЕсли;
ИначеЕсли Расшифровка.Тип="Авто" Тогда
А = Справочники.Автомобили.НайтиПоРеквизиту("VIN",Расшифровка.VIN);
Если А = Неопределено ИЛИ А.Пустая() Тогда
Предупреждение("Карточка автомобиля не найдена!");
Иначе
А.ПолучитьФорму().Открыть();
КонецЕсли;
ИначеЕсли Расшифровка.Тип="ПСО" Тогда
А = Справочники.Автомобили.НайтиПоРеквизиту("VIN",Расшифровка.Заказ.VIN);
Если А = Неопределено ИЛИ А.Пустая() Тогда
Предупреждение("Карточка автомобиля не найдена!");
Иначе
Ф = Документы.ЗаказНаряд.ПолучитьФормуСписка();
Ф.Отбор.ВидРемонта.ВидСравнения = ВидСравнения.Равно;
Ф.Отбор.ВидРемонта.Значение = Справочники.ВидыРемонта.НайтиПоНаименованию("Предпродажная подготовка");
Ф.Отбор.ВидРемонта.Использование = Истина;
Ф.Отбор.Автомобиль.ВидСравнения = ВидСравнения.Равно;
Ф.Отбор.Автомобиль.Значение = А;
Ф.Отбор.Автомобиль.Использование = Истина;
Ф.Открыть();
КонецЕсли;
ИначеЕсли Расшифровка.Тип="Заявки" Тогда
А = Справочники.Автомобили.НайтиПоРеквизиту("VIN",Расшифровка.Заказ.VIN);
Если А = Неопределено ИЛИ А.Пустая() Тогда
Предупреждение("Карточка автомобиля не найдена!");
Иначе
Ф = Документы.ЗаявкаНаРемонт.ПолучитьФормуСписка();
Ф.Отбор.Автомобиль.ВидСравнения = ВидСравнения.Равно;
Ф.Отбор.Автомобиль.Значение = А;
Ф.Отбор.Автомобиль.Использование = Истина;
Ф.Открыть();
КонецЕсли;
ИначеЕсли Расшифровка.Тип="Наряды" Тогда
А = Справочники.Автомобили.НайтиПоРеквизиту("VIN",Расшифровка.Заказ.VIN);
Если А = Неопределено ИЛИ А.Пустая() Тогда
Предупреждение("Карточка автомобиля не найдена!");
Иначе
Ф = Документы.ЗаказНаряд.ПолучитьФормуСписка();
Ф.Отбор.ВидРемонта.ВидСравнения = ВидСравнения.НеРавно;
Ф.Отбор.ВидРемонта.Значение = Справочники.ВидыРемонта.НайтиПоНаименованию("Предпродажная подготовка");
Ф.Отбор.ВидРемонта.Использование = Истина;
Ф.Отбор.Автомобиль.ВидСравнения = ВидСравнения.Равно;
Ф.Отбор.Автомобиль.Значение = А;
Ф.Отбор.Автомобиль.Использование = Истина;
Ф.Открыть();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
 
M

Marija

#14
Код:
Процедура ПолеТабличногоДокументаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если ТипЗнч(Расшифровка)=Тип("Структура") Тогда
СтандартнаяОбработка = Ложь;
Если Расшифровка.Тип="Меню" Тогда
(...)			
КонецЕсли;
КонецЕсли;
КонецПроцедуры
А что делать если тип расшифровки какой-то "Идентификатор расшифровки компоновки данных"? ;)