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