Имя: Пароль:
1C
1С v8
Помогите программно заполнить УФ форму
,
0 for012
 
16.12.14
09:09
Здравствуйте.

Из экселя гружу доки в типовую конфу.
Создаю форму, заполняю ее и оставляю открытой, чтобы юзер поправил и посмотрел, а затем провел.

Но проблема:
В данной УФ форме есть Вкладка (страница) БухгалтерскаяОперация
и на ней есть элементы с именами:
ТиповыеОперации_ТиповаяОперацияДокумента, ТиповыеОперации_ТиповаяОперация,
ТиповыеОперации_ОткрытьОперацию
ТиповыеОперации_СчетПоКредиту,
ТиповыеОперации_КВД,
ТиповыеОперации_СчетКт,
ТиповыеОперации_КПС_20110

Никак их заполнить не получается.
Т.к. в конфигураторе этой страницы вообще нет и она видимо добавляется программно (фирмой 1с) при создании формы (или при открытии)

И через
ДанныеФормы = Форма.Объект;

Я их не могу найти и заполнить.

Как заполнить их?
Как найти какие реквизиты соответствуют этим элементам?
1 Fish
 
16.12.14
09:12
В коде посмотреть никак?
2 olegves
 
16.12.14
09:18
(0) к отладчику тебя не пускают?
3 for012
 
16.12.14
11:13
(1)
В коде в модуле формы в ф-ции
ПриСозданииНаСервере
идет вызов:
БухгалтерскиеОперацииСервер.ПриСозданииНаСервере(Отказ, СтандартнаяОбработка, Элементы.БухгалтерскаяОперация,                                                      Элементы.ДополнительныеТабличныеЧасти);
Также идет вызов в ф-ции ПриЧтенииНаСервере

Смотрю ф-цию к-е работает в вызове ПриСозданииНаСервере, там есть ф-ция

Если РеквизитыФормы = Неопределено Тогда
        РеквизитыФормы = Форма.ПолучитьРеквизиты();
    КонецЕсли;
    Для каждого ТекРеквизит Из РеквизитыФормы Цикл
    
        Если ТекРеквизит.Имя = "ТиповаяОперация" Тогда
            Форма["ТиповаяОперация"] = БухгалтерскаяОперация;
        ИначеЕсли ЗначенияДопРеквизитов.Свойство(ТекРеквизит.Имя) Тогда
            Форма[ТекРеквизит.Имя] = ЗначенияДопРеквизитов[ТекРеквизит.Имя];
            БухгалтерскиеОперацииКлиентСервер.ДопРеквизитИзменение(Форма.Элементы[БухгалтерскиеОперацииКлиентСервер.ПрефиксЭлементовОперации() + ТекРеквизит.Имя], Форма);
        КонецЕсли;
    
    КонецЦикла;
4 Fuas4
 
16.12.14
11:23
Заполни их после того, как они создадутся на форме. Т.е., вероятно, ПРиСозданииНаСервере(), но после всех типовых строк кода
5 for012
 
16.12.14
11:36
Вообще в ф-ции ПриСозданииНаСервере касательноБухОперации
если 3 функции, к-е касаются проблемы:

ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ТиповаяОперация, ЗначенияДопРеквизитов);
ПроверитьЗначенияДополнительныхРеквизитовПоУстановленнымОтборам(Форма, Объект, ТиповаяОперация);
УстановитьДоступностьЗависимыхРеквизитовФормы(Форма, ПолеДляРеквизитовОперации);
6 Fuas4
 
16.12.14
11:41
ну и что?
7 Адский плющ
 
16.12.14
11:51
1) Создать подписку на событие обработки заполнения.
2) Передавать туда что нужно, хоть адрес данных в хоронилище
3)....profit!
8 Адский плющ
 
16.12.14
11:54
Вероятно в БСП подобный вопрос можно решить без внесения изменений в конфу, ХЗ.
9 for012
 
16.12.14
11:57
Менять типовую конфу, типовые модули не хочу, т.е. все делается в моем модуле (или в обработке).

Они, как я понял, создают форму сначала на сервере и там же в ф-ции ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ТиповаяОперация, ЗначенияДопРеквизитов);
к-я приведена в (3) они работают напрямую с Управляемой формой и ее реквизитами через Форма.ПолучитьРеквизиты()

А я создаю свою форму на клиенте вызовом ф-ции
Форма       = ПолучитьФорму(...);
Далее заполняю структуру
ДанныеФормы = Форма.Объект;
и ее отправляю в свой серверный модуль, а там, если я напишу:
ДанныеФормы.ТиповыеОперации_КВД = Перечисления.КВД.Бюджет;
Он мне сругается "Поле объекта не обнаружено (ТиповыеОперации_КВД)"
При этом он не ругается на все те элементы, к-е есть в конфигураторе по умолчанию (т.е. к-е программно не задаются).
Т.е. вызов
ДанныеФормы.СуммаДокумента        = 1;
проходит без проблем.

Соответственно, если я пытаюсь передать в серверный модуль саму форму, как 1С делает в (3)  и (5) то я получаю:
"Отсутствует отображение для типа 'УправляемаяФорма'"
10 for012
 
16.12.14
12:27
А если я на клиенте пытаюсь вызвать
РеквизитыФормы = Форма.ПолучитьРеквизиты();
Тоже ругается : Метод недоступен на клиенте
11 DrZombi
 
гуру
16.12.14
12:30
(0) Зачем тебе Форма?!!
Пиши сразу в Объект документа, выполняя по ходу те же функции, что и в интерактивном режиме, для быстроты заполнения :)
12 DrZombi
 
гуру
16.12.14
12:31
(10) Познай для себя команды: &НаСервере &НаСевереБезКонтекста
Клавиша "F1", в конфигураторе, вводишь в поисковой строке "Хелпа" "НаСевереБезКонтекста", и читаешь :)
13 for012
 
16.12.14
12:37
(11) Я так и хотел в начале, но также хотел не записывать док. в базу, а просто открыть на просмотр, чтобы если ему не понравится и пр. можно было закрыть без сохранения...

Если связка: создать объект - заполнить данными - открыть форму без записи объекта сработает, то конечно можно и так.

В крайнем случае можно и сразу в базу писать... с записью.

(12) Да вроде уже читал про них, но забыл, надо освежить. Только начал на УФ делать.
14 for012
 
16.12.14
12:47
а как перебрать все элементы объекта:
ДанныеФормы = Форма.Объект;
Типа ДанныеФормыСтруктура????
15 for012
 
16.12.14
13:36
(11) Посмотрел, таких реквизитов док-та
ТиповыеОперации_ТиповаяОперацияДокумента, ТиповыеОперации_ТиповаяОперация,
ТиповыеОперации_ОткрытьОперацию
ТиповыеОперации_СчетПоКредиту,
ТиповыеОперации_КВД,
ТиповыеОперации_СчетКт,
ТиповыеОперации_КПС_20110

В принципе нет, по крайней мере если смотреть через подсказку всплывающую.
И в конфигураторе в дереве их тоже нет.