1C: Выбор из нескольких вариантов макета отчета СКД

Задача: в зависимости от внешних условий, выводить тот или иной вариант отчёта СКД.

Решение:

Добавим в отчёт два макета СКД:

Далее, в зависимости от нажатой кнопки, формируем разные данные:

&НаСервере
Процедура РукамиНаСервере(ТаблДок,мак)
	 ОбъектОтчетНаСервере = РеквизитФормыВЗначение("Отчет");
     СхемаСКД = ОбъектОтчетНаСервере.ПолучитьМакет(мак);
	 
	// с парамертрами по умолчанию 
	//КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных;
	//КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД));
	//КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию);
	//КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
	//КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
	//Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки());

	// задаем сами
     НастройкиСхемыОСКД = СхемаСКД.НастройкиПоУмолчанию;
	 ПараметрыДанныхОСКД = НастройкиСхемыОСКД.ПараметрыДанных.Элементы;
	 
	 ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Период");
	 ЭлементНачалоПериода.Использование = Истина;	 
	 
	 ДатаНачала = ФильтрПериод.ДатаНачала;
	 ДатаОкончания = ФильтрПериод.ДатаОкончания;
	 
     ЭлементНачалоПериода.Значение.ДатаНачала        = НачалоМесяца(ДатаНачала);
     ЭлементНачалоПериода.Значение.ДатаОкончания    = КонецМесяца(ДатаОкончания);	 
	 
	 ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("СетеваяОрганизация");
	 ЭлементНачалоПериода.Использование = Истина;	 
	 ЭлементНачалоПериода.Значение=отчет.Сетевая;

	 ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Фильтр");
	 ЭлементНачалоПериода.Использование = Истина;	 
	 ЭлементНачалоПериода.Значение=отчет.Фильтр;
	 	 
	 
	 КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
	 Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, НастройкиСхемыОСКД);
	 Фильтр=отчет.Фильтр;
	 

	ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиОСКД.Инициализировать(Макет);
	ТаблДок.Очистить();
	ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок);
	ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД);	
	ПроцессорВыводаОСКД.ЗакончитьВывод();
КонецПроцедуры

&НаКлиенте
Процедура ОтчетПоЕМК(Команда)
	РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных");
	Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
	Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;		
КонецПроцедуры

&НаКлиенте
Процедура ОтчетПоЛС(Команда)
	РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных1");
	Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
	Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;		
	
КонецПроцедуры

1С: Программная установка пользовательских настроек при открытии отчёта СКД


&НаСервере
Процедура УстановитьПараметраКомпоновки(ИмяПараметра, Значение) Экспорт
	
	ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
	ОтборКД = Новый ПолеКомпоновкиДанных(ИмяПараметра);
	
	НастройкиКомпановщика = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
	
	Для Каждого Поле Из НастройкиКомпановщика.ПараметрыДанных.Элементы Цикл
		Если Поле.Параметр = ПараметрКД Тогда
			Поле.Значение = Значение;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Отбор Из НастройкиКомпановщика.Отбор.Элементы Цикл
		Если Отбор.ЛевоеЗначение = ОтборКД Тогда
			Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
			Отбор.Использование = Истина;
			Отбор.ПравоеЗначение = Значение;
		КонецЕсли;
	КонецЦикла;
	
	Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпановщика);
	ЭтаФорма.СоздатьЭлементыФормыПользовательскихНастроек(,РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);	
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьЕМКНаСервере()
	
  СписТочек = Новый СписокЗначений;
  рез=СтрРазделить(отчет.ЕМК,символы.ПС);
  для каждого стр из рез цикл
	  стр=стрзаменить(стр,";","");
	  СписТочек.Добавить(сокрЛП(стр));
  конеццикла;	  
  УстановитьПараметраКомпоновки("ЕдиныйМежсистемныйКод",СписТочек);
   
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЕМК(Команда)	
	ЗаполнитьЕМКНаСервере();
КонецПроцедуры

1С: размещение штрихкода в макете

Задача: в одной из конфигураций необходима вывести на печать штрихкод.

Решение:

В БСП этой конфигурации (3.1.5) поддержка печати есть, но «зашита намертво», т.е. без особых настроек. Чуть больше настроек можно получить если вынести функцию ПолучитьКартинкуШтрихкода в отдельный модуль.

В макете разместим картинку, назовем её например ШтрихКод1. Далее в конфигурацию необходимо добавить код:

&НаСервере
Функция ПолучитьКартинкуШтрихкода(Код, ТипКода = 1, ВысотаВМиллиметрах, ВставлятьЦифры) Экспорт
	
	ИнформацияОСистеме = Новый СистемнаяИнформация;
	
	ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты
	Компонент = Новый("AddIn.КартинкаШтрихкода.Barcode");

	// Если нет возможности рисовать
	Если НЕ Компонент.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем
		ТекстСообщения = НСтр("ru = 'Не удалось установить компонент штрихкодирования.'");
		ЗаписьЖурналаРегистрации(
			НСтр("ru = 'Штрихкодирование'"), 
			УровеньЖурналаРегистрации.Ошибка,
			, , 
			ТекстСообщения);
		ВызватьИсключение(ТекстСообщения);	
	КонецЕсли;
	
	Компонент.ОтображатьТекст = ВставлятьЦифры;
	Компонент.ПоложениеТекста=1;
	
	// Установим размер шрифта
	Компонент.РазмерШрифта = 12;
	//Компонент.ОриентацияТекста = 3;
	
	// Зададим размер картинки
	Если НЕ ЗначениеЗаполнено(ВысотаВМиллиметрах) Тогда
		ВысотаВМиллиметрах = 10;
	КонецЕсли;
	Компонент.Высота = Число(Формат((ВысотаВМиллиметрах/35.3) * 100, "ЧДЦ=0"));
	Компонент.АвтоТип = Ложь;
	
	//EAN-13 по умолчанию
	Компонент.ТипКода = ТипКода;
	 
	// Если код содержит контрольный символ, обязательно указываем
	Компонент.СодержитКС = Истина;
	
	// Формируем картинку штрихкода
	Компонент.ЗначениеКода = Код;

	Компонент.Ширина = Компонент.МинимальнаяШиринаКода + 5;

	// Сформируем картинку
	ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод();
	// Если картинка сформировалась
	Если НЕ ДвоичныеДанныеКартинки = Неопределено Тогда
		// Формируем из двоичных данных
		Картинка = Новый Картинка(ДвоичныеДанныеКартинки);
		Возврат Картинка;
	КонецЕсли;
	
	ТекстСообщения = НСтр("ru = 'Неизвестная ошибка штрихкодирования. Необходимо обратиться к администратору.'");
	ЗаписьЖурналаРегистрации(
		НСтр("ru = 'Штрихкодирование'"), 
		УровеньЖурналаРегистрации.Ошибка,
		, , 
		ТекстСообщения);
	ВызватьИсключение(ТекстСообщения);

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

Более подробно о параметрах компоненты:

Название RU/ENТипЧтениеЗаписьОписание
Свойства, общие для всех типов штриховых кодов
ТипКода (CodeType)Число++Свойство содержит идентификатор типа штрихкода. Может принимать одно из следующих значений:
0 (тип кода — EAN8)
1 (тип кода — EAN13)
2 (тип кода — EAN128)
3 (тип кода — CODE39)
4 (тип кода — CODE128)
5 (тип кода — CODE16K)
6 (тип кода — PDF417)
7 (тип кода — Industrial2of5)
8 (тип кода — Interleaved2of5)
9 (тип кода — Code39FullASCII)
10 (тип кода — CODE93)
11 (тип кода — ITF14)
12 (тип кода — RSS14)
13 (тип кода — CodaBar)
14 (тип кода — EAN13 AddOn 2)
15 (тип кода — EAN13 AddOn 5)
16(тип кода — QR)
17(тип кода — GS1 databar extended stacked), [с версии 9.0.2.2],
18(тип кода DataMatrix ASCII), [с версии 9.0.2.2],
19(тип кода DataMatrix Base256), [с версии 9.0.2.2],
20(тип кода DataMatrix Text), [с версии 9.0.2.2],
21(тип кода DataMatrix C40), [с версии 9.0.2.2],
22(тип кода DataMatrix X12), [с версии 9.0.2.2],
23(тип кода DataMatrix Edifact)[с версии 9.0.2.2],
24(тип кода GS1 Datamatrix) [с версии 9.0.6.4]
АвтоТип (CodeAuto, AutoType)Булево++Свойство определяет признак автоматического определения ТипаКода в зависимости от значения переданных в свойствах ЗначениеКода и ТипВходныхДанных.
Когда значение свойства принимает значение «Истина» ТипКода определяется автоматически.
ЗначениеКода (CodeValue))Строка++Строка или Base64 Строка (см. свойство ТипВходныхДанных) содержащая данные генерируемого ШК
ТекстКода (CodeText)Строка+Свойство содержит подпись штрихкода
ОтображатьТекст (TextVisible)Булево++Свойство указывает необходимость отображать подпись штрихкода на сгенерированном изображении
Шрифт (Font)Шрифт++Свойство содержит шрифт, используемый при отображении подписи штрихкода
РазмерШрифта (FontSize)Число++Свойство содержит размер шрифта в пикселах
КоличествоШрифтов(FontCount)Число+Свойство содержит количество шрифтов установленных в системе, которые может использовать компонент.
Разделители (CodeSentinel)Число++Свойство содержит высоту полос-разделителей (только в EAN8 и EAN13) в процентах от высоты текста
Шрифт (Font)Шрифт++Свойство содержит шрифт, используемый при отображении строки на поверхности штрихкода (свойство имеет смысл только в том случае, когда предусмотрен вывод данной строки).
РазмерШрифта (FontSize)Число++Свойство содержит размер шрифта в пикселях
КоличествоШрифтов(FontCount)Число+Свойство содержит количество шрифтов установленных в системе, которые может использовать компонента.
ПоложениеТекста (TextPosition)Число++Свойство задаёт положение подписи. Свойство принимать следующие значения:
0 (снизу)
1 (сверху)
ПрозрачныйФон (BgTransparent)Булево++Свойство содержит признак использования прозрачного фона
УголПоворота (CanvasRotation)Число++Свойство содержит угол поворота (в градусах) штрихкода на сгенерированном изображении. Может принимать следующие значения:
0
90
180
270
УголПоворота (CanvasRotation)Число++Свойство содержит угол поворота (в градусах) штрихкода.
Может принимать следующие значения:
0
90
180
270
ВертикальноеВыравниваниеКода(BarVerticalAlign, CodeVerticalAlign)Число++Свойство задает способ вертикального выравнивания штрихкода на сгенерированном изображении.
Свойство может принимать следующие значения:
1 (по верхнему краю)
2 (по центру)
3 (по нижнему краю)
ТипВходныхДанных (InputDataType)Число++Отмечает тип входных данных, которые задаются в свойстве ЗначениеКода. Свойство может принимать следующие значения
0 –Строка
1 – Base64 строка
Результат (Result)Число+Возвращает результат генерации изображения ШК
0 – успешная генерация
1 – ошибка
УбратьЛишнийФон (RemoveExeedBackgroud, RemoveExtraBackgroud)Булево++Указывает генератору, что требуется убрать лишний фон по краям ШК. В этом случае сгенерированное изображение ШК может быть меньше, чем указанные в свойствах Ширина и Высота. Изображение штрихкода будет совпадать с максимальным размером ШК, который можно вписать в указанные Ширину и Высоту
Ширина (Width)Число++Свойство задает Ширину генерируемого изображения в пикселах
Высота (Height)Число++Свойство задает Высоту генерируемого изображения в пикселах
УровеньКоррекции (ECL)Строка++Свойство задаёт уровень коррекции ошибок. Актуально для PDF417.
МинимальнаяВысота (CodeMinHeight)Число+Свойство содержит минимально возможную высоту области, на которой может быть отображён данный штрихкод
МинимальнаяШирина (CodeMinWidth)Число+Свойство содержит минимально возможную ширину области, на которой может быть отображён штрихкод с заданными параметрами
Линейные (ld) штрихкоды
СодержитКС (CodeIsRaw, CodeHasCS)Булево++Данное свойство содержит признак того, что переданное сообщение содержит контрольный символ
ВидимостьКС (CodeShowCS)Булево++В случае, когда данное свойство принимает значение «Истина», контрольный символ будет включён в строку подписи
КонтрольныйСимвол (CodeCheckSymbol)Строка+Свойство содержит контрольный символ, если тип штрихкода предполагает его использование
PDF417
КоличествоСтолбцов (ColumnCount)Число++Свойство задаёт количество столбцов штрихкода. Актуально для PDF417
КоличествоСтрок (RowCount)Число++Свойство задаёт количество строк штрихкода. Актуально для PDF417
Пропорции (AspectRatio)Строка++Свойство задаёт соотношение высоты: ширины модулей штрихкода. Актуально для PDF417
УровеньКоррекции (ECL)Строка++Свойство задаёт уровень коррекции ошибок. Актуально для PDF417
QR
УровеньКоррекцииQR(QRErrorCorrectionLevel)Число++Свойство содержит значение уровня коррекции QR-кода.
Может принимать одно из следующих значений:
0 — L
1 — M
2 — Q
3 – H
ЛоготипКартинка(LogoImage)
ЛоготипКартинкаBase64(LogoImageBase64)
Строка+Передает PNG картинку логотипа вписываемого в QR-код в виде Base64 строки
ЛоготипРазмерПроцентОтШК(LogoSizePercentFromBarcode)Число++Отмечает процент заполнения логотипом изображения QR-кода
GS1 Databar extended stacked
GS1DatabarКоличествоСтрок(GS1DatabarRowCount)Число++Свойство содержит количество строк штрихкода GS1 Databar extended stacked
Устаревшие свойства*
Разделители (CodeSentinel)Число++Свойство содержит высоту полос-разделителей (только в EAN8 и EAN13) в процентах от высоты текста
ЦветТекста (TextColorЦвет++Свойство содержит цвет, используемый при отображении строки на поверхности штрихкода (свойство имеет смысл только в том случае, когда предусмотрен вывод данной строки).
ЦветФона (BgColor)Цвет++Свойство задаёт цвет заливки фона штрихкода. Имеет смысл только тогда, когда не используется прозрачный фон.
ЦветПолос (BarColor)Цвет++Свойство содержит цвет, используемый для заливки полос на поверхности штрихкода
ГорСмещение (CanvasXOffset)Число++(В настоящий момент не используется)
Свойство содержит значение горизонтального смещения изображения штрихкода
ВертСмещение (CanvasYOffset)Число++(В настоящий момент не используется)
Свойство содержит значение вертикального смещения изображения штрихкода
РазмерКрая (CanvasMargin)Число++(В настоящий момент не используется)
Свойство задаёт ширину рамки вокруг изображения штрихкода
ВыравниваниеКода (BarAlign)Число++(В настоящий момент не используется)
Свойство задаёт способ автоматического расположения изображения штрихкода.
Может принимать следующие значения:
0 (не использовать автоматическое выравнивание)
1 (по левому краю области)
2 (по центру)
3 (по правому краю области)
ОриентацияТекста (TextAlign)Число++Свойство задаёт способ размещения подписи штрихкода. Свойство может принимать следующие значения:
0 (выравнивание текста по центру области)
1 (выравнивание текста по левому краю области)
2 (выравнивание текста по правому краю области)
3 (растянуть текст по ширине области)
4,5,6 (варианты расположения текста, обычно применяемые на штрихкодах типов EAN8 и EAN13)

Далее собственно вывод штрихкода (пример):

ОбластьСтрока.Рисунки.ШтрихКод1.Картинка=ПолучитьКартинкуШтрихкода(н.ИдентификаторПочты,4,100,Истина);

1C: Программное прикрепление файла к документу / справочнику

Работает только на БСП 3.1 и выше

    Текст=новый ЗаписьТекста;
    Текст.Открыть(КаталогВременныхФайлов()+"\1.txt",КодировкаТекста.ANSI);
    Текст.ЗаписатьСтроку("Программируем в 1С 8.2");
    Текст.Закрыть(); 
	  
	ИмяФайлаНаДиске = КаталогВременныхФайлов()+"\1.txt";	
	ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаНаДиске);
	ВременноеХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
	// Подготоваливаем описание файла заполнив все необходимые параметры
	ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыФайла.Автор = Пользователи.ТекущийПользователь();
	ПараметрыФайла.ВладелецФайлов = док.Ссылка;
	ПараметрыФайла.ИмяБезРасширения = СтрЗаменить(ИмяФайлаНаДиске,".txt","");
	ПараметрыФайла.РасширениеБезТочки = "txt";
	// Используем функцию БСП и добавляем файл к объекту
	РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ВременноеХранилище);

1C: открыть почтовый клиент с заполненным телом письма

Задача: у пользователя необходимо открыть почтовый клиент с заполненным телом и заголовком письма

Решение:

ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:" + Объект.КонтактноеЛицоЭлектроннаяПочта+"?subject=Оплата аванса за монтажные работы&body=Для оплаты аванса перейдите по ссылке: "+ссылка);
1 13 14 15 16 17 50