Помогите разобраться как продублировать булево у дополнительного реквизита из справочника Сотрудники в справочник ФизическиеЛица в ЗУП
Всем Здравствуйте!
Помогите тупому разобраться.
Давайте сразу опустим: язвительность, троллинг и нагнетание обстановки :)
Не могу понять, как можно дублировать булево из справочника "Сотрудники" в справочник "ФизическиеЛица" дополнительного реквизита в ЗУП 3.1. Дополнительный реквизит был изначально создан в в справочнике "Сотрудники". Кадровики его проставляют по соответствию сотрудников. Не пойму, как сделать, чтобы в справочнике "ФизическиеЛица" копировалось булево из справочника "Сотрудники". Ниже код, по которому пытаюсь вытянуть данные из плана характеристик "ДополнительныеРеквизитыИСведения". Потом сопоставить со справочником "Сотрудники". Понимаю, что перемудрил. Может есть решение проще, а главное, рабочее ))).
Всем спасибо за внимание к моей теме, отзывчивости и вежливости! Всем хорошего дня!
&НаСервере
Функция ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения = Неопределено, Комментарий = "", ЭтоДополнительноеСведение = Истина,
НаборСвойств = Неопределено, НаименованиеСвойства = "") Экспорт
Свойство = Неопределено;
СоздатьСвойство = Ложь;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства
| И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления";
Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Свойство = Выборка.Ссылка;
Иначе
Если Не ТипЗначения = Неопределено Тогда
СоздатьСвойство = Истина;
КонецЕсли;
КонецЕсли;
Если СоздатьСвойство Или ЗначениеЗаполнено(НаименованиеСвойства) И Не Свойство.Наименование = НаименованиеСвойства Тогда
Попытка
Если СоздатьСвойство Тогда
СвойствоОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент("ТоргПред");
Иначе
СвойствоОбъект = Свойство.ПолучитьОбъект("ТоргПред");
КонецЕсли;
СвойствоОбъект.Наименование = ?(ЗначениеЗаполнено(НаименованиеСвойства), НаименованиеСвойства, ИмяСвойства);
СвойствоОбъект.Имя = ИмяСвойства;
СвойствоОбъект.Доступен = Истина;
СвойствоОбъект.ТипЗначения = ТипЗначения;
СвойствоОбъект.Заголовок = СвойствоОбъект.Наименование;
СвойствоОбъект.ДополнительныеЗначенияИспользуются = Истина;
СвойствоОбъект.Виден = Истина;
СвойствоОбъект.Записать();
Свойство = СвойствоОбъект.Ссылка;
Если СоздатьСвойство И ЗначениеЗаполнено(НаборСвойств) Тогда
Если НаборСвойств.ДополнительныеРеквизиты.Найти(Свойство, "Свойство") = Неопределено Тогда
НаборДополнительныхРеквизитов = НаборСвойств.ПолучитьОбъект("ТоргПред");
ТабЧасть = НаборДополнительныхРеквизитов.ДополнительныеРеквизиты;
НоваяСтрока = ТабЧасть.Добавить();
НоваяСтрока.Свойство = Свойство;
НаборДополнительныхРеквизитов.Записать();
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;
Возврат Свойство;
КонецФункции
&НаСервере
Функция ПолучитьОбъектПоЗначениюСвойства(Свойство_Или_Имя, ЗначениеСвойства, ИмяМетаданные) Экспорт
Ответ = Неопределено;
Если ТипЗнч(Свойство_Или_Имя) = Тип("Булево") Тогда
Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
Иначе
Свойство = Свойство_Или_Имя;
КонецЕсли;
Если Не Свойство = Неопределено Тогда
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект КАК Объект,
| ДополнительныеСведения.Свойство КАК Свойство,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Значение = &ЗначениеСвойства
| И ДополнительныеСведения.Объект ССЫЛКА Справочник.Сотрудники
| И ДополнительныеСведения.Свойство = &Свойство";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Сотрудники", ИмяМетаданные);
Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("ЗначениеСвойства", ЗначениеСвойства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ответ = Выборка.Объект;
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции
Помогите тупому разобраться.
Давайте сразу опустим: язвительность, троллинг и нагнетание обстановки :)
Не могу понять, как можно дублировать булево из справочника "Сотрудники" в справочник "ФизическиеЛица" дополнительного реквизита в ЗУП 3.1. Дополнительный реквизит был изначально создан в в справочнике "Сотрудники". Кадровики его проставляют по соответствию сотрудников. Не пойму, как сделать, чтобы в справочнике "ФизическиеЛица" копировалось булево из справочника "Сотрудники". Ниже код, по которому пытаюсь вытянуть данные из плана характеристик "ДополнительныеРеквизитыИСведения". Потом сопоставить со справочником "Сотрудники". Понимаю, что перемудрил. Может есть решение проще, а главное, рабочее ))).
Всем спасибо за внимание к моей теме, отзывчивости и вежливости! Всем хорошего дня!
&НаСервере
Функция ПолучитьСоздатьСвойство(ИмяСвойства, ТипЗначения = Неопределено, Комментарий = "", ЭтоДополнительноеСведение = Истина,
НаборСвойств = Неопределено, НаименованиеСвойства = "") Экспорт
Свойство = Неопределено;
СоздатьСвойство = Ложь;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
|ГДЕ
| ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства
| И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления";
Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Свойство = Выборка.Ссылка;
Иначе
Если Не ТипЗначения = Неопределено Тогда
СоздатьСвойство = Истина;
КонецЕсли;
КонецЕсли;
Если СоздатьСвойство Или ЗначениеЗаполнено(НаименованиеСвойства) И Не Свойство.Наименование = НаименованиеСвойства Тогда
Попытка
Если СоздатьСвойство Тогда
СвойствоОбъект = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент("ТоргПред");
Иначе
СвойствоОбъект = Свойство.ПолучитьОбъект("ТоргПред");
КонецЕсли;
СвойствоОбъект.Наименование = ?(ЗначениеЗаполнено(НаименованиеСвойства), НаименованиеСвойства, ИмяСвойства);
СвойствоОбъект.Имя = ИмяСвойства;
СвойствоОбъект.Доступен = Истина;
СвойствоОбъект.ТипЗначения = ТипЗначения;
СвойствоОбъект.Заголовок = СвойствоОбъект.Наименование;
СвойствоОбъект.ДополнительныеЗначенияИспользуются = Истина;
СвойствоОбъект.Виден = Истина;
СвойствоОбъект.Записать();
Свойство = СвойствоОбъект.Ссылка;
Если СоздатьСвойство И ЗначениеЗаполнено(НаборСвойств) Тогда
Если НаборСвойств.ДополнительныеРеквизиты.Найти(Свойство, "Свойство") = Неопределено Тогда
НаборДополнительныхРеквизитов = НаборСвойств.ПолучитьОбъект("ТоргПред");
ТабЧасть = НаборДополнительныхРеквизитов.ДополнительныеРеквизиты;
НоваяСтрока = ТабЧасть.Добавить();
НоваяСтрока.Свойство = Свойство;
НаборДополнительныхРеквизитов.Записать();
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;
Возврат Свойство;
КонецФункции
&НаСервере
Функция ПолучитьОбъектПоЗначениюСвойства(Свойство_Или_Имя, ЗначениеСвойства, ИмяМетаданные) Экспорт
Ответ = Неопределено;
Если ТипЗнч(Свойство_Или_Имя) = Тип("Булево") Тогда
Свойство = ПолучитьСоздатьСвойство(Свойство_Или_Имя);
Иначе
Свойство = Свойство_Или_Имя;
КонецЕсли;
Если Не Свойство = Неопределено Тогда
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект КАК Объект,
| ДополнительныеСведения.Свойство КАК Свойство,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Значение = &ЗначениеСвойства
| И ДополнительныеСведения.Объект ССЫЛКА Справочник.Сотрудники
| И ДополнительныеСведения.Свойство = &Свойство";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Сотрудники", ИмяМетаданные);
Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("ЗначениеСвойства", ЗначениеСвойства);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ответ = Выборка.Объект;
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В подписке при записи сотрудника (если это доп. реквизит)
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "...");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Сотрудник, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ФизическоеЛицо, Таблица);
Показать
(3)
Не совсем понял строчку "Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Сотрудник, Свойство);". Откуда берутся данные "Сотрудник"? Я же правильно понимаю, что ссылаетесь на справочник "Сотрудники"? Если да, то не нужно разве ссылаться на ФизическоеЛицо?
Не совсем понял строчку "Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Сотрудник, Свойство);". Откуда берутся данные "Сотрудник"? Я же правильно понимаю, что ссылаетесь на справочник "Сотрудники"? Если да, то не нужно разве ссылаться на ФизическоеЛицо?
(6)
Так как это будут делать кадровики, то сделал через ЭтотОбъект, но в Пользовательском режиме все равно флаг не проставляется у доп. реквизита "ТоргПред" в справочнике "ФизическиеЛица".
В чем может быть кривость моих рук? Спасибо за уделенное время.
&НаСервере
Процедура ПолучитьСоздатьСвойство()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЭтотОбъект.ФизическоеЛицо, Таблица);
КонецПроцедуры
Так как это будут делать кадровики, то сделал через ЭтотОбъект, но в Пользовательском режиме все равно флаг не проставляется у доп. реквизита "ТоргПред" в справочнике "ФизическиеЛица".
В чем может быть кривость моих рук? Спасибо за уделенное время.
&НаСервере
Процедура ПолучитьСоздатьСвойство()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(ЭтотОбъект.Ссылка, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЭтотОбъект.ФизическоеЛицо, Таблица);
КонецПроцедуры
(8)
Реквизит создан через общие настройки в разделе "Дополнительные реквизиты и сведения". Он передан на оба справочника "Сотрудники" и "ФизическиеЛица". Имя для разработчиков именно такое "ТоргПред", без ссылки. Почему его и использую в описании. Свойство одинаковое. Имя доп. реквизита, точно "ТоргПред". Имя и Наименование совпадают, это видно в плане видов характеристик "ДополнительныеРеквизитыИСведения". Но при перепроведении данных Сотрудника в справочнике "Сотрудники", флаг в справочнике "ФизическиеЛица" не копируется из справочника "Сотрудники".
Реквизит создан через общие настройки в разделе "Дополнительные реквизиты и сведения". Он передан на оба справочника "Сотрудники" и "ФизическиеЛица". Имя для разработчиков именно такое "ТоргПред", без ссылки. Почему его и использую в описании. Свойство одинаковое. Имя доп. реквизита, точно "ТоргПред". Имя и Наименование совпадают, это видно в плане видов характеристик "ДополнительныеРеквизитыИСведения". Но при перепроведении данных Сотрудника в справочнике "Сотрудники", флаг в справочнике "ФизическиеЛица" не копируется из справочника "Сотрудники".
(10) а так?
&НаСервере
Процедура ПолучитьСоздатьСвойство()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Объект.Ссылка, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.ФизическоеЛицо, Таблица);
КонецПроцедуры
Показать
(11)
Тогда Объект, как переменная не определена
&НаСервере
Процедура ПолучитьСоздатьСвойство()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Объект.Ссылка, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.ФизическоеЛицо, Таблица);
КонецПроцедуры
ПоказатьПроцедура ПолучитьСоздатьСвойство()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Таблица.Очистить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ТоргПред");
Стр = Таблица.Добавить();
Стр.Свойство = Свойство;
Стр.Значение = УправлениеСвойствами.ЗначениеСвойства(Объект.Ссылка, Свойство);
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.ФизическоеЛицо, Таблица);
КонецПроцедуры
Тогда Объект, как переменная не определена
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот