Имя: Пароль:
1C
1С v8
Инициализация реквизитов внешней обработки
0 zak555
 
06.06.13
10:32
в V8Exchan82.epf есть реквизит обработки ВыгружатьТолькоРазрешенные, который инициализируется дважды

открываю управляемом приложении, запускаю обработку идёт вызов процедуры  ИнициализацияРеквизитовИМодульныхПеременных() из модуля обработки и инициализация данного реквизита:

ВыгружатьТолькоРазрешенные = Истина;


далее, из процедуры ПриСозданииНаСервере есть вызов процедуры РеквизитФормыВЗначение("Объект").ВерсияОбъектаСтрокой(), который в свою очередь опять же генерит исполнение основного кода модуля обработке, где есть вызов процедуры ИнициализацияРеквизитовИМодульныхПеременных()

Почему опять идёт исполнение основного кода?

и в табло видно, что
ВыгружатьТолькоРазрешенные = Ложь;

Почему ? она же раньше была проинциализирована?


далее, открылась обработка, выбираю файл для загрузки, нажимаю на кнопку подробнее о файле: идёт вызов основного кода модуля обработки, процедуры инициализации и реквизит
ВыгружатьТолькоРазрешенные = Ложь;

опять Ложь?! Почему ?
1 zak555
 
06.06.13
10:34
*который инициализируется трижды
2 Defender aka LINN
 
06.06.13
10:41
Потому что РеквизитФормыВЗначение("Объект")
3 zak555
 
06.06.13
10:44
(2) т.е. вызов РеквизитФормыВЗначение постоянно генерирует модуль обработки ?
4 Defender aka LINN
 
06.06.13
10:48
(3) Само собой. Он же создает новый экземпляр объекта
5 zak555
 
06.06.13
10:51
убираю инициализацию этого реквизита из модуля объекта, делаю её так :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//...
ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
ОбъектДляСервера.ВыгружатьТолькоРазрешенные = Истина;
КонецПроцедуры


в результате в открывающейся форме флаг этого реквизита не включён

почему ?
6 zak555
 
06.06.13
10:53
или делаю не в ПриСозданииНаСервере, а в приОткрытии

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ПриОткрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");    
   ОбъектДляСервера.ВыгружатьТолькоРазрешенные = Истина;
КонецПроцедуры



результат тот же -- флаг не отмечен
7 Defender aka LINN
 
06.06.13
11:00
(6) Жесть какая...
А с чего ему быть отмеченным, если ты флаг устанавливаешь в совсем другом объекте?
8 НЕА123
 
06.06.13
11:00
&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Объект.ВыгружатьТолькоРазрешенные = Истина;
КонецПроцедуры
9 zak555
 
06.06.13
11:05
(8) Тип(Объект) = ДанныеФормыСтруктура
10 zak555
 
06.06.13
11:06
(7) тогда как обойти постоянный вызов других объектов ?
11 НЕА123
 
06.06.13
11:10
(10)
сделал (8)?
12 zak555
 
06.06.13
11:19
(11) работает

кстати, почему тогда так не работает ?


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//...


Объект.ВыгружатьТолькоРазрешенные = Истина;
КонецПроцедуры
13 Defender aka LINN
 
06.06.13
11:25
(12) А вот это ты уже врешь
14 zak555
 
06.06.13
11:28
(13) я строку эту закоментировал ))


я правильно понимаю, что заполнение реквизитов по умолчанию нужно делать только в форме ?
15 Defender aka LINN
 
06.06.13
11:30
(14) Ну, можно тупо у реквизитов значение заполнения задать. Можно в форме, можно в модуле. Как хочешь, в общем. Главное, чтобы потом у тебя одно заполнение результаты другого не затирало.
З.Ы. Еще может быть вариант, что настройки автоматом сохраняются
16 zak555
 
06.06.13
11:31
(15) так если в модуле, то идёт лишнее срабатывание кода -- что не есть хорошо
17 Defender aka LINN
 
06.06.13
11:32
(16) Лишнее срабатывание будет, если ты объект получаешь постоянно как в (0)
18 zak555
 
06.06.13
11:36
(17) тогда такой ещё такой вопрос:

допустим у меня несколько реквизитов обработки
есть две формы : управляемая / обычная

алгоритм заполнение реквизитов одинаков => надо вынести в модуль объекта ?
19 Defender aka LINN
 
06.06.13
11:41
(18) Я бы вынес
20 zak555
 
06.06.13
11:41
и как вызвать процедуры/функции заполнения без создания нового экземпляра ?
21 zak555
 
06.06.13
12:19
или это нельзя реализовать ?
22 zak555
 
06.06.13
12:28
получается

запускаю обработку --- вызывается основная часть модуль объекта
далее, в ПриСозданииНаСервере хочу вызвать процедуру из модуля объекта

-- получается ещё одно создание объекта

как можно вызвать процедуру заполнения без создания ещё одного объекта ?
23 zak555
 
06.06.13
12:36
так же не работает


модуль формы:

&НаСервере
Процедура ПриОткрытииНаСервере()
   стр = ПолучитьСтуктуру();
КонецПроцедуры


модуль объекта:

Функция ПолучитьСтуктуру()
//...
КонецФункции
24 zak555
 
06.06.13
12:36
*вернее вот код

&НаСервере
Процедура ПриОткрытииНаСервере()
   стр = ПолучитьСтуктуру();
КонецПроцедуры


модуль объекта:

Функция ПолучитьСтуктуру() Экспорт
//...

КонецФункции
25 zak555
 
06.06.13
12:37
а работает только так:

&НаСервере
Процедура ПриОткрытииНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
   стр = ОбъектДляСервера.ПолучитьСтуктуру();
КонецПроцедуры


модуль объекта:

Функция ПолучитьСтуктуру() Экспорт
//...


КонецФункции
26 zak555
 
06.06.13
12:42
или же это не решить, т.к. у обработки внешней нет модуля менеджера ?
27 zak555
 
06.06.13
16:34
или же вот другой пример:

есть внешняя обработка (ВнешняяОбработка1.epf), которая помечает на удаление документы определенного вида

есть реквизит ИмяДокумента

в модуле объекта обработки есть процедура, которая это дело осуществляет, анализируя реквизит обработки...

Процедура УстановитьПометкиУдаления() Экспорт

//...

КонецПрроцедуры


т.е. вызвать программно обработку и получить результат -- элементарно:

Обработка1 = ВнешниеОбработки.Создать("ВнешняяОбработка1.epf");
Обработка1.ИмяДокумента =  "Документ1";
Обработка1.УстановитьПометкиУдаления();



но как вызывать УстановитьПометкиУдаления() из УФ ?
28 zak555
 
06.06.13
16:37
туплю )))


&НаСервере
Процедура УстановитьПометкиУдаленияНаСервере()
   ОбъектДляСервера = РеквизитФормыВЗначение("Объект");
   ОбъектДляСервера.УстановитьПометкиУдаления();    
КонецПроцедуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.