Имя: Пароль:
1C
1С v8
Выбрать файл картинки и установить реквизит в модуле команды
0 vdeemer
 
09.08.21
14:34
Добрый день!
Необходимо из формы объекта вызвать команду, которая выбирает файл логотипа и записывает его в реквизит.
Создаю команду, в ее модуле начинаю писать:

СтрокаФильтра = "Файлы картинок|*.BMP;*.DIB;*.RLE;*.JPG;*.JPEG;*.TIF;*.GIF;*.PNG;*.ICO;*.WMF;*.EMF";
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов("Выберите файлы логотипа компании для учетной карточки", Ложь, СтрокаФильтра);
НачатьПомещениеФайловНаСервер(Новый ОписаниеОповещения("ЗавершениеВыбораФайлов", ПараметрыВыполненияКоманды.Источник, Новый Структура("СсылкаОрганизации", ПараметрКоманды)),,,ПараметрыДиалога, ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор);


&НаКлиенте
Процедура ЗавершениеВыбораФайлов(ОписаниеФайла, ДополнительныеПараметры) Экспорт
...
КонецПроцедуры


Все хорошо, но при запуске выдается ошибка: Не найден экспортируемый метод: ЗавершениеВыбораФайлов.
Я так понимаю, этот метод нужен в модуле формы? Если да, то это не мой вариант( Как можно решить задачу по-другому?
1 Мультук
 
гуру
09.08.21
14:41
(0) Кто такой "объект" ? Справочник Контрагенты? Возможно стоит положить этот файл в его "присоединенные файлы" ?
2 vdeemer
 
09.08.21
14:45
(1) Нет, увы. И присоединенных файлов там нет, дважды увы((
3 Kassern
 
09.08.21
14:50
(0) "и установить реквизит в модуле команды"...Я правильно понимаю, вам нужно картинку в базу записать привязав к какому нить объекту?
4 vdeemer
 
09.08.21
14:51
(3) Да, в параметр команды передается ссылка элемента справочника
5 Kassern
 
09.08.21
14:55
(4) конфигурация какая?
6 vdeemer
 
09.08.21
14:56
(5) Управление учебным центром, но доработка в расширении
7 Kassern
 
09.08.21
14:58
(6) такую конфу не знаю, но обычно все просто реализуется. Картинка либо хранится в базе 1с в двоичных данных (поле с типом хранилище значений) либо внешне на диске, а в 1с лишь путь до картинки.
8 Kassern
 
09.08.21
14:59
(7) для разных объектов создают свой справочник для хранения картинок.
9 acht
 
09.08.21
15:03
(0) > НачатьПомещениеФайловНаСервер(Новый ОписаниеОповещения("ЗавершениеВыбораФайлов", ПараметрыВыполненияКоманды.Источник, Новый Структура("СсылкаОрганизации", ПараметрКоманды)),,,ПараметрыДиалога, ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор);

Оно, конечно, если писать все в одну строчку, быстрее работает. Но такая херня получается.
Какие параметры должны быть у конструктора оповещения?
10 vdeemer
 
09.08.21
15:13
(8) В расширении добавлен реквизит ХранилищеЗначения для логотипа
(9) Вызвавшая форма и доп.параметры, в них я передаю ссылку на элемент справочника
11 Kassern
 
09.08.21
15:18
(10) ну и в чем проблема? Не можете туда файл записать? Файл надеюсь сервер видит, или хотя бы вы его Двоичные данные с клиента через временное хранилище на сервер передали?
12 vdeemer
 
09.08.21
15:21
(11) Проблема в том, что при запуске команды не найден экспортируемый метод, указанный в оповещении "ЗавершениеВыбораФайлов". Это, собственно, (0).
13 Kassern
 
09.08.21
15:22
(12) а без этой команды записать файл в хранилище никак?
14 Kassern
 
09.08.21
15:23
(12) и неужели в конфе нет вообще никаких объектов типовых для хранения картинок? Если есть то посмотрите как там реализована запись картинки в базу и сделайте по аналогии.
15 vdeemer
 
09.08.21
15:25
(13) Возможно, как. Только это был второй вопрос))
16 vdeemer
 
09.08.21
15:27
(14) Если иметь форму, откуда вызывать команду (например, свою обработку), то без проблем. Хочется сделать кнопкой команды в форме объекта, чтобы не лепить отдельную обработку для этого.
17 Kassern
 
09.08.21
15:35
(15) очень просто, создаем объект, куда хотим записать картинку, указываем ему имя, расширение, размер файла, владельца, помещаем наш файл в Двоичные данные, и эти данные запихиваем в хранилище значений реквизита объекта. Записываем полученный объект и вуаля, все готово. В дальнейшем, получаем по владельцу нужный объект с картинкой, из хранилища достаем ДД и выводим куда надо.
18 vdeemer
 
09.08.21
15:39
(17) В ЗавершениеВыбораФайлов это все у меня есть. Этого метода не видно, из-за этого (0)
19 runoff_runoff
 
09.08.21
15:42
Новый ОписаниеОповещения("ЗавершениеВыбораФайлов", ПараметрыВыполненияКоманды.Источник...
так вот за это "ПараметрыВыполненияКоманды.Источник" с учетом "Создаю команду, в ее модуле начинаю писать" УВОЛЕН сразу же..
20 Kassern
 
09.08.21
15:49
(18) не можете одолеть "НачатьПомещениеФайловНаСервер", то попробуйте ДиалогВыбораФайла, если файл выбран, тогда получаем ДД из файла на клиенте и ПоместитьВоВременноеХранилище. Создаем серверную процедуру куда передаем адрес во временном хранилище. Далее по нему уже на сервере получаем ДД и записываем во временный файл.
21 vdeemer
 
09.08.21
16:38
(19) я могу написать "за УВОЛЕН сразу же.." посылаю далеко и надолго, и? Если можете поделиться мудрым и вечным, с удовольствием буду внимать, а не можете - так и молодым у нас везде туда им и дорога.
(20) тонкости работы с временным хранилищем мне знакомы, спасибо, все дело в том, можно ли экспортируемый метод искать в модуле команды.
22 vdeemer
 
09.08.21
16:47
(20) Это тоже не сработает, потому что для оповещения нужен экспортируемый метод, а он искаться будет там же (не в модуле команды).
23 Kassern
 
09.08.21
16:51
(22) а где вы в моем примере видите оповещение?
Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыбранФайл=Диалог.Выбрать();
    Если ВыбранФайл Тогда
        Файл=Новый Файл(Диалог.ПолноеИмяФайла);
        ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
        Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
        ЗагрузитьФайлНаСервере(Адрес,Файл.Расширение);
    КонецЕсли;
24 Kassern
 
09.08.21
16:52
(23) а на сервере в процедуре ЗагрузитьФайлНаСервере получаем временный файл и в него записываем ДД из временного хранилища
25 runoff_runoff
 
09.08.21
17:15
(21) ЭтотОбъект
26 vdeemer
 
10.08.21
07:56
(23) Это синхронный вызов, низзя
(25) А чем плох ПараметрыВыполненияКоманды.Источник? На ИТС (https://its.1c.ru/db/metod8dev/content/3585/hdoc) обработчик команды этим пользуется
27 ДенисЧ
 
10.08.21
08:00
(26) Замени в (23)
ВыбранФайл=Диалог.Выбрать();
на ВыбранФайл= ждать Диалог.ВыбратьАсинх();
28 vdeemer
 
10.08.21
08:04
(27) дык платформа нужна свежая, кругом засада((
AdBlock убивает бесплатный контент. 1Сергей