Имя: Пароль:
1C
1С v8
Модифицированность формы
0 Анцеранана
 
08.05.14
15:34
Извините если баян.
Чтобы не портить типовую конфигурацию УПП написал внешнюю обработку заполнения табличной части документа (!). В этой обработке просто форма открывается. Пустая(!), там пока ничего нет. Но при этом почему-то сразу же меняется модифицированность исходной формы документа. Где и когда это происходит я не нашел. Например нажимаю на произвольную кнопку уже после того как звездочка в заголовке включилась. Отладчик пишет - ЭтаФорма.Модифицированность() = Ложь. Чудеса.

Вообщем вопросы тупые: как найти  в отладчике, что форма модифицирована?. Есть ли возможность убрать модифицированность  исх. формы непосредственно из обработки?
Строчка ПриЗакрытии ДокументОбъект.ПолучитьФорму().Модифицированность = Ложь; // не помогло....

Код при инициализации обработки если что-такой:

Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
    ДокументОбъект = Объект;
    Ссылка = Объект.Ссылка;
    Если Ссылка = Документы.ВозвратТоваровОтПокупателя.ПустаяСсылка() Тогда
        Предупреждение("Не могу установить визы для документа, т.к. он не записан!",50);
        Возврат;
    КонецЕсли;
    ЭтотОбъект.ПолучитьФорму("Форма1").ОткрытьМодально(); //пустая форма

КонецПроцедуры
1 mehfk
 
08.05.14
15:42
// Процедура формирует подменю по дереву значений
// Параметры:
//    < СтрокаПодменю > (обязательный)
//        Тип: Дерево или элемент дерева значений, по данным которого необходимо построить подменю.
//    < Подменю> (обязательный)
//        Тип: Элемент командной панели «Кнопка» типа «Подменю». На которой необходимо сформировать новое подменю.
//    < Очищать> (по умолчанию «Ложь»)
//        Тип: булево. Определяет: следует ли очищать переданное подменю.
//    < ДобавлятьРазделительВНачало > (по умолчанию «Ложь»)
//        Тип: булево. Определяет: следует ли добавить в начало подменю разделитель.
Процедура СформироватьИерархическоеПодменю(СтрокаПодменю, Подменю, Очищать = Ложь, ДобавлятьРазделительВНачало = Ложь) Экспорт
2 mehfk
 
08.05.14
15:43
Процедура СформироватьИерархическоеПодменю(СтрокаПодменю, Подменю, Очищать = Ложь, ДобавлятьРазделительВНачало = Ложь) Экспорт
    
    Строки = СтрокаПодменю.Строки;
    Кнопки = Подменю.Кнопки;
    
    Если Очищать Тогда
        Кнопки.Очистить();
    
    КонецЕсли;
    
    Если ДобавлятьРазделительВНачало и Строки.Количество() > 0 Тогда
        Кнопки.Добавить(,ТипКнопкиКоманднойПанели.Разделитель);
    
    КонецЕсли;
    
    Для Каждого СтрокаКнопки Из Строки Цикл
        
        Кнопка = Кнопки.Добавить(СтрокаКнопки.Имя,СтрокаКнопки.ТипКнопки, СтрокаКнопки.Текст, СтрокаКнопки.Действие);
        
        Если СтрокаКнопки.Строки.Количество() > 0 Тогда
            
            СформироватьИерархическоеПодменю(СтрокаКнопки, Подменю, Ложь, Ложь)
            
        КонецЕсли;
        
        Если Не СтрокаКнопки.Картинка = Неопределено Тогда
            
            Кнопка.Картинка  = СтрокаКнопки.Картинка;
        
        КонецЕсли;
        
        Кнопка.Подсказка      = СтрокаКнопки.Подсказка;
        Кнопка.Пояснение      = СтрокаКнопки.Подсказка;
        Кнопка.Пометка        = СтрокаКнопки.Пометка;
        Кнопка.ИзменяетДанные = СтрокаКнопки.ИзменяетДанные;
        
        //Остальные свойства кнопки
        
    КонецЦикла;
    

КонецПроцедуры   //СформироватьИерархическоеПодменю
3 mehfk
 
08.05.14
15:45
// Процедура формирует подменю "Заполнить" у ТЧ по дереву значений
//
Процедура СформироватьПодменюЗаполненияТЧПоДеревуКнопок(ДеревоКнопок,СоответствиеТЧ) Экспорт
    
    Для Каждого КлючИЗначение Из СоответствиеТЧ Цикл
        
        ИмяТабличнойЧасти = КлючИЗначение.Ключ.Данные;
        
        СтрокаПодменю = ДеревоКнопок.Строки.Найти(ИмяТабличнойЧасти, "Имя");
        
        Если СтрокаПодменю <> Неопределено Тогда
            
            // Табличное поле
            СтрокаПодменю.Расшифровка = КлючИЗначение.Ключ;
            
            ПодменюИлиКоманднаяПанель = КлючИЗначение.Значение;
            
            Если ТипЗНЧ(ПодменюИлиКоманднаяПанель) = Тип("КоманднаяПанель") Тогда
                    
                ПодменюИлиКоманднаяПанель = ПодменюИлиКоманднаяПанель.Кнопки.Добавить(,ТипКнопкиКоманднойПанели.Подменю,"Заполнить");
                    
            КонецЕсли;
            СформироватьИерархическоеПодменю(СтрокаПодменю, ПодменюИлиКоманднаяПанель,Ложь,Истина);
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры // СформироватьПодменюЗаполненияТЧПоДеревуКнопок()
4 mehfk
 
08.05.14
15:46
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка, Действие) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ВнешниеОбработкиПринадлежность.Ссылка,
    |    ВнешниеОбработкиПринадлежность.ДополнительныеПараметрыОбработки КАК ДополнительныеПараметрыОбработки,
    |    ВЫБОР
    |        КОГДА ЕСТЬNULL(ВнешниеОбработкиПринадлежность.ПредставлениеКнопки, """") <> """" ТОГДА ВнешниеОбработкиПринадлежность.ПредставлениеКнопки
    |        ИНАЧЕ ВнешниеОбработкиПринадлежность.Ссылка.Наименование
    |    КОНЕЦ КАК Наименование,
    |    ВнешниеОбработкиПринадлежность.ТабличнаяЧастьИмя КАК ТабличнаяЧастьИмя
    |ИЗ
    |    Справочник.ВнешниеОбработки.Принадлежность КАК ВнешниеОбработкиПринадлежность
    |ГДЕ
    |    (НЕ ВнешниеОбработкиПринадлежность.Ссылка.ПометкаУдаления)
    |    И ВнешниеОбработкиПринадлежность.МетаданныеОбъекта = &МетаданныеОбъекта
    |    И ВнешниеОбработкиПринадлежность.Ссылка.ВидОбработки = &ВидОбработки
    |
    |УПОРЯДОЧИТЬ ПО
    |    ТабличнаяЧастьИмя
    |ИТОГИ ПО
    |    ТабличнаяЧастьИмя";
    
    МетаданныеОбъекта = Ссылка.Метаданные();
    ДеревоКнопок = ИнициализироватьДеревоДополнительныхКнопок();
    
    Запрос.УстановитьПараметр("ВидОбработки", Перечисления.ВидыДополнительныхВнешнихОбработок.ЗаполнениеТабличныхЧастей);
    Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("МетаданныеОбъекта", "Документ." + МетаданныеОбъекта.Имя);
    ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("МетаданныеОбъекта", "Справочник." + МетаданныеОбъекта.Имя);
    ИначеЕсли Метаданные.Отчеты.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("МетаданныеОбъекта", "Отчет." + МетаданныеОбъекта.Имя);
    Иначе
        Возврат ДеревоКнопок;
    КонецЕсли;
    
    НомерКнопки = 0;
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
        СтрокаПодменю = ДобавитьСтрокуВДеревоКнопок(ДеревоКнопок, Выборка.ТабличнаяЧастьИмя, , , , , , , , , Истина);
        ВыборкаДействий            = Выборка.Выбрать();
        
        Пока ВыборкаДействий.Следующий() Цикл
            
            НомерКнопки = НомерКнопки + 1;
            
            СтруктураРасшифровки = Новый Структура("СсылкаНаВнешнююОбработку, ДополнительныеПараметрыОбработки", ВыборкаДействий.Ссылка, ВыборкаДействий.ДополнительныеПараметрыОбработки.Получить());
            
            ДобавитьСтрокуВДеревоКнопок(СтрокаПодменю, "ЗаполнениеТЧ"+НомерКнопки, ТипКнопкиКоманднойПанели.Действие, ВыборкаДействий.Наименование, Действие , СтруктураРасшифровки, , , , , Истина);
            
        КонецЦикла;
    КонецЦикла;
    
    
    Возврат ДеревоКнопок;
    
КонецФункции // ()
5 mehfk
 
08.05.14
15:46
Функция ДобавитьСтрокуВДеревоКнопок(СтрокаПодменю, Имя, Знач ТипКнопки = Неопределено ,Текст = "", Действие = Неопределено, Расшифровка = Неопределено, Пометка = Ложь, Подсказка = "", Картинка = Неопределено, Позиция = Неопределено, ИзменяетДанные = Ложь)
    
    Если ТипКнопки = Неопределено Тогда
    
        ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
        
    КонецЕсли;
    Если Позиция = Неопределено Тогда
        СтрокаКнопки         = СтрокаПодменю.Строки.Добавить();
    Иначе
        СтрокаКнопки         = СтрокаПодменю.Строки.Вставить(Позиция);
    КонецЕсли;
    
    СтрокаКнопки.Имя                = Имя;
    СтрокаКнопки.ТипКнопки          = ТипКнопки;
    СтрокаКнопки.Текст              = Текст;
    СтрокаКнопки.Действие           = Действие;
    СтрокаКнопки.Картинка           = Картинка;
    СтрокаКнопки.Подсказка          = Подсказка;
    СтрокаКнопки.Пометка            = Пометка;
    СтрокаКнопки.ИзменяетДанные     = ИзменяетДанные;
    
    СтрокаКнопки.Расшифровка = Расшифровка;
    
    Возврат СтрокаКнопки;
    
КонецФункции
6 mehfk
 
08.05.14
15:54
Делай так
Процедура Инициализировать(Док, п1, п2) Экспорт
    Мод = Док.Модифицированность();
    
    // Вставить мегакод
    
    Док.ПолучитьФорму().Модифицированность = Мод Или Ложь;
КонецПроцедуры
7 mehfk
 
08.05.14
15:55
Док.ПолучитьФорму().Модифицированность = Мод Или Ложь; ==>
Док.ПолучитьФорму().Модифицированность = Мод;
8 Анцеранана
 
08.05.14
16:14
(6) Спасибо огромное! В ПриЗакрытии не получилось. А в Инициализировать прошло на ура! Вот такая особенность , понимаешь.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс