$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
Это из работы с 1С
1Сники утверждают что у меня в этой переменной двоичные данные картинки
Распечатать такую переменную не получается ошибка
Object of class variant could not be converted to string
Пробовал прибавить пустую строку: $gruppa .=''; что бы перевести из одного типа данных в другой. Результата ни какого не дало.
Мне нужно сохранить эту картинку в файл
$file = fopen ("file.jpeg","w");
$str = "Hello, world!";
if ( !$file )
{
echo("Ошибка открытия файла");
}
else
{
fputs ( $file, $gruppa);
}
fclose ($file);
Но понятное дело что не получается, так как у меня какой-то объект.
И что-то я не разберусь что делать.
По поводу двоичных данных есть пара функций в php но как мне показалось что они мне не помогут.
Спустя 6 минут, 23 секунды (22.11.2011 - 09:15) Invis1ble написал(а):
двоичные данные - такого типа нет в php.
если это объект - то у него наверняка есть какой-то метод, который возвращает данные. Либо публичное свойство.
если это объект - то у него наверняка есть какой-то метод, который возвращает данные. Либо публичное свойство.
Спустя 19 минут, 29 секунд (22.11.2011 - 09:34) linker написал(а):
var_dump($gruppa);и посмотреть что там внутри. Либо открыть скрипт с описанием класса variant и посмотреть его реализацию.
Спустя 5 минут, 40 секунд (22.11.2011 - 09:40) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 11:34) |
var_dump($gruppa); |
string(0) ""
Спустя 5 минут, 4 секунды (22.11.2011 - 09:45) Воитель написал(а):
Цитата (Invis1ble @ 22.11.2011 - 11:15) |
двоичные данные - такого типа нет в php. если это объект - то у него наверняка есть какой-то метод, который возвращает данные. Либо публичное свойство. |
По идеи метод
Получить()
Как раз таки и возвращает картинку.
1Сники свой аналог переменной $gruppa вставляют в какие-то формы, типа там лежит картинка
У меня ещё есть такой код из 1С:
КаталогФайла = "D:\WebServers\home\4atrix\www\cron";
Картинка = ОсновноеИзображение.Хранилище.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
Картинка.Записать(КаталогФайла + "\" + К + ".jpg");
КонецЕсли;
Этот код записывает картинку в файл.
Спустя 6 минут, 11 секунд (22.11.2011 - 09:51) Воитель написал(а):
Цитата (Воитель @ 22.11.2011 - 11:40) | ||
string(0) "" |
Вот такой вывод, прошлый ошибочный.
object(variant)#7 (0) { }
Спустя 7 минут, 56 секунд (22.11.2011 - 09:59) Воитель написал(а):
Попробовал функцию variant_abs();
Сломал апач
Сломал апач
Спустя 5 минут (22.11.2011 - 10:04) linker написал(а):
variant - это класс, его реализацию можно посмотреть в каком-нибудь скрипте, либо читаем про Reflection. Но по логике $gruppa->save('путь к файлу'), может и получится.
Спустя 4 минуты, 57 секунд (22.11.2011 - 10:09) Воитель написал(а):
Call to a member function save() on a non-object
Спустя 5 минут, 53 секунды (22.11.2011 - 10:15) Invis1ble написал(а):
тебе же написали, изучи реализацию класса
Спустя 5 минут, 53 секунды (22.11.2011 - 10:21) linker написал(а):
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getMethods(), true) . '</pre>';
Спустя 11 минут, 3 секунды (22.11.2011 - 10:32) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 12:21) |
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить(); |
Fatal error: Uncaught exception 'ReflectionException' with message 'Class does not exist' in Z:\home\4atrix\www\1s_svoyo.php:117 Stack trace: #0 Z:\home\4atrix\www\1s_svoyo.php(117): ReflectionClass->__construct('') #1 {main} thrown in Z:\home\4atrix\www\1s_svoyo.php on line 117
Я и сам читаю и рыскаю по инету, просто тема для меня практически незнакома.
Спустя 5 минут, 7 секунд (22.11.2011 - 10:37) linker написал(а):
Теперь я что-то не понимаю, то $gruppa объект, то не объект.
Спустя 5 минут, 46 секунд (22.11.2011 - 10:43) Воитель написал(а):
Это видимо из-за того что он получается из COM соединения.
Я уже пробовал как-то узнать все методы этого объекта, на чём конечно обломился. Лично для себя всё свалил не на свои неумелые руки а на com соединение )
Я уже пробовал как-то узнать все методы этого объекта, на чём конечно обломился. Лично для себя всё свалил не на свои неумелые руки а на com соединение )
Спустя 3 минуты, 32 секунды (22.11.2011 - 10:46) Воитель написал(а):
Часть темы из 1С форума:
Я->
Пока у меня вот так:
$gruppa_1 = $selection->ОсновноеИзображение->ИмяФайла;
$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить();
Это из php.
переменная $gruppa_1 выводит мне имя файла
а вот переменная $gruppa_2 является почему-то объектом.
Если бы это был сам jpeg у меня бы на экране вывелась куча символов.
От сюда вопрос что у меня в этой переменной?
Насколько понял её аналог в 1с вставляют в формы и поэтому мне кажется это какой-то специфический объект. Так как же мне взять картинку?
Чел1->
в этой переменной у вас двоичные данные.
Чел2->
Посмотрите байтовое содержимое. Какая нибудь известная сигнатура рисунка в начале есть?
Если нет, то чтобы не гадать, какой формат получается на выходе - проще будет картинку из 1С сохранить во внешний файл, а потом уже из пхп этот внешний файл загрузить.
Я->
Пока у меня вот так:
$gruppa_1 = $selection->ОсновноеИзображение->ИмяФайла;
$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить();
Это из php.
переменная $gruppa_1 выводит мне имя файла
а вот переменная $gruppa_2 является почему-то объектом.
Если бы это был сам jpeg у меня бы на экране вывелась куча символов.
От сюда вопрос что у меня в этой переменной?
Насколько понял её аналог в 1с вставляют в формы и поэтому мне кажется это какой-то специфический объект. Так как же мне взять картинку?
Чел1->
в этой переменной у вас двоичные данные.
Чел2->
Посмотрите байтовое содержимое. Какая нибудь известная сигнатура рисунка в начале есть?
Если нет, то чтобы не гадать, какой формат получается на выходе - проще будет картинку из 1С сохранить во внешний файл, а потом уже из пхп этот внешний файл загрузить.
Спустя 2 минуты, 48 секунд (22.11.2011 - 10:49) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение;
//$gruppa .='';
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getMethods(), true) . '</pre>';
Вернуло:
<pre>Array
(
)
</pre>
Спустя 28 минут, 54 секунды (22.11.2011 - 11:18) linker написал(а):
$reflection = new ReflectionClass(get_class($gruppa));а вообще сразу
echo '<pre>' . print_r($reflection->getProperties(), true) . '</pre>';
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';
Спустя 2 минуты, 36 секунд (22.11.2011 - 11:21) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение;
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';
var_dump($gruppa);
Вернуло:
Class [ class variant ] { - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [0] { } }
object(variant)#8 (0) { }
Спустя 2 минуты, 26 секунд (22.11.2011 - 11:23) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';
var_dump($gruppa);
Fatal error: Uncaught exception 'ReflectionException' with message 'Class does not exist' in Z:\home\4atrix\www\1s_svoyo.php:118 Stack trace: #0 Z:\home\4atrix\www\1s_svoyo.php(118): ReflectionClass->__construct('') #1 {main} thrown in Z:\home\4atrix\www\1s_svoyo.php on line 118
Спустя 1 минута, 29 секунд (22.11.2011 - 11:25) linker написал(а):
Клёва, я бы уже давно в сорцах порылся.
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
echo $gruppa;
Спустя 4 минуты, 36 секунд (22.11.2011 - 11:29) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 13:25) |
Клёва, я бы уже давно в сорцах порылся.$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить(); |
Catchable fatal error: Object of class variant could not be converted to string in Z:\home\4atrix\www\1s_svoyo.php on line 117
117 строка это
echo $gruppa;
Спустя 50 минут, 34 секунды (22.11.2011 - 12:20) Воитель написал(а):
Появилась некоторая новая инфа с форума 1С:
Попробуйте использовать метод ПолучитьДвоичныеДанные().
Т.е. так:
Код
и посмотрите что будет в $gruppa_2.
А как сохраняете?
Думаю как-то так должно быть:
Попробуйте использовать метод ПолучитьДвоичныеДанные().
Т.е. так:
Код
$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить()->ПолучитьДвоичныеДанные();
и посмотрите что будет в $gruppa_2.
А как сохраняете?
Думаю как-то так должно быть:
$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить();
$gruppa_2->Записать(<здесь путь>);
Спустя 3 минуты, 28 секунд (22.11.2011 - 12:23) Воитель написал(а):
Но на метод
ПолучитьДвоичныеДанные()
и на
Записать(<здесь путь>)
У пхп похожий ответ:
Fatal error: Call to undefined method variant::ПолучитьДвоичныеДанные() in Z:\home\4atrix\www\1s_svoyo.php on line 116
ПолучитьДвоичныеДанные()
и на
Записать(<здесь путь>)
У пхп похожий ответ:
Fatal error: Call to undefined method variant::ПолучитьДвоичныеДанные() in Z:\home\4atrix\www\1s_svoyo.php on line 116
Спустя 1 час, 14 минут, 35 секунд (22.11.2011 - 13:38) linker написал(а):
Тут можно гадать веки вечные, открой сорцы и посмотри какие методы есть у класса variant. 1С со своими кириллическими названиями отжигает по полной - дебилы.
Спустя 13 минут, 31 секунда (22.11.2011 - 13:51) Invis1ble написал(а):
Цитата |
1С со своими кириллическими названиями отжигает по полной - дебилы. |
+100500
Спустя 24 минуты, 44 секунды (22.11.2011 - 14:16) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 15:38) |
Тут можно гадать веки вечные, открой сорцы и посмотри какие методы есть у класса variant. 1С со своими кириллическими названиями отжигает по полной - дебилы. |
что такое сорц ?
Спустя 4 минуты, 58 секунд (22.11.2011 - 14:21) Воитель написал(а):
Я перевёл с английского как исходник. Правильно?
Спустя 8 секунд (22.11.2011 - 14:21) Invis1ble написал(а):
Цитата |
что такое сорц ? |
исходный код. Там где лежит сам класс variant
Спустя 12 минут, 14 секунд (22.11.2011 - 14:34) Воитель написал(а):
Ну значит я интуитивно правильно понял. Дело в том что это 1С. У меня даже документации нет. Всё приходиться методом тыка.
Спустя 3 минуты, 13 секунд (22.11.2011 - 14:37) linker написал(а):
Воитель
Хреново, но это же у тебя PHP, ты работаешь с какой-то библиотекой, а значит что-то должно быть.
Хреново, но это же у тебя PHP, ты работаешь с какой-то библиотекой, а значит что-то должно быть.
Спустя 1 минута, 52 секунды (22.11.2011 - 14:39) Invis1ble написал(а):
Воитель
я просто никогда не имел дело с 1С и слабо представляю себе что и как.
В php подключается скомпиленный модуль от 1С что-ли? Или как?
я просто никогда не имел дело с 1С и слабо представляю себе что и как.
В php подключается скомпиленный модуль от 1С что-ли? Или как?
Спустя 22 минуты, 19 секунд (22.11.2011 - 15:01) Воитель написал(а):
Неее, это из COM соединения. Через COM я отправляю запрос в базу данных 1С.
$selection
это скорее аналог нашего $row из
$row=mysql_fetch_object($result);
$selection
это скорее аналог нашего $row из
$row=mysql_fetch_object($result);
Спустя 3 минуты, 24 секунды (22.11.2011 - 15:04) Воитель написал(а):
$vr = new COM('V82.ComConnector') or die("Unable to instanciate Excell");
$base1C = $vr->Connect('File="' . $BasePath . '";Usr="' . $Usr . '";Pwd="' . $Pwd . '"');
$query = $base1C->NewObject('Запрос');
$query->Текст =
'ВЫБРАТЬ
СправочникНоменклатура.Код,
СправочникНоменклатура.Артикул,
СправочникНоменклатура.Наименование,
СправочникНоменклатура.Родитель.Код КАК КодРод,
СправочникНоменклатура.ОсновноеИзображение,
СправочникНоменклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ';
$result = $query->Выполнить();
$selection = $result->Выбрать();
while ($selection->Следующий()) {
$roditel = $selection->Код; //Перевод кодировки делаю в 2 строки вроде потому что перевожу оъект в строку а потом в перекодирование
$roditel = iconv('cp1251', 'utf-8', $roditel);
$specifikaciya = $selection->Артикул;
$specifikaciya = iconv('cp1251', 'utf-8', $specifikaciya);
$sostovlyayuschie = $selection->Наименование;
$sostovlyayuschie = iconv('cp1251', 'utf-8', $sostovlyayuschie);
$gruppa = $selection->Ссылка->ПолноеНаименование();
$gruppa = $selection->КодРод;
$gruppa = $selection->ОсновноеИзображение->ИмяФайла;
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$gruppa = $gruppa->ПолучитьДвоичныеДанные();
//$gruppa->Записать("D:\WebServers\home\4atrix\www\cron\file.jpeg");
echo $gruppa;
//$gruppa = $selection->ОсновноеИзображение;
//$gruppa .='';
//$reflection = new ReflectionClass(get_class($gruppa));
//echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';
//$gruppa->save('file.jpeg');
//var_dump($gruppa);
$file = fopen ("file.jpeg","w");
$str = "Hello, world!";
if ( !$file )
{
echo("Ошибка открытия файла");
}
else
{
fputs ( $file, $gruppa);
}
fclose ($file);
//$gruppa = iconv('cp1251', 'utf-8', $gruppa);
//echo $gruppa . " = " . $roditel." = ".$specifikaciya." = ".$sostovlyayuschie."<br />";
}
Спустя 2 минуты, 44 секунды (22.11.2011 - 15:07) Воитель написал(а):
Я тоже до недавнего времени не умел. Сейчас уже немного понимаю. У них всё похоже на AS2.
_____________
Вечно учусь.