Имя: Пароль:
1C
1С v8
v8: 8.3 Изменение параметров по ссылке
0 Aswed
 
07.06.13
12:09
Суть проблемы.

Есть три общих реквизита в ряде справочников, они скрытые.
Для их изменения сделал общую команду, в которой открывается общая форма.
Соответственно на этой форме, в виде её реквизитов, есть такие же реквизиты, которые заполняются при открытии.

Собственно хочу что бы при закрытии этой формы значения этих реквизитов формы сохранялись в реквизитах справочника, из которой эта общая форма открыта.

Для этого в процедуре перед закрытием прописал такой код

&НаСервере
Процедура ПередЗакрытиемНаСервере()
   ИсточникОбъект = Источник.ПолучитьОбъект();
   ИсточникОбъект.Организация = Организация;
   ИсточникОбъект.ПодразделениеКомпании = ПодразделениеКомпании;
   ИсточникОбъект.Бренд = Бренд;
КонецПроцедуры

Но, при возвращении в форму справочника, вижу что измененные реквизиты в форме, не изменились в справочнике.

Если добавить строчку ИсточникОбъект.Записать(), все отлично, но при попытке закрыть форму справочника выскакивает что элемент изменённ, что логично.

Дык вот, вопрос как подобное реализовать что бы работало и не надо было бы прописывать в каждой форме обработку заполнения выбранных значений?
1 Aswed
 
07.06.13
12:11
Почитал что написал и сам запутался)))
2 Aswed
 
07.06.13
12:12
В общем как сделать изменение реквизитов справочника через открываемую форму, но так что бы не пришлось в этом самом справочнике писать обработку заполнения выбранных значений реквизитов.
3 RomaH
 
naïve
07.06.13
12:13
а почему Источник в виде ссылки?
4 Aswed
 
07.06.13
12:14
(3) Ну можно сделать в виде объекта, что то даст?
5 Aswed
 
07.06.13
12:15
+ (4) хотя не получится. Справочник объект же не может входить в составной реквизит.
6 andreymongol82
 
07.06.13
12:15
Я бы сделал кнопку отдельную на форме и там бы написал.
Бла-бла-ба записать;  закрыть;
А при закрытии не заморачивался
7 Aswed
 
07.06.13
12:17
(6) Ну это просто конечно.
Но для этого необходимо прописывать подобные действия во всех справочниках, чего я и пытаюсь избежать.
8 zladenuw
 
07.06.13
12:17
(0) а если переоткрыть справочник ? может нужно для формы вызвать обновить, что бы перечитался объект с сервера
9 Aswed
 
07.06.13
12:19
(8) На форме негде вешать Обновить(), команда глобальная.
10 andreymongol82
 
07.06.13
12:20
(7) Зачем? Кнопку-то на общей форме. И в команде этой кнопки написать про источник, про объект, про то, что его записать и про остальные реквизиты формы которые надо реквизитам объекта присвоить.
11 newtime2015
 
07.06.13
12:20
(2)надо писать Оповестить
12 Aswed
 
07.06.13
12:20
+ 9 Да и там не важно что отображается, по сути пусть висит старое значение реквизита, до пере открытия формы, но дело в том что новое не присваивается.
13 newtime2015
 
07.06.13
12:21
Используй оповещении формы о событии.
Пример смотри - привязка СФ в поступлении товаров
14 Aswed
 
07.06.13
12:21
(10) Сейчас попробую, но ИМХО от того что я это перенесу из модуля формы в модуль команды ничего не поменяется.
15 Лефмихалыч
 
07.06.13
12:22
(0) открывай по команде отедльную форму справочника, в которой толкьо эти реквизиты и будут.

А вообще - это ересь - если оно редактируется отдельно, значит оно обязано хранриться отдельно от объекта, то есть нельзя было реализовывать в ви де общих реквизитов. Надо было регистр сведений использовать, тогда бы у тебя не было этой проблемы. Была бы форма записи, вызываемая по общей команде. А так тебе потом придется учить пользователей жить с сообщением "Версия объекта отличается от версии в базе, идите в пень пожалуйста"
16 Aswed
 
07.06.13
12:23
(15) Как раз общие реквизиты)
17 Aswed
 
07.06.13
12:26
+16
в этом и фишка, лень меня обарывает, потому общие реквизиты, общая команда и единое место где все меняется)
18 Aswed
 
07.06.13
12:27
(11) Сейчас покопаюсь.
19 Aswed
 
07.06.13
12:29
Ругается сволочь

Оповестить("Запись",ИсточникОбъект);

{ОбщаяФорма.НастройкаОбщихРеквизитов.Форма(19,2)}: Процедура или функция с указанным именем не определена (Оповестить)
   <<?>>Оповестить("Запись",ИсточникОбъект); (Проверка: Сервер)
20 andreymongol82
 
07.06.13
12:31
Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
21 Aswed
 
07.06.13
12:34
(20) ?

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   ПередЗакрытиемНаСервере();
   Оповестить("Запись",Источник);
КонецПроцедуры
22 Aswed
 
07.06.13
12:35
+21 сорри тупанул, ИсточникОбъект написал)
23 andreymongol82
 
07.06.13
12:41
ПередЗакрытиемНаСервере() - лучше отдельную написать процедуру и ее вызывать, а эту не трогать.
24 Aswed
 
07.06.13
12:41
Прописал в общей форме

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   ПередЗакрытиемНаСервере();
   Оповестить("Запись",Источник);
КонецПроцедуры

&НаСервере
Процедура ПередЗакрытиемНаСервере()
   ИсточникОбъект = Источник.ПолучитьОбъект();
   ИсточникОбъект.ЭтотОбъект.Организация = Организация;
   ИсточникОбъект.ПодразделениеКомпании = ПодразделениеКомпании;
   ИсточникОбъект.Бренд = Бренд;
   ИсточникОбъект.Записать();
КонецПроцедуры

В форме справочника прописал

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
   ОбновитьОтображениеДанных();
КонецПроцедуры

При закрытии все равно сволочь ругается что данные изменены.
Что написал не так?
25 Aswed
 
07.06.13
12:42
(23) Почему?
26 Aswed
 
07.06.13
12:43
+24 а вот если интерактивно вызываю из формы команду "Перечитать", то все отлично отрабатывает.
27 Поросенок Петр
 
07.06.13
12:43
Передавать контекст фу. Путь работает как черный ящик, принимает структуру и возвращает (оповещает о выборе даже кошерней) структуру. А форма уже сама решает что и куда пропилить.
28 Поросенок Петр
 
07.06.13
12:45
Другое дело можно вынести процедуру вызова редактирования куда-нить в общий клиентский модуль, чтобы не множить код.
29 Aswed
 
07.06.13
12:45
(27) Смысл в том что бы сделать универсальный механизм и подключать его к любому справочнику в конфе, а не прописывать для каждого отдельную обработку.

ЗЫ Через структуру сделано у меня сейчас, хочу сделать универсально и как можно ленивее)))))
30 andreymongol82
 
07.06.13
12:46
(25) ПередЗакрытиемНаСервере() - это разве не событие? Хотя фиг его знат, что там в 8.3 понапридумывали...
31 Поросенок Петр
 
07.06.13
12:47
(29) Про общую команду забудь. Она для ссылок, а не объектов.
32 Поросенок Петр
 
07.06.13
12:48
Можно, конечно наг-кодить и записывать объект два раза (команда с опцией изменяет данные). Сомнительное удовольствие.
33 Aswed
 
07.06.13
12:51
Всё. Победил!

Рассказываю как сделал.

В общем все осталось как есть, только в модуле общей формы повесил Оповестить()
А в открытой форме в обработке оповещения Прочитать()

Всем спасибо за помощь)))
34 Aswed
 
07.06.13
12:51
(31) ?????
Ты вообще о чем?
35 Поросенок Петр
 
07.06.13
12:53
(34) О том, что такое заполнение реквизитов в форме документа (а не из списка) будет вести себя по-б*ски.