Изменение заголовка печатной формы в зависимости от условий

  • Автор темы Автор темы bredis
  • Дата начала Дата начала
B

bredis

Платформа 8.1 Задача такова, что бы в печатной форме в зависимости от склада отправителя изменялся формат времени. Условие такое: Если СкладОтправитель = Кондитерский цех тогда и надо вывести формат даты с часами, минутами и секундами, который описан в функции: "Функция СформироватьЗаголовокДокумента1" Иначе выводится стандартный заголовок, который вызывается из общего модуля.
Мучился, мучился ну никак и подсказать не кому.

Функция СформироватьЗаголовокДокумента1(ДокументОбъект, НазваниеДокумента = "ПеремещениеТоваров")

Возврат НазваниеДокумента + " № " + ОбщегоНазначения.ПолучитьНомерНаПечать(ДокументОбъект)
+ " от " + Формат(ДокументОбъект.Дата, "ДФ=""дд ММ гггг 'г.' ЧЧ:мм:сс""");

КонецФункции
Функция Печать() Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="ВЫБРАТЬ
| ПеремещениеТоваров.Номер,
| ПеремещениеТоваров.Дата,
| ПеремещениеТоваров.Организация,
| ПеремещениеТоваров.СкладОтправитель КАК Поставщик,
| ПеремещениеТоваров.СкладПолучатель КАК Получатель,
| ПеремещениеТоваров.СкладОтправитель.Представление КАК ПредставлениеПоставщика,
| ПеремещениеТоваров.СкладПолучатель.Представление КАК ПредставлениеПолучателя,
| ПеремещениеТоваров.Грузополучатель
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

ЗапросПоТоварам = Новый Запрос();
ЗапросПоТоварам.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
ЗапросПоТоварам.Текст =
"ВЫБРАТЬ
| ПеремещениеТоваровТовары.Ссылка,
| ПеремещениеТоваровТовары.НомерСтроки,
| ПеремещениеТоваровТовары.Номенклатура,
| ПеремещениеТоваровТовары.Количество,
| ПеремещениеТоваровТовары.ЕдиницаИзмерения КАК ЕдиницаХранения,
| ПеремещениеТоваровТовары.Номенклатура.НаименованиеПолное КАК Товар,
| ПеремещениеТоваровТовары.ЦенаВРознице КАК ЦенаРозн,
| ПеремещениеТоваровТовары.СуммаВРознице КАК СуммаРозн,
| ПеремещениеТоваровТовары.СуммаБезНДС КАК Сумма,
| ПеремещениеТоваровТовары.Цена КАК Цена
|ИЗ
| Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
|ГДЕ
| ПеремещениеТоваровТовары.Ссылка = &ТекущийДокумент";
ВыборкаСтрок = ЗапросПоТоварам.Выполнить().Выгрузить();

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПоступлениеТоваровУслуг_Накладная";
Макет = ПолучитьМакет("Макет");

// Выводим шапку накладной

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



Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="ВЫБРАТЬ
| ПеремещениеТоваров.СкладОтправитель КАК Поставщик
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ИТОГИ ПО
| Поставщик";
Поставщик = Запрос.Выполнить();

Если
Поставщик = Справочники.Склады.НайтиПоКоду("00103") тогда
ОбластьМакета.Параметры.ТекстЗаголовка = СформироватьЗаголовокДокумента1(Шапка, "Накладная на перемещение");

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


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


Вот в этом куске загвоздка.
"00103" Это код Кондитерского цеха в справочнике.
"Поставщик" это псевдоним реквезита СкладОтправитель.

Макет = ПолучитьМакет("Макет");

// Выводим шапку накладной

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



Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="ВЫБРАТЬ
| ПеремещениеТоваров.СкладОтправитель КАК Поставщик
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ИТОГИ ПО
| Поставщик";
Поставщик = Запрос.Выполнить();

Если
Поставщик = Справочники.Склады.НайтиПоКоду("00103") тогда
ОбластьМакета.Параметры.ТекстЗаголовка = СформироватьЗаголовокДокумента1(Шапка, "Накладная на перемещение");

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

Шапка.Следующий();

а там где ошибка...... есть только результат запроса.

Поставщик = Запрос.Выполнить();

Если
Поставщик = Справочники.Склады.НайтиПоКоду("00103") тогда
ОбластьМакета.Параметры.ТекстЗаголовка = СформироватьЗаголовокДокумента1(Шапка, "Накладная на перемещение");

Иначе
ОбластьМакета.Параметры.ТекстЗаголовка = РаботаСдиалогами.СформироватьЗаголовокДокумента(Шапка, "Накладная на перемещение");
КонецЕсли;
 
Добавил Ваш текст как написано ниже.
Стала выскакивать служебное сообщение при формировании печатной формы:"Не удалось сформировать внешнюю печатную форму! Поле объекта не обнаружено (Номер)"
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="ВЫБРАТЬ
| ПеремещениеТоваров.СкладОтправитель КАК Поставщик
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ИТОГИ ПО
| Поставщик";

Шапка = Запрос.Выполнить().Выбрать(); // формируется выборка
Шапка.Следующий();
Поставщик = Запрос.Выполнить();

unknown181538 , оработка идёт но проходит только после "иначе" первое условие не выполняется.
 
Да уж..........

Поставщик = Запрос.Выполнить().Выбрать(); // выборка запроса
ПоставщикДок = Поставщик.Следующий();


Если
ПоставщикДок = Справочники.Склады.НайтиПоКоду("00103") тогда
ОбластьМакета.Параметры.ТекстЗаголовка = СформироватьЗаголовокДокумента1(Шапка, "Накладная на перемещение");

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

Все, что связано с грузополучателем убрал. Я так понял, с ним вы разберетесь.
"Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();"
Вот эти строки написаны два раза. Причем во второй раз переменная "Запрос" содержит уже другое значение. Соответственно второй вызов надо просто убрать.
ПС. Для отладки внешней формы наберите в глобальном поиске "Обработка.Печать()" и поставьте перед этим точку останова.

А теперь, чтоб работало :
Если
СокрЛП(ссылкаНаОбъект.СкладОтправитель.код)="00103" тогда
Но если все-таки хотите через запрос, разберитесь там с перемнными поставщик и поставщикДок. Поле кода отправителя надо искать в ПоставщикДок.
 
Спасибо Вам огромное!!! Всё заработало. И С Новым Годом!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!