Стандартная печать этикеток и ценников позволяет печатать две цены. Если нужно три, то:
Снимаем конфигурацию с поддержки, заменяем Обработку ПечатьЭтикетокИЦеников на обработку из данной публикации, а также заменяем (копировать-вставить) текст модуля менеджера данной обработки на текст из публикации. Для ред 2.4 и ред 2.5 отдельные файлы. В шаблоне ценника добавляем [ЦенаДополнительно1]. Далее пользуемся как стандартной, в результате получаем печать трех цен на ценнике, как на скрине.
Тестировалось на редакциях от 2.4.14.164 (и более ранних) и 2.5.8.207
Модуль менеджера обработки ПечатьЭтикетокИЦенников ред 2.4
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Функция подготавливает структуру данных, необходимую для печати ценников и этикеток.
//
// Возвращаемое значение:
// Стрруктура - данные, необходимые для печати этикеток и ценников.
//
Функция ПодготовитьСтруктуруДанных(СтруктураНастроек, Режим) Экспорт
Если СтруктураНастроек.ИсходныеДанные <> Неопределено Тогда
ИсходныеДанные = СтруктураНастроек.ИсходныеДанные.Скопировать();
Иначе
ИсходныеДанные = Неопределено;
КонецЕсли;
СтруктураРезультата = Новый Структура;
СтруктураРезультата.Вставить("Таблица", Неопределено);
СтруктураРезультата.Вставить("СоответствиеПолейСКДКолонкамТаблицы", Новый Соответствие);
// Схема компоновки.
Если Режим = "ОбъектыЭксплуатации" Тогда
//++ НЕ УТ
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокОбъектовЭксплуатации.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных);
//-- НЕ УТ
Иначе
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных);
КонецЕсли;
НаборДанныхВСКДЗапрос = ТипЗнч(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных");
Если НаборДанныхВСКДЗапрос Тогда
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиНоменклатуры",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиВладельцы.Упаковка",
"ЕдиничныеУпаковкиВладельцы.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанные.Упаковка",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиНоменклатур.Упаковка",
"ЕдиничныеУпаковкиНоменклатур.Номенклатура"));
ПечатьЭтикетокИЦенниковЛокализация.ПриПодготовкеСтруктурыДанныхНабора(Режим, СхемаКомпоновкиДанных, ТекстЗапроса);
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = ТекстЗапроса;
КонецЕсли;
// Подготовка компоновщика макета компоновки данных.
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Компоновщик.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Компоновщик.Настройки.Отбор.Элементы.Очистить();
// Отбор компоновщика настроек.
Если СтруктураНастроек.КомпоновщикНастроек <> Неопределено Тогда
КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(Компоновщик.Настройки.Отбор, СтруктураНастроек.КомпоновщикНастроек.Настройки.Отбор);
КонецЕсли;
// Выбранные поля компоновщика настроек.
Для Каждого ОбязательноеПоле Из СтруктураНастроек.ОбязательныеПоля Цикл
ПолеСКД = КомпоновкаДанныхСервер.НайтиПолеСКДПоПолномуИмени(Компоновщик.Настройки.Выбор.ДоступныеПоляВыбора.Элементы, ОбязательноеПоле);
Если ПолеСКД <> Неопределено Тогда
ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = ПолеСКД.Поле;
КонецЕсли;
КонецЦикла;
Если Режим = "Товары" Тогда
// Заполнение параметров.
Для Каждого ПараметрДанных Из СтруктураНастроек.ПараметрыДанных Цикл
Если ПараметрДанных.Ключ = "Склад" Тогда // Если склад не заполнен - не используем параметр
УстановитьЗначениеПараметраСКД(Компоновщик, ПараметрДанных.Ключ, ПараметрДанных.Значение, Ложь);
Иначе
УстановитьЗначениеПараметраСКД(Компоновщик, ПараметрДанных.Ключ, ПараметрДанных.Значение);
КонецЕсли;
КонецЦикла;
УстановитьЗначениеПараметраСКД(Компоновщик, "ТекущееВремя", ТекущаяДатаСеанса());
УстановитьЗначениеПараметраСКД(Компоновщик, "ТекущийПользователь", Пользователи.ТекущийПользователь());
СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(Компоновщик);
КонецЕсли;
// Компоновка макета компоновки данных.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Компоновщик.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Для Каждого НаборДанных из МакетКомпоновкиДанных.НаборыДанных Цикл
Для каждого Поле Из НаборДанных.Поля Цикл
СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Вставить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(Поле.ПутьКДанным),
ЗаменитьСпецСимволы(Поле.Имя));
КонецЦикла;
КонецЦикла;
Если НаборДанныхВСКДЗапрос Тогда
Запрос = Новый Запрос(МакетКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос);
// Заполнение параметров с полей отбора компоновщика настроек формы обработки.
Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
Запрос.Параметры.Вставить(Параметр.Имя, Параметр.Значение);
КонецЦикла;
КонецЕсли;
Если Режим = "Товары" Тогда
// Подмена запроса для расчета цен...
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
ЗаменяемыйТекст = "ЦеныНоменклатурыСрезПоследних.Цена";
ТекстЗамены = " ВЫРАЗИТЬ(
| ЦеныНоменклатурыСрезПоследних.Цена
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1)
| *
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) КАК Число(15,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследних.Упаковка",
"ЦеныНоменклатурыСрезПоследних.Номенклатура"));
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
ЗаменяемыйТекст = "ЦеныНоменклатурыСрезПоследнихДополнительно.Цена";
ТекстЗамены = " ВЫРАЗИТЬ(
| ЦеныНоменклатурыСрезПоследнихДополнительно.Цена
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1)
| *
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) КАК Число(15,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследнихДополнительно.Упаковка",
"ЦеныНоменклатурыСрезПоследнихДополнительно.Номенклатура"));
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
ЗаменяемыйТекст = "ТоварыНаСкладахОстатки.ВНаличииОстаток";
ТекстЗамены = " ВЫРАЗИТЬ(
| ТоварыНаСкладахОстатки.ВНаличииОстаток
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК Число(15,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
КонецЕсли;
// Подмена запроса при печати этикеток...
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| 0 КАК Порядок,
| 0 КАК Количество)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Запрос.Текст = СтрЗаменить(Запрос.Текст, """КоличествоЦенников""", "ИсходныеДанные.КоличествоЦенников");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """КоличествоЭтикеток""", "ИсходныеДанные.КоличествоЭтикеток");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КОЛИЧЕСТВО(ИсходныеДанные.КоличествоЦенников)",
"СУММА(ИсходныеДанные.КоличествоЦенниковДляПечати)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КОЛИЧЕСТВО(ИсходныеДанные.КоличествоЭтикеток)",
"СУММА(ИсходныеДанные.КоличествоЭтикеток)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ШаблонЦенника""", "ИсходныеДанные.ШаблонЦенника");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ШаблонЭтикетки""", "ИсходныеДанные.ШаблонЭтикетки");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """Штрихкод""", "ИсходныеДанные.Штрихкод");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """Цена""", "ИсходныеДанные.Цена");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ЦенаДополнительно""", "ИсходныеДанные.ЦенаДополнительно");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ЦенаДополнительно1""", "ИсходныеДанные.ЦенаДополнительно1");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ДатаПоследнегоИзмененияЦены""", "ИсходныеДанные.ДатаПоследнегоИзмененияЦены");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ДатаПоследнегоИзмененияЦеныДополнительно""", "ИсходныеДанные.ДатаПоследнегоИзмененияЦеныДополнительно");
КонецЕсли;
ИначеЕсли Режим = "СкладскиеЯчейки" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) КАК Ячейка,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
КонецЕсли;
ИначеЕсли Режим = "СерииНоменклатуры" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК Серия,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
КонецЕсли;
ИначеЕсли Режим = "Доставка" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ИсходныеДанныеНакладных", ИсходныеДанные);
Результат = Новый ТаблицаЗначений;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
СтруктураРезультата.Таблица = Результат;
КонецЕсли;
ИначеЕсли Режим = "УпаковочныеЛисты" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка) КАК Ссылка,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
КонецЕсли;
//++ НЕ УТ
ИначеЕсли Режим = "ОбъектыЭксплуатации" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.ОбъектыЭксплуатации.ПустаяСсылка) КАК ОбъектЭксплуатации,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
КонецЕсли;
//-- НЕ УТ
КонецЕсли;
ПечатьЭтикетокИЦенниковЛокализация.ПриПодготовкеСтруктурыДанныхДляПечати(СтруктураНастроек, Режим, Запрос, ИсходныеДанные);
Если НаборДанныхВСКДЗапрос Тогда
СтруктураРезультата.Таблица = Запрос.Выполнить().Выгрузить();
КонецЕсли;
Возврат СтруктураРезультата;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Печать
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЦенникТовары")
Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаТовары") Тогда
СформироватьПечатныеФормыЭтикетокИЦенниковТоваров(ПараметрыПечати, ОбъектыПечати, КоллекцияПечатныхФорм);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаСкладскиеЯчейки") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиСкладскойЯчейки(ПараметрыПечати, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаСкладскиеЯчейки",
НСтр("ru = 'Этикетки складских ячеек'"),
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаСерииНоменклатуры") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиСерииНоменклатуры(ПараметрыПечати, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаСерииНоменклатуры",
НСтр("ru = 'Этикетки серий номенклатуры'"),
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаДоставки") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиДоставки(ПараметрыПечати, ОбъектыПечати, КоллекцияПечатныхФорм);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаДоставки",
НСтр("ru = 'Этикетки доставки'"),
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаУпаковочныеЛисты") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиУпаковочныеЛисты(ПараметрыПечати, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаУпаковочныеЛисты",
НСтр("ru = 'Этикетки упаковочных листов'"),
ТабличныйДокумент);
КонецЕсли;
ПечатьЭтикетокИЦенниковЛокализация.ПриПечати(КоллекцияПечатныхФорм, ПараметрыПечати, ОбъектыПечати);
//++ НЕ УТ
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаОбъектовЭксплуатации") Тогда
ТабличныйДокумент = Обработки.ПечатьЭтикетокОбъектовЭксплуатации.СформироватьПечатнуюФормуЭтикеткиОбъектовЭксплуатации(ПараметрыПечати, МассивОбъектов);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаОбъектовЭксплуатации",
НСтр("ru = 'Этикетки объектов эксплуатации'"),
ТабличныйДокумент);
КонецЕсли;
//-- НЕ УТ
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
КонецПроцедуры
Процедура СформироватьПечатныеФормыЭтикетокИЦенниковТоваров(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП)
ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.Товары);
НужноПечататьЭтикетки = Ложь;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФормБСП, "ЭтикеткаТовары") Тогда
НужноПечататьЭтикетки = Истина;
КоллекцияПечатныхФормБСП.Удалить(КоллекцияПечатныхФормБСП.Найти(ВРег("ЭтикеткаТовары"), "ИмяВРЕГ"));
КонецЕсли;
НужноПечататьЦенники = Ложь;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФормБСП, "ЦенникТовары") Тогда
НужноПечататьЦенники = Истина;
КоллекцияПечатныхФормБСП.Удалить(КоллекцияПечатныхФормБСП.Найти(ВРег("ЦенникТовары"), "ИмяВРЕГ"));
КонецЕсли;
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("КоличествоЦенниковДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("КоличествоЭтикетокДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЦенникаДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЭтикеткиДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура");
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Упаковка");
КонецЕсли;
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаПечатьТовары";
// Собираем используемые поля из шаблонов.
СоответствиеШаблонов = Новый Соответствие;
Для Каждого СтрокаТЧ Из ИсходныеДанные Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) И СтрокаТЧ.КоличествоЭтикеток > 0 И НужноПечататьЭтикетки Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЭтикетки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЦенника) И СтрокаТЧ.КоличествоЦенников > 0 И НужноПечататьЦенники Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЦенника);
КонецЕсли;
КонецЦикла;
Если ДанныеПечати.Свойство("СтруктураМакетаШаблона") И ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СоответствиеШаблонов.Вставить(Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
КонецЕсли;
// Заполняем коллекцию обязательных полей и формируем соответствие шаблонов.
Для Каждого КлючИЗначение ИЗ СоответствиеШаблонов Цикл
ШаблонЭтикетокИЦенников = КлючИЗначение.Ключ;
Если ЗначениеЗаполнено(ШаблонЭтикетокИЦенников) Тогда
СтруктураШаблона = КлючИЗначение.Ключ.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
// Структура шаблонов.
СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Вставить(ШаблонЭтикетокИЦенников, СтруктураШаблона);
// Добавляем в массив обязательных полей поля, присутствующие в печатной форме ценника.
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
КонецЦикла;
СтруктураНастроек.ПараметрыДанных.Вставить("Организация", ДанныеПечати.Организация);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоОбмена", ДанныеПечати.ПравилоОбмена);
СтруктураНастроек.ПараметрыДанных.Вставить("МаксимальныйКодВесовогоТовара", ДанныеПечати.МаксимальныйКодВесовогоТовара);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоВыгрузкиВВесы", ДанныеПечати.ПравилоВыгрузкиВВесы);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦены", ДанныеПечати.ВидЦены);
СтруктураНастроек.ПараметрыДанных.Вставить("Дата", ДанныеПечати.Дата);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦеныДополнительно", ДанныеПечати.ВидЦеныДополнительно);
СтруктураНастроек.ПараметрыДанных.Вставить("ДатаДополнительно", ДанныеПечати.ДатаДополнительно);
СтруктураНастроек.ИсходныеДанные = ИсходныеДанные;
#Область ПодготовкаСтруктурыДанныхШаблона
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
#КонецОбласти
#Область ФормированиеТабличногоДокумента
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
// Подготовка коллекции печатных форм.
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиКоличество");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиШаблон");
КоллекцияПечатныхФорм.Колонки.Добавить("Шаблон");
Для Каждого КлючИЗначение Из СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов Цикл
Если ((ЗначениеЗаполнено(КлючИЗначение.Ключ) И КлючИЗначение.Ключ.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров) ИЛИ Не ЗначениеЗаполнено(КлючИЗначение.Ключ))
И НужноПечататьЭтикетки Тогда
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Этикетка: "+КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Этикетка: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиКоличество = "КоличествоЭтикетокДляПечати";
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЭтикеткиДляПечати";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЕсли;
Если ((ЗначениеЗаполнено(КлючИЗначение.Ключ) И КлючИЗначение.Ключ.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров) ИЛИ Не ЗначениеЗаполнено(КлючИЗначение.Ключ))
И НужноПечататьЦенники Тогда
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Ценник: " + КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ценник: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиКоличество = "КоличествоЦенниковДляПечати";
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЦенникаДляПечати";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЕсли;
КонецЦикла;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
НомерКолонки = 0;
НомерРяда = 0;
Для Каждого СтрокаТовары Из СтруктураРезультата.Таблица Цикл
Если СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] > 0 И СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон] = ПечатнаяФорма.Шаблон Тогда
СтруктураШаблона = СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Получить(СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон]);
Если ПечатнаяФорма.ТабличныйДокумент = Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
КонецЕсли;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
// Применение настроек табличного документа.
ЗаполнитьЗначенияСвойств(ПечатнаяФорма.ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТовары[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТовары[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(
ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе) * УровеньЧеткости);
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе) * УровеньЧеткости);
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
Если СтрНайти(Рисунок.Имя, "ЗнакВалюты") = 1 Тогда
ЗначениеКодаВалюты = СтрокаТовары[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраКодВалюты())];
Попытка
Рисунок.Картинка = Новый Картинка(Справочники.ШаблоныЭтикетокИЦенников.ПолучитьМакет("ЗнакВалюты" + ЗначениеКодаВалюты), Истина);
Исключение
Рисунок.Картинка = Новый Картинка;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ПечатнаяФорма.ТабличныйДокумент.Вывести(Область);
Иначе
ПечатнаяФорма.ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ПечатнаяФорма.ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЕсли;
КонецЦикла; // Цикл по строкам таблицы товаров
КонецЦикла;
#КонецОбласти
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
Если ПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда
НоваяСтрока = КоллекцияПечатныхФормБСП.Добавить();
НоваяСтрока.ИмяМакета = ПечатнаяФорма.ИмяМакета;
НоваяСтрока.ИмяВРЕГ = ВРег(ПечатнаяФорма.ИмяМакета);
НоваяСтрока.Экземпляров = 1;
НоваяСтрока.ТабличныйДокумент = ПечатнаяФорма.ТабличныйДокумент;
НоваяСтрока.СинонимМакета = ПечатнаяФорма.СинонимМакета;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция СформироватьПечатнуюФормуЭтикеткиСкладскойЯчейки(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Ячейка");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаСкладскиеЯчейки";
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.СкладскиеЯчейки);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или Не ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ШаблонЭтикетки.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "СкладскиеЯчейки");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиДоставки(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Распоряжение");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЭтикетки");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаДоставка";
// Собираем используемые поля из шаблонов.
ТаблицаДоставки = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
СоответствиеШаблонов = Новый Соответствие;
Для Каждого СтрокаТЧ Из ТаблицаДоставки Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЭтикетки);
КонецЕсли;
КонецЦикла;
Если ДанныеПечати.Свойство("СтруктураМакетаШаблона") И ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СоответствиеШаблонов.Вставить(Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
КонецЕсли;
// Заполняем коллекцию обязательных полей и формируем соответствие шаблонов.
Для Каждого КлючИЗначение Из СоответствиеШаблонов Цикл
ШаблонЭтикетокИЦенников = КлючИЗначение.Ключ;
Если ЗначениеЗаполнено(ШаблонЭтикетокИЦенников) Тогда
СтруктураШаблона = ШаблонЭтикетокИЦенников.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
// Структура шаблонов.
СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Вставить(КлючИЗначение.Ключ, СтруктураШаблона);
// Добавляем в массив обязательных полей поля, присутствующие в печатной форме ценника.
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
КонецЦикла;
СтруктураНастроек.ИсходныеДанные = ТаблицаДоставки;
#Область ПодготовкаСтруктурыДанныхШаблона
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "Доставка");
// Подготовка коллекции печатных форм.
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиШаблон");
КоллекцияПечатныхФорм.Колонки.Добавить("Шаблон");
Для Каждого КлючИЗначение Из СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов Цикл
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Этикетка: "+КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Этикетка: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЭтикетки";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЦикла;
#КонецОбласти
ТабличныйДокумент = Новый ТабличныйДокумент;
КоличествоПоВертикали =0;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
НомерРяда = 0;
НомерКолонки = 0;
КоличествоПоВертикали = КоличествоПоВертикали + 1/СтруктураШаблона.КоличествоПоВертикали;
Если КоличествоПоВертикали > 1 Тогда
КоличествоПоВертикали =0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Для Каждого СтрокаТовары Из СтруктураРезультата.Таблица Цикл
Если СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон] = ПечатнаяФорма.Шаблон Тогда
СтруктураШаблона = СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Получить(СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон]);
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
// Применение настроек табличного документа.
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТовары[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерРяда = СтруктураШаблона.КоличествоПоВертикали И НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерРяда = 0;
НомерКолонки = 0;
КоличествоПоВертикали =0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КоличествоПоВертикали = КоличествоПоВертикали + 1/СтруктураШаблона.КоличествоПоВертикали;
КонецЕсли;
КонецЕсли;
КонецЦикла; // Цикл по строкам таблицы товаров
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиСерииНоменклатуры(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Серия");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаСерииНоменклатуры";
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или НЕ ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ШаблонЭтикетки, "Шаблон").Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "СерииНоменклатуры");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиУпаковочныеЛисты(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("УпаковочныйЛист");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаУпаковочныеЛисты";
Если Не ДанныеПечати.Свойство("ШаблонЭтикетки") Тогда
ШаблонЭтикетки = Константы.ШаблонЭтикеткиУпаковочногоЛиста.Получить();
Если Не ЗначениеЗаполнено(ШаблонЭтикетки) Тогда
ТекстИсключения = НСтр("ru = 'Печать этикетки не возможна, т.к. в настройках программы не выбран шаблон этикетки по умолчанию. Обратитесь к администратору.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Иначе
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КонецЕсли;
Если Не ДанныеПечати.Свойство("КоличествоЭкземпляров") Тогда
КоличествоЭкземпляров = 1;
Иначе
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
КонецЕсли;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или НЕ ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ШаблонЭтикетки, "Шаблон").Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "УпаковочныеЛисты");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#Область Прочее
Функция УстановитьЗначениеПараметраСКД(КомпоновщикНастроек, ИмяПараметра, ЗначениеПараметра, ИспользоватьНеЗаполненный = Истина)
ПараметрУстановлен = Ложь;
ПараметрКомпоновкиДанных = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
ЗначениеПараметраКомпоновкиДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновкиДанных);
Если ЗначениеПараметраКомпоновкиДанных <> Неопределено Тогда
ЗначениеПараметраКомпоновкиДанных.Значение = ЗначениеПараметра;
ЗначениеПараметраКомпоновкиДанных.Использование = ?(ИспользоватьНеЗаполненный, Истина, ЗначениеЗаполнено(ЗначениеПараметраКомпоновкиДанных.Значение));
ПараметрУстановлен = Истина;
КонецЕсли;
Возврат ПараметрУстановлен;
КонецФункции
// Функция возвращает пустую структуру настроек
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Структура - структура настроек.
Функция СтруктураНастроек() Экспорт
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("ИсходныеДанные", Неопределено);
СтруктураНастроек.Вставить("ОбязательныеПоля", Новый Массив);
СтруктураНастроек.Вставить("СоответствиеШаблоновИСтруктурыШаблонов", Новый Соответствие);
СтруктураНастроек.Вставить("ПараметрыДанных" , Новый Структура);
СтруктураНастроек.Вставить("КомпоновщикНастроек", Неопределено);
СтруктураНастроек.Вставить("ИмяМакетаСхемыКомпоновкиДанных", Неопределено);
Возврат СтруктураНастроек;
КонецФункции
Функция ДанныеДляПечатиЭтикетокДоставки(МассивОбъектов) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
МассивТекстовЗапроса = Новый Массив;
ТекущийОбъект = МассивОбъектов[0];
Если ТипЗнч(ТекущийОбъект) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ТекстЗапросаСозданияВТРаспоряженияПоЗаданию =
"ВЫБРАТЬ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка КАК ЗаданиеНаПеревозку,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик
| ИНАЧЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение.ПеревозчикПартнер
| КОНЕЦ КАК Перевозчик,
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.Вес КАК Вес,
| ЗаданиеНаПеревозкуРаспоряжения.Объем КАК Объем,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| И ЗаданиеНаПеревозкуРаспоряжения.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ДатаВремяРейсаПланС
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрдерныйСклад,
| ЗаданиеНаПеревозкуРаспоряжения.Склад КАК Склад,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| И ЕСТЬNULL(ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель ССЫЛКА Справочник.Партнеры
| И ЕСТЬNULL(ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ КАК ШаблонЭтикетки,
| СУММА(ЕСТЬNULL(РасходныйОрдерНаТовары.ВсегоМест, 0)) КАК ВсегоМест
|ПОМЕСТИТЬ РаспоряженияПоЗаданию
|ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
| ПО ЗаданиеНаПеревозкуРаспоряжения.Ссылка = РасходныйОрдерНаТовары.ЗаданиеНаПеревозку
|ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка В(&ПараметрКоманды)
| И НЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение ССЫЛКА Документ.ПоручениеЭкспедитору
|
|СГРУППИРОВАТЬ ПО
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| И ЗаданиеНаПеревозкуРаспоряжения.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ДатаВремяРейсаПланС
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| И ЕСТЬNULL(ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель ССЫЛКА Справочник.Партнеры
| И ЕСТЬNULL(ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик
| ИНАЧЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение.ПеревозчикПартнер
| КОНЕЦ,
| ЗаданиеНаПеревозкуРаспоряжения.Склад,
| ЗаданиеНаПеревозкуРаспоряжения.Объем,
| ЗаданиеНаПеревозкуРаспоряжения.Вес";
ТекстЗапросаПоРаспоряжению =
"ВЫБРАТЬ
| РаспоряженияПоЗаданию.Распоряжение КАК Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик КАК Перевозчик,
| РаспоряженияПоЗаданию.Вес КАК ВесНакладной,
| РаспоряженияПоЗаданию.Объем КАК ОбъемНакладной,
| РаспоряженияПоЗаданию.ШаблонЭтикетки КАК ШаблонЭтикетки,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументРаспоряжениеТовары.НомерСтроки) КАК КоличествоПозиций
|//ТекстЗапросаИмяТЧ
|ИЗ
| РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекстИмяТЧТовары КАК ДокументРаспоряжениеТовары
| ПО (&ТекстУсловияСоединенияШапкиИТЧ)
| И (&ТекстСоединенияСРаспоряжениемПоСкладу)
|ГДЕ
| НЕ РаспоряженияПоЗаданию.ОрдерныйСклад
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияПоЗаданию.Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик,
| РаспоряженияПоЗаданию.Вес,
| РаспоряженияПоЗаданию.Объем,
| РаспоряженияПоЗаданию.ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест";
МассивТекстовПоРаспоряжениям = Новый Массив;
ТипыРаспоряжений = Метаданные.ОпределяемыеТипы.РаспоряжениеНаДоставку.Тип.Типы();
ЭтоПервыйТип = Истина;
Для Каждого ТипРаспоряжения из ТипыРаспоряжений Цикл
МетаданныеРаспоряжения = Метаданные.НайтиПоТипу(ТипРаспоряжения);
Если Не ОбщегоНазначения.ЭтоДокумент(МетаданныеРаспоряжения)
Или МетаданныеРаспоряжения = Метаданные.Документы.ПоручениеЭкспедитору Тогда
Продолжить;
Иначе
ТекстЗапроса = ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияШапкиИТЧ", "РаспоряженияПоЗаданию.Распоряжение = ДокументРаспоряжениеТовары.Ссылка");
Если ЭтоПервыйТип Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//ТекстЗапросаИмяТЧ", "ПОМЕСТИТЬ ВТРаспоряженияИШаблоны");
ЭтоПервыйТип = Ложь;
КонецЕсли;
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЕсли;
КонецЦикла;
Если ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| РаспоряженияПоЗаданию.Распоряжение КАК Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик КАК Перевозчик,
| РаспоряженияПоЗаданию.Вес КАК ВесНакладной,
| РаспоряженияПоЗаданию.Объем КАК ОбъемНакладной,
| РаспоряженияПоЗаданию.ШаблонЭтикетки КАК ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест КАК КоличествоПозиций
|ИЗ
| РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
|ГДЕ
| РаспоряженияПоЗаданию.ОрдерныйСклад
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияПоЗаданию.Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик,
| РаспоряженияПоЗаданию.Вес,
| РаспоряженияПоЗаданию.Объем,
| РаспоряженияПоЗаданию.ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест";
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЕсли;
ТекстЗапросаВТРаспоряженияИШаблоны = СтрСоединить(МассивТекстовПоРаспоряжениям, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
ТекстВыборкиЗаданияБезРаспоряжений =
"ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка КАК Ссылка
| ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ЛЕВОЕ СОЕДИНЕНИЕ РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
| ПО ЗаданиеНаПеревозкуРаспоряжения.Ссылка = РаспоряженияПоЗаданию.ЗаданиеНаПеревозку
| ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка В(&ПараметрКоманды)
| И РаспоряженияПоЗаданию.ЗаданиеНаПеревозку ЕСТЬ NULL
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаданияНаПеревозку.Ссылка
| ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданияНаПеревозку
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ПО ЗаданияНаПеревозку.Ссылка = ЗаданиеНаПеревозкуРаспоряжения.Ссылка
| ГДЕ
| ЗаданияНаПеревозку.Ссылка В(&ПараметрКоманды)
| И ЗаданиеНаПеревозкуРаспоряжения.Ссылка ЕСТЬ NULL) КАК ВложенныйЗапрос
|ГДЕ
| НЕ ВложенныйЗапрос.Ссылка ЕСТЬ NULL";
МассивТекстовЗапроса.Добавить(ТекстЗапросаСозданияВТРаспоряженияПоЗаданию);
МассивТекстовЗапроса.Добавить(ТекстЗапросаВТРаспоряженияИШаблоны);
МассивТекстовЗапроса.Добавить(ТекстВыборкиЗаданияБезРаспоряжений);
Иначе
ТекстЗапросаПоРаспоряжению =
"ВЫБРАТЬ
| ДокументРаспоряжение.Ссылка КАК Распоряжение,
| ДокументРаспоряжение.ПеревозчикПартнер КАК Перевозчик,
| СУММА(ВЫБОР
| КОГДА ДокументРаспоряжениеТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ &ТекстЗапросаВесУпаковки = 0
| ТОГДА &ТекстЗапросаВесНоменклатуры * ДокументРаспоряжениеТовары.Количество
| ИНАЧЕ &ТекстЗапросаВесУпаковки * ДокументРаспоряжениеТовары.КоличествоУпаковок
| КОНЕЦ) КАК ВесНакладной,
| СУММА(ВЫБОР
| КОГДА ДокументРаспоряжениеТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ &ТекстЗапросаОбъемУпаковки = 0
| ТОГДА &ТекстЗапросаОбъемНоменклатуры * ДокументРаспоряжениеТовары.Количество
| ИНАЧЕ &ТекстЗапросаОбъемУпаковки * ДокументРаспоряжениеТовары.КоличествоУпаковок
| КОНЕЦ) КАК ОбъемНакладной,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументРаспоряжениеТовары.НомерСтроки) КАК КоличествоПозиций,
| ВЫБОР
| КОГДА (ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)
| ИЛИ ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.ДоКлиента))
| И ЕСТЬNULL(&ТекстЗапросаШаблонИзКарточкиПартнера, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА &ТекстЗапросаШаблонИзКарточкиПартнера
| КОГДА ЕСТЬNULL(ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ КАК ШаблонЭтикетки
|//ТекстЗапросаИмяТЧ
|ИЗ
| ТекстИмяШапкаДокумента КАК ДокументРаспоряжение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекстИмяТЧТовары КАК ДокументРаспоряжениеТовары
| ПО &ТекстУсловияСоединенияШапкиИТЧ
|ГДЕ
| ДокументРаспоряжение.Ссылка В(&ПараметрКоманды)
|
|СГРУППИРОВАТЬ ПО
| ДокументРаспоряжение.Ссылка,
| ДокументРаспоряжение.ПеревозчикПартнер,
| ВЫБОР
| КОГДА (ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)
| ИЛИ ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.ДоКлиента))
| И ЕСТЬNULL(&ТекстЗапросаШаблонИзКарточкиПартнера, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА &ТекстЗапросаШаблонИзКарточкиПартнера
| КОГДА ЕСТЬNULL(ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ";
СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
МассивТекстовПоРаспоряжениям = Новый Массив;
ЭтоПервыйТип = Истина;
Для Каждого КлючЗначение из СтруктураТипов Цикл
МетаданныеРаспоряжения = Метаданные.НайтиПоПолномуИмени(КлючЗначение.Ключ);
ТекстЗапроса = ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияШапкиИТЧ", "(ДокументРаспоряжениеТовары.Ссылка = ДокументРаспоряжение.Ссылка)");
Если ЭтоПервыйТип Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//ТекстЗапросаИмяТЧ", "ПОМЕСТИТЬ ВТРаспоряженияИШаблоны");
ЭтоПервыйТип = Ложь;
КонецЕсли;
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЦикла;
ТекстЗапросаВТРаспоряженияИШаблоны = СтрСоединить(МассивТекстовПоРаспоряжениям, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
МассивТекстовЗапроса.Добавить(ТекстЗапросаВТРаспоряженияИШаблоны);
КонецЕсли;
ТекстЗапросовВыборкиДанных =
"ВЫБРАТЬ
| ВТРаспоряженияИШаблоны.Распоряжение КАК Распоряжение,
| ВТРаспоряженияИШаблоны.ВесНакладной КАК ВесНакладной,
| ВТРаспоряженияИШаблоны.ОбъемНакладной КАК ОбъемНакладной,
| ВТРаспоряженияИШаблоны.КоличествоПозиций КАК КоличествоПозиций,
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки КАК ШаблонЭтикетки,
| &ЕдиницаИзмеренияВеса КАК ЕдиницаИзмеренияВеса,
| &ЕдиницаИзмеренияОбъема КАК ЕдиницаИзмеренияОбъема
|ИЗ
| ВТРаспоряженияИШаблоны КАК ВТРаспоряженияИШаблоны
|ГДЕ
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРаспоряженияИШаблоны.Распоряжение КАК Ссылка,
| ВТРаспоряженияИШаблоны.Перевозчик КАК Перевозчик
|ИЗ
| ВТРаспоряженияИШаблоны КАК ВТРаспоряженияИШаблоны
|ГДЕ
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки = ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)";
МассивТекстовЗапроса.Добавить(ТекстЗапросовВыборкиДанных);
ТекстЗапроса = СтрСоединить(МассивТекстовЗапроса, ОбщегоНазначенияУТ.РазделительЗапросовВПакете());
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ШаблонЭтикеткиДоставки", Константы.ШаблонЭтикеткиДляДоставки.Получить());
Запрос.УстановитьПараметр("ЕдиницаИзмеренияВеса", Константы.ЕдиницаИзмеренияВеса.Получить());
Запрос.УстановитьПараметр("ЕдиницаИзмеренияОбъема", Константы.ЕдиницаИзмеренияОбъема.Получить());
Запрос.УстановитьПараметр("ПараметрКоманды", МассивОбъектов);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ТаблицаДоставки = РезультатЗапроса[РезультатЗапроса.ВГраница() - 1].Выгрузить();
ТаблицаОшибок = РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить();
Если ТипЗнч(ТекущийОбъект) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ЗаданияБезРаспоряжений = РезультатЗапроса[РезультатЗапроса.ВГраница() - 2].Выгрузить();
ДоставкаНаНашСклад = ТекущийОбъект.Операция = ПредопределенноеЗначение("Перечисление.ВидыДоставки.НаСклад");
Иначе
ЗаданияБезРаспоряжений = Неопределено;
ДоставкаНаНашСклад = Ложь;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("МассивСсылокСОшибками",ТаблицаОшибок.ВыгрузитьКолонку("Ссылка"));
СтруктураВозврата.Вставить("ДоставкаНаНашСклад",ДоставкаНаНашСклад);
ТаблицаОшибок.Свернуть("Перевозчик");
СтруктураВозврата.Вставить("МассивПеревозчиковБезШаблоновЭтикетки",ТаблицаОшибок.ВыгрузитьКолонку("Перевозчик"));
ЕстьЭтикеткиДляПечати = ТаблицаДоставки.Количество() > 0;
СтруктураВозврата.Вставить("ЕстьЭтикеткиДляПечати",ЕстьЭтикеткиДляПечати);
Если ЕстьЭтикеткиДляПечати Тогда
СтруктураВозврата.Вставить("АдресВХранилище",ПоместитьВоВременноеХранилище(ТаблицаДоставки));
КонецЕсли;
Если ЗаданияБезРаспоряжений <> Неопределено
И ЗаданияБезРаспоряжений.Количество() > 0 Тогда
СтруктураВозврата.Вставить("МассивЗаданийБезРаспоряжений", ЗаданияБезРаспоряжений.ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
Функция ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению)
ИменаТЧТовары = Новый Соответствие;
ИменаТЧТовары.Вставить(Метаданные.Документы.ЗаявкаНаВозвратТоваровОтКлиента,"ЗаменяющиеТовары");
//++ НЕ УТ
ИменаТЧТовары.Вставить(Метаданные.Документы.ЗаказПереработчику,"Материалы");
//-- НЕ УТ
Если МетаданныеРаспоряжения.ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
ИмяТЧТовары = "Товары";
Иначе
ИмяТЧТовары = ИменаТЧТовары.Получить(МетаданныеРаспоряжения);
Если ИмяТЧТовары = Неопределено Тогда
ТекстИсключения = НСтр("ru = 'Для типа %ТипРаспоряжения% распоряжения на доставку не определен запрос выборки данных доставки.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ТипРаспоряжения%", МетаданныеРаспоряжения.ПолноеИмя());
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапросаПоРаспоряжению, "ТекстИмяТЧТовары", МетаданныеРаспоряжения.ПолноеИмя() + "." + ИмяТЧТовары);
Если МетаданныеРаспоряжения.ТабличныеЧасти[ИмяТЧТовары].Реквизиты.Найти("Склад") <> Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияСРаспоряжениемПоСкладу",
"РаспоряженияПоЗаданию.Склад = ДокументРаспоряжениеТовары.Склад");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияСРаспоряжениемПоСкладу",
"ИСТИНА");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекстИмяШапкаДокумента", МетаданныеРаспоряжения.ПолноеИмя());
Если МетаданныеРаспоряжения.Реквизиты.Найти("Партнер") <> Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаШаблонИзКарточкиПартнера",
"ДокументРаспоряжение.Партнер.ШаблонЭтикетки");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаШаблонИзКарточкиПартнера",
"NULL");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаВесНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("ДокументРаспоряжениеТовары.Номенклатура.ЕдиницаИзмерения", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаОбъемНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("ДокументРаспоряжениеТовары.Номенклатура.ЕдиницаИзмерения", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаВесУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("ДокументРаспоряжениеТовары.Упаковка", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаОбъемУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("ДокументРаспоряжениеТовары.Упаковка", "ДокументРаспоряжениеТовары.Номенклатура"));
Возврат ТекстЗапроса;
КонецФункции
Функция ДанныеДляПечатиЭтикетокУпаковочныеЛисты(ОбъектыПечати) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Если ТипЗнч(ОбъектыПечати[0]) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист.Код КАК Штрихкод
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|ГДЕ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка В(&ОбъектыПечати)";
ИначеЕсли ТипЗнч(ОбъектыПечати[0]) = Тип("ДокументСсылка.УпаковочныйЛист") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| УпаковочныйЛист.Ссылка,
| УпаковочныйЛист.Код КАК Штрихкод
|ИЗ
| Документ.УпаковочныйЛист КАК УпаковочныйЛист
|ГДЕ
| УпаковочныйЛист.Ссылка В(&ОбъектыПечати)";
Иначе
Возврат Новый Структура ("ЕстьШаблонЭтикетки",Ложь);
КонецЕсли;
Запрос.УстановитьПараметр("ОбъектыПечати",ОбъектыПечати);
ТаблицаУпаковочныхЛистов = Запрос.Выполнить().Выгрузить();
ЕстьЭтикеткиДляПечати = ТаблицаУпаковочныхЛистов.Количество() > 0;
ШаблонЭтикетки = Константы.ШаблонЭтикеткиУпаковочногоЛиста.Получить();
ЕстьШаблонЭтикетки = ЗначениеЗаполнено(ШаблонЭтикетки);
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ЕстьШаблонЭтикетки", ЕстьШаблонЭтикетки);
СтруктураВозврата.Вставить("ШаблонЭтикетки", ШаблонЭтикетки);
СтруктураВозврата.Вставить("ЕстьЭтикеткиДляПечати", ЕстьЭтикеткиДляПечати);
Если ЕстьЭтикеткиДляПечати Тогда
СтруктураВозврата.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ТаблицаУпаковочныхЛистов));
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
Функция ЗаменитьСпецСимволы(Знач ВходящаяСтрока)
Перем Результат;
Результат = СтрЗаменить(ВходящаяСтрока, ".", "");
Результат = СтрЗаменить(Результат, " ", "");
Результат = СтрЗаменить(Результат, "[", "_");
Результат = СтрЗаменить(Результат, "]", "_");
Результат = СтрЗаменить(Результат, "(", "_");
Результат = СтрЗаменить(Результат, ")", "_");
Результат = СтрЗаменить(Результат, "*", "_");
Результат = СтрЗаменить(Результат, "-", "_");
Результат = СтрЗаменить(Результат, "+", "_");
Результат = СтрЗаменить(Результат, "/", "_");
Результат = СтрЗаменить(Результат, "@", "_");
Результат = СтрЗаменить(Результат, "#", "_");
Результат = СтрЗаменить(Результат, "$", "_");
Результат = СтрЗаменить(Результат, "%", "_");
Результат = СтрЗаменить(Результат, "^", "_");
Результат = СтрЗаменить(Результат, "&", "_");
Результат = СтрЗаменить(Результат, "*", "_");
Результат = СтрЗаменить(Результат, ">", "_");
Результат = СтрЗаменить(Результат, "<", "_");
Результат = СтрЗаменить(Результат, "?", "_");
Результат = СтрЗаменить(Результат, ",", "_");
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
Модуль менеджера обработки ПечатьЭтикетокИЦенников ред 2.5
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Функция подготавливает структуру данных, необходимую для печати ценников и этикеток.
//
// Возвращаемое значение:
// Структура - данные, необходимые для печати этикеток и ценников.
//
Функция ПодготовитьСтруктуруДанных(СтруктураНастроек, Режим) Экспорт
Если СтруктураНастроек.ИсходныеДанные <> Неопределено Тогда
ИсходныеДанные = СтруктураНастроек.ИсходныеДанные.Скопировать();
Иначе
ИсходныеДанные = Неопределено;
КонецЕсли;
СтруктураРезультата = Новый Структура;
СтруктураРезультата.Вставить("Таблица", Неопределено);
СтруктураРезультата.Вставить("СоответствиеПолейСКДКолонкамТаблицы", Новый Соответствие);
// Схема компоновки.
Если Режим = "ОбъектыЭксплуатации" Тогда
//++ НЕ УТ
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокОбъектовЭксплуатации.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных);
//++ Локализация
ИначеЕсли Режим = "ТМЦВЭксплуатации" Тогда
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокТМЦВЭксплуатации.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных);
//-- Локализация
//-- НЕ УТ
Иначе
СхемаКомпоновкиДанных = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных);
КонецЕсли;
НаборДанныхВСКДЗапрос = ТипЗнч(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных");
Если НаборДанныхВСКДЗапрос Тогда
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"УпаковкиНоменклатуры",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиВладельцы.Упаковка",
"ЕдиничныеУпаковкиВладельцы.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанные.Упаковка",
"ИсходныеДанные.Номенклатура"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЕдиничныеУпаковкиНоменклатур.Упаковка",
"ЕдиничныеУпаковкиНоменклатур.Номенклатура"));
ПечатьЭтикетокИЦенниковЛокализация.ПриПодготовкеСтруктурыДанныхНабора(Режим, СхемаКомпоновкиДанных, ТекстЗапроса);
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = ТекстЗапроса;
КонецЕсли;
// Возможно изменение схемы компоновки данных.
ДанныеПолученияВыражений = РаботаСФормулами.ДанныеДляПолученияВыраженийФормулЧерезСКД(СхемаКомпоновкиДанных,
СтруктураНастроек.ОбязательныеПоля, Истина);
ПоляДляВыборки = Новый Массив;
НомерПоля = 0;
// Хранит назначенные имена вычисляемым полям. Для получения данных в СКД (содержатся наборы объекты).
ИменаКолонокДляСКД = Новый Соответствие;
// Хранит исходные выражения, указанные в макете печати. Для получения данных в запросе (содержатся наборы запросы).
ИсходныеВыраженияДляЗапроса = Новый Соответствие;
Для Каждого ПреобразованиеВыражения Из ДанныеПолученияВыражений.ПреобразованныеВыражения Цикл
ИсходноеВыражение = ПреобразованиеВыражения.Ключ;
РезультатПреобразования = ПреобразованиеВыражения.Значение;
Если ЗначениеЗаполнено(РезультатПреобразования) Тогда
Если СтрНайти(РезультатПреобразования, ".") > 0 Тогда
НомерПоля = НомерПоля + 1;
ИмяПоля = "ВычисляемоеПоле" + Формат(НомерПоля, "ЧН=0; ЧГ=0;");
ФинансоваяОтчетностьСервер.НовоеВычисляемоеПоле(СхемаКомпоновкиДанных,
ИмяПоля,
РезультатПреобразования);
ПоляДляВыборки.Добавить(ИмяПоля);
Если НЕ НаборДанныхВСКДЗапрос Тогда
ИменаКолонокДляСКД.Вставить(ИсходноеВыражение, ЗаменитьСпецСимволы(ИмяПоля));
КонецЕсли;
Иначе
// Исходное поле компоновки.
ПоляДляВыборки.Добавить(РезультатПреобразования);
Если НЕ НаборДанныхВСКДЗапрос Тогда
ИменаКолонокДляСКД.Вставить(ИсходноеВыражение, ЗаменитьСпецСимволы(РезультатПреобразования));
КонецЕсли;
КонецЕсли;
Если НаборДанныхВСКДЗапрос Тогда
ИсходныеВыраженияДляЗапроса.Вставить(РезультатПреобразования, ИсходноеВыражение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Подготовка компоновщика макета компоновки данных.
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Компоновщик.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Компоновщик.Настройки.Отбор.Элементы.Очистить();
// Отбор компоновщика настроек.
Если СтруктураНастроек.КомпоновщикНастроек <> Неопределено Тогда
КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(Компоновщик.Настройки.Отбор, СтруктураНастроек.КомпоновщикНастроек.Настройки.Отбор);
КонецЕсли;
Для Каждого ИмяПоля Из ПоляДляВыборки Цикл
ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
КонецЦикла;
Если Режим = "Товары" Тогда
// Заполнение параметров.
Для Каждого ПараметрДанных Из СтруктураНастроек.ПараметрыДанных Цикл
Если ПараметрДанных.Ключ = "Склад" Тогда // Если склад не заполнен - не используем параметр
УстановитьЗначениеПараметраСКД(Компоновщик, ПараметрДанных.Ключ, ПараметрДанных.Значение, Ложь);
Иначе
УстановитьЗначениеПараметраСКД(Компоновщик, ПараметрДанных.Ключ, ПараметрДанных.Значение);
КонецЕсли;
КонецЦикла;
УстановитьЗначениеПараметраСКД(Компоновщик, "ТекущееВремя", ТекущаяДатаСеанса());
УстановитьЗначениеПараметраСКД(Компоновщик, "ТекущийПользователь", Пользователи.ТекущийПользователь());
СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(Компоновщик);
КонецЕсли;
// Компоновка макета компоновки данных.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Компоновщик.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Если НаборДанныхВСКДЗапрос Тогда
Для Каждого НаборДанных из МакетКомпоновкиДанных.НаборыДанных Цикл
Для каждого Поле Из НаборДанных.Поля Цикл
РезультатПреобразования = Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(Поле.ПутьКДанным);
ИсходноеВыражение = ИсходныеВыраженияДляЗапроса.Получить(РезультатПреобразования);
Если ИсходноеВыражение = Неопределено Тогда
ИсходноеВыражение = РезультатПреобразования;
КонецЕсли;
СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Вставить(
ИсходноеВыражение,
ЗаменитьСпецСимволы(Поле.Имя));
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого ПреобразованиеВыражения Из ДанныеПолученияВыражений.ПреобразованныеВыражения Цикл
ИсходноеВыражение = ПреобразованиеВыражения.Ключ;
ИмяКолонкиВРежимеСКД = ИменаКолонокДляСКД.Получить(ИсходноеВыражение);
СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Вставить(
Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ИсходноеВыражение),
ИмяКолонкиВРежимеСКД);
КонецЦикла;
КонецЕсли;
Если НаборДанныхВСКДЗапрос Тогда
Запрос = Новый Запрос(МакетКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос);
// Заполнение параметров с полей отбора компоновщика настроек формы обработки.
Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
Запрос.Параметры.Вставить(Параметр.Имя, Параметр.Значение);
КонецЦикла;
КонецЕсли;
Если Режим = "Товары" Тогда
// Подмена запроса для расчета цен...
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
ЗаменяемыйТекст = "ЦеныНоменклатурыСрезПоследних.Цена";
ТекстЗамены = " ВЫРАЗИТЬ(
| ЦеныНоменклатурыСрезПоследних.Цена
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1)
| *
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) КАК ЧИСЛО(31,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследних.Упаковка",
"ЦеныНоменклатурыСрезПоследних.Номенклатура"));
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
ЗаменяемыйТекст = "ЦеныНоменклатурыСрезПоследнихДополнительно.Цена";
ТекстЗамены = " ВЫРАЗИТЬ(
| ЦеныНоменклатурыСрезПоследнихДополнительно.Цена
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1)
| *
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) КАК ЧИСЛО(31,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследнихДополнительно.Упаковка",
"ЦеныНоменклатурыСрезПоследнихДополнительно.Номенклатура"));
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
//асп+
ЗаменяемыйТекст = "ЦеныНоменклатурыСрезПоследнихДополнительно1.Цена";
ТекстЗамены = " ВЫРАЗИТЬ(
| ЦеныНоменклатурыСрезПоследнихДополнительно1.Цена
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1)
| *
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1) КАК ЧИСЛО(31,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатурыСрезПоследнихДополнительно1.Упаковка",
"ЦеныНоменклатурыСрезПоследнихДополнительно1.Номенклатура"));
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
//асп+
ЗаменяемыйТекст = "ТоварыНаСкладахОстатки.ВНаличииОстаток";
ТекстЗамены = " ВЫРАЗИТЬ(
| ТоварыНаСкладахОстатки.ВНаличииОстаток
| /
| ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) КАК ЧИСЛО(31,2)) ";
ТекстЗамены = СтрЗаменить(ТекстЗамены, "&ТекстЗапросаКоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ИсходныеДанныеПоследнийЗапрос.Упаковка",
"ИсходныеДанныеПоследнийЗапрос.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, ЗаменяемыйТекст, ТекстЗамены);
КонецЕсли;
// Подмена запроса при печати этикеток...
Если ИсходныеДанные <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Запрос.Текст = СтрЗаменить(Запрос.Текст, """КоличествоЦенников""", "ИсходныеДанные.КоличествоЦенников");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """КоличествоЭтикеток""", "ИсходныеДанные.КоличествоЭтикеток");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КОЛИЧЕСТВО(ИсходныеДанные.КоличествоЦенников)",
"СУММА(ИсходныеДанные.КоличествоЦенниковДляПечати)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "КОЛИЧЕСТВО(ИсходныеДанные.КоличествоЭтикеток)",
"СУММА(ИсходныеДанные.КоличествоЭтикеток)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ШаблонЦенника""", "ИсходныеДанные.ШаблонЦенника");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ШаблонЭтикетки""", "ИсходныеДанные.ШаблонЭтикетки");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """Штрихкод""", "ИсходныеДанные.Штрихкод");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """Цена""", "ИсходныеДанные.Цена");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ЦенаДополнительно""", "ИсходныеДанные.ЦенаДополнительно");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ЦенаДополнительно1""", "ИсходныеДанные.ЦенаДополнительно1");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ДатаПоследнегоИзмененияЦены""", "ИсходныеДанные.ДатаПоследнегоИзмененияЦены");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ДатаПоследнегоИзмененияЦеныДополнительно""", "ИсходныеДанные.ДатаПоследнегоИзмененияЦеныДополнительно");
Запрос.Текст = СтрЗаменить(Запрос.Текст, """ДатаПоследнегоИзмененияЦеныДополнительно1""", "ИсходныеДанные.ДатаПоследнегоИзмененияЦеныДополнительно1");
Иначе
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| 0 КАК Порядок,
| 0 КАК Количество)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", ТекстВременнойТаблицы);
КонецЕсли;
ИначеЕсли Режим = "СкладскиеЯчейки" Тогда
Если ИсходныеДанные <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Иначе
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) КАК Ячейка,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", ТекстВременнойТаблицы);
КонецЕсли;
ИначеЕсли Режим = "СерииНоменклатуры" Тогда
Если ИсходныеДанные <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Иначе
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК Серия,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", ТекстВременнойТаблицы);
КонецЕсли;
ИначеЕсли Режим = "Доставка" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ИсходныеДанныеНакладных", ИсходныеДанные);
Результат = Новый ТаблицаЗначений;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
СтруктураРезультата.Таблица = Результат;
КонецЕсли;
ИначеЕсли Режим = "УпаковочныеЛисты" Тогда
Если ИсходныеДанные <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Иначе
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Документ.УпаковочныйЛист.ПустаяСсылка) КАК Ссылка,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", ТекстВременнойТаблицы);
КонецЕсли;
//++ Локализация
ИначеЕсли Режим = "ТМЦВЭксплуатации" Тогда
Если ИсходныеДанные <> Неопределено Тогда
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.ПартииТМЦВЭксплуатации.ПустаяСсылка) КАК Номенклатура,
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
| ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК Серия,
| ЗНАЧЕНИЕ(Справочник.ПартииТМЦВЭксплуатации.ПустаяСсылка) КАК Партия,
| """" КАК ИнвентарныйНомер,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, ТекстВременнойТаблицы, "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
КонецЕсли;
//-- Локализация
//++ НЕ УТ
ИначеЕсли Режим = "ОбъектыЭксплуатации" Тогда
Если ИсходныеДанные <> Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", "&Таблица");
ОбщегоНазначенияУТ.ПронумероватьТаблицуЗначений(ИсходныеДанные, "Порядок");
Запрос.Параметры.Вставить("Таблица", ИсходныеДанные);
Иначе
ТекстВременнойТаблицы =
" (ВЫБРАТЬ
| ЗНАЧЕНИЕ(Справочник.ОбъектыЭксплуатации.ПустаяСсылка) КАК ОбъектЭксплуатации,
| """" КАК Штрихкод,
| 0 КАК Порядок)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИсходныеДанныеПереопределяемый", ТекстВременнойТаблицы);
КонецЕсли;
//-- НЕ УТ
КонецЕсли;
ПечатьЭтикетокИЦенниковЛокализация.ПриПодготовкеСтруктурыДанныхДляПечати(СтруктураНастроек, Режим, Запрос, ИсходныеДанные);
Если НаборДанныхВСКДЗапрос Тогда
СтруктураРезультата.Таблица = Запрос.Выполнить().Выгрузить();
КонецЕсли;
Возврат СтруктураРезультата;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Печать
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УстановитьПривилегированныйРежим(Истина);
ПечатьЭтикетокИЦенниковЛокализация.ПриПечати(КоллекцияПечатныхФорм, ПараметрыПечати, ОбъектыПечати);
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЦенникТовары")
Или УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаТовары") Тогда
СформироватьПечатныеФормыЭтикетокИЦенниковТоваров(ПараметрыПечати, ОбъектыПечати, КоллекцияПечатныхФорм);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаСкладскиеЯчейки") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиСкладскойЯчейки(ПараметрыПечати, ОбъектыПечати);
СинонимМакета = НСтр("ru = 'Этикетки складских ячеек'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаСкладскиеЯчейки",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаСерииНоменклатуры") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиСерииНоменклатуры(ПараметрыПечати, ОбъектыПечати);
СинонимМакета = НСтр("ru = 'Этикетки серий номенклатуры'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаСерииНоменклатуры",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаДоставки") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиДоставки(ПараметрыПечати, ОбъектыПечати, КоллекцияПечатныхФорм);
СинонимМакета = НСтр("ru = 'Этикетки доставки'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаДоставки",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаУпаковочныеЛисты") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуЭтикеткиУпаковочныеЛисты(ПараметрыПечати, ОбъектыПечати);
СинонимМакета = НСтр("ru = 'Этикетки упаковочных листов'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаУпаковочныеЛисты",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
//++ НЕ УТ
//++ Локализация
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаТМЦВЭксплуатации") Тогда
ТабличныйДокумент = Обработки.ПечатьЭтикетокТМЦВЭксплуатации.СформироватьПечатнуюФормуЭтикеткиТМЦВЭксплуатации(
ПараметрыПечати, МассивОбъектов);
СинонимМакета = НСтр("ru = 'Этикетки ТМЦ в эксплуатации'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаТМЦВЭксплуатации",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
//-- Локализация
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЭтикеткаОбъектовЭксплуатации") Тогда
ТабличныйДокумент = Обработки.ПечатьЭтикетокОбъектовЭксплуатации.СформироватьПечатнуюФормуЭтикеткиОбъектовЭксплуатации(
ПараметрыПечати, МассивОбъектов);
СинонимМакета = НСтр("ru = 'Этикетки объектов эксплуатации'");
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ЭтикеткаОбъектовЭксплуатации",
СинонимМакета,
ТабличныйДокумент);
КонецЕсли;
//-- НЕ УТ
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
КонецПроцедуры
Процедура СформироватьПечатныеФормыЭтикетокИЦенниковТоваров(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП)
ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.Товары);
НужноПечататьЭтикетки = Ложь;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФормБСП, "ЭтикеткаТовары") Тогда
НужноПечататьЭтикетки = Истина;
КоллекцияПечатныхФормБСП.Удалить(КоллекцияПечатныхФормБСП.Найти(ВРег("ЭтикеткаТовары"), "ИмяВРЕГ"));
КонецЕсли;
НужноПечататьЦенники = Ложь;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФормБСП, "ЦенникТовары") Тогда
НужноПечататьЦенники = Истина;
КоллекцияПечатныхФормБСП.Удалить(КоллекцияПечатныхФормБСП.Найти(ВРег("ЦенникТовары"), "ИмяВРЕГ"));
КонецЕсли;
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("КоличествоЦенниковДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("КоличествоЭтикетокДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЦенникаДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЭтикеткиДляПечати");
СтруктураНастроек.ОбязательныеПоля.Добавить("Номенклатура");
Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Характеристика");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
СтруктураНастроек.ОбязательныеПоля.Добавить("Упаковка");
КонецЕсли;
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаПечатьТовары";
// Собираем используемые поля из шаблонов.
СоответствиеШаблонов = Новый Соответствие;
Для Каждого СтрокаТЧ Из ИсходныеДанные Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) И СтрокаТЧ.КоличествоЭтикеток > 0 И НужноПечататьЭтикетки Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЭтикетки);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЦенника) И СтрокаТЧ.КоличествоЦенников > 0 И НужноПечататьЦенники Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЦенника);
КонецЕсли;
КонецЦикла;
Если ДанныеПечати.Свойство("СтруктураМакетаШаблона") И ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СоответствиеШаблонов.Вставить(Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
КонецЕсли;
// Заполняем коллекцию обязательных полей и формируем соответствие шаблонов.
Для Каждого КлючИЗначение ИЗ СоответствиеШаблонов Цикл
ШаблонЭтикетокИЦенников = КлючИЗначение.Ключ;
Если ЗначениеЗаполнено(ШаблонЭтикетокИЦенников) Тогда
СтруктураШаблона = КлючИЗначение.Ключ.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
// Структура шаблонов.
СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Вставить(ШаблонЭтикетокИЦенников, СтруктураШаблона);
// Добавляем в массив обязательных полей поля, присутствующие в печатной форме ценника.
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
КонецЦикла;
СтруктураНастроек.ПараметрыДанных.Вставить("Организация", ДанныеПечати.Организация);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоОбмена", ДанныеПечати.ПравилоОбмена);
СтруктураНастроек.ПараметрыДанных.Вставить("МаксимальныйКодВесовогоТовара", ДанныеПечати.МаксимальныйКодВесовогоТовара);
СтруктураНастроек.ПараметрыДанных.Вставить("ПравилоВыгрузкиВВесы", ДанныеПечати.ПравилоВыгрузкиВВесы);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦены", ДанныеПечати.ВидЦены);
СтруктураНастроек.ПараметрыДанных.Вставить("Дата", ДанныеПечати.Дата);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦеныДополнительно", ДанныеПечати.ВидЦеныДополнительно);
СтруктураНастроек.ПараметрыДанных.Вставить("ДатаДополнительно", ДанныеПечати.ДатаДополнительно);
СтруктураНастроек.ПараметрыДанных.Вставить("ВидЦеныДополнительно1", ДанныеПечати.ВидЦеныДополнительно1);
СтруктураНастроек.ПараметрыДанных.Вставить("ДатаДополнительно1", ДанныеПечати.ДатаДополнительно1);
СтруктураНастроек.ИсходныеДанные = ИсходныеДанные;
#Область ПодготовкаСтруктурыДанныхШаблона
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
#КонецОбласти
#Область ФормированиеТабличногоДокумента
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
РисунокКвадрат = Эталон.Рисунки.Квадрат100Пикселей; // РисунокТабличногоДокумента
КоличествоМиллиметровВПикселе = РисунокКвадрат.Высота / 100;
// Подготовка коллекции печатных форм.
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиКоличество");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиШаблон");
КоллекцияПечатныхФорм.Колонки.Добавить("Шаблон");
Для Каждого КлючИЗначение Из СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов Цикл
Если ((ЗначениеЗаполнено(КлючИЗначение.Ключ)
И КлючИЗначение.Ключ.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров)
ИЛИ Не ЗначениеЗаполнено(КлючИЗначение.Ключ))
И НужноПечататьЭтикетки Тогда
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Этикетка: "+КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Этикетка: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиКоличество = "КоличествоЭтикетокДляПечати";
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЭтикеткиДляПечати";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЕсли;
Если ((ЗначениеЗаполнено(КлючИЗначение.Ключ)
И КлючИЗначение.Ключ.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров)
ИЛИ Не ЗначениеЗаполнено(КлючИЗначение.Ключ))
И НужноПечататьЦенники Тогда
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Ценник: " + КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ценник: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиКоличество = "КоличествоЦенниковДляПечати";
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЦенникаДляПечати";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЕсли;
КонецЦикла;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
НомерКолонки = 0;
НомерРяда = 0;
Для Каждого СтрокаТовары Из СтруктураРезультата.Таблица Цикл
Если СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] > 0 И СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон] = ПечатнаяФорма.Шаблон Тогда
СтруктураШаблона = СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Получить(СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон]);
Если ПечатнаяФорма.ТабличныйДокумент = Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
КонецЕсли;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
// Применение настроек табличного документа.
ЗаполнитьЗначенияСвойств(ПечатнаяФорма.ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТовары[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТовары[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(
ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе) * УровеньЧеткости);
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе) * УровеньЧеткости);
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
Если СтрНайти(Рисунок.Имя, "ЗнакВалюты") = 1 Тогда
ЗначениеКодаВалюты = СтрокаТовары[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраКодВалюты())];
Попытка
Рисунок.Картинка = Новый Картинка(Справочники.ШаблоныЭтикетокИЦенников.ПолучитьМакет("ЗнакВалюты" + ЗначениеКодаВалюты), Истина);
Исключение
Рисунок.Картинка = Новый Картинка;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ПечатнаяФорма.ТабличныйДокумент.Вывести(Область);
Иначе
ПечатнаяФорма.ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ПечатнаяФорма.ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЕсли;
КонецЦикла; // Цикл по строкам таблицы товаров
КонецЦикла;
#КонецОбласти
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
Если ПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда
НоваяСтрока = КоллекцияПечатныхФормБСП.Добавить();
НоваяСтрока.ИмяМакета = ПечатнаяФорма.ИмяМакета;
НоваяСтрока.ИмяВРЕГ = ВРег(ПечатнаяФорма.ИмяМакета);
НоваяСтрока.Экземпляров = 1;
НоваяСтрока.ТабличныйДокумент = ПечатнаяФорма.ТабличныйДокумент;
НоваяСтрока.СинонимМакета = ПечатнаяФорма.СинонимМакета;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция СформироватьПечатнуюФормуЭтикеткиСкладскойЯчейки(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Ячейка");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаСкладскиеЯчейки";
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.СкладскиеЯчейки);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или Не ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ШаблонЭтикетки.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "СкладскиеЯчейки");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
РисунокКвадрат = Эталон.Рисунки.Квадрат100Пикселей; // РисунокТабличногоДокумента
КоличествоМиллиметровВПикселе = РисунокКвадрат.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиДоставки(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Распоряжение");
СтруктураНастроек.ОбязательныеПоля.Добавить("ШаблонЭтикетки");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаДоставка";
// Собираем используемые поля из шаблонов.
ТаблицаДоставки = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
СоответствиеШаблонов = Новый Соответствие;
Для Каждого СтрокаТЧ Из ТаблицаДоставки Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) Тогда
СоответствиеШаблонов.Вставить(СтрокаТЧ.ШаблонЭтикетки);
КонецЕсли;
КонецЦикла;
Если ДанныеПечати.Свойство("СтруктураМакетаШаблона") И ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СоответствиеШаблонов.Вставить(Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
КонецЕсли;
// Заполняем коллекцию обязательных полей и формируем соответствие шаблонов.
Для Каждого КлючИЗначение Из СоответствиеШаблонов Цикл
ШаблонЭтикетокИЦенников = КлючИЗначение.Ключ;
Если ЗначениеЗаполнено(ШаблонЭтикетокИЦенников) Тогда
СтруктураШаблона = ШаблонЭтикетокИЦенников.Шаблон.Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
// Структура шаблонов.
СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Вставить(КлючИЗначение.Ключ, СтруктураШаблона);
// Добавляем в массив обязательных полей поля, присутствующие в печатной форме ценника.
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
КонецЦикла;
СтруктураНастроек.ИсходныеДанные = ТаблицаДоставки;
#Область ПодготовкаСтруктурыДанныхШаблона
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "Доставка");
// Подготовка коллекции печатных форм.
КоллекцияПечатныхФорм = Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("СинонимМакета");
КоллекцияПечатныхФорм.Колонки.Добавить("ТабличныйДокумент");
КоллекцияПечатныхФорм.Колонки.Добавить("ИмяКолонкиШаблон");
КоллекцияПечатныхФорм.Колонки.Добавить("Шаблон");
Для Каждого КлючИЗначение Из СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов Цикл
ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить();
ПечатнаяФорма.ИмяМакета = "Этикетка: "+КлючИЗначение.Ключ;
ПечатнаяФорма.СинонимМакета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Этикетка: %1'"), КлючИЗначение.Ключ);
ПечатнаяФорма.ИмяКолонкиШаблон = "ШаблонЭтикетки";
ПечатнаяФорма.Шаблон = КлючИЗначение.Ключ;
КонецЦикла;
#КонецОбласти
ТабличныйДокумент = Новый ТабличныйДокумент;
КоличествоПоВертикали =0;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
НомерРяда = 0;
НомерКолонки = 0;
КоличествоПоВертикали = КоличествоПоВертикали + 1/СтруктураШаблона.КоличествоПоВертикали;
Если КоличествоПоВертикали > 1 Тогда
КоличествоПоВертикали =0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Для Каждого СтрокаТовары Из СтруктураРезультата.Таблица Цикл
Если СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон] = ПечатнаяФорма.Шаблон Тогда
СтруктураШаблона = СтруктураНастроек.СоответствиеШаблоновИСтруктурыШаблонов.Получить(СтрокаТовары[ПечатнаяФорма.ИмяКолонкиШаблон]);
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати); // ТабличныйДокумент
// Применение настроек табличного документа.
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТовары[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерРяда = СтруктураШаблона.КоличествоПоВертикали И НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерРяда = 0;
НомерКолонки = 0;
КоличествоПоВертикали =0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КоличествоПоВертикали = КоличествоПоВертикали + 1/СтруктураШаблона.КоличествоПоВертикали;
КонецЕсли;
КонецЕсли;
КонецЦикла; // Цикл по строкам таблицы товаров
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиСерииНоменклатуры(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("Серия");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаСерииНоменклатуры";
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или НЕ ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ШаблонЭтикетки, "Шаблон").Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "СерииНоменклатуры");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
РисунокКвадрат = Эталон.Рисунки.Квадрат100Пикселей; // РисунокТабличногоДокумента
КоличествоМиллиметровВПикселе = РисунокКвадрат.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
Функция СформироватьПечатнуюФормуЭтикеткиУпаковочныеЛисты(ДанныеПечати, ОбъектыПечати)
СтруктураНастроек = СтруктураНастроек();
СтруктураНастроек.ОбязательныеПоля.Добавить("УпаковочныйЛист");
СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаУпаковочныеЛисты";
Если Не ДанныеПечати.Свойство("ШаблонЭтикетки") Тогда
ШаблонЭтикетки = Константы.ШаблонЭтикеткиУпаковочногоЛиста.Получить();
Если Не ЗначениеЗаполнено(ШаблонЭтикетки) Тогда
ТекстИсключения = НСтр("ru = 'Печать этикетки не возможна, т.к. в настройках программы не выбран шаблон этикетки по умолчанию. Обратитесь к администратору.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Иначе
ШаблонЭтикетки = ДанныеПечати.ШаблонЭтикетки;
КонецЕсли;
Если Не ДанныеПечати.Свойство("КоличествоЭкземпляров") Тогда
КоличествоЭкземпляров = 1;
Иначе
КоличествоЭкземпляров = ДанныеПечати.КоличествоЭкземпляров;
КонецЕсли;
СтруктураНастроек.ИсходныеДанные = ПолучитьИзВременногоХранилища(ДанныеПечати.АдресВХранилище);
Если Не ДанныеПечати.Свойство("СтруктураМакетаШаблона") Или НЕ ЗначениеЗаполнено(ДанныеПечати.СтруктураМакетаШаблона) Тогда
СтруктураШаблона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ШаблонЭтикетки, "Шаблон").Получить();
Иначе
СтруктураШаблона = ДанныеПечати.СтруктураМакетаШаблона;
КонецЕсли;
Для Каждого Элемент Из СтруктураШаблона.ПараметрыШаблона Цикл
СтруктураНастроек.ОбязательныеПоля.Добавить(Элемент.Ключ);
КонецЦикла;
СтруктураРезультата = ПодготовитьСтруктуруДанных(СтруктураНастроек, "УпаковочныеЛисты");
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
РисунокКвадрат = Эталон.Рисунки.Квадрат100Пикселей; // РисунокТабличногоДокумента
КоличествоМиллиметровВПикселе = РисунокКвадрат.Высота / 100;
ТабличныйДокумент = Новый ТабличныйДокумент;
НомерКолонки = 0;
НомерРяда = 0;
Область = СтруктураШаблона.МакетЭтикетки.ПолучитьОбласть(СтруктураШаблона.ИмяОбластиПечати);
Для Каждого СтрокаТаблицы Из СтруктураРезультата.Таблица Цикл
ЗаполнитьЗначенияСвойств(ТабличныйДокумент, СтруктураШаблона.МакетЭтикетки, , "ОбластьПечати");
Для каждого ПараметрШаблона Из СтруктураШаблона.ПараметрыШаблона Цикл
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Область.Параметры, ПараметрШаблона.Значение) Тогда
НаименованиеКолонки = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПоляВШаблоне(ПараметрШаблона.Ключ));
Если НаименованиеКолонки <> Неопределено Тогда
Область.Параметры[ПараметрШаблона.Значение] = СтрокаТаблицы[НаименованиеКолонки];
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого Рисунок Из Область.Рисунки Цикл
Если СтрНайти(Рисунок.Имя, Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод()) = 1 Тогда
ЗначениеШтрихкода = СтрокаТаблицы[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить(Справочники.ШаблоныЭтикетокИЦенников.ИмяПараметраШтрихкод())];
Если ЗначениеЗаполнено(ЗначениеШтрихкода) Тогда
ЗначениеШтрихкодаДляКомпоненты = ЗначениеШтрихкода;
ПечатьЭтикетокИЦенниковЛокализация.ПриОпределенииЗначенияШтрихкодаДляКомпоненты(ЗначениеШтрихкодаДляКомпоненты, СтруктураШаблона.ТипКода);
Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
Иначе
УровеньЧеткости = 1;
КонецЕсли;
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота", Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод", СокрЛП(ЗначениеШтрихкодаДляКомпоненты));
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
ПараметрыШтрихкода.Вставить("ТипКода", СтруктураШаблона.ТипКода);
ПараметрыШтрихкода.Вставить("ОтображатьТекст", СтруктураШаблона.ОтображатьТекст);
ПараметрыШтрихкода.Вставить("РазмерШрифта", СтруктураШаблона.РазмерШрифта * УровеньЧеткости);
Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", СтруктураШаблона.GS1DatabarКоличествоСтрок);
КонецЕсли;
Если СтруктураШаблона.Свойство("ТипШрифта") Тогда
ПараметрыШтрихкода.Вставить("ТипШрифта", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("УголПоворота") Тогда
ПараметрыШтрихкода.Вставить("УголПоворота", СтруктураШаблона.УголПоворота);
КонецЕсли;
Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
ПараметрыШтрихкода.Вставить("МонохромныйШрифт", СтруктураШаблона.МонохромныйШрифт);
КонецЕсли;
Если СтруктураШаблона.Свойство("Масштабировать") Тогда
ПараметрыШтрихкода.Вставить("Масштабировать", СтруктураШаблона.Масштабировать);
КонецЕсли;
Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
ПараметрыШтрихкода.Вставить("СохранятьПропорции", СтруктураШаблона.СохранятьПропорции);
КонецЕсли;
Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание", СтруктураШаблона.ВертикальноеВыравнивание);
КонецЕсли;
Рисунок.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Инд = 1 По КоличествоЭкземпляров Цикл // Цикл по количеству экземпляров
НомерКолонки = НомерКолонки + 1;
Если НомерКолонки = 1 Тогда
НомерРяда = НомерРяда + 1;
ТабличныйДокумент.Вывести(Область);
Иначе
ТабличныйДокумент.Присоединить(Область);
КонецЕсли;
Если НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали
И НомерРяда = СтруктураШаблона.КоличествоПоВертикали Тогда
НомерРяда = 0;
НомерКолонки = 0;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ИначеЕсли НомерКолонки = СтруктураШаблона.КоличествоПоГоризонтали Тогда
НомерКолонки = 0;
КонецЕсли;
КонецЦикла; // Цикл по количеству экземпляров
КонецЦикла; // Цикл по строкам таблицы
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#Область Прочее
Функция УстановитьЗначениеПараметраСКД(КомпоновщикНастроек, ИмяПараметра, ЗначениеПараметра, ИспользоватьНеЗаполненный = Истина)
ПараметрУстановлен = Ложь;
ПараметрКомпоновкиДанных = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
ЗначениеПараметраКомпоновкиДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновкиДанных);
Если ЗначениеПараметраКомпоновкиДанных <> Неопределено Тогда
ЗначениеПараметраКомпоновкиДанных.Значение = ЗначениеПараметра;
ЗначениеПараметраКомпоновкиДанных.Использование = ?(ИспользоватьНеЗаполненный, Истина, ЗначениеЗаполнено(ЗначениеПараметраКомпоновкиДанных.Значение));
ПараметрУстановлен = Истина;
КонецЕсли;
Возврат ПараметрУстановлен;
КонецФункции
// Функция возвращает пустую структуру настроек
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Структура - структура настроек.
Функция СтруктураНастроек() Экспорт
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("ИсходныеДанные", Неопределено);
СтруктураНастроек.Вставить("ОбязательныеПоля", Новый Массив);
СтруктураНастроек.Вставить("СоответствиеШаблоновИСтруктурыШаблонов", Новый Соответствие);
СтруктураНастроек.Вставить("ПараметрыДанных" , Новый Структура);
СтруктураНастроек.Вставить("КомпоновщикНастроек", Неопределено);
СтруктураНастроек.Вставить("ИмяМакетаСхемыКомпоновкиДанных", Неопределено);
Возврат СтруктураНастроек;
КонецФункции
Функция ДанныеДляПечатиЭтикетокДоставки(МассивОбъектов) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
МассивТекстовЗапроса = Новый Массив;
ТекущийОбъект = МассивОбъектов[0];
Если ТипЗнч(ТекущийОбъект) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ТекстЗапросаСозданияВТРаспоряженияПоЗаданию =
"ВЫБРАТЬ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка КАК ЗаданиеНаПеревозку,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик
| ИНАЧЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение.ПеревозчикПартнер
| КОНЕЦ КАК Перевозчик,
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение КАК Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.Вес КАК Вес,
| ЗаданиеНаПеревозкуРаспоряжения.Объем КАК Объем,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| И ЗаданиеНаПеревозкуРаспоряжения.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ДатаВремяРейсаПланС
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрдерныйСклад,
| ЗаданиеНаПеревозкуРаспоряжения.Склад КАК Склад,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| И ЕСТЬNULL(ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель ССЫЛКА Справочник.Партнеры
| И ЕСТЬNULL(ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ КАК ШаблонЭтикетки,
| СУММА(ЕСТЬNULL(РасходныйОрдерНаТовары.ВсегоМест, 0)) КАК ВсегоМест
|ПОМЕСТИТЬ РаспоряженияПоЗаданию
|ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
| ПО ЗаданиеНаПеревозкуРаспоряжения.Ссылка = РасходныйОрдерНаТовары.ЗаданиеНаПеревозку
|ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка В(&ПараметрКоманды)
| И НЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение ССЫЛКА Документ.ПоручениеЭкспедитору
|
|СГРУППИРОВАТЬ ПО
| ЗаданиеНаПеревозкуРаспоряжения.Распоряжение,
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Склад.ИспользоватьОрдернуюСхемуПриОтгрузке
| И ЗаданиеНаПеревозкуРаспоряжения.Склад.ДатаНачалаОрдернойСхемыПриОтгрузке <= ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ДатаВремяРейсаПланС
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| И ЕСТЬNULL(ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик.ШаблонЭтикетки
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель ССЫЛКА Справочник.Партнеры
| И ЕСТЬNULL(ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ВЫРАЗИТЬ(ЗаданиеНаПеревозкуРаспоряжения.ПолучательОтправитель КАК Справочник.Партнеры).ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.ЗаданиеВыполняет = ЗНАЧЕНИЕ(Перечисление.ТипыИсполнителейЗаданийНаПеревозку.Перевозчик)
| ТОГДА ЗаданиеНаПеревозкуРаспоряжения.Ссылка.Перевозчик
| ИНАЧЕ ЗаданиеНаПеревозкуРаспоряжения.Распоряжение.ПеревозчикПартнер
| КОНЕЦ,
| ЗаданиеНаПеревозкуРаспоряжения.Склад,
| ЗаданиеНаПеревозкуРаспоряжения.Объем,
| ЗаданиеНаПеревозкуРаспоряжения.Вес";
ТекстЗапросаПоРаспоряжению =
"ВЫБРАТЬ
| РаспоряженияПоЗаданию.Распоряжение КАК Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик КАК Перевозчик,
| РаспоряженияПоЗаданию.Вес КАК ВесНакладной,
| РаспоряженияПоЗаданию.Объем КАК ОбъемНакладной,
| РаспоряженияПоЗаданию.ШаблонЭтикетки КАК ШаблонЭтикетки,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументРаспоряжениеТовары.НомерСтроки) КАК КоличествоПозиций
|,&ТекстЗапросаИмяТЧ
|ИЗ
| РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекстИмяТЧТовары КАК ДокументРаспоряжениеТовары
| ПО (&ТекстУсловияСоединенияШапкиИТЧ)
| И (&ТекстСоединенияСРаспоряжениемПоСкладу)
|ГДЕ
| НЕ РаспоряженияПоЗаданию.ОрдерныйСклад
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияПоЗаданию.Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик,
| РаспоряженияПоЗаданию.Вес,
| РаспоряженияПоЗаданию.Объем,
| РаспоряженияПоЗаданию.ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест";
МассивТекстовПоРаспоряжениям = Новый Массив;
ТипыРаспоряжений = Метаданные.ОпределяемыеТипы.РаспоряжениеНаДоставку.Тип.Типы();
ЭтоПервыйТип = Истина;
Для Каждого ТипРаспоряжения из ТипыРаспоряжений Цикл
МетаданныеРаспоряжения = Метаданные.НайтиПоТипу(ТипРаспоряжения);
Если Не ОбщегоНазначения.ЭтоДокумент(МетаданныеРаспоряжения)
Или МетаданныеРаспоряжения = Метаданные.Документы.ПоручениеЭкспедитору Тогда
Продолжить;
Иначе
ТекстЗапроса = ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияШапкиИТЧ", "РаспоряженияПоЗаданию.Распоряжение = ДокументРаспоряжениеТовары.Ссылка");
Если ЭтоПервыйТип Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ТекстЗапросаИмяТЧ", "ПОМЕСТИТЬ ВТРаспоряженияИШаблоны");
ЭтоПервыйТип = Ложь;
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ТекстЗапросаИмяТЧ", "");
КонецЕсли;
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЕсли;
КонецЦикла;
Если ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| РаспоряженияПоЗаданию.Распоряжение КАК Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик КАК Перевозчик,
| РаспоряженияПоЗаданию.Вес КАК ВесНакладной,
| РаспоряженияПоЗаданию.Объем КАК ОбъемНакладной,
| РаспоряженияПоЗаданию.ШаблонЭтикетки КАК ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест КАК КоличествоПозиций
|ИЗ
| РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
|ГДЕ
| РаспоряженияПоЗаданию.ОрдерныйСклад
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияПоЗаданию.Распоряжение,
| РаспоряженияПоЗаданию.Перевозчик,
| РаспоряженияПоЗаданию.Вес,
| РаспоряженияПоЗаданию.Объем,
| РаспоряженияПоЗаданию.ШаблонЭтикетки,
| РаспоряженияПоЗаданию.ВсегоМест";
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЕсли;
ТекстЗапросаВТРаспоряженияИШаблоны = СтрСоединить(МассивТекстовПоРаспоряжениям, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
ТекстВыборкиЗаданияБезРаспоряжений =
"ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка КАК Ссылка
| ИЗ
| Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ЛЕВОЕ СОЕДИНЕНИЕ РаспоряженияПоЗаданию КАК РаспоряженияПоЗаданию
| ПО ЗаданиеНаПеревозкуРаспоряжения.Ссылка = РаспоряженияПоЗаданию.ЗаданиеНаПеревозку
| ГДЕ
| ЗаданиеНаПеревозкуРаспоряжения.Ссылка В(&ПараметрКоманды)
| И РаспоряженияПоЗаданию.ЗаданиеНаПеревозку ЕСТЬ NULL
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаданияНаПеревозку.Ссылка
| ИЗ
| Документ.ЗаданиеНаПеревозку КАК ЗаданияНаПеревозку
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку.Распоряжения КАК ЗаданиеНаПеревозкуРаспоряжения
| ПО ЗаданияНаПеревозку.Ссылка = ЗаданиеНаПеревозкуРаспоряжения.Ссылка
| ГДЕ
| ЗаданияНаПеревозку.Ссылка В(&ПараметрКоманды)
| И ЗаданиеНаПеревозкуРаспоряжения.Ссылка ЕСТЬ NULL) КАК ВложенныйЗапрос
|ГДЕ
| НЕ ВложенныйЗапрос.Ссылка ЕСТЬ NULL";
МассивТекстовЗапроса.Добавить(ТекстЗапросаСозданияВТРаспоряженияПоЗаданию);
МассивТекстовЗапроса.Добавить(ТекстЗапросаВТРаспоряженияИШаблоны);
МассивТекстовЗапроса.Добавить(ТекстВыборкиЗаданияБезРаспоряжений);
Иначе
ТекстЗапросаПоРаспоряжению =
"ВЫБРАТЬ
| ДокументРаспоряжение.Ссылка КАК Распоряжение,
| ДокументРаспоряжение.ПеревозчикПартнер КАК Перевозчик,
| СУММА(ВЫБОР
| КОГДА ДокументРаспоряжениеТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ &ТекстЗапросаВесУпаковки = 0
| ТОГДА &ТекстЗапросаВесНоменклатуры * ДокументРаспоряжениеТовары.Количество
| ИНАЧЕ &ТекстЗапросаВесУпаковки * ДокументРаспоряжениеТовары.КоличествоУпаковок
| КОНЕЦ) КАК ВесНакладной,
| СУММА(ВЫБОР
| КОГДА ДокументРаспоряжениеТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИЛИ &ТекстЗапросаОбъемУпаковки = 0
| ТОГДА &ТекстЗапросаОбъемНоменклатуры * ДокументРаспоряжениеТовары.Количество
| ИНАЧЕ &ТекстЗапросаОбъемУпаковки * ДокументРаспоряжениеТовары.КоличествоУпаковок
| КОНЕЦ) КАК ОбъемНакладной,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументРаспоряжениеТовары.НомерСтроки) КАК КоличествоПозиций,
| ВЫБОР
| КОГДА (ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)
| ИЛИ ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.ДоКлиента))
| И ЕСТЬNULL(&ТекстЗапросаШаблонИзКарточкиПартнера, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА &ТекстЗапросаШаблонИзКарточкиПартнера
| КОГДА ЕСТЬNULL(ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ КАК ШаблонЭтикетки
|,&ТекстЗапросаИмяТЧ
|ИЗ
| ТекстИмяШапкаДокумента КАК ДокументРаспоряжение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекстИмяТЧТовары КАК ДокументРаспоряжениеТовары
| ПО &ТекстУсловияСоединенияШапкиИТЧ
|ГДЕ
| ДокументРаспоряжение.Ссылка В(&ПараметрКоманды)
|
|СГРУППИРОВАТЬ ПО
| ДокументРаспоряжение.Ссылка,
| ДокументРаспоряжение.ПеревозчикПартнер,
| ВЫБОР
| КОГДА (ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.Самовывоз)
| ИЛИ ДокументРаспоряжение.СпособДоставки = ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.ДоКлиента))
| И ЕСТЬNULL(&ТекстЗапросаШаблонИзКарточкиПартнера, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА &ТекстЗапросаШаблонИзКарточкиПартнера
| КОГДА ЕСТЬNULL(ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки, ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
| ТОГДА ДокументРаспоряжение.ПеревозчикПартнер.ШаблонЭтикетки
| ИНАЧЕ &ШаблонЭтикеткиДоставки
| КОНЕЦ";
СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
МассивТекстовПоРаспоряжениям = Новый Массив;
ЭтоПервыйТип = Истина;
Для Каждого КлючЗначение из СтруктураТипов Цикл
МетаданныеРаспоряжения = Метаданные.НайтиПоПолномуИмени(КлючЗначение.Ключ);
ТекстЗапроса = ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияШапкиИТЧ", "(ДокументРаспоряжениеТовары.Ссылка = ДокументРаспоряжение.Ссылка)");
Если ЭтоПервыйТип Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ТекстЗапросаИмяТЧ", "ПОМЕСТИТЬ ВТРаспоряженияИШаблоны");
ЭтоПервыйТип = Ложь;
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ТекстЗапросаИмяТЧ", "");
КонецЕсли;
МассивТекстовПоРаспоряжениям.Добавить(ТекстЗапроса);
КонецЦикла;
ТекстЗапросаВТРаспоряженияИШаблоны = СтрСоединить(МассивТекстовПоРаспоряжениям, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
МассивТекстовЗапроса.Добавить(ТекстЗапросаВТРаспоряженияИШаблоны);
КонецЕсли;
ТекстЗапросовВыборкиДанных =
"ВЫБРАТЬ
| ВТРаспоряженияИШаблоны.Распоряжение КАК Распоряжение,
| ВТРаспоряженияИШаблоны.ВесНакладной КАК ВесНакладной,
| ВТРаспоряженияИШаблоны.ОбъемНакладной КАК ОбъемНакладной,
| ВТРаспоряженияИШаблоны.КоличествоПозиций КАК КоличествоПозиций,
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки КАК ШаблонЭтикетки,
| &ЕдиницаИзмеренияВеса КАК ЕдиницаИзмеренияВеса,
| &ЕдиницаИзмеренияОбъема КАК ЕдиницаИзмеренияОбъема
|ИЗ
| ВТРаспоряженияИШаблоны КАК ВТРаспоряженияИШаблоны
|ГДЕ
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРаспоряженияИШаблоны.Распоряжение КАК Ссылка,
| ВТРаспоряженияИШаблоны.Перевозчик КАК Перевозчик
|ИЗ
| ВТРаспоряженияИШаблоны КАК ВТРаспоряженияИШаблоны
|ГДЕ
| ВТРаспоряженияИШаблоны.ШаблонЭтикетки = ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)";
МассивТекстовЗапроса.Добавить(ТекстЗапросовВыборкиДанных);
ТекстЗапроса = СтрСоединить(МассивТекстовЗапроса, ОбщегоНазначенияУТ.РазделительЗапросовВПакете());
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ШаблонЭтикеткиДоставки", Константы.ШаблонЭтикеткиДляДоставки.Получить());
Запрос.УстановитьПараметр("ЕдиницаИзмеренияВеса", Константы.ЕдиницаИзмеренияВеса.Получить());
Запрос.УстановитьПараметр("ЕдиницаИзмеренияОбъема", Константы.ЕдиницаИзмеренияОбъема.Получить());
Запрос.УстановитьПараметр("ПараметрКоманды", МассивОбъектов);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ТаблицаДоставки = РезультатЗапроса[РезультатЗапроса.ВГраница() - 1].Выгрузить();
ТаблицаОшибок = РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить();
Если ТипЗнч(ТекущийОбъект) = Тип("ДокументСсылка.ЗаданиеНаПеревозку") Тогда
ЗаданияБезРаспоряжений = РезультатЗапроса[РезультатЗапроса.ВГраница() - 2].Выгрузить();
ДоставкаНаНашСклад = ТекущийОбъект.Операция = ПредопределенноеЗначение("Перечисление.ВидыДоставки.НаСклад");
Иначе
ЗаданияБезРаспоряжений = Неопределено;
ДоставкаНаНашСклад = Ложь;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("МассивСсылокСОшибками",ТаблицаОшибок.ВыгрузитьКолонку("Ссылка"));
СтруктураВозврата.Вставить("ДоставкаНаНашСклад",ДоставкаНаНашСклад);
ТаблицаОшибок.Свернуть("Перевозчик");
СтруктураВозврата.Вставить("МассивПеревозчиковБезШаблоновЭтикетки",ТаблицаОшибок.ВыгрузитьКолонку("Перевозчик"));
ЕстьЭтикеткиДляПечати = ТаблицаДоставки.Количество() > 0;
СтруктураВозврата.Вставить("ЕстьЭтикеткиДляПечати",ЕстьЭтикеткиДляПечати);
Если ЕстьЭтикеткиДляПечати Тогда
СтруктураВозврата.Вставить("АдресВХранилище",ПоместитьВоВременноеХранилище(ТаблицаДоставки));
КонецЕсли;
Если ЗаданияБезРаспоряжений <> Неопределено
И ЗаданияБезРаспоряжений.Количество() > 0 Тогда
СтруктураВозврата.Вставить("МассивЗаданийБезРаспоряжений", ЗаданияБезРаспоряжений.ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
Функция ДанныеДляПечатиЭтикетокДоставкиАдаптироватьКРаспоряжению(МетаданныеРаспоряжения, ТекстЗапросаПоРаспоряжению)
ИменаТЧТовары = Новый Соответствие;
ИменаТЧТовары.Вставить(Метаданные.Документы.ЗаявкаНаВозвратТоваровОтКлиента,"ЗаменяющиеТовары");
//++ НЕ УТ
ИменаТЧТовары.Вставить(Метаданные.Документы.ЗаказПереработчику,"Материалы");
ИменаТЧТовары.Вставить(Метаданные.Документы.ЗаказПереработчику2_5, "ОбеспечениеМатериаламиИРаботами");
//-- НЕ УТ
Если МетаданныеРаспоряжения.ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
ИмяТЧТовары = "Товары";
Иначе
ИмяТЧТовары = ИменаТЧТовары.Получить(МетаданныеРаспоряжения);
Если ИмяТЧТовары = Неопределено Тогда
ТекстИсключения = НСтр("ru = 'Для типа %ТипРаспоряжения% распоряжения на доставку не определен запрос выборки данных доставки.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ТипРаспоряжения%", МетаданныеРаспоряжения.ПолноеИмя());
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапросаПоРаспоряжению, "ТекстИмяТЧТовары", МетаданныеРаспоряжения.ПолноеИмя() + "." + ИмяТЧТовары);
Если МетаданныеРаспоряжения.ТабличныеЧасти[ИмяТЧТовары].Реквизиты.Найти("Склад") <> Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияСРаспоряжениемПоСкладу",
"РаспоряженияПоЗаданию.Склад = ДокументРаспоряжениеТовары.Склад");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияСРаспоряжениемПоСкладу",
"ИСТИНА");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекстИмяШапкаДокумента", МетаданныеРаспоряжения.ПолноеИмя());
Если МетаданныеРаспоряжения.Реквизиты.Найти("Партнер") <> Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаШаблонИзКарточкиПартнера",
"ДокументРаспоряжение.Партнер.ШаблонЭтикетки");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаШаблонИзКарточкиПартнера",
"NULL");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаВесНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("ДокументРаспоряжениеТовары.Номенклатура.ЕдиницаИзмерения", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаОбъемНоменклатуры",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("ДокументРаспоряжениеТовары.Номенклатура.ЕдиницаИзмерения", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаВесУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("ДокументРаспоряжениеТовары.Упаковка", "ДокументРаспоряжениеТовары.Номенклатура"));
ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаОбъемУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("ДокументРаспоряжениеТовары.Упаковка", "ДокументРаспоряжениеТовары.Номенклатура"));
Возврат ТекстЗапроса;
КонецФункции
Функция ДанныеДляПечатиЭтикетокУпаковочныеЛисты(ОбъектыПечати) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Если ТипЗнч(ОбъектыПечати[0]) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист КАК Ссылка,
| РасходныйОрдерНаТоварыОтгружаемыеТовары.УпаковочныйЛист.Код КАК Штрихкод
|ИЗ
| Документ.РасходныйОрдерНаТовары.ОтгружаемыеТовары КАК РасходныйОрдерНаТоварыОтгружаемыеТовары
|ГДЕ
| РасходныйОрдерНаТоварыОтгружаемыеТовары.ЭтоУпаковочныйЛист
| И РасходныйОрдерНаТоварыОтгружаемыеТовары.Ссылка В(&ОбъектыПечати)";
ИначеЕсли ТипЗнч(ОбъектыПечати[0]) = Тип("ДокументСсылка.УпаковочныйЛист") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| УпаковочныйЛист.Ссылка,
| УпаковочныйЛист.Код КАК Штрихкод
|ИЗ
| Документ.УпаковочныйЛист КАК УпаковочныйЛист
|ГДЕ
| УпаковочныйЛист.Ссылка В(&ОбъектыПечати)";
Иначе
Возврат Новый Структура ("ЕстьШаблонЭтикетки",Ложь);
КонецЕсли;
Запрос.УстановитьПараметр("ОбъектыПечати",ОбъектыПечати);
ТаблицаУпаковочныхЛистов = Запрос.Выполнить().Выгрузить();
ЕстьЭтикеткиДляПечати = ТаблицаУпаковочныхЛистов.Количество() > 0;
ШаблонЭтикетки = Константы.ШаблонЭтикеткиУпаковочногоЛиста.Получить();
ЕстьШаблонЭтикетки = ЗначениеЗаполнено(ШаблонЭтикетки);
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("ЕстьШаблонЭтикетки", ЕстьШаблонЭтикетки);
СтруктураВозврата.Вставить("ШаблонЭтикетки", ШаблонЭтикетки);
СтруктураВозврата.Вставить("ЕстьЭтикеткиДляПечати", ЕстьЭтикеткиДляПечати);
Если ЕстьЭтикеткиДляПечати Тогда
СтруктураВозврата.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ТаблицаУпаковочныхЛистов));
КонецЕсли;
Возврат СтруктураВозврата;
КонецФункции
Функция ЗаменитьСпецСимволы(Знач ВходящаяСтрока)
Перем Результат;
Результат = СтрЗаменить(ВходящаяСтрока, ".", "");
Результат = СтрЗаменить(Результат, " ", "");
Результат = СтрЗаменить(Результат, "[", "_");
Результат = СтрЗаменить(Результат, "]", "_");
Результат = СтрЗаменить(Результат, "(", "_");
Результат = СтрЗаменить(Результат, ")", "_");
Результат = СтрЗаменить(Результат, "*", "_");
Результат = СтрЗаменить(Результат, "-", "_");
Результат = СтрЗаменить(Результат, "+", "_");
Результат = СтрЗаменить(Результат, "/", "_");
Результат = СтрЗаменить(Результат, "@", "_");
Результат = СтрЗаменить(Результат, "#", "_");
Результат = СтрЗаменить(Результат, "$", "_");
Результат = СтрЗаменить(Результат, "%", "_");
Результат = СтрЗаменить(Результат, "^", "_");
Результат = СтрЗаменить(Результат, "&", "_");
Результат = СтрЗаменить(Результат, "*", "_");
Результат = СтрЗаменить(Результат, ">", "_");
Результат = СтрЗаменить(Результат, "<", "_");
Результат = СтрЗаменить(Результат, "?", "_");
Результат = СтрЗаменить(Результат, ",", "_");
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли