Имя: Пароль:
1C
1С v8
Помогите советами
,
0 максим_38
 
19.07.13
09:24
Доброго дня.
Нужны советы каким макаром добвить в накладную, конкретно  в таблицу в одну коловку в каждую строку Штрижкод(картинка для сканирования) для каждой позиции уникальный шрих код.

------------------------------------------вот документ:----------------------------------------------

Перем мВалютаРегламентированногоУчета Экспорт;

Функция ПечатьДокумента(СуммыВРублях = Ложь) Экспорт

   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   Запрос.Текст =

           .......

   ЗапросТовары = Запрос.Выполнить().Выгрузить();
   флВыводитьМест = истина;
   Если ЗапросТовары.Итог("КоличествоМест")=0 Тогда
       флВыводитьМест = ложь;
   КонецЕсли;
   
   ....бла-бла-бла...

   ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
   ОбластьКодов  = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
   ОбластьТовар   = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
   ОбластьМест   = Макет.ПолучитьОбласть("ШапкаТаблицы|Мест");
   ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|КоличествоЦена");
   ОбластьСкидок = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
   ОбластьСуммы  = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

   ТабДокумент.Вывести(ОбластьНомера);
   
....бла-бла-бла...,

   // Вывести Итого
   ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
   ОбластьКодов  = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
   ОбластьТовар  = Макет.ПолучитьОбласть("Итого|Товар");
   ОбластьМест  = Макет.ПолучитьОбласть("Итого|Мест");
   ОбластьДанных = Макет.ПолучитьОбласть("Итого|КоличествоЦена");
   ОбластьСкидок = Макет.ПолучитьОбласть("Итого|Скидка");
   ОбластьСуммы  = Макет.ПолучитьОбласть("Итого|Сумма");

   ТабДокумент.Вывести(ОбластьНомера);
   Если ВыводитьКоды Тогда
       ТабДокумент.Присоединить(ОбластьКодов);
   КонецЕсли;
   ТабДокумент.Присоединить(ОбластьТовар);
   Если флВыводитьМест Тогда
       ТабДокумент.Присоединить(ОбластьМест);
   КонецЕсли;

   ТабДокумент.Присоединить(ОбластьДанных);
   Если ЕстьСкидки Тогда
       ОбластьСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;
       ОбластьСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
       ТабДокумент.Присоединить(ОбластьСкидок);
   КонецЕсли;
   ОбластьСуммы.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
   ТабДокумент.Присоединить(ОбластьСуммы);

....бла-бла-бла...

   ТабДокумент.Вывести(ОбластьМакета);

   // Вывести подписи
   ОбластьМакета = Макет.ПолучитьОбласть("Подписи");

   // Отпуск товара произвел
   Если ЗначениеЗаполнено(Шапка.ОтпускПроизвел) Тогда
       ФамилияИмяОтчествоФизЛица        = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтпускПроизвел, Шапка.Дата);
       ФамилияИмяОтчествоОтпускПроизвел = ФамилияИмяОтчествоФизЛица.Фамилия + " " + ФамилияИмяОтчествоФизЛица.Имя + " " + ФамилияИмяОтчествоФизЛица.Отчество;
       ФИООтпускПроизвел                = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтпускПроизвел);
       ОбластьМакета.Параметры.ОтветственныйПредставление = ФИООтпускПроизвел;
   КонецЕсли;

   // Получить необходимое количество копий
    ТабДокумент.КоличествоЭкземпляров = 1;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.Вывести(ОбластьМакета);
   
     ТабДокумент.ОтображатьСетку  = Ложь;
    ТабДокумент.ТолькоПросмотр   = Истина;
    ТабДокумент.ОтображатьГруппировки=Ложь;
    ТабДокумент.ОтображатьЗаголовки=Ложь;
    ТабДокумент.Защита           = УправлениеДопПравамиПользователей.ЗащитаТаблиц();

          //Возврат ТабДокумент;
    ТабДокумент.Показать();

КонецФункции // ПечатьДокумента()



----------------------------ВОТ ШТРИХКОД:---------------------------------------

Функция ПолучитьКартинкуШтрихкода(ШтрихКод, ТипКода=Неопределено)

// В зависимости от типа платформы подключим соответствующую внешнюю компоненту
   ИнформацияОСистеме = Новый СистемнаяИнформация;

//Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
     ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.Компонентапечатиштрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
 //ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
 // ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
 //ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда
 // ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);  
 //Иначе
 // ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
 //КонецЕсли;

// Создадим объект внешней компоненты
   Если ПодключениеВыполнено Тогда
       Компонент = Новый("AddIn.КартинкаШтрихкода.Barcode");
   Иначе
       Возврат Неопределено;
   КонецЕсли;

// Если нет возможности рисовать
   Если НЕ Компонент.ГрафикаУстановлена Тогда
       // То картинку сформировать не сможем
       Возврат Неопределено;
   КонецЕсли;

   // Если в системе установлен шрифт Tahoma
   Если Компонент.НайтиШрифт("Tahoma") = Истина Тогда
       // Выбираем его как шрифт для формирования картинки
       Компонент.Шрифт = "Tahoma";
   Иначе
       // Шрифт Tahoma в системе отсутствует
       // Обойдем все доступные компоненте шрифты
       Для Сч = 0 По Компонент.КоличествоШрифтов -1 Цикл
           // Получим очередной шрифт, доступный компоненте
           ТекущийШрифт = Компонент.ШрифтПоИндексу(Сч);
           // Если шрифт доступен
           Если ТекущийШрифт <> Неопределено Тогда
               // Они и будет шрифтом для формирования штрихкода
               Компонент.Шрифт = ТекущийШрифт;
               Прервать;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;

   // Установим размер шрифта
   Компонент.РазмерШрифта = 10;
   //Компонент.РазмерШрифта = 12;

   // Зададим размер картинки
   Компонент.Ширина = 80;
   //Компонент.Высота = 90;
   Компонент.Высота = 20;

   Если ТипКода = Неопределено Тогда
       // Разрешим компоненте самой определять тип кода
       Компонент.АвтоТип = Истина;
       // ИЛИ установим код EAN-13
       // Компонент.ТипКода = 1;
       //
       // Тип смотрим в документации на внешнюю компоненту
   Иначе
       Компонент.ТипКода = ТипКода;
   КонецЕсли;

   // Если код содержит контрольный символ, обязательно указываем
   Компонент.СодержитКС = СтрДлина(Штрихкод) = 13;

   // Если отображать контрольный символ не нужно
   // Компонент.ВидимостьКС = Ложь;

   // Формируем картинку штрихкода
   Компонент.ЗначениеКода = Штрихкод;

   // Если установленная нами ширина меньше минимально допустимой для этого штрихкода
   Если Компонент.Ширина < Компонент.МинимальнаяШиринаКода Тогда
       // Скорректируем ширину
       Компонент.Ширина = Компонент.МинимальнаяШиринаКода + 10;
   КонецЕсли;

   // Сформируем картинку
   ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод();

   // Если картинка сформировалась
   Если НЕ ДвоичныеДанныеКартинки = Неопределено Тогда

   // Формируем из двоичных данных
   Возврат Новый Картинка(ДвоичныеДанныеКартинки);

   КонецЕсли;

   Возврат Неопределено;

КонецФункции

ПечатнаяФормаДоговора = Новый СписокЗначений;

---------------------------------------------------------ВОТ ПРИМЕР ПРИВЯЗКИ к договору--------------------------------------------------------

// Генерируем штрихкод и жобавляем в договор
       шКод = "1234567890128";
       минута = Прав("000000" + СтрЗаменить(Строка(60*60*День(ТекущаяДата()) + 60*Час(ТекущаяДата()) + Минута(ТекущаяДата())),Символ(160),""),6);
       минута = минута + Прав("000000" + СтрЗаменить(НомерСеансаИнформационнойБазы(),Символ(160),""),6) + "0";
       
       код = РасчитатьКонтрольнуюЦифруЕАН13(минута);
       последняяЦифра = 10 - 10*((код/10) - Цел(код/10));
       последняяЦифра = 10*((последняяЦифра/10) - Цел(последняяЦифра/10));
       код = СтрЗаменить(Формат(минута,"ЧРГ=_"),"_","") + Строка(последняяЦифра);
       
       
       Рисунок = ПолучитьКартинкуШтрихкода(код);
       //ЛокПолноеИмяФайла = КаталогВременныхФайлов()+ПолучитьИмяВременногоФайла("bmp");            
       ЛокПолноеИмяФайла = ПолучитьИмяВременногоФайла("bmp");            
       Рисунок.Записать(ЛокПолноеИмяФайла);
       Док=Ворд.Documents(1);
       Док.Activate();
       
       ЗаменаКолонтитула=Док.sections.item(1).headers.item(1);
       //--Просто вставить строку
       //ЗаменаКолонтитула.Range.Text=СокрЛП("Привет");
       //--Вставить картинку
       ЗаменаКолонтитула.Range.InlineShapes.AddPicture(ЛокПолноеИмяФайла,
       False, //LinkToFile  
       True   //SaveWithDocument
        );

Поделитесь мыслями по этому поводу.