Как записать НЕ основной реквизит формы справочника

1. MrFlanker 222 05.01.17 13:12 Сейчас в теме
Имеем форму справочника на которой помимо основного реквизита "Объект" есть не основной реквизит "КартаОбъект" (Спарвочники.ИнформационныеКарты).

В форме редактируются поля:
- основного реквизита "Объект"
- не основного реквизита "КартаОбъект"

"Объект" записывается штатно при закрытии формы

Строковые реквизиты "КартаОбъект.РеквизитСтрока1" тоже записывается при нажатии стандартной кнопки "Запись", ссылочные же рекизиты не записываются "КартаОбъект.РеквизитСсылка1".

Попытка записать:
	
     РеквизитФормыВЗначение("КартаОбъект").Записать();

производит запись, но при следующих вызовах дает ошибку:

Текс ошибки
Прикрепленные файлы:
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 05.01.17 13:25 Сейчас в теме
(1)
Карта = РеквизитФормыВЗначение("КартаОбъект");
Карта.Записать();
ЭтаФорма.Объект.Владелец = ЭтаФорма.КартаОбъект.Ссылка;
ЗначениеВРеквизитФормы(Карта, "КартаОбъект");

Но большие сомнения в правильности выбранного решения.
+
4. MrFlanker 222 05.01.17 13:33 Сейчас в теме
(3)
Но большие сомнения в правильности выбранного решения.

По типовым не знаю примеров, гугл тоже молчит.

В принципе получаем объект, производим изменения... возвращаем в форму.. почему нет)
+
5. spacecraft 05.01.17 13:43 Сейчас в теме
(4) обычно связь карты со справочником Клиент (Владелец карты) делают через регистр сведений.
Обычно у владельца карты может быть несколько карт. В данном решении может быть только одна карта. А если клиент потерял карту, произведена замена карты?
Далее, не лучший вариант делать/редактировать карту в форме справочника владельца карты. Если уж надо привязывать карту напрямую к справочнику Клиенты, то делать карты подчиненным справочником. И в реквизитах хранить ссылку на основную карту.
Иначе по карте не известен владелец. Вот сосканировали штрихкод карты. Нашли карту. Как по ней получить владельца? Только поиском по справочнику Клиенты. А тогда теряется весь смысл отдельного справочника Карты.
+
6. MrFlanker 222 05.01.17 13:59 Сейчас в теме
(5)
(4) обычно связь карты со справочником Клиент (Владелец карты) делают через регистр сведений.
Обычно у владельца карты может быть несколько карт. В данном решении может быть только одна карта


КлиентскаБаза это произвольный справочник который является расширением типового справочника "Информационныекарты", в котором добавлены различные поля и т.п.

Нужно это чтобы не менять типовою конфу...такое решение себя хорошо зарекомендовало.

Пользователя как бы забывают про справочник "Информационные карты" и вместо него работают в с правочнике "Клиентская база".... и получаются все плюшки от управляемых форм в УправленииТорговлей 10.3 и реализуем всю что нужно не меняя типовую.
+
17. zoomzd1234 23.01.17 20:47 Сейчас в теме
(1)Расширение управляемой формы для объектов (Managed form extension for objects)
Записать (Write)
Синтаксис:

Записать(<ПараметрыЗаписи>)
Параметры:

<ПараметрыЗаписи> (необязательный)

Тип: Структура. Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:

Тип: Булево. Истина - успешно записан; Ложь - в противном случае.
Описание:

Записывает объект.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
+
2. MrFlanker 222 05.01.17 13:23 Сейчас в теме
Нашел решение:

&НаСервере
Процедура Команда1НаСервере()
   	// Запишем карту, обновим владельца
	ИК_Объект=РеквизитФормыВЗначение("КартаОбъект");
	ИК_Объект.Записать();
	ЗначениеВРеквизитФормы(ИК_Объект,"КартаОбъект");
	
	ЭтаФорма.Объект.Владелец = ЭтаФорма.КартаОбъект.Ссылка;
КонецПроцедуры
Показать
+
7. ice-net 19 05.01.17 14:11 Сейчас в теме
Сомнительное решение.. Зачем вы привязываете именно объект к форме?

Что будет, если Вы откроете элемент справочника "КлиентскаяБаза", а кто-нибудь в это время откроет и изменит конкретно этот объект информационной карты через типовую форму?
+
8. MrFlanker 222 05.01.17 14:26 Сейчас в теме
(7)
Сомнительное решение.. Зачем вы привязываете именно объект к форме

Что вы имеете ввиду?


(7)
Что будет, если Вы откроете элемент справочника "КлиентскаяБаза", а кто-нибудь в это время откроет и изменит конкретно этот объект информационной карты через типовую форму?

Будет ошибка несоответствия версии или отсутствия записи базы данных

Можно обработать и вывести окно "Объект изменен в другой форме / другим пользователем и т.п.". Либо установить блокировку....

Если работать в формах "Клиентской базы", сработает штатная блокировка.
Прикрепленные файлы:
+
9. ice-net 19 05.01.17 14:40 Сейчас в теме
(8)
Будет ошибка несоответствия версии или отсутствия записи базы данных

Т.е. Человек зашел в Элемент клиентской базы, сидит там правит что-нибудь.. минут 5 потратил, жмет записать - а ему выскакивает ошибка несоответствия версии или отсутствия записи базы данных.. и все его изменения не запишутся(если попытку на запись информационной карты не добавлять), и придется ему закрывать без сохранения, открывать заново и заново все вносить....
Вот я и спрашиваю, в чем смысл? Почему в реквизитах Объект, а не Ссылка на информационную карту? При записи вы можете просто получить объект, изменить что надо и записать... действия те же + блокировка не будет висеть, пока форма клиентской базы открыта..
+
10. MrFlanker 222 05.01.17 14:56 Сейчас в теме
(9)
Т.е. Человек зашел в Элемент клиентской базы, сидит там правит что-нибудь.. минут 5 потратил, жмет записать - а ему выскакивает ошибка несоответствия версии или отсутствия записи базы

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

второму человеку при попытке править....вылезет сообщение об ошибке
1) Объект заблокирован - (если второй правит)
2) Несоответсвие версии (если второй уже записал и снял блокировку)

В принципе откройте любую типовую конфу... и поработайте с двумя пользователями с любым справочником..
+
11. ice-net 19 05.01.17 15:02 Сейчас в теме
(10)
В принципе откройте любую типовую конфу... и поработайте с двумя пользователями с любым справочником..

Речь ведь не про один справочник... Вы открываете элемент А, а блокируете А и Б..

Я хочу понять, для блокировки второго элемента при открытии первого есть какая-то необходимость(ведь можно обойтись спокойно без лишней блокировки)?
+
12. MrFlanker 222 05.01.17 15:20 Сейчас в теме
Б является дополнением А... то есть фактически мы имеем один справочник А+Б.

Поскольку на форме поля справочников А и Б.... нужно блокировать их оба.

К тому же не предполагается использование форм справочника "А"...в этом нет смысла...это противоречат целям создания справочника Б.
+
14. ice-net 19 05.01.17 16:17 Сейчас в теме
(12)
Б является дополнением А... то есть фактически мы имеем один справочник А+Б.

фактически это 2 абсолютно разных справочника.

К тому же не предполагается использование форм справочника "А"...в этом нет смысла...это противоречат целям создания справочника Б.


В Вашем случае для изменения, например, только имени и отчества в элементе клиенткой базы надо блокировать текущий элемент + Элемент информационной карты (согласитесь, является, мягко говоря, лишним действием..).
А для того, что бы изменить,например, только номер информационной карты, Вы опять заблокируете оба элемента.. что опять же не является необходимостью..

Ни в одной типовой конфигурации я не встречал подобных решений блокировки подчиненных справочнику элементов при открытии..

Не хочу разводить холивар и флуд и ни сколько не хочу критиковать Ваше решение делать именно так, просто хочу узнать для себя:
в чем выражена острая необходимость привязывать именно объект другого элемента, а не его ссылку, к элементу другого справочника?
На это есть какие-то объективные причины, с точки зрения получения в дальнейшем возможных ошибок или еще чего-нибудь.. или это просто Ваше решение, т.к. Вам так хочется/удобно/нужно?
+
15. MrFlanker 222 05.01.17 17:03 Сейчас в теме
(14)
В Вашем случае для изменения, например, только имени и отчества в элементе клиенткой базы надо блокировать текущий элемент + Элемент информационной карты (согласитесь, является, мягко говоря, лишним действием..).

Данные двух справочников имеет смысл редактировать только вместе.
Меняется ФИО, меняется и наименование=Ф+И+О....


(14)
А для того, что бы изменить,например, только номер информационной карты, Вы опять заблокируете оба элемента.. что опять же не является необходимостью..

Номер в большинстве случаев вообще лежит в регистре сведений.

(14)
в чем выражена острая необходимость привязывать именно объект другого элемента, а не его ссылку, к элементу другого справочника?

Привязывается ссылка, объект насколько мне известно привязать невозможно (нет такого типа данных).

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

Я ничего и не блокирую ... это делает 1С автоматически (просто на форме два объекта) и блокируются оба.


Логика работы в форме справочника "Клиентская база"... полностью копирует логику типовой работы из типовой формы "ИнформационныеКарты".

Все это нужно чтобы расширить функционал не меняя типовую конфу!!!
И все работает, блокируется штатно.....

....некоторые ньюансы блокировки могут возникнуть только при одновременной работе в обычной и управляемой форме. Я вообще управляемую форму элемента написал....интереса ради...есть обычная форма....но скорее всего выберу управляемую....просто душа лежит.

А вот форму списка пришлось писать из-за отсутствия динамических списков в обычных формах.

ПРИЛОЖИЛ СКРИНШОТ (в обычных формах блокировка работает идеально)
Прикрепленные файлы:
+
13. MrFlanker 222 05.01.17 15:43 Сейчас в теме
есть некоторые проблемы с блокировкой данных в простых и управляемых формах одновременно.

вот здесь Максим Радченко немного комментирует это
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=566963

нас такой вариант устраивает. И разработчиков 1С вполне можно понять
+
16. MrFlanker 222 05.01.17 17:58 Сейчас в теме
Кстати нашел решение для блокировки (работает между УФ и обычные формы) http://www.forum.mista.ru/topic.php?id=634871

в коде выглядит вот так
// Блокирруем данные	
ЗаблокироватьДанныеДляРедактирования(ЭтаФорма.КартаОбъект.Ссылка,ЭтаФорма.КартаОбъект.ВерсияДанных,ЭтаФорма.УникальныйИдентификатор);


// Разбликируем данные
РазблокироватьДанныеДляРедактирования(ЭтаФорма.КартаОбъект.Ссылка,ЭтаФорма.УникальныйИдентификатор);


хорошо отрабатывает при всех возможных комбинациях...открытия форм обычных или УФ и начала редактирования в любой из форм. Все как с обычными формами теперь.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот