Имеем форму справочника на которой помимо основного реквизита "Объект" есть не основной реквизит "КартаОбъект" (Спарвочники.ИнформационныеКарты).
В форме редактируются поля:
- основного реквизита "Объект"
- не основного реквизита "КартаОбъект"
"Объект" записывается штатно при закрытии формы
Строковые реквизиты "КартаОбъект.РеквизитСтрока1" тоже записывается при нажатии стандартной кнопки "Запись", ссылочные же рекизиты не записываются "КартаОбъект.РеквизитСсылка1".
Попытка записать:
РеквизитФормыВЗначение("КартаОбъект").Записать();
производит запись, но при следующих вызовах дает ошибку:
Текс ошибки
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
{Справочник.КлиентскаяБаза.Форма.ФормаЭлементаУпр.Форма(317)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
РеквизитФормыВЗначение("КартаОбъект").Записать();
по причине:
Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
(4) обычно связь карты со справочником Клиент (Владелец карты) делают через регистр сведений.
Обычно у владельца карты может быть несколько карт. В данном решении может быть только одна карта. А если клиент потерял карту, произведена замена карты?
Далее, не лучший вариант делать/редактировать карту в форме справочника владельца карты. Если уж надо привязывать карту напрямую к справочнику Клиенты, то делать карты подчиненным справочником. И в реквизитах хранить ссылку на основную карту.
Иначе по карте не известен владелец. Вот сосканировали штрихкод карты. Нашли карту. Как по ней получить владельца? Только поиском по справочнику Клиенты. А тогда теряется весь смысл отдельного справочника Карты.
(4) обычно связь карты со справочником Клиент (Владелец карты) делают через регистр сведений.
Обычно у владельца карты может быть несколько карт. В данном решении может быть только одна карта
КлиентскаБаза это произвольный справочник который является расширением типового справочника "Информационныекарты", в котором добавлены различные поля и т.п.
Нужно это чтобы не менять типовою конфу...такое решение себя хорошо зарекомендовало.
Пользователя как бы забывают про справочник "Информационные карты" и вместо него работают в с правочнике "Клиентская база".... и получаются все плюшки от управляемых форм в УправленииТорговлей 10.3 и реализуем всю что нужно не меняя типовую.
(1)Расширение управляемой формы для объектов (Managed form extension for objects)
Записать (Write)
Синтаксис:
Записать(<ПараметрыЗаписи>)
Параметры:
<ПараметрыЗаписи> (необязательный)
Тип: Структура. Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный.
Возвращаемое значение:
Тип: Булево. Истина - успешно записан; Ложь - в противном случае.
Описание:
Сомнительное решение.. Зачем вы привязываете именно объект к форме?
Что будет, если Вы откроете элемент справочника "КлиентскаяБаза", а кто-нибудь в это время откроет и изменит конкретно этот объект информационной карты через типовую форму?
Что будет, если Вы откроете элемент справочника "КлиентскаяБаза", а кто-нибудь в это время откроет и изменит конкретно этот объект информационной карты через типовую форму?
Будет ошибка несоответствия версии или отсутствия записи базы данных
Можно обработать и вывести окно "Объект изменен в другой форме / другим пользователем и т.п.". Либо установить блокировку....
Если работать в формах "Клиентской базы", сработает штатная блокировка.
Будет ошибка несоответствия версии или отсутствия записи базы данных
Т.е. Человек зашел в Элемент клиентской базы, сидит там правит что-нибудь.. минут 5 потратил, жмет записать - а ему выскакивает ошибка несоответствия версии или отсутствия записи базы данных.. и все его изменения не запишутся(если попытку на запись информационной карты не добавлять), и придется ему закрывать без сохранения, открывать заново и заново все вносить....
Вот я и спрашиваю, в чем смысл? Почему в реквизитах Объект, а не Ссылка на информационную карту? При записи вы можете просто получить объект, изменить что надо и записать... действия те же + блокировка не будет висеть, пока форма клиентской базы открыта..
Т.е. Человек зашел в Элемент клиентской базы, сидит там правит что-нибудь.. минут 5 потратил, жмет записать - а ему выскакивает ошибка несоответствия версии или отсутствия записи базы
При попытке изменения заблокируется объект.... кто первый начал править тот и успел..
второму человеку при попытке править....вылезет сообщение об ошибке
1) Объект заблокирован - (если второй правит)
2) Несоответсвие версии (если второй уже записал и снял блокировку)
В принципе откройте любую типовую конфу... и поработайте с двумя пользователями с любым справочником..
Б является дополнением А... то есть фактически мы имеем один справочник А+Б.
фактически это 2 абсолютно разных справочника.
К тому же не предполагается использование форм справочника "А"...в этом нет смысла...это противоречат целям создания справочника Б.
В Вашем случае для изменения, например, только имени и отчества в элементе клиенткой базы надо блокировать текущий элемент + Элемент информационной карты (согласитесь, является, мягко говоря, лишним действием..).
А для того, что бы изменить,например, только номер информационной карты, Вы опять заблокируете оба элемента.. что опять же не является необходимостью..
Ни в одной типовой конфигурации я не встречал подобных решений блокировки подчиненных справочнику элементов при открытии..
Не хочу разводить холивар и флуд и ни сколько не хочу критиковать Ваше решение делать именно так, просто хочу узнать для себя:
в чем выражена острая необходимость привязывать именно объект другого элемента, а не его ссылку, к элементу другого справочника?
На это есть какие-то объективные причины, с точки зрения получения в дальнейшем возможных ошибок или еще чего-нибудь.. или это просто Ваше решение, т.к. Вам так хочется/удобно/нужно?
В Вашем случае для изменения, например, только имени и отчества в элементе клиенткой базы надо блокировать текущий элемент + Элемент информационной карты (согласитесь, является, мягко говоря, лишним действием..).
Данные двух справочников имеет смысл редактировать только вместе.
Меняется ФИО, меняется и наименование=Ф+И+О....
А для того, что бы изменить,например, только номер информационной карты, Вы опять заблокируете оба элемента.. что опять же не является необходимостью..
Номер в большинстве случаев вообще лежит в регистре сведений.
Ни в одной типовой конфигурации я не встречал подобных решений блокировки подчиненных справочнику элементов при открытии..
Я ничего и не блокирую ... это делает 1С автоматически (просто на форме два объекта) и блокируются оба.
Логика работы в форме справочника "Клиентская база"... полностью копирует логику типовой работы из типовой формы "ИнформационныеКарты".
Все это нужно чтобы расширить функционал не меняя типовую конфу!!!
И все работает, блокируется штатно.....
....некоторые ньюансы блокировки могут возникнуть только при одновременной работе в обычной и управляемой форме. Я вообще управляемую форму элемента написал....интереса ради...есть обычная форма....но скорее всего выберу управляемую....просто душа лежит.
А вот форму списка пришлось писать из-за отсутствия динамических списков в обычных формах.
ПРИЛОЖИЛ СКРИНШОТ (в обычных формах блокировка работает идеально)
// Блокирруем данные
ЗаблокироватьДанныеДляРедактирования(ЭтаФорма.КартаОбъект.Ссылка,ЭтаФорма.КартаОбъект.ВерсияДанных,ЭтаФорма.УникальныйИдентификатор);
// Разбликируем данные
РазблокироватьДанныеДляРедактирования(ЭтаФорма.КартаОбъект.Ссылка,ЭтаФорма.УникальныйИдентификатор);
хорошо отрабатывает при всех возможных комбинациях...открытия форм обычных или УФ и начала редактирования в любой из форм. Все как с обычными формами теперь.