Помогите разобраться как продублировать булево у дополнительного реквизита из справочника Сотрудники в справочник ФизическиеЛица в ЗУП

1. Vodomer 1 11.11.22 12:46 Сейчас в теме
Всем Здравствуйте!
Помогите тупому разобраться.

Давайте сразу опустим: язвительность, троллинг и нагнетание обстановки :)

Не могу понять, как можно дублировать булево из справочника "Сотрудники" в справочник "ФизическиеЛица" дополнительного реквизита в ЗУП 3.1. Дополнительный реквизит был изначально создан в в справочнике "Сотрудники". Кадровики его проставляют по соответствию сотрудников. Не пойму, как сделать, чтобы в справочнике "ФизическиеЛица" копировалось булево из справочника "Сотрудники". Ниже код, по которому пытаюсь вытянуть данные из плана характеристик "ДополнительныеРеквизитыИСведения". Потом сопоставить со справочником "Сотрудники". Понимаю, что перемудрил. Может есть решение проще, а главное, рабочее ))).

Всем спасибо за внимание к моей теме, отзывчивости и вежливости! Всем хорошего дня!

&НаСервере
Функция ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения = Неопределено, Комментарий = "", ЭтоДополнительноеСведение = Истина,
НаборСвойств = Неопределено, НаименованиеСвойства = "") Экспорт

Свойство = Неопределено;

СоздатьСвойство = Ложь;

Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства
| И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления";

Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
Свойство = Выборка.Ссылка;
Иначе
Если Не ТипЗначения = Неопределено Тогда
СоздатьСвойство = Истина;
КонецЕсли;
КонецЕсли;

Если СоздатьСвойство Или ЗначениеЗаполнено(НаименованиеСвойства) И Не Свойство.Наименование = НаименованиеСвойства Тогда
Попытка
Если СоздатьСвойство Тогда
СвойствоОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент("ТоргПред");
Иначе
СвойствоОбъект = Свойство.ПолучитьОбъект("ТоргПред");
КонецЕсли;
СвойствоОбъект.Наименование = ?(ЗначениеЗаполнено(НаименованиеСвойства), НаименованиеСвойства, ИмяСвойства);
СвойствоОбъект.Имя = ИмяСвойства;
СвойствоОбъект.Доступен = Истина;
СвойствоОбъект.ТипЗначения = ТипЗначения;
СвойствоОбъект.Заголовок = СвойствоОбъект.Наименование;
СвойствоОбъект.ДополнительныеЗначенияИспользуются = Истина;
СвойствоОбъект.Виден = Истина;
СвойствоОбъект.Записать();
Свойство = СвойствоОбъект.Ссылка;
Если СоздатьСвойство И ЗначениеЗаполнено(НаборСвойств) Тогда
Если НаборСвойств.ДополнительныеРеквизиты.Найти(Свойство, "Свойство") = Неопределено Тогда
НаборДополнительныхРеквизитов = НаборСвойств.ПолучитьОбъект("ТоргПред");
ТабЧасть = НаборДополнительныхРеквизитов.ДополнительныеРеквизиты;
НоваяСтрока = ТабЧасть.Добавить();
НоваяСтрока.Свойство = Свойство;
НаборДополнительныхРеквизитов.Записать();
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;

Возврат Свойство;

КонецФункции

&НаСервере
Функция ПолучитьОбъектПоЗначениюСвойства(Свойство_Или_Имя, ЗначениеСвойства, ИмяМетаданные) Экспорт

Ответ = Неопределено;

Если ТипЗнч(Свойство_Или_Имя) = Тип("Булево") Тогда
Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
Иначе
Свойство = Свойство_Или_Имя;
КонецЕсли;

Если Не Свойство = Неопределено Тогда

Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект КАК Объект,
| ДополнительныеСведения.Свойство КАК Свойство,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Значение = &ЗначениеСвойства
| И ДополнительныеСведения.Объект ССЫЛКА Справочник.Сотрудники
| И ДополнительныеСведения.Свойство = &Свойство";

Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Сотрудники", ИмяМетаданные);

Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("ЗначениеСвойства", ЗначениеСвойства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ответ = Выборка.Объект;
КонецЕсли;

КонецЕсли;

Возврат Ответ;

КонецФункции
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ivan_Sol 19 11.11.22 12:54 Сейчас в теме
Добрый день. В вашем случае можно создать подписку на событие регистра сведений "ДополнительныеСведения" если записывается нужное вам свойство справочника Сотрудники - значит нужно сделать аналогичное со Справочником ФизЛица
4. Vodomer 1 11.11.22 13:44 Сейчас в теме
(2)
подписку на событие регистра сведений "ДополнительныеСведения"

Сложно говорите крестьянину.
3. user1278383 5 11.11.22 13:08 Сейчас в теме
В подписке при записи сотрудника (если это доп. реквизит)
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "...");
Стр = Таблица.Добавить();
Стр.Свойство =  Свойство;
Стр.Значение =  УправлениеСвойствами.ЗначениеСвойства(Сотрудник, Свойство);

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ФизическоеЛицо, Таблица);
Показать
5. Vodomer 1 11.11.22 13:50 Сейчас в теме
(3)
Не совсем понял строчку "Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Сотрудник, Свойство);". Откуда берутся данные "Сотрудник"? Я же правильно понимаю, что ссылаетесь на справочник "Сотрудники"? Если да, то не нужно разве ссылаться на ФизическоеЛицо?
6. user1278383 5 11.11.22 13:57 Сейчас в теме
(5) Значения переменных Сотрудник и ФизическоеЛицо вам нужно самому подставить.... Если это делается в подписке при записи сотрудника, то Сотрудник = ЭтотОбъект.Ссылка, ФизическоеЛицо = ЭтотОбъект.ФизическоеЛицо, например
7. Vodomer 1 11.11.22 14:06 Сейчас в теме
(6)
Так как это будут делать кадровики, то сделал через ЭтотОбъект, но в Пользовательском режиме все равно флаг не проставляется у доп. реквизита "ТоргПред" в справочнике "ФизическиеЛица".

В чем может быть кривость моих рук? Спасибо за уделенное время.

&НаСервере
Процедура ПолучитьСоздатьСвойство()

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, Свойство);

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЭтотОбъект.ФизическоеЛицо, Таблица);

КонецПроцедуры
8. user1278383 5 11.11.22 14:11 Сейчас в теме
(7) мой код предполагает, что свойство у обоих справочников одинаковое. Это так? Имя доп. реквизита точно "ТоргПред"? Имя в моем коде это не наименование, а имя "для разработчиков"
10. Vodomer 1 11.11.22 15:02 Сейчас в теме
(8)
Реквизит создан через общие настройки в разделе "Дополнительные реквизиты и сведения". Он передан на оба справочника "Сотрудники" и "ФизическиеЛица". Имя для разработчиков именно такое "ТоргПред", без ссылки. Почему его и использую в описании. Свойство одинаковое. Имя доп. реквизита, точно "ТоргПред". Имя и Наименование совпадают, это видно в плане видов характеристик "ДополнительныеРеквизитыИСведения". Но при перепроведении данных Сотрудника в справочнике "Сотрудники", флаг в справочнике "ФизическиеЛица" не копируется из справочника "Сотрудники".
11. user1278383 5 11.11.22 15:09 Сейчас в теме
(10) а так?
&НаСервере
Процедура ПолучитьСоздатьСвойство()

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();

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

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.ФизическоеЛицо, Таблица);

КонецПроцедуры
Показать
12. Vodomer 1 11.11.22 15:22 Сейчас в теме
(11)
&НаСервере
Процедура ПолучитьСоздатьСвойство()

Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();

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

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.ФизическоеЛицо, Таблица);

КонецПроцедуры
Показать


Тогда Объект, как переменная не определена
13. user1278383 5 11.11.22 15:32 Сейчас в теме
(12)
&НаСервере
Процедура ПолучитьСоздатьСвойство()

Где выполнение происходит? В модуле формы или объекта. Если последнее, то зачем директива...
14. beldieff 11.11.22 15:34 Сейчас в теме
(13)
Если последнее, то зачем директива...
А если первое то просто "Зачем?" :)
15. Vodomer 1 11.11.22 15:39 Сейчас в теме
16. user1278383 5 11.11.22 15:45 Сейчас в теме
(15) на форме объекта или списка?
17. Vodomer 1 11.11.22 15:58 Сейчас в теме
18. user1278383 5 11.11.22 16:03 Сейчас в теме
(17) быть не может, что в форме объекта нет реквизита Объект...
19. Vodomer 1 11.11.22 16:09 Сейчас в теме
(18)
Ошибку прикрепил в виде скрина.
Прикрепленные файлы:
20. Vodomer 1 17.11.22 16:24 Сейчас в теме
(18)
Здравствуйте! Нигде не могу найти информацию из-за чего не видно объекты. Можете подсказать в чем проблема? Заранее спасибо!
Прикрепленные файлы:
9. user1278383 5 11.11.22 14:17 Сейчас в теме
(7) ЭтотОбъект для формы это ФормаКлиентскогоПриложения...
Оставьте свое сообщение

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