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

Доработка типовой печатной формы на ВПФ (нужна помощь в исправлении столбцов)

Автор Andrey, 02 ноя 2017, 13:06

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

Andrey

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

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

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

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


ФормСтрока = "Л = ru_RU; ДП = Ложь";
ПарПредмета="рубль,рубля,рублей,м,копейка,копеейки,копеек,м,2";

// Читаем свойства документа

НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документ_ЗаказПокупателя;
    ОбъектОтбораЗначений = СсылкаНаЗаказ;
СвойстваДокумента = ПрочитатьЗаполнитьСвойстваИЗначения(НазначениеСвойств, ОбъектОтбораЗначений);

Марка = "";
Номер = "";
Пробег = 0;
ГодВыпуска="";
ВидРемонта="";
Диспетчер=СсылкаНаЗаказ.Ответственный;
Для Каждого СтрСвойство Из СвойстваДокумента Цикл
Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Вид ремонта" Тогда
ВидРемонта = СтрСвойство.Значение;
КонецЕсли;

Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Марка" Тогда
Марка = СтрСвойство.Значение;
КонецЕсли;

Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Номер" Тогда
Номер = СтрСвойство.Значение;
КонецЕсли;

Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Пробег" Тогда
Пробег = СтрСвойство.Значение;
КонецЕсли;

Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Год выпуска" И СтрСвойство.Значение<> NULL Тогда
ГодВыпуска = Формат(Год(СтрСвойство.Значение),"ЧГ=0");
КонецЕсли;

Если СокрЛП(СтрСвойство.Свойство.Наименование) = "Диспетчер" И СтрСвойство.Значение<> NULL Тогда
Диспетчер=СтрСвойство.Значение;
КонецЕсли;

КонецЦикла;
     

ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ЗаказНаряд");
// Заголовок
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.Организация=ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаЗаказ.Организация, СсылкаНаЗаказ.Дата), "ПолноеНаименование,");
ОбластьМакета.Параметры.АдресОрганизации=ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(СсылкаНаЗаказ.Организация, СсылкаНаЗаказ.Дата), "ЮридическийАдрес,");
ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаЗаказ, "Заказ-наряд");
//*************
ПозицияДатыВЗаголовке=Найти(ОбластьМакета.Параметры.ТекстЗаголовка,"от ")+2;
ДатаЗаказНаряда=СсылкаНаЗаказ.Дата;

//Если ДокументыАкты.Количество()> 0 Тогда
// ДатаЗаказНаряда=ДокументыАкты[0][0].Дата;
//Иначе
Если ДокументыРеализации.Количество()>0 Тогда
ДатаЗаказНаряда=ДокументыРеализации[0][0].Дата;
КонецЕсли;
//КонецЕсли;
ОбластьМакета.Параметры.ТекстЗаголовка=ЛЕВ(ОбластьМакета.Параметры.ТекстЗаголовка,ПозицияДатыВЗаголовке)+Формат(ДатаЗаказНаряда,"ДФ='дд ММММ гггг'");
//***************
ТабДок.Вывести(ОбластьМакета);

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

//СуммаИтогТовары=0;
//СуммаИтогТоварыНДС=0;
//СуммаИтогУслуги=0;
//СуммаИтогУслугиНДС=0;
//СуммаИтог=0;
//СуммаИтогНДС=0;

Для каждого строка Из ДокументыРеализации Цикл
ОбластьМакета = Макет.ПолучитьОбласть("УслугиШапка");
ОбластьМакета.Параметры.ДокументАкт=строка[0];
ТабДок.Вывести(ОбластьМакета);
//Услуги
ОбластьМакета = Макет.ПолучитьОбласть("Услуги");
//СуммаИтогУслуги=0;
//СуммаИтогУслугиНДС=0;
//Для Каждого ТекСтрокаУслуги Из строка[0].Услуги Цикл
// СуммаИтогУслуги=СуммаИтогУслуги+ТекСтрокаУслуги.Сумма;
// СуммаИтогУслугиНДС=СуммаИтогУслугиНДС+ТекСтрокаУслуги.СуммаНДС;
// ОбластьМакета.Параметры.Заполнить(ТекСтрокаУслуги);
// сообщить("парпарпарпарпарпарп");
ОбластьМакета.Параметры.ЕдиницаИзмерения=ТекСтрокаУслуги.Номенклатура.БазоваяЕдиницаИзмерения.Наименование;

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

Если Выборка.ЕдиницаПоКлассификатору.Наименование = "шт" Тогда
ОбластьМакета.Параметры.Количество=ТекСтрокаУслуги.Количество * Выборка.Коэффициент;
ОбластьМакета.Параметры.Цена=ТекСтрокаУслуги.Сумма/ОбластьМакета.Параметры.Количество;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//********конец
ОбластьМакета.Параметры.КодУслуги=ТекСтрокаУслуги.Номенклатура.Артикул;
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
// ВсегоУслуги
//СуммаИтог=СуммаИтог+СуммаИтогУслуги;
//СуммаИтогНДС=СуммаИтогНДС+СуммаИтогУслугиНДС;
//ОбластьМакета = Макет.ПолучитьОбласть("ВсегоУслуги");
//ОбластьМакета.Параметры.СуммаИтогУслуги=СуммаИтогУслуги;
//ОбластьМакета.Параметры.СуммаИтогУслугиНДС=СуммаИтогУслугиНДС;
//ОбластьМакета.Параметры.СуммаИтогУслугиПрописью=ЧислоПрописью(СуммаИтогУслуги, ФормСтрока, ПарПредмета)+ " в т.ч. НДС "+Формат(СуммаИтогУслугиНДС,"ЧЦ=15; ЧДЦ=2")+" р.";
//ТабДок.Вывести(ОбластьМакета);
//КонецЦикла; - Закончить Функцию +
КонецФункции
//
//
//
//
//
//
//
//
//
//
//
Для каждого строка Из ДокументыРеализации Цикл
// Товары Шапка
ОбластьМакета = Макет.ПолучитьОбласть("ТоварыШапка");
ОбластьМакета.Параметры.ДокументРеализации=строка[0];
ТабДок.Вывести(ОбластьМакета);
// Товары
ОбластьМакета = Макет.ПолучитьОбласть("Товары");
//СуммаИтогТовары=0;
//СуммаИтогТоварыНДС=0;
Для Каждого ТекСтрокаТовары Из строка[0].Товары Цикл
//СуммаИтогТовары=СуммаИтогТовары+ТекСтрокаТовары.Сумма;
//СуммаИтогТоварыНДС=СуммаИтогТоварыНДС+ТекСтрокаТовары.СуммаНДС;
ОбластьМакета.Параметры.Заполнить(ТекСтрокаТовары);
ОбластьМакета.Параметры.Код=ТекСтрокаТовары.Номенклатура.Артикул;
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
   
// ВсегоТовары
//СуммаИтог=СуммаИтог+СуммаИтогТовары;
//СуммаИтогНДС=СуммаИтогНДС+СуммаИтогТоварыНДС;
//ОбластьМакета = Макет.ПолучитьОбласть("ВсегоТовары");
//ОбластьМакета.Параметры.СуммаИтогТовары=СуммаИтогТовары;
//ОбластьМакета.Параметры.СуммаИтогТоварыНДС=СуммаИтогТоварыНДС;
//ОбластьМакета.Параметры.СуммаИтогТоварыПрописью=ЧислоПрописью(СуммаИтогТовары, ФормСтрока, ПарПредмета)+ " в т.ч. НДС "+Формат(СуммаИтогТоварыНДС,"ЧЦ=15; ЧДЦ=2")+" р.";
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;

// Подвал
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.Заполнить(СсылкаНаЗаказ);
ОбластьМакета.Параметры.Дата=ТекущаяДата();
//ОбластьМакета.Параметры.СуммаИтог=СуммаИтог;
//ОбластьМакета.Параметры.СуммаИтогНДС=СуммаИтогНДС;
//ОбластьМакета.Параметры.СуммаИтогПрописью=ЧислоПрописью(СуммаИтог, ФормСтрока, ПарПредмета)+ " в т.ч. НДС "+Формат(СуммаИтогНДС,"ЧЦ=15; ЧДЦ=2")+" р.";
ОбластьМакета.Параметры.Ответственный=Диспетчер;
ТабДок.Вывести(ОбластьМакета);

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

Запрос = Новый Запрос();

Запрос.УстановитьПараметр("НазначениеСвойств",       НазначениеСвойств);
Запрос.УстановитьПараметр("ОбъектОтбораЗначений",    ОбъектОтбораЗначений);
//Запрос.УстановитьПараметр("СписокНазначенийСвойств", СписокНазначенийСвойств(ОбъектОтбораЗначений));

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

Результат = Запрос.Выполнить().Выгрузить();
    Возврат Результат;
КонецФункции

// Функция формирует список значений, содержащий объект отбора назначений свойств
// и всех его родителей. Список используется в качестве параметра запросов.
//
// Параметры:
//  Нет.
//
// Возвращаемое значение:
//  Cписок значений, содержащий объект отбора назначений и всех его родителей.
//
//Функция СписокНазначенийСвойств(ОбъектОтбораНазначений)

// СписокНазначенийСвойств = Новый СписокЗначений;

// Назначение = ОбъектОтбораНазначений;
//    
// Попытка             
// Пока Назначение <> Неопределено  Цикл
// СписокНазначенийСвойств.Добавить(Назначение);
// Назначение = Назначение.Родитель;
// КонецЦикла;
// Исключение
// КонецПопытки;

// СписокНазначенийСвойств.Добавить(Назначение);

// Возврат СписокНазначенийСвойств;

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


выдает ошибку
{ВнешняяОбработка.ЗаказНаряд_Новый.МодульОбъекта(228,10)}: Оператор Возврат (Return) не может употребляться вне процедуры или функции
   Возврат <<?>>ТабДок; (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ЗаказНаряд_Новый.МодульОбъекта(228,17)}: Обнаружено логическое завершение исходного текста модуля
   Возврат ТабДок;<<?>> (Проверка: Толстый клиент (обычное приложение))

MuI_I_Ika


Теги: ВПФ 

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

Рейтинг@Mail.ru Rambler's Top100

Поиск