Внешняя обработка добавляет команду печати Этикеток
1 - Реализация товаров услуг
2 - Заказ клиента
3 - Пересчет товаров
Список может быть дополнен самостоятельно.
Сама внешняя обработка состоит из 2 частей: 1 - код модуля (Регистрация)
Функция СведенияОВнешнейОбработке()экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИобработки.СведенияОВнешнейОбработке("3.1.3.453");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИобработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0.2";
ПараметрыРегистрации.Информация = "Добавляет возможность печати этикеток из документов: Реализация товаров услуг, Заказ клиента, Пересчет товаров";
ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Назначение.Добавить("Документ.ПересчетТоваров");
Команда = ПараметрыРегистрации.Команды.Добавить();
команда.Представление = Нстр("ru = 'Этикетки'");
команда.Идентификатор = "DAE_Этикетки";
команда.ПоказыватьОповещение = Истина;
команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
команда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
2 - Код в модуле формы
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
АдресВХранилище = ВыбратьНаСервере(ОбъектыНазначенияМассив);
ОткрытьФорму("Обработка.ПечатьЭтикетокИЦенников.Форма.ФормаТовары",
Новый Структура("АдресВХранилище, НазначениеШаблона", АдресВХранилище, Неопределено),, Новый УникальныйИдентификатор);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыбратьНаСервере(МассивДокументов)
Запрос = новый запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
| ЗаказКлиентаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЗаказКлиентаТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ЗаказКлиентаТовары.Упаковка
| КОНЕЦ КАК Упаковка,
| МИНИМУМ(ЗаказКлиентаТовары.НомерСтроки) КАК Порядок,
| СУММА(ВЫБОР
| КОГДА ЗаказКлиентаТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЗаказКлиентаТовары.КоличествоУпаковок * (ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки1, 1) / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1))
| ИНАЧЕ ЗаказКлиентаТовары.КоличествоУпаковок
| КОНЕЦ) КАК Количество
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
| ПО (ЦеныНоменклатуры.Номенклатура = ЗаказКлиентаТовары.Номенклатура)
| И (ЦеныНоменклатуры.Характеристика = ЗаказКлиентаТовары.Характеристика)
| И (ЦеныНоменклатуры.ВидЦены = ЗаказКлиентаТовары.Ссылка.Склад.РозничныйВидЦены)
|ГДЕ
| ЗаказКлиентаТовары.Ссылка В(&МассивДокументов)
|
|СГРУППИРОВАТЬ ПО
| ЗаказКлиентаТовары.Номенклатура,
| ЗаказКлиентаТовары.Характеристика,
| ВЫБОР
| КОГДА ЗаказКлиентаТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ЗаказКлиентаТовары.Упаковка
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Характеристика,
| ВЫБОР
| КОГДА РеализацияТоваровУслугТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ РеализацияТоваровУслугТовары.Упаковка
| КОНЕЦ,
| МИНИМУМ(РеализацияТоваровУслугТовары.НомерСтроки),
| СУММА(ВЫБОР
| КОГДА РеализацияТоваровУслугТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА РеализацияТоваровУслугТовары.КоличествоУпаковок * (ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки3, 1) / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1))
| ИНАЧЕ РеализацияТоваровУслугТовары.КоличествоУпаковок
| КОНЕЦ)
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
| ПО (ЦеныНоменклатуры.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура)
| И (ЦеныНоменклатуры.Характеристика = РеализацияТоваровУслугТовары.Характеристика)
| И (ЦеныНоменклатуры.ВидЦены = РеализацияТоваровУслугТовары.Ссылка.Склад.РозничныйВидЦены)
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка В(&МассивДокументов)
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Характеристика,
| ВЫБОР
| КОГДА РеализацияТоваровУслугТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ РеализацияТоваровУслугТовары.Упаковка
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПересчетТоваровТовары.Номенклатура,
| ПересчетТоваровТовары.Характеристика,
| ВЫБОР
| КОГДА ПересчетТоваровТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ПересчетТоваровТовары.Упаковка
| КОНЕЦ,
| МИНИМУМ(ПересчетТоваровТовары.НомерСтроки),
| СУММА(ВЫБОР
| КОГДА ПересчетТоваровТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ПересчетТоваровТовары.КоличествоУпаковок * (ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки4, 1) / ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки2, 1))
| ИНАЧЕ ПересчетТоваровТовары.КоличествоУпаковок
| КОНЕЦ)
|ИЗ
| Документ.ПересчетТоваров.Товары КАК ПересчетТоваровТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
| ПО (ЦеныНоменклатуры.Номенклатура = ПересчетТоваровТовары.Номенклатура)
| И (ЦеныНоменклатуры.Характеристика = ПересчетТоваровТовары.Характеристика)
| И (ЦеныНоменклатуры.ВидЦены = ПересчетТоваровТовары.Ссылка.Склад.РозничныйВидЦены)
|ГДЕ
| ПересчетТоваровТовары.Ссылка В(&МассивДокументов)
|
|СГРУППИРОВАТЬ ПО
| ПересчетТоваровТовары.Номенклатура,
| ПересчетТоваровТовары.Характеристика,
| ВЫБОР
| КОГДА ПересчетТоваровТовары.Ссылка.Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.РозничныйМагазин)
| ТОГДА ЦеныНоменклатуры.Упаковка
| ИНАЧЕ ПересчетТоваровТовары.Упаковка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Порядок
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаказКлиента.Организация КАК Организация,
| ЗаказКлиента.Склад КАК Склад,
| ЗаказКлиента.Склад.РозничныйВидЦены КАК ВидЦены
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ЗаказКлиента.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслуг.Организация,
| РеализацияТоваровУслуг.Склад,
| РеализацияТоваровУслуг.Склад.РозничныйВидЦены
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка В(&МассивДокументов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗНАЧЕНИЕ(справочник.Организации.ПустаяСсылка),
| ПересчетТоваров.Склад,
| ПересчетТоваров.Склад.РозничныйВидЦены
|ИЗ
| Документ.ПересчетТоваров КАК ПересчетТоваров
|ГДЕ
| ПересчетТоваров.Ссылка В(&МассивДокументов)";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЗаказКлиентаТовары.Упаковка",
"ЗаказКлиентаТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки3",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"РеализацияТоваровУслугТовары.Упаковка",
"РеализацияТоваровУслугТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки4",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ПересчетТоваровТовары.Упаковка",
"ПересчетТоваровТовары.Номенклатура"));
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстЗапросаКоэффициентУпаковки2",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ЦеныНоменклатуры.Упаковка",
"ЦеныНоменклатуры.Номенклатура"));
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
МассивРезультатов = Запрос.ВыполнитьПакет();
ТаблицаРеквизитыДокументов = МассивРезультатов[1].Выгрузить();
МассивОрганизаций = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Организация");
МассивСкладов = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "Склад");
МассивВидовЦен = ОбщегоНазначенияУТ.УникальныеЗначенияИзКолонкиТаблицы(ТаблицаРеквизитыДокументов, "ВидЦены");
// Подготовка структуры действий для обработки печати ценников и этикеток
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьОрганизацию", ?(МассивОрганизаций.Количество() = 1, МассивОрганизаций[0], Неопределено));
СтруктураДействий.Вставить("ЗаполнитьСклад", ?(МассивСкладов.Количество() = 1, МассивСкладов[0], МассивСкладов));
СтруктураДействий.Вставить("ЗаполнитьВидЦены", ?(МассивВидовЦен.Количество() = 1, МассивВидовЦен[0], Неопределено));
СтруктураДействий.Вставить("ПоказыватьКолонкуКоличествоВДокументе", Истина);
СтруктураДействий.Вставить("УстановитьРежимПечатиИзДокумента");
СтруктураДействий.Вставить("УстановитьРежим", "ПечатьЭтикеток");
СтруктураДействий.Вставить("ЗаполнитьКоличествоЭтикетокПоДокументу");
СтруктураДействий.Вставить("ЗаполнитьТаблицуТоваров");
// Подготовка данных для заполенения табличной части обработки печати ценников и этикеток.
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("Товары", МассивРезультатов[0].Выгрузить());
СтруктураРезультат.Вставить("СтруктураДействий", СтруктураДействий);
Возврат ПоместитьВоВременноеХранилище(СтруктураРезультат);
КонецФункции
Каких-либо дополнительных параметров, реквизитов формы не требуется, код запроса взят из документа "Приобретение товаров услуг". Идея реализации возникла после изучения вопроса вывода печатных форм с вводом дополнительных параметров.
Подключается через внешние отчеты и обработки.
Тестирование проводилось на релизе 1С Управление торговлей 11.4.13.155.