Имя: Пароль:
1C
 
Сохранить список фотографий для элемента справочника
0 dimm7310
 
26.03.08
12:26
Необходимо в справочнике для каждого элемента добавить возможность созранения нескольких фото.
Вроде нашел рекомендации по этому вопросу , но что-то вываливается ошибка.
Рекомендовано:
"Создадим в справочнике "Какой-то" табличную часть "Файлы" с реквизитами "ИмяФайла" (Строка, 256) и "Файл" (ХранилищеЗначения). На форме элемента справочника "Какой-то" разместим табличное поле, ссылающееся на табличную часть "Файлы". Колонку "Файл" (реквизит табличной части) визуально выводить не надо
Загрузка и сохранение файла в базе (по какой-нибудь кнопке) может выглядеть примерно так:
Код:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для записи в базу данных";
Диалог.Фильтр = "Все файлы (*.*)";
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.ПредварительныйПросмотр = Истина;
Если Диалог.Выбрать() = Ложь Тогда
   Возврат;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);
Файл = Новый Файл(Диалог.ПолноеИмяФайла);
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.ИмяФайла = Файл.Имя;
"

Вроде все так и сделал, добавит табличную часть, на форму вытащил табличное поле для которого в поле "Данные" указал -СправочникОбъект - Файлы. Добавил кнопку с вызовом процедуры.
При попытке добавить выбранный файл вываливается ощибка
"Справочник.Справочник2.Форма.ФормаЭлемента(12)}: Значение не является значением объектного типа (Файл)
   ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);
"

Что делаю не так?
1 ТелепатБот
 
гуру
26.03.08
12:26
2 dimm7310
 
26.03.08
14:19
К сожалению подсказка тепепатбота не помогла.

Кто нибудь подскажет?

В отладчике конструкция
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.Файл
ругается таким же описанием "Значение не является значением объектного типа (Файл)" -что прописано не так?
или может табличное поле связано с таблицей справочника неправильно (как я делал я описал выше)
Пробовал на 8.0.18 и 8.1.6 - релизах ошибка одинаковая.
Прошу сильно не пинать, только начинаю изучать 8-ку, прошу высказываться объективно.
3 dimm7310
 
26.03.08
14:21
в предыдущем посте
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.Файл
нужно читать как
ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.Файл
(разумеется я записал реальное название табличного поля)
4 dimm7310
 
26.03.08
16:05
up
5 dimm7310
 
26.03.08
16:54
Не ужели ни кто не делал?
6 mega_zombie
 
26.03.08
17:04
Открой типовую торговлю - справочник "Номенклатура", например, да и посмотри, как реализовано.
7 dimm7310
 
27.03.08
08:36
Смотрел, там сохраняется только одна картинка, а мне нужно несколько. И там хранилище не в самом справочнике а в планевидовхорактеристик, при том подвязана еще куча всего, короче черт ногу сломит. Сходу через отладчик я всю цепочку так и не понял, просто там по ходу делается при выборе и сохранении еще куча разных движений, которые даже не связаны с выбором картинки, просто в силу своей универсальности.
Не знаю, если никто по этой схеме не подскажет придется копаться снова, просто по этой рекомендации все кратко и ничего лишнего. - Еще бы заработало, ток вообще было бы прекрасно.

Эй гуру восьмерки, отзовись
8 Hadgehogs
 
27.03.08
09:02
Маленький пушистый зверек.
У вас строк в табличной части нет!
Надо либо самому создавать., либо программно
Вот так- это с проверкой

Если ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные=Неопределено Тогда
Сообщить("Добавьте и выберите курсором строку ТЧ, в которую надо картинку сохранить!");
КонецЕсли;



Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для записи в базу данных";
Диалог.Фильтр = "Все файлы (*.*)";
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.ПредварительныйПросмотр = Истина;
Если Диалог.Выбрать() = Ложь Тогда
   Возврат;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);
Файл = Новый Файл(Диалог.ПолноеИмяФайла);
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.ИмяФайла = Файл.Имя;
9 Hadgehogs
 
27.03.08
09:03
Маленький пушистый зверек - это не про вас..

А вот это вообще красиво!

Файл = Новый Файл(Диалог.ПолноеИмяФайла);
ЭлементыФормы.<ИмяТабличногоПоля>.ТекущиеДанные.ИмяФайла = Файл.Имя;
10 dimm7310
 
27.03.08
10:05
(8) Спасибо, вроде заработало
11 Hadgehogs
 
27.03.08
10:08
Ну дык..
12 dimm7310
 
27.03.08
15:11
Еще вопрос: Не удается удалить текущую строку табличтого поля.
Поиском нашел похожий вопрос, там было рекомендовано использовать конструкцию:
ЭлементыФормы.ТабличноеПоле1.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);
Но не работает, пишет:
{Справочник.Справочник2.Форма.ФормаЭлемента(31)}: Метод объекта не обнаружен (Удалить)
   ЭлементыФормы.ТабличноеПоле1.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);
13 Hadgehogs
 
27.03.08
19:03
Если ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока<>Неопределено Тогда
ТабличноеПоле1.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);
КонецЕсли;
14 dimm7310
 
28.03.08
08:51
ошибка
{Справочник.Справочник2.Форма.ФормаЭлемента(44,3)}: Переменная не определена (ТабличноеПоле1)
       <<?>>ТабличноеПоле1.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);

Я проверял через отладчик значение
ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока - определено и доступны все реквизиты
15 iSeRG
 
28.03.08
09:12
(7) вообще то, для номенклатуры можно загрузить много картинок, одна может быть основной. Смотри в панели кнопку "Файлы"
16 dimm7310
 
28.03.08
09:18
Да я уже начал делать так и все устраивает, только с удаление строки разобраться
17 iSeRG
 
28.03.08
09:20
Программно удалять? Стандартной кнопки "Удалить" не достатовчно?
18 dimm7310
 
28.03.08
09:21
да програмно
19 dimm7310
 
28.03.08
09:26
Я пробовал добавлять на панель кнопку удалить, но в интерфейсе пользователя она почему то недоступна, поэтому делаю програмно. Да и на будущее хочется разобраться.
20 dimm7310
 
28.03.08
09:31
Так с доступностью стандартной кнопки разобрался.
Но все же интересно как провильно прописывать програмное удаление
21 iSeRG
 
28.03.08
09:38
Чтобы это работало

ТабличноеПоле1.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);

Необходимо чтобы элемент формы "ТабличноеПоле1" имел данные "ТабличноеПоле1"
Т.е. надо использовать метод удалить того объекта который прописан в данных.
22 dimm7310
 
28.03.08
10:21
"Т.е. надо использовать метод удалить того объекта который прописан в данных"

вот теперь получилось
Файлы.Удалить(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока);
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс