Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 05:39

Работа с графической схемой

Автор Алексей_1985_06, Вчера в 16:20

0 Пользователей и 2 гостей просматривают эту тему.

Алексей_1985_06

Всем привет! Помогите решить задачу:

Есть справочник с объектами при открытии которого необходимо показывать актуальную графическую схему этого объекта. (В последсвии думаю создать РС который будет эти схемы хранить). Что сделал сейчас:
1. Создал справочник "Графические схемы" в котором есть реквизит "ГрафСхема" с типом ГрафическаяСхема и реквизит формы АдресВХранилища. Кодом ниже помещаю выбранную грифическую схему во Временное хранилище. И все тут мои познания закончились! Подскажите как мне теперь отобразить эту схему на форме в реквизите(по аналогии с фото, где в реквизите формы с типом строка помещается адрес ВХ) ?


&НаКлиенте
Процедура ОтобразитьСхему(Команда)

ПоместитьФайлВоВХ();
   
КонецПроцедуры


   &НаКлиенте
Асинх Процедура ПоместитьФайлВоВХ()

ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов();   
ПараметрыДиалога.Заголовок = "Выберите графическую схеиу";
ПараметрыДиалога.МножественныйВыбор = Ложь;
ПараметрыДиалога.Фильтр = "Графические схемы (*.grs)|*.grs|Все файлы (*.*)|*.*";

ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога,УникальныйИдентификатор);

Если ОписаниеФайла <> Неопределено Тогда   
АдресВХранилища = ОписаниеФайла.Адрес;
КонецЕсли;

КонецПроцедуры

Максим75


Алексей_1985_06

Максим75, Да, как раз-таки эту статью и взял за основу, но там не написано как отобразить схему на форме, при помещении ее во временное хранилище....

Максим75

Алексей_1985_06, там в самом начале написано, что мы научились там чего-то выводить на форму. надо просто полистать предыдущие статьи, которые фото товаров или чего-то выводят. смысл такой же.

Алексей_1985_06

Максим75, Можете подсказать, ну ни как не могу понять что не так, не отображается схема, хоть тресни....

   
&НаКлиенте
Процедура ОтобразитьСхему(Команда)
ПоместитьФайлВоВХ(); // Процедура которая помещает файл во Временное Хранилище
КонецПроцедуры

   &НаКлиенте
Асинх Процедура ПоместитьФайлВоВХ()

ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов();   
ПараметрыДиалога.Заголовок = "Выберите графическую схему";
ПараметрыДиалога.МножественныйВыбор = Ложь;
ПараметрыДиалога.Фильтр = "Графические схемы (*.grs)|*.grs|Все файлы (*.*)|*.*";

ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога,УникальныйИдентификатор);

Если ОписаниеФайла <> Неопределено Тогда   
АдресВХранилища = ОписаниеФайла.Адрес; // АдресВХранилища - реквизит формы
КонецЕсли;

КонецПроцедуры
      
           

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ЭтоАдресВременногоХранилища(АдресВХранилища) Тогда

ДвоичныеДанные = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХранилища)); // Получим двоичные данные
// Запись в РегистрСведений
РегСведений = РегистрыСведений.ГрафическиеСхемы.СоздатьНаборЗаписей();
РегСведений.Отбор.Наименование.Установить (ТекущийОбъект.Ссылка);
НоваяЗапись = РегСведений.Добавить();
НоваяЗапись.Наименование = ТекущийОбъект.Ссылка;
НоваяЗапись.ГрафическаяСхема = ДвоичныеДанные;
        РегСведений.Записать();
КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

РегистрСвед = РегистрыСведений.ГрафическиеСхемы.СоздатьНаборЗаписей(); // Набор записей
РегистрСвед.Отбор.Наименование.Установить(Объект.Ссылка);              // Отбор записей
РегистрСвед.Прочитать();                                               // Прочитаем набор записей

Для Каждого Запись ИЗ РегистрСвед Цикл
ДвоичныеДанныеИзРегистра = Запись.ГрафическаяСхема.Получить(); // Получим двоичные данные из реквизита РС с типом ХЗ
КонецЦикла;

// Интуитивно думаю что ниже в данном коде что-то не так.......

АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеИзРегистра, УникальныйИдентификатор); 
АдресВХранилища = АдресВоВременномХранилище;

ГрафическаяСхема = ДвоичныеДанныеИзРегистра;

КонецПроцедуры


Алексей_1985_06

Цитата: Алексей_1985_06 от Вчера в 19:36Максим75, Можете подсказать, ну ни как не могу понять что не так, не отображается схема, хоть тресни....

   
&НаКлиенте
Процедура ОтобразитьСхему(Команда)
ПоместитьФайлВоВХ(); // Процедура которая помещает файл во Временное Хранилище
КонецПроцедуры

   &НаКлиенте
Асинх Процедура ПоместитьФайлВоВХ()

ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов();   
ПараметрыДиалога.Заголовок = "Выберите графическую схему";
ПараметрыДиалога.МножественныйВыбор = Ложь;
ПараметрыДиалога.Фильтр = "Графические схемы (*.grs)|*.grs|Все файлы (*.*)|*.*";

ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога,УникальныйИдентификатор);

Если ОписаниеФайла <> Неопределено Тогда   
АдресВХранилища = ОписаниеФайла.Адрес; // АдресВХранилища - реквизит формы
КонецЕсли;

КонецПроцедуры
      
           

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ЭтоАдресВременногоХранилища(АдресВХранилища) Тогда

ДвоичныеДанные = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХранилища)); // Получим двоичные данные
// Запись в РегистрСведений
РегСведений = РегистрыСведений.ГрафическиеСхемы.СоздатьНаборЗаписей();
РегСведений.Отбор.Наименование.Установить (ТекущийОбъект.Ссылка);
НоваяЗапись = РегСведений.Добавить();
НоваяЗапись.Наименование = ТекущийОбъект.Ссылка;
НоваяЗапись.ГрафическаяСхема = ДвоичныеДанные;
        РегСведений.Записать();
КонецЕсли;

КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

РегистрСвед = РегистрыСведений.ГрафическиеСхемы.СоздатьНаборЗаписей(); // Набор записей
РегистрСвед.Отбор.Наименование.Установить(Объект.Ссылка);              // Отбор записей
РегистрСвед.Прочитать();                                               // Прочитаем набор записей

Для Каждого Запись ИЗ РегистрСвед Цикл
ДвоичныеДанныеИзРегистра = Запись.ГрафическаяСхема.Получить(); // Получим двоичные данные из реквизита РС с типом ХЗ
КонецЦикла;

// Интуитивно думаю что ниже в данном коде что-то не так.......

АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеИзРегистра, УникальныйИдентификатор); 
АдресВХранилища = АдресВоВременномХранилище;

ГрафическаяСхема = ДвоичныеДанныеИзРегистра;

КонецПроцедуры




Вот так работает но в режиме использования модальности:

&НаКлиенте
Процедура Отобразить(Команда)

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок ="Выбрать схему из файла";
Диалог.Фильтр ="Графические схемы (*.grs)|*.grs|Все файлы (*.*)|*.*";
Диалог.ИндексФильтра =0;
Диалог.МножественныйВыбор =ложь;
Диалог.Расширение ="grs";

Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
 

ГрафическаяСхема.Прочитать(Диалог.ВыбранныеФайлы[0]);

КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск