|
УФ, новый объект, обработка заполнения не выполняется | ☑ | ||
---|---|---|---|---|
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"); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |