Имя: Пароль:
1C
1С v8
Нужен код для метода ВК на С++
, ,
0 Вуглускр1991
 
23.04.13
00:12
Привет!
Есть у меня внешняя компонента, в её методы теоретически можно передать параметрами любые объекты, используемые в модулях.
Есть у меня процедура:
&НаСервере
Функция ПолучитьТабДокументЭтикетка(СписокШК)
фРисунокШтрихКод = Новый COMОбъект("V8.Barcod");
...
И объект создается успешно.
А вот когда в этой же процедуре далее
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработки.ПолучитьМакет("Этикетка");
В макете у рисунка (штрихкод) тип объекта Неизвестен и методов и свойств "V8.Barcod" у рисунка нет.
И вот мне нужен в ВК метод
ПоменятьМестамиУказателиОбъектов(фРисунокШтрихКод, Макет.Область.Рисунки.Штрихкод.Объект)
Для дальнейшего счастья.
Кто сможет подсказать как реализовать?
1 Вуглускр1991
 
23.04.13
00:22
Даже не поменять указатели ...
мои скромные (более чем) познания в COM подсказывают, что и там и там будет указатель на IUnknown если просто воткнуть рисунку табличного документа насильно IUnknown от фРисунокШтрихКод и сделать ему AddRef(), то на тот объект, который пустышка и который был на этом месте можно забить, утечка по памяти будет мизерная.
2 Андрюха
 
23.04.13
02:59
Указатель это адрес в памяти, по-идее можно ввести третью переменную и переприсвоить значения.
3 Rie
 
23.04.13
04:56
(0) А зачем здесь ВК? Я так понял, что V8.Barcod должен картинку отрисовывать? Тогда ему надо не ВК быть, а IPicture реализовать.
4 Rie
 
23.04.13
04:57
(1) Embedded-объекты имеют несколько более сложные отношения с контейнером. Так что просто заменой указателя вряд ли удастся обойтись.
5 Вуглускр1991
 
23.04.13
09:43
(4) Спасибо, в целях получения скорейшего результата, я уже выдернул из УТ11 все связанное с рисованием ШК на сервере, может уже через час, я забуду об этой задаче.
Была тоже такая мысля, что рисунок узнает про V8.Barcod, а V8.Barcod не узнает о контейнере и не сможет "нарисоваться", вот только как это с идеологией COM сочетается, мне вообразить трудно. Может у этого COMа какой-нибудь хитроперегруженный конструктор, мне лишь думалось вчера, что этот COM объект согласно идеологии должен иметь только public методы наружу, например Draw() и результатом - поток двоичных данных - растровая картинка заданных габаритов, которую уже РисунокТабличногоДокумента размещает в ячейках.
Вот к примеру с ИТС кусок кода по печати ШК:
Перем КомпонентШК;

Попытка
   КомпонентШК = Новый COMОбъект("V8.Barcod");
Исключение
   // Элемент управления не установлен
   КомпонентШК = Неопределено;
КонецПопытки;

Если КомпонентШК <> Неопределено Тогда
   Попытка
       // Тип кода Code128
       КомпонентШК.ТипКода = 4;
       КомпонентШК.Сообщение = "Text string to be encoded";
   Исключение
       // Ошибка
   КонецПопытки;
КонецЕсли;
И? И куда мне девать этот КомпонентШК дальше? Он что картинкой стал или на его основе можно рисунок добавить (я все пробовал: Рисунки.Добавить(КомпонентШК), Рисунки.Добавить(ТипЗнч(КомпонентШК)), Рисунки.Добавить(ТипРисункаТабличногоДокумента.Объект ,КомпонентШК) - везде платформа встречала меня ошибкой)
Я вообще понимать перестаю зачем надо добавлять рисунок вот так:
Рисунки.Добавить(ТипРисункаТабличногоДокумента.Объект) если этот объект потом никак не проинициализировать?
Вот я и искал способ инициализации такого рисунка.
(2) Рисунок.Объект - только для чтения, увы. Переприсвоить может и в ВК не получится, без вскрытия структуры контейнера и запиливания ссылки прямо в private область.
6 Rie
 
23.04.13
09:52
(5) Таблица - Рисунки - Вставить объект - Создать новый.
И в этот момент подсовываешь свой (зарегистрированный) V8.Barcod
7 Rie
 
23.04.13
09:55
+(6) Но для этого V8.Barcod должен реализовывать все нужные интерфейсы.
8 Вуглускр1991
 
23.04.13
09:56
(6) "Таблица - Рисунки" имеет в 1С тип КоллекцияРисунковТабличногоДокумента у него нет метода "Вставить" или "ВставитьОбъект" согласно СП. Или это код для ВК?
9 Вуглускр1991
 
23.04.13
09:58
(7) Я уверен, что в hlp файле к V8.Barcod не все public методы раскрыты. Там ещё должен быть обязательно типа "СгенерироватьКартинку".
10 Rie
 
23.04.13
10:02
(8) Зато КоллекцияРисунковТабличногоДокумента имеет метод Добавить.

(9) Не должен. Этот метод есть в IPicture.
11 Вуглускр1991
 
23.04.13
10:12
(10) "(я все пробовал: Рисунки.Добавить(КомпонентШК), Рисунки.Добавить(ТипЗнч(КомпонентШК)), Рисунки.Добавить(ТипРисункаТабличногоДокумента.Объект ,КомпонентШК) - везде платформа встречала меня ошибкой)" - я тоже так думал... Может не правильно добавлял?
12 Rie
 
23.04.13
10:19
(11) СП злые вороги похитили? :-)
Рис = Рисунки.Добавить(ТипРисункаТабличногоДокумента.Объект);

Но зачем добавлять программно, если можно положить его в макет - как сказано в (6)? И там сразу задать нужный тип (твой V8.Barcod)ю
13 Вуглускр1991
 
23.04.13
10:28
(12) Потому, что когда этот макет получаешь на сервере, тип объекта очищен и объект не работает.
Рис = Рисунки.Добавить(ТипРисункаТабличногоДокумента.Объект); - вот так добавляется неизвестный объект, который потом никак не проинициализировать.
14 Serginio1
 
23.04.13
12:12
У тебя какой ШК. Если еан, коде 128 то можно легко обойтись шрифтами. Посмотри http://strokescribe.com/ru/1c-8-create-barcode.html
15 Dolly_EV
 
23.04.13
13:08
(0) Вуглускр1991, вот отсюда:
v8: v8: РИБ 7.7 - 8.2
поделка еще осталась? по ссылке - не работает. Можешь поделиться?
16 Dolly_EV
 
23.04.13
13:08
17 Вуглускр1991
 
23.04.13
13:22
(14) Спасибо! Я смог напечатать ШК код 128 (как и было надо) при помощи УТ11 и зашитых в нее компонент и сервисных процедур. Все мой тонкий клиент печатает кода, осталось лишь убелиться, что Датамакс сможет их на ленту, а ТСД лазером.
18 Вуглускр1991
 
23.04.13
13:24
(16) Я тебе мылом отпишу которое у тебя в профиле. Рабочее?
19 rutony
 
23.04.13
13:29
(14) Ммм отличная штука, а я делал на базе сканопоса и шрифта..
20 Вуглускр1991
 
23.04.13
13:36
(16) К сожалению этот проект не ушел в серию, там были сделаны архитектурные просчеты большого масштаба. Он успешно работает в одной торговой сети, но затраты на его освоение могут быть соизмеримы с полной его переделкой.
Хотя я эти затраты до сих пор сравниваю в меньшую сторону с написанием обменов через КД.
Стоило оно заказчику 40 тыр. За такие деньги сейчас, думаю, что в нем можно разобраться, настроить собственные правила, запустить и остаться в небольшом плюсе порядка 10 тыр.
Очень бы хотелось реконструировать разработку в таком ключе:
заделать архитектурный прокол с генерацией ссылок в 8-ке.
Сейчас они генерируются случайно,
нужно, чтобы на входящую из 7-ки ссылку "8445|34526|БЗД" генерировался соответствующий ей уникальный идентификатор, и чтобы если приходит укороченная ссылка "34526|БЗД" идентификатор генерировался бы тот же самый.
Тогда я бы избавился от такого вида документов в 8-ке "v7НеизвестныйПокаДокумент" для ссылок о которых данных в пакете обмена пока нет.
Анонс примерно такой. Мои консультации, опять же к сожалению, на данной стадии (замороженной) проекта будут необходимы.
21 Serginio1
 
23.04.13
13:43
(19)  Я уже стал большим сторонником 2D штрих кодов. Информации влезает много. Кстати strokescribe пользовался и для печать двухмерных кодов через Bitmap для печати на мобильные принтеры используя CPL.
22 Dolly_EV
 
23.04.13
13:59
(18) да, рабочее
(16) отправь ,что есть. меня интересует вот этот момент: "написана обработка раскрывающая посылку 7.7 в иерархическую структуру всех выгружаемых объектов (они не копятся в этой структуре, а выгружаются в XML по мере поступления, т.е. реализован некий стек)"
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.