|
Программная работа с картинками. | ☑ | ||
---|---|---|---|---|
0
Trimax
13.11.19
✎
12:02
|
Исходные данные: ERP 2.5, Платформа 8.3.13.15. Работаем с расширением.
Задача: Програмно в расширении добавить поле с выбором картинки логотипа контрагента. В расширении общие модули. &Перед("ПриСозданииНаСервере") Процедура АБ_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) "Наковырял" код ... Если Форма.ИмяФормы = "Справочник.Партнеры.Форма.ФормаЭлементаРеквизитыКонтрагента" Тогда ДобавляемыеРеквизиты = Новый Массив; РеквизитСсылкаНаКартинку = Новый РеквизитФормы("СсылкаНаКартинку", Новый ОписаниеТипов("Строка"), , "СсылкаНаКартинку"); ДобавляемыеРеквизиты.Добавить(РеквизитСсылкаНаКартинку); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); Элементы = Форма.Элементы; ПолеФормы = Элементы.Добавить("СсылкаНаКартинку", Тип("ПолеФормы"), Элементы.ГруппаОбщаяИнформация); ПолеФормы.Вид = ВидПоляФормы.ПолеКартинки; ПолеФормы.Заголовок= "Логотип"; ПолеФормы.ПутьКДанным="СсылкаНаКартинку"; ПолеФормы.Доступность= Истина; ПолеФормы.Видимость = ИСТИНА; ПолеФормы.Гиперссылка=Истина; ПолеФормы.ТолькоПросмотр = Ложь; ПолеФормы.УстановитьДействие("Нажатие", "СсылкаНаКартинкуНажатие"); КонецЕсли; .... Так вот "нажатие" не отрабатывает в процедуру. Т.е выдает стандартное окно "". Подскажите, где ошибка. |
|||
1
mikecool
13.11.19
✎
12:12
|
емнип, действие надо на стороне клиента устанавливать
|
|||
2
Trimax
13.11.19
✎
14:10
|
(1) Подскажи, как направить на сторону клиента, не вытаскивая форму в расширение.Что дописать. Или дай, пжалуста ссылку где почитать.
|
|||
3
Trimax
13.11.19
✎
14:30
|
Вот, что в основном пишут в интернетах
..... Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = «Покупатель»; Назначение элементу формы обработчика события: ЭлементПокупатель.УстановитьДействие(«ПриИзменении», «Подключаемый_ПокупательПриИзменении»); &НаКлиенте Процедура Подключаемый_ПокупательПриИзменении(Элемент) // Действия события КонецПроцедуры Т.е Установитьдействие указывается при создании элемента на сервере и прописывается передача на клиент. Вроде как похоже, но есть мааленький ньюанс: тут указан вид элемента ПолеВВода, а у меня строка. Может где-то тут собака порылась? |
|||
4
spiller26
13.11.19
✎
14:32
|
(3) Размести элемент без расширения на тестовой и смотри, что у как.
|
|||
5
spiller26
13.11.19
✎
14:44
|
1. Тебе нужно новый реквизит на форме (тип строка)
2. Разместить Поле для этого реквизита на форме 3. Добавить событие для этого поля 4. Обработчик события написать Так в помощь, на сервере вытаскивает картинку &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) абтСсылкаПодписьВДокументах = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "абтПодписьВДокументах"); |
|||
6
Trimax
13.11.19
✎
14:49
|
(5) Первый и второй пункты имеются в наличии. В ыорме появляется нужное мне поле с нужным реквизитом. Затык с п.3. Как описать событие?
Т.е. ПолеФормы.УстановитьДействие("Нажатие", "СсылкаНаКартинкуНажатие"); не работает и без ошибок. |
|||
7
Trimax
13.11.19
✎
14:52
|
+6 по замыслу при нажатии на поле должна открыть выбор картинки согласно процедуре.
&НаКлиенте Процедура СсылкаНаКартинкуНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытия.ПолноеИмяФайла = ""; Фильтр = "Файл Jpg (*.jpg)|*.jpg"; ДиалогОткрытия.Фильтр = Фильтр; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберете файл для загрузки"; ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗагрузкиФайла",ЭтаФорма); ДиалогОткрытия.Показать(ОписаниеОповещения); КонецПроцедуры Но она не попадает в эту процедуру вообще. Выплывает окно 1С "". |
|||
8
spiller26
13.11.19
✎
14:58
|
(7) Я делал так, но это в Документообороте
&НаКлиенте Процедура абтДобавитьИзображениеНаКлиенте() ПараметрыОписания = Новый Структура("АдресВременногоХранилищаФайла", ""); ОписаниеОповещения = Новый ОписаниеОповещения( "абтДобавитьИзображениеНаКлиентеЗавершение", ЭтотОбъект, ПараметрыОписания); Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда ТекстВопроса = НСтр("ru = 'Для выбора изображения необходимо записать объект. Записать?'"); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.Да); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура абтДобавитьИзображениеНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда Записать(); Иначе Возврат; КонецЕсли; //Если Не ЕстьКартинка И ЗначениеЗаполнено(Объект.Ссылка) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) Тогда Если Не ЕстьПравоРедактирования Тогда ТекстИсключения = НСтр("ru = 'Нарушение прав доступа!'"); ВызватьИсключение ТекстИсключения; КонецЕсли; ОписаниеОповещения = Новый ОписаниеОповещения( "абтВыборКартинкиПродолжение", ЭтотОбъект, ДополнительныеПараметры); ФайловыеФункцииКлиент.ВыбратьКартинкуИПоместитьВХранилище( ОписаниеОповещения, УникальныйИдентификатор,, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура абтВыборКартинкиПродолжение(Результат, Параметры) Экспорт Если Результат <> Истина Тогда Возврат; КонецЕсли; абтСсылкаПодписьВДокументах = Параметры.АдресВременногоХранилищаФайла; Модифицированность = Истина; КонецПроцедуры |
|||
9
Trimax
13.11.19
✎
15:06
|
(8) Да это уже следующий шаг процедуры выбора картинки... Мне сейчас необходимо вообще создать "что-то", что-бы при нажатии на форму элемента, уходило в процедуру. А сейчас у меня выскакивает стандартное окно.
|
|||
10
spiller26
13.11.19
✎
15:14
|
(9) В процедуру попадает "СсылкаНаКартинкуНажатие"?
|
|||
11
Trimax
13.11.19
✎
15:16
|
(10) Нет! В этом и затык. Хоть на сервере объявлял, хоть на клиенте. Просто не попадает.
|
|||
12
Trimax
13.11.19
✎
15:20
|
Хм. Решил "извратится по-полной". Добавил кнопку програмно.
Кмд = Форма.Команды.Добавить("Команда1"); Кмд.Действие = "АБ_СсылкаНаКартинкуНажатие"; Кмд.Заголовок = "Нажатие кнопки"; Элемент2 = Форма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"), Форма.Элементы.ГруппаОбщаяИнформация); Элемент2.Вид = ВидКнопкиФормы.ОбычнаяКнопка; Элемент2.ИмяКоманды = "Команда1"; Эффект тот-же. "0". Жмякаешь и ни чего не открывается. Может есть какая-то стандартная процедура выбора картинки. |
|||
13
spiller26
13.11.19
✎
17:35
|
Вот наваял.
https://prnt.sc/pwfi1h []В расширение кидаем ОбщМодуль.УправлениеСвойствами - В модуле прописываем. /////////////////////////////////////////////////////////////////////////////////////////// &После("ПриСозданииНаСервере") Процедура Расш1_ПриСозданииНаСервере(Форма, ДополнительныеПараметры = Неопределено) Экспорт Если Форма.ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда ДобавляемыеРеквизиты = Новый Массив; РеквизитСсылкаНаКартинку = Новый РеквизитФормы("Расш1_Логотип", Новый ОписаниеТипов("Строка"), , "Расш1_Логотип"); ДобавляемыеРеквизиты.Добавить(РеквизитСсылкаНаКартинку); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); ЭлементКартинка = Форма.Элементы.Добавить("Расш1_Логотип", Тип("ПолеФормы"),); ЭлементКартинка.Вид = ВидПоляФормы.ПолеКартинки; ЭлементКартинка.ПутьКДанным = "Расш1_Логотип"; ЭлементКартинка.Гиперссылка = Истина; ЭлементКартинка.УстановитьДействие("Нажатие", "Расш1_Поле1НажатиеВместо"); КонецЕсли; КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////////// [] Справочники.Контрагенты: - Добавляем реквизит "Расш1_Логотип" (тип ХранилищеЗначений) - кидаем "ФормуЭлемента", убираем всё лишнее. В модуле прописываем ////////////////////////////////////////////////////////////////////////////////////////////////// &НаКлиенте Процедура Расш1_Поле1НажатиеВместо(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОписаниеОповещения = Новый ОписаниеОповещения("Расш1_ОбработатьВыборФайлаКартинки", ЭтаФорма); ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.Фильтр = "Файлы картинка (*.jpg) |*.jpg"; ДиалогОткрытияФайла.Заголовок = "Выберете файл для загрузки"; ДиалогОткрытияФайла.ПредварительныйПросмотр = Ложь; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Расширение = "jpg"; НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура Расш1_ОбработатьВыборФайлаКартинки(ПомещенныеФайлы, ДопПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Расш1_Логотип = ПомещенныеФайлы[0].Хранение; Модифицированность = Истина; КонецПроцедуры // () /////////////////////////////////////////////////////////////////////////////////////////// Получаем https://prnt.sc/pwfoyt Итог https://prnt.sc/pwfq46 |
|||
14
Trimax
14.11.19
✎
08:24
|
(13) Огромное спасибо от души!!! Сейчас буду пробовать. Уточняющий вопрос. Форму обязательно кидать в расширение? Ибо смысл был не добавлять форму в расширение, т.к. она тащит за собой все реквизиты.
|
|||
15
spiller26
14.11.19
✎
10:23
|
(14) Форму обязательно, т.к. события нужно в модуле формы писать.
Убери их из расширения, должно получится как на картинке, без лишнего всего. На самой форме всё равно ничего добавлять не будешь (уже в общем описано добавление будет), только будет задействован модуль формы. |
|||
16
spiller26
14.11.19
✎
10:30
|
Вот выгрузил расширение. Делал в БП 3.0.73.46
https://yadi.sk/d/daXgM8HJZ9RXYw |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |