Имя: Пароль:
1C
1С v8
УФ, новый объект, обработка заполнения не выполняется
0 capllary_
surgut
 
11.08.15
08:31
УФ, обработка заполнения справочника конфигурации Документооборот ПРОФ ВходящиеДокументы. Почему то заполняются реквизиты объекта только лишь после того, как записать новый объект, закрыть и открыть снова.
Если создать новый объект, его записать и сразу выполнить обработку заполнения, то ничего не заполняется. Где-то туплю с Окнами, но где?

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    //Спросим у пользователя разрешение на продолжение обработки
    Режим = РежимДиалогаВопрос.ДаНет;
    Текст = "Текущие данные документа будут заменены новыми без возможности восстановления.
    |Продолжить?";
    Ответ = Вопрос(Текст, Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда

        //Если пользователь дал разрешение на продолжение, то начнем перебирать все
        //документы, у которых мы планируем заполнить табличную часть
        Для каждого Элемент из ОбъектыНазначенияМассив Цикл

            //Зададим ключ поиска документа, из которого вызвана данная обработка,
            //чтобы получить ссылку на редактирумый документ в удобном виде для
            //функции ОткрытьФорму()
            КлючПоиска = Новый Структура("Ключ", Элемент);

            //Но нам не надо открывать новую форму (окно) для изменяемого документа, а
            //Нам надо все изменения показать в уже открытых у клиента окнах
            Окна = ПолучитьОкна();
            Для каждого Окно из Окна Цикл

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

                    //////Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
                    //////В объекте содержатся все реквизиты (элементы) формы
                    НовыйОбъект = Форма.Объект;

                    ////Мы помещаем объект формы в переменную,
                    ////так как должны передать её в процедуру на сервере,
                    ////где нельзя изменять объект формы, зато можно править переменную содержащую его
                    //ЗаполнитьОбъект(НовыйОбъект);
                    ЗаполнитьОбъект(НовыйОбъект);

                    ////После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
                    ////которую необходимо передать в уже полученную нами форму
                    КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                    
                КонецЕсли;
            КонецЦикла;

        КонецЦикла;
1 capllary_
surgut
 
11.08.15
08:35
&НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект)

    НовыйОбъект.Адресат = Справочники.Пользователи.НайтиПоНаименованию("ВасяПупкин");
    НовыйОбъект.Подразделение = Справочники.СтруктураПредприятия.НайтиПоКоду("00-000018");

КонецФункции
2 capllary_
surgut
 
11.08.15
08:38
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    
    Для каждого Элемент из ОбъектыНазначенияМассив Цикл
        КлючПоиска = Новый Структура("Ключ", Элемент);
        Окна = ПолучитьОкна();
        Для каждого Окно из Окна Цикл
            Если Найти(Окно.Заголовок, Элемент) Тогда
                Форма = ПолучитьФорму("Справочник.ВходящиеДокументы.Форма.ФормаЭлемента",КлючПоиска,,,Окно);
                НовыйОбъект = Форма.Объект;
                ЗаполнитьОбъект(НовыйОбъект);
                КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                    
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры
3 Fish
 
11.08.15
08:50
Непонятно, зачем заполнять через формы? Заполняй сам объект.
4 zak555
 
11.08.15
08:52
отойди от конфы
5 capllary_
surgut
 
11.08.15
08:53
(3) Так?


&НаСервере
Функция ЗаполнитьОбъект()

    Адресат = Справочники.Пользователи.НайтиПоНаименованию("Арещенко Светлана Александровна");
    Подразделение = Справочники.СтруктураПредприятия.НайтиПоКоду("00-000018");

КонецФункции



&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    
    Для каждого Элемент из ОбъектыНазначенияМассив Цикл
        КлючПоиска = Новый Структура("Ключ", Элемент);
        Окна = ПолучитьОкна();
        Для каждого Окно из Окна Цикл
            Если Найти(Окно.Заголовок, Элемент) Тогда
                ЗаполнитьОбъект();                
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры
6 zak555
 
11.08.15
08:56
на хрена ты окна используешь ?
7 capllary_
surgut
 
11.08.15
08:57
(6) На инфостарте нашел мануал по формированию обработок заполнения на УФ, с УФ вообще мало знаком, там все заполнение через формы сделано.
8 Fish
 
11.08.15
09:00
(7) По моему какой-то дебильный ты мануал нашёл. Или используешь его не по назначению. Если тебе нужно заполнить справочник, заполняй сам объект. Нафига здесь окна непонятно.
9 capllary_
surgut
 
11.08.15
09:22
Теперь поле объекта недоступно для записи:


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    
    Для каждого Элемент из ОбъектыНазначенияМассив Цикл
        
        ЗаполнитьОбъект(Элемент);
        
    КонецЦикла;        
        
КонецПроцедуры


&НаСервере
Функция ЗаполнитьОбъект(Элемент)

    Элемент.Адресат = Справочники.Пользователи.НайтиПоНаименованию("ВасяПупкин");
    Элемент.Подразделение = Справочники.СтруктураПредприятия.НайтиПоКоду("00-000018");

КонецФункции
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой