|
УФ. Ребус. Помогите разобраться | ☑ | ||
---|---|---|---|---|
0
mis012
18.08.15
✎
09:33
|
Здравствуйте.
Гружу с экселя в 1с УФ. Все грузиться, всякие обработчики ПриИзмененииКонтрагента, Организации - подключил (перенес в обработку загрузки) - они работают. Но проблема: на форме если страница, к-я создается программно 1с при создании формы, на ней указывается Бухгалтерская операция, КФО, Счет Дт и т.д. Никак не могу запустить у себя обработчик события ПриИзмененииТиповойОперации Не хочу его к себе в люработку переносить - пытаюсь запуститься из общего модуля серверного: Вот такой вызов делает сама 1с (сокращенно) БухгалтерскиеОперацииСервер.ПриИзмененииТиповойОперации(Элементы.БухгалтерскаяОперация, ложь); Т.е. в кач-ве параметра отправляется элемент управления БухгалтерскаяОперация (видимо контейнер для остальных (или страница)) Если я в клиенском модуле своей обработки пишу БухгалтерскиеОперацииСервер.ПриИзмененииТиповойОперации(Форма.Элементы.ТиповыеОперации_ТиповаяОперацияДокумента, Ложь); Тогда он даже не компилируется, т.к. с клиентского модуля этот даже не видно. В серверном модуле я работаю с объектом ДанныеФормыСтруктура - его заполняю. 1) Как мне в нем найти соответсвующий элемент? 2) Я его в серверном модуле на могу отправить. Как мне осуществить вызов ПриИзмененииТиповойОперации? Или никак и надо все переписывать в свою обработку? |
|||
1
mis012
18.08.15
✎
09:46
|
Если на сервере вызываю
БухгалтерскиеОперацииСервер.ПриИзмененииПараметровФункциональныхОпций(ДанныеФормы.ТиповаяОперация); или БухгалтерскиеОперацииСервер.ПриИзмененииТиповойОперации(ДанныеФормы.БухгалтерскаяОперация, Ложь); Тогда он ругается на "Поле объекта не обнаружено" Да и тип то другой (данные формы структура) |
|||
2
mis012
18.08.15
✎
09:50
|
Т.е. перед отправкой на сервер на клиенте вызываю
ДанныеФормы = Форма.Объект И на сервер его передаю Т.е. на клиенте перед отправкой на сервер элемент Форма.Элементы.ТиповыеОперации_ТиповаяОперацияДокумента или Форма.Элементы.БухгалтерскаяОперация имеются, а в объекте: Форма.Объект их нет! |
|||
3
butterbean
18.08.15
✎
09:53
|
(2) зачем ты все это передаешь на сервер? там и так есть твоя форма вместе со всеми реквизитами и элементами.
|
|||
4
hhhh
18.08.15
✎
09:59
|
Форма.Объект - это же реквизит формы. Откуда в нем вдруг элементы окажутся? Посмотрите на форму. Там элементы слева расположены, Объект справа.
|
|||
5
mis012
18.08.15
✎
10:00
|
(3) У меня есть общий модуль (в конфу добавил) серверный и клиентский и в них все это делаю.
Т.е. из обработки только вызываю сначала клиентский - там создаю форму загружаемого док-та, а затем в серверном модуле заполняю Форма.Объект - все поля. Все равно не понимаю, как вызвать обработчки, 1с вызывает сама его из модуля формы! вызывает серверный модуль. А у меня из клиентского просто это повторить не получается. |
|||
6
mis012
18.08.15
✎
10:02
|
(4) Это я знаю, но как правило каждому реквизиту док. соответствует эл-т управления, а тут я не могу найти реквизит, к-й соответсвует этой программной вкладке
Т.е. КФО и ТиповаяОперация, хотя они же должны быть. |
|||
7
hhhh
18.08.15
✎
10:04
|
(6) так вы на сервере вызовите это
БухгалтерскиеОперацииСервер.ПриИзмененииТиповойОперации(Форма.Элементы.ТиповыеОперации_ТиповаяОперацияДокумента, Ложь); |
|||
8
mis012
18.08.15
✎
10:34
|
(7) Нет
Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' Туда форму не передать. М.б. как-то можно ее там воссоздать или получить из Форма.Объект? |
|||
9
mis012
18.08.15
✎
10:38
|
Т.е. получается, что элементы формы есть, а таких реквизитов в принципе у док-та нет, т.е. 1с в объекте этого док-та не хранит их (проверил еще и по консоли запросов).
И 1с почему то каким-то волшебством в модуле формы в событии ПриИзмененииОрганизации вызывает СЕРВЕРНОЕ БухгалтерскиеОперацииСервер.ПриИзмененииТиповойОперации а просто в обработке или в любом доугом клиентском модуле это не доступно |
|||
10
mis012
18.08.15
✎
10:40
|
Может в серверном модуле, передав туда ФОрма.Объект - типа ДанныеФормыСтруктура
воссоздать полноценную форму но уже на сервере? Опять же мне надо ее потом вернуть на клиент... |
|||
11
hhhh
18.08.15
✎
10:44
|
нет, не получится. ДанныеФормыСтруктура оно конкретно к форме привязано. Его отдельно не передать.
|
|||
12
mis012
18.08.15
✎
10:50
|
(11) так почему я их передаю на сервер и там не могу обратиться к этим полям?
Они только в элементах управления есть |
|||
13
mis012
18.08.15
✎
10:54
|
Вот что 1с делает в этой процедуре ПриИзмененииТиповойОперации.
Сейчас попробую перетащить ее себе в клиентский модуль, только она за собой еще тянет процедуры. Если ПолеДляРеквизитовОперации.Имя = "ТиповыеОперации_ТиповаяОперацияДокумента" Тогда ПолеДляРеквизитовОперации = ПолеДляРеквизитовОперации.Родитель; КонецЕсли; Форма = БухгалтерскиеОперацииКлиентСервер.ПолучитьРодителяПоТипуЭлемента(ПолеДляРеквизитовОперации, Тип("УправляемаяФорма")); Объект = Форма["Объект"]; ТиповаяОперация = Форма["ТиповаяОперация"]; УдалитьПодчиненныеЭлементыГруппыФормы(Форма, ПолеДляРеквизитовОперации, БухгалтерскиеОперацииКлиентСервер.ПрефиксЭлементовОперации()); РеквизитыФормы = ПолучитьИменаРеквизитовФормы(Форма); ТипЗначенияСсылки = ТипЗнч(Объект.Ссылка); ИдентификаторДокумента = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗначенияСсылки); ВалютныйУчет = ВДокументеИспользуетсяВалютныйУчет(ИдентификаторДокумента); ДобавлятьДопРеквизитыОперации = ЗначениеЗаполнено(ТиповаяОперация); ПараметрыДобавленияЭлементовФормы = ПараметрыДобавленияЭлементовФормы(); ПараметрыДобавленияЭлементовФормы.Форма = Форма; ПараметрыДобавленияЭлементовФормы.Объект = Объект; ПараметрыДобавленияЭлементовФормы.ТипЗначенияСсылки = ТипЗначенияСсылки; ПараметрыДобавленияЭлементовФормы.ПолеДляРеквизитовОперации = ПолеДляРеквизитовОперации; ПараметрыДобавленияЭлементовФормы.ДобавлятьДопРеквизитыОперации = ДобавлятьДопРеквизитыОперации; ПараметрыДобавленияЭлементовФормы.ПовторноеЧтениеОбъекта = Истина; ПараметрыДобавленияЭлементовФормы.РеквизитыФормы = РеквизитыФормы; ПараметрыДобавленияЭлементовФормы.ВалютныйУчет = ВалютныйУчет; ПараметрыДобавленияЭлементовФормы.ТиповаяОперация = ТиповаяОперация; ДобавитьРеквизитыЭлементыНаФорму(ПараметрыДобавленияЭлементовФормы); Если ЗаполнятьЗначенияПоУмолчанию Тогда // РеквизитыФормы = Форма.ПолучитьРеквизиты(); ЗначенияДопРеквизитов = РеквизитыТиповойОперацииПоУмолчанию(ИдентификаторДокумента, ТиповаяОперация, Объект.Организация); ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ТиповаяОперация, ЗначенияДопРеквизитов); ПроверитьЗначенияДополнительныхРеквизитовПоУстановленнымОтборам(Форма, Объект, ТиповаяОперация); КонецЕсли; УстановитьДоступностьЗависимыхРеквизитовФормы(Форма, ПолеДляРеквизитовОперации); |
|||
14
hhhh
18.08.15
✎
10:57
|
(13) ну то есть на 100% это работа с формой. Вам вообще это не нужно в вашей обработке. Потому что у вас вообще в обработке форм нет. Вы грузите из excel в документ.
|
|||
15
mis012
18.08.15
✎
10:57
|
По моему это недоработка 1с.
Нафик так изголяться, ради 1 обработчика события, или надо забить на это и юзера заставлять выбирать руками операцию в уже загруженном док-те. |
|||
16
mis012
18.08.15
✎
10:59
|
(14) Вообще то я стал грузить не в документ,а как раз в форму, а она при записи сами создает документ объект.
Если надо, а если не надо ее закрывают. |
|||
17
mis012
18.08.15
✎
11:01
|
(14) Я даже не подумал, а если писать сразу в документ, тогда надо еще как-то записывать отдельно результат проведения, т.к. бух счета и проводки вообще не храняться в объекте?
И к тому же форму создавать удобнее, т.к. ее (если не понравиться) можно закрыть, а док-то только помечать на удаление. |
|||
18
hhhh
18.08.15
✎
11:06
|
(17) но форма работает в 25 раз медленнее, чем документ. То есть ваша загрузка на 97% будет лопатить всякую постороннюю фигню.
И на форме тоже нет проводок. |
|||
19
mis012
18.08.15
✎
11:25
|
(18) Хорошо, если создавать документ сразу как объект, могу я в серверном модуле (где буду его заполнять) создать форму из этого объекта, но на сервере, чтобы вызвать этот обработчик?
|
|||
20
hhhh
18.08.15
✎
12:08
|
так вы что грузите? Зачем вам этот обработчик? Он же занимается изменением формы. Данные вообще не трогает.
|
|||
21
mis012
18.08.15
✎
12:39
|
(20) Так в зависимости от операции программа сама счет Дт ли Кт ставит, и в зависимости от операции там картинка разная (т.е. разные эл-ты доступны)
Соответственно, если я запущу обработчик, то юзеру на пару действий меньше делать надо руками, а если грузит большой объем то это м.б. чувствительно. А без этого программа все равно сругается, пока даные поля не будут заполнены. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |