|   |   | 
| 
 | Открытие формы не записанного элемента 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) О БОГИ! Оно работает, Спасибо Вам люди     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |