Имя: Пароль:
1C
1С v8
Контактная информация и БСП
, , , ,
0 AsadRoman
 
27.06.17
14:46
Пытаюсь создать новое контактное лицо и контактную информацию по нему. По кнопке добавить отрабатывает следующая процедура :

&НаКлиенте
Процедура СоздатьКонтактноеЛицо(Команда)
    ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьЗначение", ЭтаФорма);
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Наименование", Запись.Контрагент);
    ФормаНовогоЭлемента = ОткрытьФорму("Справочник.КонтактныеЛица.ФормаОбъекта", ПараметрыФормы, ЭтаФорма,,,, ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс );
    ФормаНовогоЭлемента.Объект.Наименование = Запись.КонтактноеЛицо;
    ФормаНовогоЭлемента.Объект.Описание = Запись.КонтактноеЛицо;
    ФормаНовогоЭлемента.Объект.Владелец = Запись.Контрагент;
    Если ЗначениеЗаполнено(Запись.Телефон) Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Тип",ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон"));
        Телефон = ФормаНовогоЭлемента.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Найтистроки(Отбор);
        Телефон[0].Представление = Запись.Телефон;
        Телефон[0].ЗначенияПолей = Запись.Телефон;
    КонецЕсли;
    Если ЗначениеЗаполнено(Запись.Емайл) Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Тип",ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"));
        Емайл = ФормаНовогоЭлемента.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Найтистроки(Отбор);
        Емайл[0].Представление = Запись.Емайл;
        Емайл[0].ЗначенияПолей = Запись.Емайл;
    КонецЕсли;
КонецПроцедуры

И, естественно открывается форма. На форме телефона и емайл не отображаются, но после нажатия кнопки "сохранить" сохраняются и при повторном отрытии этого контактного лица все встатет на свои места.
     Вопрос: куда и что еще нужно запихнуть чтобы передаваемые значения стали отображаться на форме сразу?
1 Волшебник
 
модератор
27.06.17
14:47
вызови Прочитать()
2 AsadRoman
 
27.06.17
14:52
(1) Извини, туплю, прочитать() что?
3 Волшебник
 
модератор
27.06.17
14:52
Контактное лицо
4 AsadRoman
 
27.06.17
14:52
Элемент(ы) еще не записаны.
5 Волшебник
 
модератор
27.06.17
14:54
сначала вызови ПолучитьФорму, потом заполни поля, потом Открыть()
6 AsadRoman
 
27.06.17
14:58
(5) не помогло :-(
7 AsadRoman
 
27.06.17
15:00
Я вижу на форме поля типа КонтактнаяИнформацияПоле6d4bc69axa658x11e6x9bf1xf8a9634f667f1
где 6d4bc69axa658x11e6x9bf1xf8a9634f667f1 есть часть уникальная каждый раз.
8 AsadRoman
 
27.06.17
15:35
Переделал вот так:
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьЗначение", ЭтаФорма);
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Наименование", Запись.Контрагент);
    ФормаНовогоЭлемента = ПолучитьФорму("Справочник.КонтактныеЛица.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);
    //ФормаНовогоЭлемента = ОткрытьФорму("Справочник.КонтактныеЛица.ФормаОбъекта", ПараметрыФормы, ЭтаФорма,,,, ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс );
    ФормаНовогоЭлемента.Объект.Наименование = Запись.КонтактноеЛицо;
    ФормаНовогоЭлемента.Объект.Описание = Запись.КонтактноеЛицо;
    ФормаНовогоЭлемента.Объект.Владелец = Запись.Контрагент;
    КИ = ФормаНовогоЭлемента.Объект.КонтактнаяИнформация.Добавить();
    КИ.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон");
    КИ.Вид = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица");
    КИ.Представление = Запись.Телефон;
    КИ.НомерТелефона = Запись.Телефон;
    КИ.НомерТелефонаБезКодов = Запись.Телефон;
    КИ.ЗначенияПолей = Запись.Телефон;
    КИ.ВидДляСписка = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица");
    
    Если ЗначениеЗаполнено(Запись.Телефон) Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Тип",ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон"));
        Телефон = ФормаНовогоЭлемента.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Найтистроки(Отбор);
        Телефон[0].Представление = Запись.Телефон;
        Телефон[0].ЗначенияПолей = Запись.Телефон;
    КонецЕсли;
    Если ЗначениеЗаполнено(Запись.Емайл) Тогда
        Отбор = Новый Структура;
        Отбор.Вставить("Тип",ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"));
        Емайл = ФормаНовогоЭлемента.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Найтистроки(Отбор);
        Емайл[0].Представление = Запись.Емайл;
        Емайл[0].ЗначенияПолей = Запись.Емайл;
    КонецЕсли;
    ФормаНовогоЭлемента.Открыть();

Не помогло. Есть еще варианты?
9 Волшебник
 
модератор
27.06.17
15:38
ФормаНовогоЭлемента.Объект.Прочитать();
ФормаНовогоЭлемента.Открыть();
10 AsadRoman
 
27.06.17
15:43
(9) Метод объекта не обнаружен (Прочитать)
    ФормаНовогоЭлемента.Объект.Прочитать();
11 Волшебник
 
модератор
27.06.17
15:45
Попробуй так: ФормаНовогоЭлемента.Прочитать()
для УФ должно сработать
12 lodger
 
27.06.17
15:45
УправляемаяФорма (ManagedForm)
ОбновитьОтображениеДанных (RefreshDataRepresentation)
Синтаксис:

ОбновитьОтображениеДанных(<ОбновлятьЭлементы>)
Параметры:

<ОбновлятьЭлементы> (необязательный)

Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; Массив.
Если параметр задан, то установка значений (и обновление) будет выполняться только для тех элементов, которые заданы в параметре. Если в качестве значения передан пустой массив, то ни для каких элементов формы установка значений выполнена не будет.
После вызова метода признак необходимости установки значений и обновления для элементов формы сбрасывается: если после вызова метода никакие данные формы не меняются, то ни для никаких элементов, кроме указанных, текст обновлен не будет.
Если параметр имеет значение типа Массив, то элементами массива могут быть только значения типа ГруппаФормы, ТаблицаФормы, ПолеФормы.
Если массив содержит значение другого типа, то будет выдано исключение о неверном типе параметра.
Вызов метода ОбновитьОтображениеДанных с параметром <ОбновлятьЭлементы> имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).
Описание:

В принудительном порядке обновляет содержание элементов управления.
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.

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

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:

В веб-клиенте обновление элементов управления происходит не сразу, а после окончания выполнения кода на встроенном языке.
13 AsadRoman
 
27.06.17
15:51
(11) (12) Все мимо. Поля пустые. Как-то не так это все должно быть....
14 Волшебник
 
модератор
27.06.17
15:51
(13) Сотри всё и напиши с нуля
15 AsadRoman
 
27.06.17
15:51
(14)  а-ха-ха
16 Волшебник
 
модератор
27.06.17
15:52
Сначала сделай Объект, потом у него вызови ПолучитьФорму, а не наоборот
17 AsadRoman
 
27.06.17
16:12
(16) Насервере - объект, затем наклиенте - форма?
18 Волшебник
 
модератор
27.06.17
16:13
(17) На клиенте получи форму через СправочникСсылка
19 Lоki9
 
27.06.17
16:19
(18) нуконечно
20 AsadRoman
 
27.06.17
16:19
(18) Еще ничего не записано
21 AsadRoman
 
27.06.17
17:32
Это называется : "мы не ищем легкий путей" или "настоящие герои идут в обход".
Переделал вот так:
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьЗначение", ЭтаФорма);
    Основание = Новый Структура;
    Основание.Вставить("Владелец", ЭтаФорма.ЗаказССайта.Контрагент);
    Основание.Вставить("Наименование", ЭтаФорма.ЗаказССайта.КонтактноеЛицо);
    КИ = Новый Массив;
    Телефон = Новый Структура;
    Телефон.Вставить("Телефон", ЭтаФорма.ЗаказССайта.Телефон);
    КИ.Добавить(Телефон);
    Емайл = Новый Структура;
    Емайл.Вставить("Емайл", ЭтаФорма.ЗаказССайта.Емайл);
    КИ.Добавить(Емайл);
    Основание.Вставить("КИ",КИ);
    ПараметрыФормы.Вставить("Основание", Основание);
    ФормаНовогоЭлемента = ОткрытьФорму("Справочник.КонтактныеЛица.ФормаОбъекта", ПараметрыФормы, ЭтаФорма,,,, ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс );

Далее в модуле объекта контактные лица
процедура ОбработкаЗаполнения()

И все прекрасно работает. И не дай вам бог вместо КИ написать КонтактнаяИнформация. Получите еще три тонны гемороя себе на голову. Всем спасибо. Тема закрыта.