Имя: Пароль:
1C
 
Открытие формы не записанного элемента 8.3
,
0 AlexToo
 
28.06.16
07:59
Добрый день, конфа 1C:CRM, редакция 2.0 управляемые формы, нужно при звонке от клиента открывать форму этого клиент если он нашелся в базе по номеру телефона (с этим проблем нет), а вот если не нашли его по номеру телефона, тогда нужно открывать пустую форму создания нового контрагента, но в поле телефон уже должен быть вбит номер телефона с которого звонят. И вот тут - то как раз проблема т.к. номера телефонов хранятся в табличной части самого справочника контрагенты, а на форме не табличная часть, а поле ввода. И когда я программно заполняю табличную часть в отладке вижу что она заполнена, но в открытой форме ничего нет. Куда копать?
Сама форма: http://rgho.st/645wxrsxb.view
Ы конфигураторе: http://rgho.st/796hyxNlp.view
1 RomaH
 
naïve
28.06.16
08:10
телефон когда заполняешь?
2 AlexToo
 
28.06.16
08:13
(1) перед открытием формы, добавляю его в табличную часть.
вот код:
ФормаКонтакта=ПолучитьФорму("Справочник.Партнеры.Форма.CRM_ФормаЭлемента1",ПараметрыФормы,ЭтаФорма,Истина);
        Телефон=Прав(ДополнительныеПараметры.НомерТелефона, 10);
        ДанныеФормы = ФормаКонтакта.Объект;
        ЗаполнитьСправочникНаСервере(ДанныеФормы, Телефон);
        КопироватьДанныеФормы(ДанныеФормы, ФормаКонтакта.объект);
ФормаКонтакта.открыть();

Функция ЗаполнитьСправочникНаСервере(ДанныеФормы, телефон);

Спр = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Партнеры")); // Получаем объект из данных формы ИЛИ

Спр = Справочники.Партнеры.СоздатьЭлемент();

// Заполняем реквизиты объекта или другие действия ********
    
    СтрокаТелефон        = спр.КонтактнаяИнформация.Добавить();
    СтрокаТелефон.Тип    =Перечисления.ТипыКонтактнойИнформации.Телефон;
    СтруктураНомера        = сфпСофтФонПроСервер.сфпЗаполнитьСтруктуруПолейПоПредставлениюТелефон(Телефон);
    СтрокаТелефон.Вид    = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера;
    СтрокаТелефон.НомерТелефона            = Телефон;
    СтрокаТелефон.НомерТелефонаБезКодов    = СтруктураНомера.НомерТелефона;
    Если ЗначениеЗаполнено(СтруктураНомера.КодГорода) Тогда
        СтрокаТелефон.Представление    = СтруктураНомера.КодСтраны + " (" + СтруктураНомера.КодГорода + ") " + СтруктураНомера.НомерТелефона;
    Иначе    
        СтрокаТелефон.Представление    = Телефон;
    КонецЕсли;    
    ЗначенияПолей    = Новый СписокЗначений;
    ЗначенияПолей.Добавить(СтруктураНомера.КодСтраны,        "КодСтраны");
    ЗначенияПолей.Добавить(СтруктураНомера.КодГорода,        "КодГорода");
    ЗначенияПолей.Добавить(СтруктураНомера.НомерТелефона,    "НомерТелефона");
    СтрокаТелефон.ЗначенияПолей    = ЗначенияПолей;


ЗначениеВДанныеФормы(Спр,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ

КонецФункции
3 Cyberhawk
 
28.06.16
08:15
ОткрытьФорму + ОбработкаЗаполнения
4 AlexToo
 
28.06.16
08:18
(3) в смысле? в форме справочника прописать обработку заполнения?
5 RomaH
 
naïve
28.06.16
08:23
ФормаКонтакта=ПолучитьФорму("Справочник.Партнеры.Форма.CRM_ФормаЭлемента1",ПараметрыФормы,ЭтаФорма,Истина);

вот тут вроде как "ПриСозданииНаСервере" отрабатывает - где как раз и создаются элементы КИ

т.е. телефон тебе надо перед созданием формы заполнить

создай объект - заполни и передай его в форму  Новый Структура("Ключ", ...)
6 AlexToo
 
28.06.16
08:42
(5) тож не получается, делаю так:
&Наклиенте
Телефон=Прав(ДополнительныеПараметры.НомерТелефона, 10);
ПараметрыФормы= ЗаполнитьСправочникНаСервере(Телефон);
ФормаКонтакта=ПолучитьФорму("Справочник.Партнеры.Форма.CRM_ФормаЭлемента1",ПараметрыФормы,ЭтаФорма,Истина);

Функция ЗаполнитьСправочникНаСервере(телефон);

//Спр = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Партнеры")); // Получаем объект из данных формы ИЛИ

Спр = Справочники.Партнеры.СоздатьЭлемент();

// Заполняем реквизиты объекта или другие действия ********
    
    СтрокаТелефон        = спр.КонтактнаяИнформация.Добавить();
    СтрокаТелефон.Тип    =Перечисления.ТипыКонтактнойИнформации.Телефон;
    СтруктураНомера        = сфпСофтФонПроСервер.сфпЗаполнитьСтруктуруПолейПоПредставлениюТелефон(Телефон);
    СтрокаТелефон.Вид    = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера;
    СтрокаТелефон.НомерТелефона            = Телефон;
    СтрокаТелефон.НомерТелефонаБезКодов    = СтруктураНомера.НомерТелефона;
    Если ЗначениеЗаполнено(СтруктураНомера.КодГорода) Тогда
        СтрокаТелефон.Представление    = СтруктураНомера.КодСтраны + " (" + СтруктураНомера.КодГорода + ") " + СтруктураНомера.НомерТелефона;
    Иначе    
        СтрокаТелефон.Представление    = Телефон;
    КонецЕсли;    
    ЗначенияПолей    = Новый СписокЗначений;
    ЗначенияПолей.Добавить(СтруктураНомера.КодСтраны,        "КодСтраны");
    ЗначенияПолей.Добавить(СтруктураНомера.КодГорода,        "КодГорода");
    ЗначенияПолей.Добавить(СтруктураНомера.НомерТелефона,    "НомерТелефона");
    СтрокаТелефон.ЗначенияПолей    = ЗначенияПолей;
    
    структура=Новый  Структура("Ключ", спр);
    Возврат структура;

//ЗначениеВДанныеФормы(Спр,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ

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

Выходит ошибка про возврате структуры из функции:
{Обработка.сфпСофтФонВнешняяПанель.Форма.Форма.Форма(902)}: Ошибка при вызове метода контекста (ЗаполнитьСправочникНаСервере)
        ПараметрыФормы= ЗаполнитьСправочникНаСервере(Телефон);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Value    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}IsFolder    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
7 Mankubus
 
28.06.16
08:43
(4) ОбработкаЗаполнения в модуле объекта
8 AlexToo
 
28.06.16
08:51
(7) делал так, не получается т.к. при получении формы идет ПриСозданииНаСервере там как раз устанавливается видимость всех этих элементов, а всё что после заполняю на форме уже не отображается. Надо действительно создавать объект до получения формы, но в таком случае, что бы созданный объект передать форме мне нужно его записать. А этого нельзя делать, пользователь сам должен решишь сохранять или нет
9 Fedor-1971
 
28.06.16
08:57
(8) По ходу ты сам запутался в своих мыслях:
Телефон=Прав(ДополнительныеПараметры.НомерТелефона, 10);
ПараметрыФормы= новый Структура ("ТелефонЗвонящего", ЗаполнитьСправочникНаСервере(Телефон)); - не прямая передача, а структура с намименованием, по которому в теле ПриСозданииНаСервере можно получить значение
ОткрытьФорму("Справочник.Партнеры.Форма.CRM_ФормаЭлемента1",ПараметрыФормы,ЭтаФорма,Истина); - просто открывай, зачем тебе получать форму, если всё что нужно можно отправить ей в параметрах и заполнить по месту?
10 Fedor-1971
 
28.06.16
09:00
9+ структура=Новый  Структура("Ключ", спр) - Что ты собственно возвращаешь если спр ещё не записан?
11 AlexToo
 
28.06.16
09:01
(9) объясните пожалуйста вот этот момент:
ПараметрыФормы= новый Структура ("ТелефонЗвонящего", ЗаполнитьСправочникНаСервере(Телефон));

Дело в том, что телефоны в табличной части, я по ходу не догоняю что должно быть в структуре "ПарамертыФормы", в качестве "ключа" структуры должен быть конкретный реквизит?
12 AlexToo
 
28.06.16
09:02
(10) да я уж понял, что фигню возвращаю, щас вот и разбираюсь
13 RomaH
 
naïve
28.06.16
09:16
(11) нет - ты переданную структуру должен обработать в "ОбработкаЗаполнения в модуле объекта"

типа Если ДанныыеЗаполнения.Свойство("Телефон") Тогда
14 RomaH
 
naïve
28.06.16
09:18
еще вариант - после создания формы и добавления телефона продублировать механизмы формы по работе с контактной
15 Fedor-1971
 
28.06.16
09:22
(11) Ключ - это ссылка, данными объекта которой будет заполнена форма. А у тебя её нет, так что либо пробуй как в (13), либо обработай параметр в ПриСозданииНаСервере.
16 AlexToo
 
28.06.16
09:43
(13) передаю я в параметрах формы телефон, при методе ОткрытьФорму попадаю в модуль объекта справочника в процедуру ОбработкаЗаполнения, но ДанныеЗаполнения равно Неопределенно, хотя при открытии передавал структуру, что опять не так делаю?

Телефон=Прав(ДополнительныеПараметры.НомерТелефона, 10);
        ПараметрыФормы= новый Структура ("Телефон", Телефон);
        ОткрытьФорму("Справочник.Партнеры.Форма.CRM_ФормаЭлемента1", ПараметрыФормы, ЭтаФорма, Истина);
17 AlexToo
 
28.06.16
09:49
(14) так тоже пробовал не срабатывает
18 RomaH
 
naïve
28.06.16
09:51
Новый Структура("ЗначенияЗаполнения",новый Структура ("Телефон", Телефон));
19 AlexToo
 
28.06.16
09:59
(18) О БОГИ! Оно работает, Спасибо Вам люди
2 + 2 = 3.9999999999999999999999999999999...