Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 15:29

Вопрос по созданию внешней печатной форме для УТ 11

Автор Vitalik54, 22 мая 2015, 01:07

0 Пользователей и 1 гость просматривают эту тему.

Vitalik54

Всем доброго времени суток. Появилась необходимость создания ВПФ "Задание на отбор товаров" для печати из заказа клиента.
Типовую ВПФ я сделал. Из реализации отрабатывает нормально.

Функция СведенияОВнешнейОбработке() Экспорт

МассивМетоданных = Новый Массив;
МассивМетоданных.Добавить("Документ.ОтборРазмещениеТоваров");

ТЗКоманды = Новый ТаблицаЗначений;
ТЗКоманды.Колонки.Добавить("Представление");
ТЗКоманды.Колонки.Добавить("Идентификатор");
ТЗКоманды.Колонки.Добавить("Использование");
ТЗКоманды.Колонки.Добавить("ПоказыватьОповещение");
ТЗКоманды.Колонки.Добавить("Модификатор");

НоваяСтрокаТЗКоманды = ТЗКоманды.Добавить();
НоваяСтрокаТЗКоманды.Представление = "Печать Наборной";
НоваяСтрокаТЗКоманды.Идентификатор = "ВПФНаборная";
НоваяСтрокаТЗКоманды.Использование = "ВызовСерверногоМетода";
НоваяСтрокаТЗКоманды.ПоказыватьОповещение = Ложь;
НоваяСтрокаТЗКоманды.Модификатор = "ПечатьMXL";

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

Возврат ДанныеОбработки;
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПараметрыПечати = Новый Структура("ИмяФормы","ЗаданиеНаОтбор");

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

КонецПроцедуры

Функция СформироватьЗаданиеНаОтборРазмещениеТовара(МассивОбъектов, ОбъектыПечати, ПараметрыПечати, КомплектыПечати = Неопределено) Экспорт

УстановитьПривилегированныйРежим(Истина);

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ПараметрыПечати.ИмяФормы;
НомерТипаДокумента = 0;

Если ТипЗнч(МассивОбъектов) = Тип("Соответствие") Тогда
СтруктураТипов = МассивОбъектов;
Иначе
СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
КонецЕсли;

Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл

НомерТипаДокумента = НомерТипаДокумента + 1;
Если НомерТипаДокумента > 1 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

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

Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьЗаданияНаОтборРазмещениеТоваров.ПФ_MXL_ЗаданиеНаОтборРазмещениеТовара");

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьШапка   = Макет.ПолучитьОбласть("Шапка");
ОбластьОснование   = Макет.ПолучитьОбласть("Основание");
ОбластьЗаданиеНаПеревозку = Макет.ПолучитьОбласть("ЗаданиеНаПеревозку");

// Области макета для склада со справочным использованием ячеек, с использованием упаковок, с кодами
ОбластьШапкаТаблицыОснова   = Макет.ПолучитьОбласть("ШапкаТаблицыОснова");
ОбластьРабочийУчастокОснова   = Макет.ПолучитьОбласть("РабочийУчастокОснова");
ОбластьСтрокаТаблицыОснова         = Макет.ПолучитьОбласть("СтрокаТаблицыОснова");
ОбластьПодвалТаблицыОснова       = Макет.ПолучитьОбласть("ПодвалТаблицыОснова");

ОбластьШапкаТаблицыОснова.Параметры.ИмяКолонкиКодов = КолонкаКодов;

// Области макета для склада со справочным использованием ячеек, без использования упаковок, с кодами
ОбластьШапкаТаблицыБезУпаковок   = Макет.ПолучитьОбласть("ШапкаТаблицыБезУпаковок");
ОбластьРабочийУчастокБезУпаковок   = Макет.ПолучитьОбласть("РабочийУчастокБезУпаковок");
ОбластьСтрокаТаблицыБезУпаковок       = Макет.ПолучитьОбласть("СтрокаТаблицыБезУпаковок");
ОбластьПодвалТаблицыБезУпаковок         = Макет.ПолучитьОбласть("ПодвалТаблицыБезУпаковок");

ОбластьШапкаТаблицыБезУпаковок.Параметры.ИмяКолонкиКодов = КолонкаКодов;

// Области макета для склада без справочного использования ячеек, с использованием упаковок, с кодами
ОбластьШапкаТаблицыБезЯчеек = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчеек");
ОбластьРабочийУчастокБезЯчеек = Макет.ПолучитьОбласть("РабочийУчастокБезЯчеек");
ОбластьСтрокаТаблицыБезЯчеек = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчеек");
ОбластьПодвалТаблицыБезЯчеек = Макет.ПолучитьОбласть("ПодвалТаблицыБезЯчеек");

ОбластьШапкаТаблицыБезЯчеек.Параметры.ИмяКолонкиКодов = КолонкаКодов;

// Области макета для склада без справочного использования ячеек, без использования упаковок, с кодами
ОбластьШапкаТаблицыБезЯчеекБезУпаковок = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчеекБезУпаковок");
ОбластьРабочийУчастокБезЯчеекБезУпаковок = Макет.ПолучитьОбласть("РабочийУчастокБезЯчеекБезУпаковок");
ОбластьСтрокаТаблицыБезЯчеекБезУпаковок = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчеекБезУпаковок");
ОбластьПодвалТаблицыБезЯчеекБезУпаковок = Макет.ПолучитьОбласть("ПодвалТаблицыБезЯчеекБезУпаковок");

ОбластьШапкаТаблицыБезЯчеекБезУпаковок.Параметры.ИмяКолонкиКодов = КолонкаКодов;

// Области макета для склада со справочным использованием ячеек, с использованием упаковок, без кодов
ОбластьШапкаТаблицыБезКодов   = Макет.ПолучитьОбласть("ШапкаТаблицыБезКодов");
ОбластьРабочийУчастокБезКодов   = Макет.ПолучитьОбласть("РабочийУчастокБезКодов");
ОбластьСтрокаТаблицыБезКодов       = Макет.ПолучитьОбласть("СтрокаТаблицыБезКодов");
ОбластьПодвалТаблицыБезКодов       = Макет.ПолучитьОбласть("ПодвалТаблицыБезКодов");

// Области макета для склада со справочным использованием ячеек, без использования упаковок, без кодов
ОбластьШапкаТаблицыБезУпаковокБезКодов   = Макет.ПолучитьОбласть("ШапкаТаблицыБезУпаковокБезКодов");
ОбластьРабочийУчастокБезУпаковокБезКодов   = Макет.ПолучитьОбласть("РабочийУчастокБезУпаковокБезКодов");
ОбластьСтрокаТаблицыБезУпаковокБезКодов       = Макет.ПолучитьОбласть("СтрокаТаблицыБезУпаковокБезКодов");
ОбластьПодвалТаблицыБезУпаковокБезКодов         = Макет.ПолучитьОбласть("ПодвалТаблицыБезУпаковокБезКодов");

// Области макета для склада без справочного использования ячеек, с использованием упаковок, без кодов
ОбластьШапкаТаблицыБезЯчеекБезКодов = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчеекБезКодов");
ОбластьРабочийУчастокБезЯчеекБезКодов = Макет.ПолучитьОбласть("РабочийУчастокБезЯчеекБезКодов");
ОбластьСтрокаТаблицыБезЯчеекБезКодов = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчеекБезКодов");
ОбластьПодвалТаблицыБезЯчеекБезКодов = Макет.ПолучитьОбласть("ПодвалТаблицыБезЯчеекБезКодов");

// Области макета для склада без справочного использования ячеек, без использования упаковок, без кодов
ОбластьШапкаТаблицыБезЯчеекБезУпаковокБезКодов = Макет.ПолучитьОбласть("ШапкаТаблицыБезЯчеекБезУпаковокБезКодов");
ОбластьРабочийУчастокБезЯчеекБезУпаковокБезКодов = Макет.ПолучитьОбласть("РабочийУчастокБезЯчеекБезУпаковокБезКодов");
ОбластьСтрокаТаблицыБезЯчеекБезУпаковокБезКодов = Макет.ПолучитьОбласть("СтрокаТаблицыБезЯчеекБезУпаковокБезКодов");
ОбластьПодвалТаблицыБезЯчеекБезУпаковокБезКодов = Макет.ПолучитьОбласть("ПодвалТаблицыБезЯчеекБезУпаковокБезКодов");

ОбластьИсполнитель = Макет.ПолучитьОбласть("Исполнитель");

ЭтоЗаданиеНаРазмещение = Неопределено;
ПервыйДокумент = Истина;

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

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

ДанныеПоШапке = ДанныеДляПечати.РезультатПоШапке;
ДанныеПоТабличнойЧасти = ДанныеДляПечати.РезультатПоТабличнойЧасти;
ДанныеПоУпаковкам = ДанныеДляПечати.РезультатПоУпаковкам;
ДанныеПоСериям = ДанныеДляПечати.РезультатПоСериям;

ЕстьПолеИспользоватьСерииНоменклатуры = ДанныеПоШапке.Колонки.Найти("ИспользоватьСерииНоменклатуры") <> Неопределено;

ВыборкаПоШапке = ДанныеПоШапке.Выбрать();
ВыборкаПоСсылкам = ДанныеПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаПоСериям = ДанныеПоСериям.Выбрать();

Если ПараметрыПечати.ИмяФормы  <> "ЗаданиеНаПересчет" И СтруктураОбъектов.Ключ <> "Документ.ПересчетТоваров" Тогда
ВыборкаПоУпаковкам = ДанныеПоУпаковкам.Выбрать();
КонецЕсли;

ТекущаяСсылка = Неопределено;

Пока ВыборкаПоШапке.Следующий() Цикл

ТекстСообщения = "";

Если Не ЗначениеЗаполнено(ВыборкаПоШапке.СкладПредставление) Тогда
ТекстСообщения = НСтр("ru='Невозможно напечатать %НазваниеФормы% для ""%Документ%"",
|т.к. не заполнено поле ""Склад"".'");

ИначеЕсли ВыборкаПоШапке.НарушенаОрдернаяСхема Тогда
ТекстСообщения = НСтр("ru='Невозможно напечатать %НазваниеФормы% для ""%Документ%"",
|т.к. на складе ""%Склад%"" используется ордерная схема, поэтому печать задания должна вестись из ордера.'");

ИначеЕсли (ТипЗнч(ВыборкаПоШапке.Ссылка) = Тип("ДокументСсылка.ПриходныйОрдерНаТовары")
ИЛИ ТипЗнч(ВыборкаПоШапке.Ссылка) = Тип("ДокументСсылка.ОрдерНаПеремещениеТоваров")
ИЛИ ТипЗнч(ВыборкаПоШапке.Ссылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары"))
И ВыборкаПоШапке.ИспользуетсяАдресноеХранение Тогда

ТекстСообщения = НСтр("ru='Невозможно напечатать %НазваниеФормы% для ""%Документ%"",
|т.к. для склада (помещения) с ячейками, используемыми для хранения остатков номенклатуры, эта печатная форма не предусмотрена.
|Печать задания на отбор (размещение) возможна из документа ""Отбор (размещение) товаров"".'");

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

Если ЗначениеЗаполнено(ТекстСообщения) Тогда
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Документ%", ВыборкаПоШапке.СсылкаПредставление);
ТекстСообщения = СтрЗаменить(ТекстСообщения,
"%Склад%",
СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоШапке.СкладПредставление,
ВыборкаПоШапке.ПомещениеПредставление));
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%НазваниеФормы%",НазваниеФормы);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Продолжить;
КонецЕсли;

ИспользоватьСерии = Ложь;

Если ЕстьПолеИспользоватьСерииНоменклатуры Тогда
ИспользоватьСерии = ВыборкаПоШапке.ИспользоватьСерииНоменклатуры;
КонецЕсли;

ИспользуетсяСправочноеХранение = ВыборкаПоШапке.ИспользуетсяСправочноеХранение;

ВыборкаПоСкладам = ВыборкаПоСсылкам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСкладам.НайтиСледующий(Новый Структура("Склад",ВыборкаПоШапке.Склад)) Цикл
ВыборкаРабочиеУчастки = ВыборкаПоСкладам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

Если ДанныеПоШапке.Колонки.Найти("ВыводитьПоУчету") <> Неопределено И ПараметрыПечати.ИмяФормы  = "ЗаданиеНаПересчет" Тогда
ВыводитьПоУчету = ВыборкаПоШапке.ВыводитьПоУчету;
КонецЕсли;

Если ВыводитьКоды И ИспользуетсяСправочноеХранение И (ВыводитьУпаковки ИЛИ ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыОснова;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокОснова;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыОснова;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыОснова;
ИначеЕсли ВыводитьКоды И ИспользуетсяСправочноеХранение И НЕ (ВыводитьУпаковки И ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезУпаковок;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезУпаковок;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезУпаковок;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезУпаковок;
ИначеЕсли ВыводитьКоды И НЕ ИспользуетсяСправочноеХранение И (ВыводитьУпаковки ИЛИ ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезЯчеек;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезЯчеек;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезЯчеек;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезЯчеек;
ИначеЕсли ВыводитьКоды И НЕ ИспользуетсяСправочноеХранение И НЕ (ВыводитьУпаковки И ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезЯчеекБезУпаковок;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезЯчеекБезУпаковок;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезЯчеекБезУпаковок;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезЯчеекБезУпаковок;
ИначеЕсли НЕ ВыводитьКоды И ИспользуетсяСправочноеХранение И (ВыводитьУпаковки ИЛИ ВыводитьПоУчету)  Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезКодов;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезКодов;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезКодов;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезКодов;
ИначеЕсли НЕ ВыводитьКоды И ИспользуетсяСправочноеХранение И НЕ (ВыводитьУпаковки И ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезУпаковокБезКодов;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезУпаковокБезКодов;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезУпаковокБезКодов;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезУпаковокБезКодов;
ИначеЕсли НЕ ВыводитьКоды И НЕ ИспользуетсяСправочноеХранение И (ВыводитьУпаковки И ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезЯчеекБезКодов;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезЯчеекБезКодов;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезЯчеекБезКодов;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезЯчеекБезКодов;
ИначеЕсли НЕ ВыводитьКоды И НЕ ИспользуетсяСправочноеХранение И НЕ (ВыводитьУпаковки И ВыводитьПоУчету) Тогда
ОбластьШапкаТаблицы     =  ОбластьШапкаТаблицыБезЯчеекБезУпаковокБезКодов;
ОбластьРабочийУчасток   =  ОбластьРабочийУчастокБезЯчеекБезУпаковокБезКодов;
ОбластьСтрокаТаблицы       =  ОбластьСтрокаТаблицыБезЯчеекБезУпаковокБезКодов;
ОбластьПодвалТаблицы   =  ОбластьПодвалТаблицыБезЯчеекБезУпаковокБезКодов;
КонецЕсли;

ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ПредставлениеСклада = СкладыСервер.ПолучитьПредставлениеСклада(ВыборкаПоШапке.СкладПредставление,
ВыборкаПоШапке.ПомещениеПредставление);

РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс, Представление");
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоШапке);
РеквизитыДокумента.Представление = ВыборкаПоШапке.СсылкаПредставление;

ПредставлениеРаспоряжения = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента,, Истина);

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

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

ОбластьШапка.Параметры.ПредставлениеСклада = ПредставлениеСклада;
ОбластьШапка.Параметры.ПредставлениеРаспоряжения = ПредставлениеРаспоряжения;

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

Если ТипЗнч(ВыборкаПоШапке.Ссылка) = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
РеквизитыДокумента.Дата          = ВыборкаПоШапке.ОснованиеДата;
РеквизитыДокумента.Номер         = ВыборкаПоШапке.ОснованиеНомер;
РеквизитыДокумента.Префикс       = "";
РеквизитыДокумента.Представление = ВыборкаПоШапке.ОснованиеПредставление;

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

Если ВыборкаПоШапке.ОтгрузкаПоЗаданиюНаПеревозку Тогда

РеквизитыДокумента.Дата          = ВыборкаПоШапке.ЗаданиеНаПеревозкуДата;
РеквизитыДокумента.Номер         = ВыборкаПоШапке.ЗаданиеНаПеревозкуНомер;
РеквизитыДокумента.Префикс       = "";
РеквизитыДокумента.Представление = ВыборкаПоШапке.ЗаданиеНаПеревозкуПредставление;

ОбластьЗаданиеНаПеревозку.Параметры.ЗаданиеНаПеревозкуПредставление =
ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента);
ОбластьЗаданиеНаПеревозку.Параметры.ПорядокДоставки = ВыборкаПоШапке.ПорядокДоставки;

ТабличныйДокумент.Вывести(ОбластьЗаданиеНаПеревозку);

КонецЕсли;

КонецЕсли;

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

ВыводитьУчастки = Ложь;
ВыводитьУчастки = (ВыборкаПоШапке.ИспользованиеРабочихУчастков = Перечисления.ИспользованиеСкладскихРабочихУчастков.Использовать);

ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);

НомерСтроки = 1;

Пока ВыборкаРабочиеУчастки.Следующий() Цикл

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

ВыборкаНомерСтроки = ВыборкаРабочиеУчастки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНомерСтроки.Следующий() Цикл

ВыборкаПоТовару = ВыборкаНомерСтроки.Выбрать();

Пока ВыборкаПоТовару.Следующий() Цикл 

Если ВыборкаПоТовару.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда

ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаПоТовару);
ОбластьСтрокаТаблицы.Параметры.НомерСтроки = НомерСтроки;
НомерСтроки = НомерСтроки + 1;

Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицы.Параметры.Артикул = ВыборкаПоТовару[КолонкаКодов];
КонецЕсли;

СтруктураПоиска = Новый Структура("Ссылка, Склад, РабочийУчасток, НомерСтроки");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаПоТовару);

СтрокаСерий = "";
Пока ВыборкаПоСериям.НайтиСледующий(СтруктураПоиска) Цикл
СтрокаСерий = СтрокаСерий + ВыборкаПоСериям.ПредставлениеСерии + ", ";
КонецЦикла;

Если СтрДлина(СтрокаСерий) <> 0 Тогда
СтрокаСерий = Лев(СтрокаСерий, СтрДлина(СтрокаСерий) - 2);
КонецЕсли;

ОбластьСтрокаТаблицы.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоТовару.ПредставлениеНоменклатуры,
ВыборкаПоТовару.ПредставлениеХарактеристики,
, // Упаковка
СтрокаСерий);

Если ИспользуетсяСправочноеХранение Тогда

ВыборкаПоТовару.Сбросить();

ДопЯчейки = "";
Пока ВыборкаПоТовару.Следующий() Цикл
ДопЯчейки = ДопЯчейки + ВыборкаПоТовару.ЯчейкаПредставление + Символы.ПС;
КонецЦикла;
ОбластьСтрокаТаблицы.Параметры.ДополнительныеЯчейки = ДопЯчейки;
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);

Иначе

ТекНоменклатура   = Неопределено;
ТекХарактеристика = Неопределено;
ТекСерия   = Неопределено;
Количество   = Неопределено;

Если ВыборкаПоТовару.Номенклатура <> ТекНоменклатура
И ВыборкаПоТовару.Характеристика <> ТекХарактеристика
И ВыборкаПоТовару.Серия <> ТекСерия Тогда

Количество = ВыборкаПоТовару.Количество;

КонецЕсли;

ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаПоТовару);
ОбластьСтрокаТаблицы.Параметры.НомерСтроки = НомерСтроки;
НомерСтроки = НомерСтроки + 1;

Если ВыводитьКоды Тогда
ОбластьСтрокаТаблицы.Параметры.Артикул = ВыборкаПоТовару[КолонкаКодов];
КонецЕсли;

ОбластьСтрокаТаблицы.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
?(ЗначениеЗаполнено(ВыборкаПоТовару.Номенклатура),
ВыборкаПоТовару.ПредставлениеНоменклатуры,
НСтр("ru = '<пустая ячейка>'")),
ВыборкаПоТовару.ПредставлениеХарактеристики,
, // Упаковка
ВыборкаПоТовару.ПредставлениеСерии);

СтрокаКоличестваУпаковок = "";
СтрокаИменованийУпаковок = "";

ПредставлениеЕдининицыИзмеренияУпаковки = ВыборкаПоТовару.ПредставлениеБазовойЕдиницыИзмерения;

Если ИспользуетсяСправочноеХранение Тогда

ДопЯчейки = ВыборкаПоТовару.ЯчейкаПредставление + Символы.ПС;
СтуктураПоискаТовара = Новый Структура;
СтуктураПоискаТовара.Вставить("Номенклатура", ВыборкаПоТовару.Номенклатура);
СтуктураПоискаТовара.Вставить("Характеристика", ВыборкаПоТовару.Характеристика);
СтуктураПоискаТовара.Вставить("Серия", ВыборкаПоТовару.Серия);

Пока ВыборкаПоТовару.НайтиСледующий(СтуктураПоискаТовара) Цикл
ДопЯчейки = ДопЯчейки + ВыборкаПоТовару.ЯчейкаПредставление + Символы.ПС;
КонецЦикла;
ОбластьСтрокаТаблицы.Параметры.ДополнительныеЯчейки = ДопЯчейки;
КонецЕсли;

Если (ВыводитьУпаковки ИЛИ ВыводитьПоУчету) Тогда
Если ПараметрыПечати.ИмяФормы  <> "ЗаданиеНаПересчет" И СтруктураОбъектов.Ключ <> "Документ.ПересчетТоваров" Тогда
СтруктураПоиска = Новый Структура("Ссылка,Склад,РабочийУчасток,НомерСтроки");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаПоТовару);
ВыборкаПоУпаковкам.Сбросить();
Пока ВыборкаПоУпаковкам.НайтиСледующий(СтруктураПоиска) Цикл
Если Количество <> Неопределено Тогда
КоличествоВДокумент = Цел(Количество / ВыборкаПоУпаковкам.КоличествоВУпаковке);
Если КоличествоВДокумент > 0 Тогда
СтрокаКоличестваУпаковок = СтрокаКоличестваУпаковок + КоличествоВДокумент + Символы.ПС;
СтрокаИменованийУпаковок = СтрокаИменованийУпаковок
+ ВыборкаПоУпаковкам.ПредставлениеЕдининицыИзмеренияУпаковки
+ Символы.ПС;
Если Количество = КоличествоВДокумент * ВыборкаПоУпаковкам.КоличествоВУпаковке Тогда
Количество = Неопределено;
Иначе
Количество = Количество - КоличествоВДокумент * ВыборкаПоУпаковкам.КоличествоВУпаковке;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если Количество <> Неопределено Тогда
СтрокаКоличестваУпаковок = СтрокаКоличестваУпаковок + Количество;
СтрокаИменованийУпаковок = СтрокаИменованийУпаковок + ПредставлениеЕдининицыИзмеренияУпаковки;
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.КоличествоУпаковок = СтрокаКоличестваУпаковок;
ОбластьСтрокаТаблицы.Параметры.ПредставлениеЕдининицыИзмеренияУпаковки = СтрокаИменованийУпаковок;
КонецЕсли;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;

ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);

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

КонецЦикла;
КонецЦикла;

ТекстСообщения = "";
Если ВыборкаПоШапке.Количество() = 0 И СтруктураОбъектов.Ключ = "Документ.ВводОстатков" Тогда
Если ПолучитьФункциональнуюОпцию("ИспользоватьМногооборотнуюТару") Тогда
ТекстСообщения = НСтр("ru='Для данного типа операции документа ""Ввод остатков""
|печать ""%НазваниеФормы%"" не требуется.
|Печать возможна только для операций типа ""Собственные товары"", ""Полученные на комиссию товары"" 
|и ""Принятая от поставщиков возвратная тара""'");
Иначе
ТекстСообщения = НСтр("ru='Для данного типа операции документа ""Ввод остатков""
|печать ""%НазваниеФормы%"" не требуется.
|Печать возможна только для операций типа ""Собственные товары"" и ""Полученные на комиссию товары""'");
КонецЕсли;
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%НазваниеФормы%",НазваниеФормы);
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%Документ%", ВыборкаПоШапке.СсылкаПредставление);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецЕсли;

КонецЦикла;

ТабличныйДокумент.АвтоМасштаб = Истина;

Возврат ТабличныйДокумент;

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


Вопрос как ее настроить для печати именно с заказа клиента, а не с реализации. Где необходимо внести изменения?

Дмитрий@

а счас разве не так делается, заносишь ее в справочник внешние обработки и выбираешь из какого документа она должна вызываться?

Vitalik54

Цитата: Дмитрий@ от 22 мая 2015, 05:56
а счас разве не так делается, заносишь ее в справочник внешние обработки и выбираешь из какого документа она должна вызываться?

Заказ клиента выбран. Вылетает следующая ошибка:

{ВнешняяОбработка.ВПФНаборная.МодульОбъекта(190)}: Метод объекта не обнаружен (ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров)
ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати,

Дмитрий@

Эта ошибка вылетает когда вы пытаетесь распечатать внешнюю печатную форму из заказа клиента?

Vitalik54

Цитата: Дмитрий@ от 22 мая 2015, 07:38
Эта ошибка вылетает когда вы пытаетесь распечатать внешнюю печатную форму из заказа клиента?

Да, эта ошибка возникает, когда я пытаюсь распечатать из заказа клиента.

Дмитрий@

Где находится этот метод ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров.
И где находится сам код в котором возникает ошибка.

SitnovaMarina

Ну вообще то мало просто указать принадлежность ВПФ. Еще нужно в коде проверить запросы, в качестве параметра в которые передается ссылка на документ. И обычно, реквизиты документов разные)

также в модулях документов есть всякие разные экспортные функции, и видимо не найдя такую в документе Заказ покупателя, вывел Вам ошибку.

По мне так проще написать с нуля такую ВПФ, ну или отладчиком (есть спец. Обработка для отладки) смотрите, где у Вас ошибки.
Народная мудрость: Программу встречают по интерфейсу

Vitalik54

Цитата: Дмитрий@ от 22 мая 2015, 09:00
Где находится этот метод ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров.
И где находится сам код в котором возникает ошибка.

Метод ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров изначально находился в общем модуле, сейчас я его скопировал себе. Ошибка пропала, но теперь просто выдается сообщение о том, что печатная форма недоступна и все. Ошибка возникала в коде ВПФ.

Дмитрий@

О том что печатная форма недоступна с таким я в первый раз сталкиваюсь.
Что понимается под печатной формой? такого объекта в 1С нет.
Добавлено: 22 мая 2015, 14:44


У вас общий модуль называется "МенеджерОбъекта"

SitnovaMarina

Это возникает, когда в ТабДокумент в процедуре Печати содержится НЕОПРЕДЕЛЕНО, тогда системы выдаетсообзение, что не удолось сформировать Табдокумент.
Народная мудрость: Программу встречают по интерфейсу

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск