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

Тема в разделе "1C и всё что с ней связано", создана пользователем Marija, 20 апр 2010.

  1. Marija

    Marija Гость

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А если, например, добавить обработку расшифровки, и в момент щелчка определять координаты. Затем обращаться к номенклатуре в строке?
     
  3. Marija

    Marija Гость

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

    kaa Гость

    может ОбработкаРасшифровки (DetailProcessing)
     
  5. Marija

    Marija Гость

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

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

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

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

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

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

    Buster Гость

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

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

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

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

    Otchet2.erf
     
  7. Marija

    Marija Гость

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

    Buster Гость

    оу, как я понимаю у вас даже макета нет? т.е. вы формируете табличный документ полностью программно?
     
  9. Darlock

    Darlock Well-Known Member
    1C Team

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

    Marija Гость

    Именно! Извиняюсь за столь поздний ответ, давно сюда не заходила )

    Добавлено:
    "самой собрать контекстное меню для обработки расшифровки"
    Не особо пока представляю как это сделать...
     
  11. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Есть предопределенная процедура "ОбработкаРасшифровки" Она доступна будет только в том случае, если табличный документ имеет форму. Т.е. ваш динамический макет выводится в элемент управления. Один из параметров (первый кажется) отвечает за формирование контекстного меню обработки расшифровки.
     
  12. Marija

    Marija Гость

    А не подскажете, как в стандартной обработке расшифровки в контекстное меню добавить еще свои строчки с действиями... какой-ниб. пример...?
     
  13. Darlock

    Darlock Well-Known Member
    1C Team

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

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

    Marija Гость

    А что делать если тип расшифровки какой-то "Идентификатор расшифровки компоновки данных"? ;)
     
Загрузка...

Поделиться этой страницей