Невозможно определить тип картинки 1с
"Пишу конфу для учета сотовых в СЦ,столкнулся с проблемой вывода картинки изделия на форме справочника воспользовался синтаксис помошником и взял код
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с фотографией";
Диалог.ПолноеИмяФайла = """";
Диалог.ПредварительныйПросмотр = Истина;
Диалог.Фильтр =
"Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf|"
+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
+ "Формат JPEG (*.jpg;*.jpg)|*.jpg;*.jpg|"
+ "Формат TIFF (*.tif)|*.tif|"
+ "Формат GIF (*.jpg)|*.jpg|"
+ "Формат PNG (*.jpg)|*.jpg|"
+ "Формат icon (*.ico)|*.ico|"
+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки
Если Диалог.Выбрать() Тогда
ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
ЭлементыФормы.ПолеИзображения.Картинка = ВыбранноеФото;
Иначе
Отказ = Истина;
Возврат;
КонецЕсли;
Картинка отображается но после записи не сохраняется,может кто подскажет что делать?"
Не знаю как в 8.2, а в 8.1 было 2 варианта:
1. Двинуть картинку в папку на сервер и дать её уникальное имя. Путь сохранить в справочнике и выводить использую эти данные.
2. Через ПолучитьДвоичныеДанные и ХранилищеЗначения сохранить в реквизит справочника. Для вывода использовать обратную процедуру
А если этих картинок будет много то как быть?Возможен такой вариант как в семерке,сейчас точно не помню как пишется но что-то вроде так(каталогИБ\*.jpg\+код+)!
Вопрос не ясен.
Картинку вы уже выбрали. Проблема была в том, что она не сохраняется. Как сохранить - я написал. А что вы пытались сказать - не ясно.
Допустим,я выбираю из справочника уже сохраненную модель телефона а в ПолеКартинка появится не та картинка что я сохранил, как конфа будет выбирать именно эту картинку? ведь при сохранении справочника сохраняется код,наименование и родитель!
> Допустим,я выбираю из справочника уже сохраненную модель телефона а в ПолеКартинка появится не та картинка что я сохранил, как конфа будет выбирать именно эту картинку?
По пути из реквизита или из реквизита восстановив из Хранилища
> ведь при сохранении справочника сохраняется код,наименование и родитель!
А реквизиты по вашему не сохраняются.
"ерем РаботаСФайлами;
Процедура ОсновноеИзображениеНажатие(Элемент)
// Вставить содержимое обработчика.
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл с фотографией";
Диалог.ПолноеИмяФайла = """";
Диалог.ПредварительныйПросмотр = Истина;
Диалог.Фильтр =
"Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpg;*.tif;*.jpg;*.jpg;*.ico;*.wmf;*.emf|"
+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
+ "Формат JPEG (*.jpg;*.jpg)|*.jpg;*.jpg|"
+ "Формат TIFF (*.tif)|*.tif|"
+ "Формат GIF (*.jpg)|*.jpg|"
+ "Формат PNG (*.jpg)|*.jpg|"
+ "Формат icon (*.ico)|*.ico|"
+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки
Если Диалог.Выбрать() Тогда
ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь);
ЭлементыФормы.ОсновноеИзображение.Картинка = ВыбранноеФото;
Иначе
Отказ = Истина;
Возврат;
КонецЕсли;
Хранилище = Новый ХранилищеЗначения(ОсновноеИзображение);
// сохранение значения типа ХранилищеЗначения в базе данных
НовНоменклатура = Справочники.Модель.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван """"Маргарита""""";
// реквизит Изображение имеет тип ХранилищеЗначения
НовНоменклатура.ОсновноеИзображение = ОсновноеИзображение;
НовНоменклатура.Записать();
// выгрузка значения типа ДвоичныеДанные из хранилища значений в файл
ИмяФайла = "C:\Мои документы\Картинка2.bmp";
НовНоменклатура.ОсновноеИзображение.Получить().Записать(ИмяФайла);
КонецПроцедуры
Как из всего это вызвать картинку в поле изображения я не знаю или делаю что-то не то подскажите уже задолбало"
": Значение не является значением объектного типа (Изображение)
Картинка = РегистрСведенийМенеджерЗаписи.Изображение.Получить();
Как это понять?"
В справочнике Номенклатура есть реквизит "ОсновноеИзображение" с типом "ХранилищеЗначения". В нем хранится файл картинки в двоичном коде. Есть необходимость выгрузить файлы изображений. Все картинки с разными типами например GIF или JPG, PNG и т.д. Естественно расширения файлов не сохранены. Как можно определить тип картинки (расширение файла)? Пока есть мысль сохранить во временный файл, затем побайтово прочитать первые N символов и попытаться найти ключевые фразы для каждого типа. Буду рад если ткнете в готовое решение или повернете в нужное направление.
это неестественно, а безалаберно.
В двоичных данных может быть все что душе угодно, поэтому должен быть реквизит, позволяющий определить хоть как-то определять содержимое, имя файла, или его расширение, для дальнейшей работы. Это все контролируется и на совести разработчика. Впрочем, как и вообще само по себе наличие данных в хранилище.
Базу очень легко раздуть до неимоверных размеров, на ровном месте.
А так, да, можно сохранить как текстовую строку, и поиском в ней символов явно из структуры тех или иных файлов, можно определять тип.
А потом сохранять заново, в определенном формате.
Медленно конечно, смотря какие там размеры файлов.
Если этот процесс будет регулярным, а не разовым, то лучше ввести такой признак в справочник номерклатуры, сделать обработку по определению типа файлов, которая пройдет, определит и пропишет расширение в реквизит. Ну и работать с этим будет намного проще.
(5) ipoloskov, ну мы же не знаем, что там у чела за конфа.
В некоторых конфах, и хранилище в сам справочник номенклатуры не пихают, а вынесено в отдельный справочник файлы.
Пусть с архитектурой уж сам заморачивается, где и как хранить эту информацию
Если б я это писал. Конфа не типовая, а от франчев.
Если этот процесс будет регулярным, а не разовым, то лучше ввести такой признак в справочник номенклатуры
Будет не чаще раза-двух в год. Обработка порядка 1000-2000 элементов. Наверное, Вы правы, что стоит завести отдельный реквизит.
Хранить в отдельном реквизите или в хранилище - решайте сами. Хранить сразу в хранилище лучше, имхо, потому что можно впихнуть любую информацию о файле, кроме того не потребуется менять структуру конфигурации. Но для это потребуется переконвертировать все хранящиеся изображения.
(1) ECartman, если правильно писали, то оно должно быть записано в имени картинки. Но если через одно место, то только парсить.
Блин, все разобрался. Надо было просто в синтаксис-помощник заглянуть)))
P.S. Для тех, кому интересно. У типа "Картинка" есть замечательный метод "Формат()", который, собственно, и покажет что за тип картинки. И смех и грех)
(9) ECartman, да интересно.
У картинки то есть, но откуда взяться картинке скажем при обработке справочника ?
Я так понимаю картинка, это декорация формы, либо в макете - куда этот файл необходимо поместить.
Но нам ведь нужно сделать выгрузку..не открывать же для этого форму каждого элемента справочника.
Ты картинку как-то программно создаешь, в нее выводишь файл из хранилища и потом считываешь формат ? А если файл в хранилище будет некартинкой, система переварит ?
В общем, просто покажи код который получился )) Для общего развития, может кому пригодится в будущем.
(10) Boneman, В справочнике "Номенклатура" есть реквизит "ОсновноеИзображение" с типом "ХранилищеЗначения". В него записывается изображение номенклатуры.
Далее имеем простой код
Форма интерактивного изменения изображения записывает в реквизит "ОсновноеИзображение" объект с типом "Картинка". Но если кто-то умудрится туда запихнуть не картинку, то вернется "НеизвестныйФормат" (проверено).
Ну и если у кого-то картинка сохраняется в двоичных данных, то сначала нужно получить из них картинку, потом проверить формат.
Назначение: интерактивное выполнение последовательности преобразований над изображением, получение результата преобразований, сохранение картинки-результата.
Специальные предложения
: Переменная не определена (Нет)
Объект = Обработка.РисоватьПрямоугольник(Объект, 200, 200, 600, 600, >Нет);
(4,70)>
: Переменная не определена (Нет)
Объект = Обработка.РисоватьПрямоугольник(Объект, 200, 200, 600, 600, >Нет);(4,70)>
(2) похоже, на исправление времени не было ;)
то, что мне было нужно я нашел, от меня "+"
я исправил, если хочешь - пришлю, перезальешь.
Столкнулся с такой бидой: необходимо нарисовать план этажа 12-этажного здания в котором куча маленьких офисов а потом показывать еще на етой схеме занятые и свободные помещения. Это реально сделать етой обработкой?
Попробывал данную обработку предыдущая ошибка присутствует,это исправил но никак на получается залить другим цветом, я так понимаю сначала нужно установить цвет заливки а потом рисовать прямоугольник с заливкой, перепробывал все но не получается никак, с установкой толщины линии и цвета таже беда но смысл понял, спс огромное
Еще такой вопрос: если есть рисунок , на котором нарисовано многоугольник с n-количеством углов можем ли мы указав точку которая входит в него залить его фон другим цветом?
(5) angy, скорее всего, нет. Эта обработка - всего лишь обертка над ActiveX объектом, рисующим растровую графику. Можешь попробовать "реализовать" вектор в 1С, т.е. хранить в 1С координаты графических примитивов, и на основании этой информации перерисовывать картинку.
Фигура сложная да и залить ее надо будет, есть идея заменять цвета, но для этого нужно четко знать параметры цвета, если картинка большая то нужно запомнить около 20 цветов а потом заменять на нужный, кстати при выборе цвета не всегда правильно он отображается, (-1,-1,-1) тип такого тогда цвет не меняется а если выставить например (255,1,0) все ок, а так помогла обработка СПАСИБО большое.
Выскакивает ошибка :": Ошибка при вызове метода контекста (Формат)
НомерФорматаКартинки = НомерФорматаКартинки1С(Картинка.Формат());
по причине:
Невозможно определить тип картинки"
ВнешняяОбработка.РаботаСКартинкой.МодульОбъекта(145)>
Просмотры 15926
Загрузки 188
Рейтинг 13
Создание 29.01.10 00:09
Обновление 29.01.10 00:00
№ Публикации 64809
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Альтернативный способ добавления элементов и реквизитов на формы Промо
Предлагаю альтернативный вариант добавления динамически создаваемых элементов и реквизитов на форму.
1 стартмани
09.09.2019 20434 39 bmk74 8
Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)
Как за 10 минут упростить работу с отчётами программистам и пользователям. Добавить ВО ВСЕ ОТЧЁТЫ механизм автоматического выделения текущей строки отчёта (той, на которой установлен курсор). И ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ.
1 стартмани
17.10.2021 5258 6 Патриот 48
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
1 стартмани
31.03.2021 14979 49 Parsec1C 18
Универсальные функции для работы с цветом в 1С
Все на что мы смотрим состоит из цветов в том числе и то, что есть в конфигурациях на 1С :) За время своей работы скопилось достаточно 1С-функций, которые что-то делают с цветом. Это публикация - попытка их систематизировать. Что есть: работа с HEX, HSV, HSL, CMYK представлениями цвета, конвертации из одной системы хранения в другую, работа с каталогами RAL, работа со случайными цветами, контрастные и инверсные цвета, трансформация цветов (осветление, затемнение, градации серого, смешивание цветов), работа с именованными CSS-цветами и т.п. В общем концептуально.
1 стартмани
07.08.2020 7090 18 Diversus 8
Расширенная настройка динамического списка УФ Промо
Открывая управляемую форму выбора и не увидев там видимых в форме списка элементов, часто хочется узнать причину их отсутствия там, т. е. какой наложен отбор. Но стандартная настройка списка управляемой формы показывает только пользовательские настройки, скрывая от пользователя фиксированный отбор. Предлагаю вам расширение конфигурации с расширенной настройкой динамического списка, отображающей пользователю кроме пользовательских настроек еще фиксированные.
1 стартмани
31.05.2017 41726 164 tormozit 25
Делаем из СКД Excel (ну, почти)
Несложный в использовании способ внедрить в обычный отчет СКД возможность редактировать значения ресурсов отчета (а-ля Excel) и получать отредактированные значения для дальнейшей обработки.
1 стартмани
26.01.2020 18501 29 herfis 16
Индикация прогресса выполнения фонового задания на управляемой форме внешней обработки
Внешняя обработка с фоновым выполнением и индикацией процесса для любой конфигурации на основе БСП >= 2.3 без изменения конфигурации и встраивания обработки в "Дополнительные отчеты и обработки".
1 стартмани
27.12.2019 24045 45 1sig 16
Декомпиляция условного оформления
Обработка автоматически генерирует полный код создания условного оформления формы любой сложности. Достаточно настроить для формы в конфигураторе условное оформление, а затем выбрать данную форму в обработке. В результате будет сгенерирован программный код создания условного оформления.
2 стартмани
23.12.2019 13925 62 XilDen 7
Открывашка ячеек таблиц Промо
Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм
1 стартмани
27.10.2018 24736 14 tormozit 38
Многоуровневые списки выбора с оформлением элементов
Данная статья - попытка решить один маленький кусочек большой проблемы платформы 1С, а именно - бедные и невыразительные пользовательские интерфейсы. Поскольку 1С в режиме управляемого приложения позволяет задействовать веб-клиент, то хочется реализовывать интерфейсы как у взрослых веб-приложений - красивые, дружелюбные для пользователя и, желательно, с положительным UX. Возможно, кто-то со мной не согласится и скажет, что учетные системы должны быть строгие и линейные. Но мы все знаем, что 1С - это уже не только про бухгалтерию. Небольшое отступление для разработчиков, работающих с типовыми конфигурациями. Я не знаю, использует ли фирма 1С что-то похожее в своих разработках. Если да, то данная статья навряд ли будет вам полезна.
Я только начинаю программировать на 1С.
Помогите с выводом картинки из хранилища значения на печатную форму.
После прочтения мануалов, создал такой код:
На толстом клиенте получаю ошибку "Несоответствие типов".
Подскажите алгоритм/механизм отображения картинки на печатной форме.
Добавлено через 1 час 17 минут
Please, help me
Вывод картинки на печатную форму
Чтобы при нажатии кнопки Печать картинка отображалась на печатной форме.
Вывод на печатную форму. УТ 11
Здравствуйте, в типовой печатной форме "приходная накладная" ут 11 создал область, параметр, в.
Вывод на печатную форму. УТ 11
Здравствуйте, в типовой печатной форме нужно вывести данные, в табл часть шаблон вставил, в модуле.
Делай на сервере
.
Не выходит
.
Чтото = Объект.Ссылка.ДанныеКартинки.Получить(); // - тут я получаю двоичные данные
(выглядят как 16-ричный код)
,
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ДанныеКартинки"); // тут я получаю ссылку на картинку
(выглядит как то так e1cib/data/Справочник.Люди.ДанныеКартинки?ref=a5fa001bfc1d1b9311e0078de 46a1140 )
Но при присвоении значения
Рисунок.Картинка = Чтото (тип - Двоичные данные) - Несоответствие типов
и
Рисунок.Картинка = СсылкаНаКартинку (ссылка на данные по картинки) - Тоже несоответствие типов
Как же все таки вывести картинку на макет .
Добавлено через 29 минут
При чем если сделать через файл на диске:
То печатает (выводит на форму)
Добавлено через 3 минуты
Урааа , получилось
Надо было вместо пути на диске - подсунуть переменную Чтото
Полученную через
Объект.Ссылка.ДанныеКартинки.Получить();
Вывод на печатную форму текстовое поле
Нужно вывести текстовое поле "Условия" на печатную форму. Нам необходимо выводить на печатную форму.
Вывод картинки на форму
Ситуация такая - в базе хранится картинка в виде ХранилищеЗначения. Мне нужно вывести ее на форму.
Вывод Картинки На Форму
Ситуация такая - в базе хранится картинка в виде ХранилищеЗначения. Мне нужно вывести ее на форму.
Настроить печатную форму
Имеется макет печатной формы и то как он отображается в пользовательском режиме. Мне необходимо.
Вы (или пользователь) работаете в 1С. Вдруг – ошибка. Что делать?
Конечно самое правильное – проанализировать — что за ошибка 1С, ее причины, провести в отладчике 1С часик-другой, чтобы выяснить что к чему.
Что делать, если это невозможно? Нет времени, нет желания, недостаточно знаний. Вот несколько очень вредных советов по быстрому исправлению ошибок в 1С.
-
, в котором произошла ошибка 1С
- Функция этого модуля, в котором произошла ошибка 1С
- Номер строки этого модуля, в котором произошла ошибка 1С.
Также Вы можете нажать на кнопку Конфигуратор, и тогда будет открыт конфигуратор, этот модуль, эта функция на этой строке, после чего Вы можете провести исправление ошибки 1С.
Хитрости понимания ошибок
Как только что было сказано, в тексте ошибки 1С очень часто следствие выполненных ранее неверных действий.
Например, очень распространенный текст ошибки 1С гласит:
Значение не является значением объектного типа (КакоетоИмя)
Что бы это значило.
А это значит следующее:
- Есть переменная
- В программе предполагается, что значение переменной – справочник или документ или что то другое подобное – в общем у него есть реквизиты(поля)
- В программе делается попытка обратиться к полю этого объекта
- Однако ошибка 1С состоит в том, что по какой-то причине в предыдущих строчках программы эта переменная получила значение, у которого нет никаких реквизитов (полей), например значение «Неопределено».
Исправление ошибок 1С, которые чаще встречаются
Конечно же все ошибки, которые могут быть в 1С — мы сейчас рассмотреть не можем.
Попробуем кратко перечислить ошибки 1С, которые бывают часто, а также вредные советы по быстрому исправлению ошибок 1С.
-
Если переменная имеет тип булево (то есть принимает значения Истина и Ложь), то к ней можно обращаться вот так:
Если ИмяПеременной Тогда
Такое написание аналогично:
Если ИмяПеременной = Истина Тогда
В клиент-серверном варианте 1С часть модулей выполняется на сервере. Мало того, некоторые функции одного и того же модуля могут выполняться на сервере или на клиенте.
При этом может возникнуть ошибка 1С, что из функции работающей на сервере идет обращение к функции, которая выполняется на клиенте. В этом случае будет такая ошибка 1С.
Аналогично предыдущей ошибке 1С. Если в программе прописано обращение к функции, которая находится в общем модуле, то это выглядит так:
ИмяМодуля.ИмяФункции();
Если при этом в свойствах модуля установлено, что он выполняется на клиенте, а мы обращаемся из тех строчек программы, которые выполняются на сервере – то будет ошибка 1С
«Переменная не обнаружено – ИмяМодуля»
Под словом «метод» понимается функция/процедура в модуле этого объекта.
Это значит в тексте запроса ошибка 1С. Текст запроса определяется в программе обычно раньше (то есть выше), чем выполняется. Поищите текст запроса в этом модуле (глазами выше или по поиску слова «ВЫБРАТЬ»).
Данная ошибка 1С означает или ошибку 1С в тексте запроса или ошибку 1С настроек СКД (часто в группировках, в выбранных полях, в условном форматировании).
Попробуйте начать с настроек, сильно упростив их. Проверьте, что в выбранных полях и условном форматировании — в списке нет полей, отмеченных крестиком.
Читайте также: