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

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

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

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

Дмитрий@

Да здесь что -то вообще непонятное. Код который он привел в первом сообщении, насколько я понимаю он находится в модуле объекта обработки, Но там должна быть функция Печать, которая возвращает ТабДОк. Вместо этого у него процедура. И как эта обработка может выводить печатную форму на печать вообще непонятно.

Vitalik54

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


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

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

Дмитрий@

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

Скиньте еще раз код обработки и код в модуле менеджера, и код ошибки.

Vitalik54

Цитата: Дмитрий@ от 25 мая 2015, 14:48
Попробуйте удалить внешнюю печатную форму из справочника "Внешние обработки", и посмотрите будут ли распечатыватся печатная форма из документов заказ клиента и реализация, есть подозрение, что у вас разные формы печатаются.

Скиньте еще раз код обработки и код в модуле менеджера, и код ошибки.

Не совсем понял с удалением. Если я ее удалю, то из реализации будет возможность распечатать "Задание на отбор товаров" типовым механизмом. А из заказа я в принципе не смогу распечатать "Задание на отбор товаров", так как типового механизма по печати этого документа из заказа я не нашел.

Дмитрий@

Судя по коду в первом сообщении, эта внешняя печатная форма у вас не работает, поскольку не соблюдаются определенные правила для внешних печатных форм. Поэтому я вас попросил проверить.
Также я вас просил скинуть еще раз код обработки.

Vitalik54

Цитата: Дмитрий@ от 26 мая 2015, 13:38
Судя по коду в первом сообщении, эта внешняя печатная форма у вас не работает, поскольку не соблюдаются определенные правила для внешних печатных форм. Поэтому я вас попросил проверить.
Также я вас просил скинуть еще раз код обработки.

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

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

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

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

КонецЦикла;

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

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

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



Сейчас она работает аналогично типовому функционалу печати "Задание на отбор товара" и печатается из документа реализации. Из заказа она пишет, что "Печатная форма недоступна".
Как я понимаю, проблема заключается в том, что в "Документ.ЗаказКлиента: Модуль менеджера" отсутствует функция "ПолучитьДанныеДляПечатнойФормыОтборРазмещениеТоваров(ПараметрыПечати, МассивОбъектов) Экспорт".
и мне необходимо переделать эту функцию из "РеализацииТоваровУслуг" под "ЗаказКлиента" и добавить ее в обработку.

Дмитрий@

Еще раз.А что происходит при удалении этой обработки из справочника, то есть печатается из документов или нет.

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


Это должна быть функция а не процедура, и эта функция должна возвращать табдок.

Vitalik54

Цитата: Дмитрий@ от 26 мая 2015, 14:29
Еще раз.А что происходит при удалении этой обработки из справочника, то есть печатается из документов или нет.

Если удалить ее, то пропадают строчки , которые появились после ее добавления, в списке, который открывается при нажатии на кнопку "Печать" в соответствующем док-те.

Дмитрий@

Ясно тогда правьте то что указано в предыдущем сообщении.

Теги:

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

Рейтинг@Mail.ru

Поиск