В справочнике ИТ_КонтактныеЛица при открытии элемента списка открывается окно на котором есть вкладка "Контактная информация" и там в списке поле емейл. Нужно это поле сделать основным у всех элементов.
Так понимаю что нужно запросом выбрать все элементы этого справочник и потом по ссылке элемента каждому полю со значение емейл присвоить это значение (установить основным). В конструкторе запроса выбираю в Таблицы этот справочник, но у него нет такого поля и вообще нет этой табличной части и других тоже. Где это поле найти?
Так понимаю что нужно запросом выбрать все элементы этого справочник и потом по ссылке элемента каждому полю со значение емейл присвоить это значение (установить основным). В конструкторе запроса выбираю в Таблицы этот справочник, но у него нет такого поля и вообще нет этой табличной части и других тоже. Где это поле найти?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
&НаКлиенте
Процедура УстановитьОсновным(Команда)
ИТ_УправлениеКонтактнойИнформациейКлиентУпр.УстановитьОсновным(ЭтотОбъект,НаборКонтактнойИнформации);
КонецПроцедуры
Процедура УстановитьОсновным(ЭтаФорма, НаборКонтактнойИнформации) экспорт
Если ЭтаФорма.Элементы.НаборКонтактнойИнформации.ТекущаяСтрока <> Неопределено Тогда
ЭтаФОрма.Модифицированность = Истина;
Элементы = ЭтаФОрма.Элементы;
Элементы.НаборКонтактнойИнформацииУстановитьОсновным.Пометка = Не Элементы.НаборКонтактнойИнформацииУстановитьОсновным.Пометка;
Если Элементы.НаборКонтактнойИнформации.ТекущиеДанные <> Неопределено Тогда
Если Элементы.НаборКонтактнойИнформацииУстановитьОсновным.Пометка Тогда
Для каждого Стр Из НаборКонтактнойИнформации Цикл
Если Стр.Тип = Элементы.НаборКонтактнойИнформации.ТекущиеДанные.Тип
и Стр.ЗначениеПоУмолчанию = Истина Тогда
Стр.ЗначениеПоУмолчанию = Ложь;
КонецЕсли;
КонецЦикла;
НаборКонтактнойИнформации.НайтиПоИдентификатору(Элементы.НаборКонтактнойИнформации.ТекущаяСтрока).ЗначениеПоУмолчанию = Истина;
Иначе
НаборКонтактнойИнформации.НайтиПоИдентификатору(Элементы.НаборКонтактнойИнформации.ТекущаяСтрока).ЗначениеПоУмолчанию = Ложь;
КонецЕсли;
КонецЕсли;
ПерерисоватьКартинкиКИ(НаборКонтактнойИнформации);
ТекСтрока = Элементы.НаборКонтактнойИнформации.ТекущаяСтрока;
Элементы.НаборКонтактнойИнформации.ТекущаяСтрока = ТекСтрока + НаборКонтактнойИнформации.Количество();
КонецЕсли;
КонецПроцедуры //
Показать
(11)
Ошибка: Поле объекта не обнаружено (ЗначениеПоУмолчанию)
Почему не обнаружено? Есть же оно в регистре.
необходимо для другого сбросить в Ложь
Для какого другого?
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
НаборЗаписей.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыОрг);
НаборЗаписей.ЗначениеПоУмолчанию = Истина;
НаборЗаписей.Записать();
Ошибка: Поле объекта не обнаружено (ЗначениеПоУмолчанию)
Почему не обнаружено? Есть же оно в регистре.
(14) три измерения:
объект -СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Пользователи, СправочникСсылка.Контрагенты, СправочникСсылка.Клиенты, СправочникСсылка.ИТ_КонтактныеЛица,
тип - ПеречислениеСсылка.ТипыКонтактнойИнформации
вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка
объект -СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Пользователи, СправочникСсылка.Контрагенты, СправочникСсылка.Клиенты, СправочникСсылка.ИТ_КонтактныеЛица,
тип - ПеречислениеСсылка.ТипыКонтактнойИнформации
вид - СправочникСсылка.ВидыКонтактнойИнформации, Строка
Прикрепленные файлы:
(18) Нужно для всех объектов в регистре установить почту по умолчанию рабочую или личную. Как тут делать отбор? Не известно какое там будет значение.
объект -СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Пользователи, СправочникСсылка.Контрагенты, СправочникСсылка.Клиенты, СправочникСсылка.ИТ_КонтактныеЛица,
объект -СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Пользователи, СправочникСсылка.Контрагенты, СправочникСсылка.Клиенты, СправочникСсылка.ИТ_КонтактныеЛица,
(24) вот так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтрагентов.Ссылка
|ИЗ
| Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты контактного лица контрагента");
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Выборка.Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда
Для Каждого стрНабора из НаборЗаписей Цикл
Если стрНабора.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
Если стрНабора.ЗначениеПоУмолчанию = Истина Тогда
стрНабора.ЗначениеПоУмолчанию = Ложь;
КонецЕсли;
Если стрНабора.Вид = ВидКонтактнойИнформации Тогда
стрНабора.ЗначениеПоУмолчанию = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НаборЗаписей.Записать();
КонецЦикла;
Показать
(13)
Пример: Для Иванова установлены телефоны:
- Рабочий - 11111 - ЗначениеПоУмолчанию = Истина
- Мобильный - 22222 - ЗначениеПоУмолчанию = Ложь
Устанавливаем Мобильный по-умолчанию. Получаем:
- Рабочий - 11111 - ЗначениеПоУмолчанию = Истина
- Мобильный - 22222 - ЗначениеПоУмолчанию = Истина
Получилась неоднозначное значение по-умолчанию.
Нужно и предыдущего значения по-умолчанию установленное в Истина сбросить в Ложь.
Для какого другого?
Пример: Для Иванова установлены телефоны:
- Рабочий - 11111 - ЗначениеПоУмолчанию = Истина
- Мобильный - 22222 - ЗначениеПоУмолчанию = Ложь
Устанавливаем Мобильный по-умолчанию. Получаем:
- Рабочий - 11111 - ЗначениеПоУмолчанию = Истина
- Мобильный - 22222 - ЗначениеПоУмолчанию = Истина
Получилась неоднозначное значение по-умолчанию.
Нужно и предыдущего значения по-умолчанию установленное в Истина сбросить в Ложь.
(16)
У меня две почты: рабочая и личная, могут быть заполнены оба значения. Приоритет у рабочей, если значение в рабочей не заполнено, то по умолчанию нужно выставить личную.
Только не совсем понятно как быть с отбором в таком случае. Нужно в отбор добавить еще и личную?
Как в таком случае поставить условие Если заполнена рабочая то ей выставить значение по умолчанию, Если Личная тогда ей.
Получилась неоднозначное значение по-умолчанию.
Нужно и предыдущего значения по-умолчанию установленное в Истина сбросить в Ложь.
Нужно и предыдущего значения по-умолчанию установленное в Истина сбросить в Ложь.
У меня две почты: рабочая и личная, могут быть заполнены оба значения. Приоритет у рабочей, если значение в рабочей не заполнено, то по умолчанию нужно выставить личную.
Только не совсем понятно как быть с отбором в таком случае. Нужно в отбор добавить еще и личную?
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
НаборЗаписей.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыОрг);
НаборЗаписей.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочты);
НаборЗаписей.ЗначениеПоУмолчанию = Истина;
НаборЗаписей.Записать();
Как в таком случае поставить условие Если заполнена рабочая то ей выставить значение по умолчанию, Если Личная тогда ей.
(23) для условия использования разной почты переделал код:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтрагентов.Ссылка
|ИЗ
| Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
РабочаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Рабочая почта");
ЛичнаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Личная почта");
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Выборка.Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда
ЕстьРабочаяПочта = Ложь;
ЕстьИзменения = Ложь;
СтрЛичнаяПочта = Неопределено;
Для Каждого стрНабора из НаборЗаписей Цикл
Если стрНабора.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
Если стрНабора.ЗначениеПоУмолчанию = Истина Тогда
стрНабора.ЗначениеПоУмолчанию = Ложь;
ЕстьИзменения = Истина;
КонецЕсли;
Если стрНабора.Вид = РабочаяПочта Тогда
ЕстьРабочаяПочта = Истина;
стрНабора.ЗначениеПоУмолчанию = Истина;
ЕстьИзменения = Истина;
ИначеЕсли стрНабора.Вид = ЛичнаяПочта Тогда
ЕстьЛичнаяПочта = Истина;
СтрЛичнаяПочта = стрНабора;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЕстьРабочаяПочта И СтрЛичнаяПочта <> Неопределено Тогда
СтрЛичнаяПочта.ЗначениеПоУмолчанию = Истина;
ЕстьИзменения = Истина;
КонецЕсли;
Если ЕстьИзменения Тогда
НаборЗаписей.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
ТС ты задачу по-человечески опиши, что нужно-то в конечном итоге? Тебе вариантов уже много предложили) По (29) скорее всего у тебя не по контактным лицам контрагентов заполнены почты (например по физлицам или пользователям), соответственно и выборку другую делать надо. Мой вариант как раз и делает как ты пишешь в (21) для всех объктов в регистре.
Опять забыл как ссылку делать :-( (подскажите если несложно кто знает :-) ) ТС исходя из (31) в (28) я тебе уже готовое решение написал, просто заполнить параметры запроса правильно и все.. Типа (если не предопределенные элементы - лучше по коду искать, если предопределенные - по имени предопределенного):
Запрос.УстановитьПараметр("Рабочая", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("КодРабочегоМыла");
Запрос.УстановитьПараметр("Личная", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("КодЛичногоМыла");
Запрос.УстановитьПараметр("Рабочая", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("КодРабочегоМыла");
Запрос.УстановитьПараметр("Личная", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("КодЛичногоМыла");
(33) наименование вида не соответствует. Должно быть полное "E-Mail:рабочий E-Mail" и другая почта "E-Mail:Адрес электронной почты". Можно по коду искать, если так проще.
РабочаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("E-Mail:рабочий E-Mail");
Личная Почта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("E-Mail:Адрес электронной почты");
РабочаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("E-Mail:рабочий E-Mail");
Личная Почта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("E-Mail:Адрес электронной почты");
(36) Попробуйте на копии. Этот вариант для случая когда возможны только 2 почты (рабочая и личная).
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтактнаяИнформация.Объект КАК Объект
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект ССЫЛКА Справочник.ИТ_КонтактныеЛица
| И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Запись = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
РабочаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("рабочий E-Mail");
ЛичнаяПочта = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты");
Пока Выборка.Следующий() Цикл
РабочаяПочтаПоУмолчанию = Ложь;
Запись.Объект = Выборка.Объект;
Запись.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
Запись.Вид = РабочаяПочта;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.ЗначениеПоУмолчанию = Истина;
РабочаяПочтаПоУмолчанию = Истина;
Запись.Записать();
КонецЕсли;
Запись.Вид = ЛичнаяПочта;
Запись.Прочитать();
Если Запись.Выбран() Тогда
Запись.ЗначениеПоУмолчанию = НЕ РабочаяПочтаПоУмолчанию;
Запись.Записать();
КонецЕсли;
КонецЦикла;
Показать
Пустая выборка, посмотрел эта Елена еще и в других справочниках есть не только в ИТ_КонтактныеЛица. Наверно не нужно ничего выражать через ССЫЛКА просто взять все записи регистра и там где Тип: емайл и Вид: или рабочий или домашний установить значение по умолчанию.
(38) как вариант в запрос добавить записи из всех интересующих справочников:
Запрос.Текст =
"ВЫБРАТЬ
| КонтактныеЛицаКонтрагентов.Ссылка
|ИЗ
| Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КонтактныеЛица.Ссылка
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица";
Показать
А не проще сразу запросом? Если правильно понял задача - если заполнена только 1 почта установить её по умолчанию, если обе - то одну выбранную сделать по умолчанию:
ВЫБРАТЬ РАЗЛИЧНЫЕ
КонтактнаяИнформация.Объект,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтактнаяИнформация.Вид) КАК Вид
ПОМЕСТИТЬ ВТВсеОбъекты
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
И КонтактнаяИнформация.Вид В (&Рабочая, &Личная)
И ПОДСТРОКА(КонтактнаяИнформация.Представление, 1, 1) <> """"
СГРУППИРОВАТЬ ПО
КонтактнаяИнформация.Объект
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТВсеОбъекты.Объект,
КонтактнаяИнформация.Тип,
КонтактнаяИнформация.Вид,
КонтактнаяИнформация.Представление,
ВЫБОР
КОГДА ВТВсеОбъекты.Вид = 1
ТОГДА ИСТИНА
ИНАЧЕ ВЫБОР
КОГДА КонтактнаяИнформация.Вид = &Рабочая
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
КОНЕЦ КАК ПоУмолчанию
ИЗ
ВТВсеОбъекты КАК ВТВсеОбъекты,
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
Затем просто выборкой обойти и заполнить запись и записать, не связываясь с набором вообще)
А-ля:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Запись = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись, Выборка);
Запись.Записать(Истина);
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот