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