Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Странное поведение В УФ

Странное поведение В УФ
Я
   Franchiser
 
05.06.20 - 17:15
Внешняя обработка.
Есть реквизиты обработки, которые выведены на форму:
Организация,
Период (тип стандартный период),
Флаг1,
Флаг2
.и т.д.


С модуле обработки определена экспортная процедура Мояпроцедура()

В серверной процедуре на форме вызываю кодом:
РеквизитФормыВЗначение("Объект"). Мояпроцедура();

В процедуре происходит установка реквизитов Организация, Период, Флаг1, Флаг2.

После окончания работы обработки на форме обработки Период заполненный, а остальные реквизиты нет.

По логике период не должен был заполниться как и все остальные  реквизиты.
Почему заполнился Период?
   RomanYS
 
1 - 05.06.20 - 17:23
(0) ничего заполняться не должно. Может ещё какой код есть, который период заполняет.
   Franchiser
 
2 - 05.06.20 - 17:26
нет, никакого кода, сейчас тестовую обработку сделаю
   Franchiser
 
3 - 05.06.20 - 17:34
тестовая обработка:
https://yadi.sk/d/MN6FQvOy7J6-1g
   Franchiser
 
4 - 05.06.20 - 17:39
(3) поменял название реквизита Период на СтПериод. Результат не изменился...
   Franchiser
 
5 - 05.06.20 - 17:41
платформа 8.3.17.1386
   fisher
 
6 - 05.06.20 - 17:47
С реквизитами обработок чехарда какая-то. С самого начала они не заполнялись с сервера, потом с какого-то релиза вроде как пробрасывались кто-то говорил... Теперь опять какая-то непонятка суда по сабжу.
Я делаю проще. Как не использовал в УФ реквизиты обработок, так и не использую.
   Franchiser
 
7 - 05.06.20 - 17:48
(6) мне конечно пофиг, но должно же одинаково работать для всех. А не так что для типа стандартный период одним образом, остальные по-другому.
   fisher
 
8 - 05.06.20 - 17:49
(7) Может, контексты протекли :)
   Вафель
 
9 - 05.06.20 - 17:50
а обратно то из объекта в реквизит идет преобразование?
   Franchiser
 
10 - 05.06.20 - 17:52
(9) нет не  идет, мне не нужно в данном чтобы менялся реквизит формы после изменений в модуле.
Я отлаживаю механизм регламента ручным запуском процедуры ВыполнитьКоманду().
   Вафель
 
11 - 05.06.20 - 17:53
(10) ну вот поэтому и не заполняется
   Franchiser
 
12 - 05.06.20 - 17:53
(11) вопрос был "почему период заполняется"
   Вафель
 
13 - 05.06.20 - 17:54
случайно не при создании вызываешь?
   Franchiser
 
14 - 05.06.20 - 17:55
(13) нет, обработку приложил, если интересно можешь посмотреть
   Вафель
 
15 - 05.06.20 - 17:56
выложи код (на pastebin). влом обработку открывать
   Franchiser
 
16 - 05.06.20 - 18:00
   Сергиус
 
17 - 05.06.20 - 23:21
(0)Да, глюк повторяется, платформа 8.3.16.1148
   Фрэнки
 
18 - 06.06.20 - 00:16
глюк... глюк... нет никакого глюка. Всегда так работало и будет и дальше работать также

РеквизитФормыВЗначение("Объект"). Мояпроцедура();

Эта строчка кода _конструктор_ объекта и создает новый экземпляр - если это понятие о чем-то говорит. Оно не использует какой-то существующий экземпляр, но создает! Все.

Если очень хочется каким-то способом передавать значения между модулями и хочется для этого приспособить реквизиты, то халявы не получится.
Другими способами - через параметры, через структуры, которые пропихиваются в параметры, через хранилища значений... что мне часто кажется жутко неоптимальным.
Вероятно, что еще какие-то варианты есть. Но через создание нового экземпляра.
И, кстати, обработкаОбъект не единственный вид объектов, с которым такие фокусы не прокатывают.
   Сергиус
 
19 - 06.06.20 - 01:12
(18)Почему прокатывает с реквизитом типа стандартный период и не прокатывает со строкой и булево?
   hhhh
 
20 - 06.06.20 - 01:20
(19) возможно на форме задано сохранение реквизитов. Задпно, что период сохраняется, а остальные нет.
   Сергиус
 
21 - 06.06.20 - 01:22
(20)Нет там сохранения, автор в посте (3) выложил пример обработки.
   Сергиус
 
22 - 06.06.20 - 01:25
+(21)Причем с реквизитом типа Дата такое не прокатывает. Конкретно СтандартныйПериод только.
   Жан Пердежон
 
23 - 06.06.20 - 02:18
(18) слышал анекдот про чукчу-писателя?
(0) 8.3.16.1030
подтверждаю, протекает именно тип СтандартныйПериод (с любым именем реквизита),
дата, стандартная дата начала - норм.
Пили пост на партнерке.
   runoff_runoff
 
24 - 06.06.20 - 03:00
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.МояПроцедура();
ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");// нужно вернуть объект в данные формы
   Franchiser
 
25 - 06.06.20 - 10:29
(24) не хочу я возвращать объект, хочу оставить форму как была до запуска
   Фрэнки
 
26 - 06.06.20 - 10:36
(25) мало того! в данном конкретном случае речь идет об использовании экземпляра объекта, который просто хранится в базе в виде ветки метаданных.

Это не экземпляр документа из списка ДокументОбъект, не экземпляр справочника из списка СправочникОбъект.

Тут было бы достаточно создать процедуру с параметрами (в скобках) и все.
   Kassern
 
27 - 06.06.20 - 10:45
(0) Вообще не понимаю, зачем пихать реквизит формы в объект, если нужно всего лишь реквизиты заполнить? Я понимаю еще, если нужно из модуля формы обратиться в модуль объекта обработки и выполнить какую-нибудь экспортную функцию. Вы могли просто (даже на клиенте, если простой тип данных) заполнить значениями реквизиты формы, без этих "плясок с бубмном". Например

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Период.ДатаНачала=НачалоМесяца(ТекущаяДата());
    Период.ДатаОкончания=ТекущаяДата();
    Реквизит1 ="Тест";
    Реквизит2 =Истина;
КонецПроцедуры
   Franchiser
 
28 - 06.06.20 - 22:37
(27) (26) я описываю проблему, что ошибка в платформе. А вы мне тут пишете  как нужно было сделать, или не понимаете для чего.
Объясняю, эта обработки только для демонстрации ошибки. Реально процедуру используется при ручном запуске обработке и при запуске регламкнтного задания. Во втором случае формате открывается а используется команда с вызовом серверного метода без открытия формы. Я из формы вызываю отладку команды которая отрабатывает так как если бы выполнялся регламент. На текущий момент нет практического смысла в указанном поведении но при разработке нужно будет это учитывать в будущем.
   Franchiser
 
29 - 06.06.20 - 22:41
(27) у меня по факту там в процедуре цикл в котором меняется период и организация и выполняются запросы к внешним данным.
А если открывать форму то можно запустить обработку только за конкретный период и по конкретной организации.
   hhhh
 
30 - 06.06.20 - 22:44
(28) в будущем похоже тоже не будет практического смысла. Какой смысл, если 99 реквизитов не передается, а один реквизит "Период" передается?
 
 Рекламное место пустует
   Franchiser
 
31 - 06.06.20 - 22:54
(30) а может кому то не нужно чтобы период передавался, как мне. Тогда нужно запоминать старое значение периода и его восстанавливать как до обработки. Зачем мне последний период который в цикле устанавливался в модуле обработки...
   Ненавижу 1С
 
32 - 06.06.20 - 22:57
Проверил:

Период = Новый СтандартныйПериод(ВариантСтандартногоПериода.Месяц);  //так норм

Период.ДатаНачала = НачалоМесяца(ТекущаяДата());                    // а так протекает


Видимо как-то криво работает и связано с тем, что СтандартныйПериод это таки ссылка-на-объект, а не простое значение
Но объект живущий на форме
   Фрэнки
 
33 - 07.06.20 - 00:08
(28) // я описываю проблему, что ошибка в платформе.

Это не ошибка в платформе, а осознанное, заранее проработанное поведение.
   Фрэнки
 
34 - 07.06.20 - 00:10
И там выше написали, чтоб пилил пост на Партнерку - вот и пили.

Авось у них получится внятно объяснить, если тутошние объяснения тебя не устраивают.
   Franchiser
 
35 - 07.06.20 - 01:55
(34) нет доступа в партнерку у меня.
(33) какое поведение? Что тип стандартный период как-то иначе протекает и обрабатывается в форме? Проблема только с этим типом.
   RomanYS
 
36 - 07.06.20 - 11:41
(32) похоже прав
Если реквизит произвольного типа инициализировать на форме, то его изменения через РеквизитФормыВЗначение("Объект")... вернутся на форму. Если реквизит переиницилизировать (Реквизит = Новый ...) в процедуре объекта, то изменения не передадутся.

Стандартный период не единственный тип, тоже самое, например, со списком значений. Возможно работает вообще с любым типами имеющими конструкторы (Новый ...), но это не точно.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.