Как "встроить" печатную форму из внешней обработки в типовой документ

1. Airman81 30.11.11 15:39 Сейчас в теме
Понимаю, что вопрос наверно несложный, для опытных программистов, но я совсем новичок. Прошу помочь по возможности, показав пример или дав ссылку на то, где подобное может разобрано.
Например, как можно "встроить" внешнюю обработку, выложенную здесь
http://forum.infostart.ru/forum24/topic23435/message514544/?result=reply#message514544
и вопрос подобный оттуда "Доброго времени суток. Возможно, я и задаю простейший вопрос (но я новичок и ни разу пока не сталкивался с подобными задачами), но не могли бы вы подсказать как, например, эту внешнюю печатную форму (обработку) "встроить" в документ Инвентаризации расчетов с контрагентами, т.е. не использовать внешнюю обработку, а именно доработать стандартный документ в УПП. Передо мной возникли несколько подобных задач с разными документами, делать как внешнюю обработку у меня получилось, а вот на "встраивании" запнулся ввиду недостатка знаний. Может быть подобные примеры были разобраны где-то и методика разобрана, не могли бы дать ссылку где почитать можно? платформа 8.2.13 или 8.2.14, конфигурация УПП, редакция 1.3. "
с тем как создавать внешнюю обработку на примере доработки заполнения Подвала счет-фактуры451 из Документа счет фактуры я вроде бы разобрался и внешнюю обработку сделал (надо было добавить вывод фамилий тех, кто имеет право заверять счет-фактуры за руководителя и за главного бухгалтера). а вот как "встроить" ее в документ, без использования внешней печатной формы пока не могу понять. Если, можете, покажите на примере (этом или подобном) или покажите где копать теорию.
Был бы очень благодарен за информацию.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. varkolak 4 30.11.11 15:43 Сейчас в теме
Лучше делай внешней печатной формой, с обновлениями проблем меньше.
5. Airman81 30.11.11 15:54 Сейчас в теме
(2),(3) я это понимаю про обновление, но поставлена именно подобная задача - "встроить в типовую конфигурацию. с этим и пытаюсь разобраться впервые, т.к. опыта до этого не было.
6. Airman81 30.11.11 15:58 Сейчас в теме
(2) для второй задачи с доработкой счет-фактуры я так и сделал с помощью внешней обработки, найдя материал по тому как примерно это делается, а для первой задачи со справкой я вроде бы нашел похожую внешнюю обработку здесь. но надо как-то либо "встроить" эти внешние печатные формы, либо с нуля разрабатывать в них?
3. katya0702 30.11.11 15:47 Сейчас в теме
Извините, но зачем вносить изменения непосредственно в документ? Возникает риск при очередном обновлении забыть про них и потерять. Мне кажется, механизм внешних печатных форм достаточно удобен. Или вы спрашиваете просто "для общего развития"?
7. Airman81 30.11.11 16:00 Сейчас в теме
(3)"для общего развития" тоже надо копать для себя, т.к. знаний и опыта пока мало совсем.
4. Alex_E 2374 30.11.11 15:51 Сейчас в теме
согласен с varkolak, нужно использовать внешнюю печатную форму, кот. легко подключается к документу и в 8 сохраняется в базе. на практике у меня были случаи, когда с помощью внешней печатной формы не только печать организовывал, но и изменения в документе, если других возможностей для его изменения не было, а конфигурацию изменять нельзя (напр. для удалённого узла)
10. Airman81 30.11.11 16:10 Сейчас в теме
(4)сказали надо "встроить".. :) копаюсь пока в коде документа счетфактуравыданный (что где берется и как это безболезненно дополнить модифицированной счетфактурой451, чтобы была у пользователя возможность выбора какую счет-фактуру печатать.. туго идет пока поначалу..), т.к. ее с помощью внешней обработки я все же сам обновлял уже..
12. Alex_E 2374 30.11.11 16:23 Сейчас в теме
(10) Airman81, не совсем тебя понимаю - при регистрации печатной формы, если специально не задать замещаемую типовую, пользователь сможет выбрать нужную форму. а "про сказали надо ""встроить"".... то тут совсем непонятка - зарегистрированная печатная форма лежит в базе, от встроенной практически ничем не отличается. проблемы с ней могут возникнуть только при изменении состава реквизитов документа, или при переходе с платформы на платформу (напр. с 8.1 на 8.2) и легко решаются. главное преимущество - полная обновляемость конфигурации.
14. Airman81 30.11.11 17:06 Сейчас в теме
(12) Alex_E, возможно не совсем правильно выразился по поводу встроить, попробую по другому. Надо сделать так, чтобы при нажатии на Печать в документе СчетФактуравыданный кроме стандартной автоматически выбираемой счетфактуры была возможность выбора для вывода и модифицированной счет-фактуры. При этом не использовать разработанную ранее внешнюю обработку, а дописывать типовой код.
8. katya0702 30.11.11 16:06 Сейчас в теме
Посмотри в модуле формы документа Процедура ПриОткрытии - там д.б. строки
// Создать кнопки печати
ФормированиеПечатныхФорм.СоздатьКнопкиПечати(ЭтотОбъект, ЭтаФорма);

дальше через общие модули программа переходит к функции модуля объекта документа
Функция ПолучитьСтруктуруПечатныхФорм(), где задается список встроенных печатных форм

сама печать - из функции Печать() модуля объекта документа
11. Airman81 30.11.11 16:21 Сейчас в теме
(8) до этого я вставил макет модифицированной Счетфактуры451 в документ СчетфактураВыданный (исходный макет счетфактуры451 находится в разделе общих макетов) и на всякий случай вставил его добавление в получение структуры в процедуру модуля объекта
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт

СтруктураМакетов = Новый Структура;
Если НЕ ЗначениеЗаполнено(Дата) Тогда
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура 283");
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура 575");
СтруктураМакетов.Вставить("СчетФактура84" , "Счет-фактура 84");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
Если Дата < '20040216' Тогда
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
ИначеЕсли Дата < '20060530' Тогда
СтруктураМакетов.Вставить("СчетФактура84", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
КонецЕсли;
КонецЕсли;

Возврат СтруктураМакетов;

теперь при печати пункт этой счетфактуры появляется. но как его дальше заставить запускаться без ошибок?
13. katya0702 30.11.11 16:28 Сейчас в теме
(11) Airman81, дальше нужно идти в модуль менеджера, там есть функция ПечатьСчетаФактуры
15. Airman81 30.11.11 17:17 Сейчас в теме
(13) katya0702, надо как-то дописывать только эту функцию ПечатьСчетаФактуры(МассивОбъектов, ОбъектыПечати), а не копировать дополнительно подобную функцию из обработки? как и где формируются ее параметры МассивОбъектов, ОбъектыПечати и как их дополнить еще новым макетом, чтобы была возможность выбора макетов 451 и модифицированного451? если бы стояла задача просто "заменить" макет 451 на модифицированный, то в это функции в части

Для каждого Ссылка Из МассивОбъектов Цикл
Если Ссылка.Дата < '20040216' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575";
Макет = ПолучитьОбщийМакет("СчетФактура575");
ИначеЕсли Ссылка.Дата < '20060530' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84";
Макет = ПолучитьОбщийМакет("СчетФактура84");
ИначеЕсли Ссылка.Дата < '20090609' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283";
Макет = ПолучитьОбщийМакет("СчетФактура283");
Иначе
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
Макет = ПолучитьОбщийМакет("СчетФактура451");
КонецЕсли;
наверно достаточно было бы замены последнего случая на Макет = ПолучитьМакет("СчетФактура451модиф"); ?
а как правильно дополнить возможность выбора новым макетом?
19. katya0702 30.11.11 20:07 Сейчас в теме
(15) Airman81, наверное надо было мне немного подробнее объяснить...
Итак, свой макет вы добавили, структуру печатных форм сформировали.
Дальше у вас 2 варианта:
1. Вносим изменения в модуль менеджера документа.
В процедуру модуля менеджера Печать(...) добавляем строки

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

и добавляем также в модуль менеджера новую функцию ПечатьСчетаФактуры_модиф, в которой выбираем нужный макет и вносим все необходимые изменения и дополнения.

2. Вносим изменения в модуль объекта документа.
В модуле объекта ищем функцию Печать, меняем строки

Если ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда

ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);

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

КонецЕсли;

на такие:
Если ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда

ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);

Если ТабДокумент = Неопределено Тогда
Возврат
КонецЕсли;

ИначеЕсли ИмяМакета = "СчетФактура451_модиф" Тогда
ТабДокумент = ПечатьСчетаФактуры_модиф(...);

Иначе
.....

КонецЕсли;

и добавляем также в модуль объекта свою функцию ПечатьСчетаФактуры_модиф
20. Airman81 01.12.11 10:26 Сейчас в теме
(19) katya0702, спасибо, буду пробовать. а по поводу подробнее и правда, если можно, то поначалу лучше в подробностях расписать по возможности (что где и как), т.к. опыта до этого не было и знаний пока недостаточно.
21. katya0702 01.12.11 10:48 Сейчас в теме
16. Airman81 30.11.11 17:22 Сейчас в теме
(11)после попытки выбора нового пункта модифицированного макета выдается ошибка
{ОбщийМодуль.УправлениеПечатью.Модуль(29)}: В обработчике печати не был сформирован табличный документ для: Структура ВызватьИсключение(ТекстСообщенияОбОшибке);
как можно ее исправить?
17. Alex_E 2374 30.11.11 17:29 Сейчас в теме
(16) Airman81,
Airman81 пишет:

(12) Alex_E, возможно не совсем правильно выразился по поводу встроить, попробую по другому. Надо сделать так, чтобы при нажатии на Печать в документе СчетФактуравыданный кроме стандартной автоматически выбираемой счетфактуры была возможность выбора для вывода и модифицированной счет-фактуры. При этом не использовать разработанную ранее внешнюю обработку, а дописывать типовой код.


дописанный типовой код уже типовым не является, а внешних печатных форм подключить можно сколько угодно к одному документу, те же разные варианты счетов-фактур (справедливо и обратное - одна внешняя форма может быть использована для нескольких документов). Выбор нужной формы, при регистрации внешней, появляется в форме документа. ничего писать в конфе не надо - пусть типовой и остается, для этого в неё (типовую) и встроен механизм регистрации внешних форм
18. Airman81 30.11.11 18:56 Сейчас в теме
(17) Alex_E, и все же надо как-то дописать процедуры и функции, чтобы она была не внешней, наверно как-то дополнять МассивОбъектов, ОбъектыПечати, Праметры печати и т.д. в разных процедурах.. как это сделать пока не разобрался. Если можете объяснить как это можно сделать, буду признателен. Вопрос дальнейшего универсального обновления поставлен не был.
9. katya0702 30.11.11 16:09 Сейчас в теме
Из этой функции либо вызываются соответствующие функции модуля объекта, либо через модуль УправлениеПечатьюКлиент вызываются функции модуля менеджера документа.
22. Airman81 01.12.11 12:05 Сейчас в теме
пробую делать по первому способу

модифицированная процедура ПечатьСчетаФактуры в обработке внешней у меня отличалась лишь тем, что я закомментировал начальный цикл по массивуобъектов и сразу брал макет модифицированный
//Для каждого Ссылка Из МассивОбъектов Цикл
// Если СсылкаНаОбъект.Дата < '20040216' Тогда
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575";
// Макет = ПолучитьОбщийМакет("СчетФактура575");
// ИначеЕсли СсылкаНаОбъект.Дата < '20060530' Тогда
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84";
// Макет = ПолучитьОбщийМакет("СчетФактура84");
// ИначеЕсли СсылкаНаОбъект.Дата < '20090609' Тогда
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283";
// Макет = ПолучитьОбщийМакет("СчетФактура283");
// Иначе
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
// Макет = ПолучитьМакет("СчетФактура451модиф");
// КонецЕсли;

Макет = ПолучитьМакет("СчетФактура451модиф");
Если Не ПервыйДокумент Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
и далее до момента вывода нового подвала все оставалось как есть, только переменная Ссылка везде заменялась на Ссылканаобъект, передача которой происходила благодаря внешней обработки.

Модификация вывода подвала начиналась после исходного вывода "ИТОГО". Подвал был поделен на части и был доработан справочник организации с добавлением вкладки Счет-фактура, где хранились уполномоченные расписываться за руководителя и главбуха в виде 2 табличных частей. Оттуда потом и брались данные для вывода в подвал.

ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС;
ОбластьМакета.Параметры.ИтогоВсего = ИтогоВСего;
ПроставитьПрочеркиВПустыеПоля(ОбластьМакета);
ТабДокумент.Вывести(ОбластьМакета);


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

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


ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";

ОбъектыПечати = Новый СписокЗначений;

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

Возврат ТабДокумент;

А как быть в этом случае? После того как скопировал функцию эту дополнительно (изменив имя)в модуль менеджера, то появились ошибки по поводу того, что переменная ссылка не определена (Раньше то она бралась либо из внешней обработки, либо в исходном коде из массива объектов по циклу (в обработке цикл по ним был закомментирован). чему приравнивать ссылку или как и чем дополнять массив объектов?

{Документ.СчетФактураВыданный.МодульМенеджера(77,26)}: Переменная не определена (Ссылка)
СобратьДанныеДляПечати(<<?>>Ссылка, ДанныеДляПечати, УчетнаяПолитика);
{Документ.СчетФактураВыданный.МодульМенеджера(84,105)}: Переменная не определена (Ссылка)
СведенияОбПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, <<?>>Ссылка.Дата);
{Документ.СчетФактураВыданный.МодульМенеджера(85,104)}: Переменная не определена (Ссылка)
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, <<?>>Ссылка.Дата);
{Документ.СчетФактураВыданный.МодульМенеджера(86,177)}: Переменная не определена (Ссылка)
СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель), <<?>>Ссылка.Дата);
{Документ.СчетФактураВыданный.МодульМенеджера(87,115)}: Переменная не определена (Ссылка)
СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, <<?>>Ссылка.Дата);
{Документ.СчетФактураВыданный.МодульМенеджера(1




Если цикл по ссылке закомментировал и игнорировал пока ошибки про ссылку и вставил просто
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451модиф";
Макет = ПолучитьМакет("СчетФактура451модиф");
не уверен, что я правильно делал.. то после запуска и пробного выбора на вывод встроенной формы появилась ошибка:



{ОбщийМодуль.УправлениеПечатью.Модуль(29)}: В обработчике печати не был сформирован табличный документ для: Структура ВызватьИсключение(ТекстСообщенияОбОшибке);

как можно исправить ошибку с ссылкой, подскажите плиз пошагово если можно. что за массив объектов? может быть не обязательно вставлять функцию из обработчика, а как-то дополнить исходную функцию печати, разница ведь в них невелика?
27. katya0702 01.12.11 21:20 Сейчас в теме
(22) Airman81, не нужно комментировать цикл по массиву объектов. Массив объектов - это список тех документов, которые нужно распечатать. А вообще попробуйте пройти процедуру печати по шагам в отладчике, сразу многое станет понятней.
28. Airman81 02.12.11 10:21 Сейчас в теме
(27) katya0702, спасибо большое за подсказки и советы, вроде бы разобрались как сделать (сейчас попробую перенести из локальной версии где работает в основную), массив объектов действительно не причем был (заморачивал себе по неопытности голову не совсем тем.
Встраивание печатной формы внутрь документа.

1) встроить макет модифицированный

2) внести в модуле объектакоррективы в функцию

Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
СтруктураМакетов = Новый Структура;
Если НЕ ЗначениеЗаполнено(Дата) Тогда
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура 283");
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура 575");
СтруктураМакетов.Вставить("СчетФактура84" , "Счет-фактура 84");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
Если Дата < '20040216' Тогда
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
ИначеЕсли Дата < '20060530' Тогда
СтруктураМакетов.Вставить("СчетФактура84", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
КонецЕсли;
КонецЕсли;
Возврат СтруктураМакетов;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()

3) внести дополнения в Печать и ПечатьСчетаФактуры в модуле менеджера

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

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура451модиф") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетФактура451модиф", "Счет фактура", ПечатьСчетаФактуры(МассивОбъектов, ОбъектыПечати, "СчетФактура451модиф"));
КонецЕсли;
КонецПроцедуры



Функция ПечатьСчетаФактуры(МассивОбъектов, ОбъектыПечати, Модификация451 = "")
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.ПолеСверху = 13;
ПервыйДокумент = Истина;
Для каждого Ссылка Из МассивОбъектов Цикл
Если Модификация451 <> "СчетФактура451модиф" тогда
Если Ссылка.Дата < '20040216' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575";
Макет = ПолучитьОбщийМакет("СчетФактура575");
ИначеЕсли Ссылка.Дата < '20060530' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84";
Макет = ПолучитьОбщийМакет("СчетФактура84");
ИначеЕсли Ссылка.Дата < '20090609' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283";
Макет = ПолучитьОбщийМакет("СчетФактура283");
Иначе
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
Макет = ПолучитьОбщийМакет("СчетФактура451");
КонецЕсли;
иначе
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
Макет = ПолучитьМакет("СчетФактура451модиф");
конецесли;
Если Не ПервыйДокумент Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

ДанныеДляПечати = Неопределено;
УчетнаяПолитика = Неопределено;

СобратьДанныеДляПечати(Ссылка, ДанныеДляПечати, УчетнаяПолитика);

Если ТипЗнч(ДанныеДляПечати) = Тип("Соответствие") Тогда
Продолжить;
ИначеЕсли ДанныеДляПечати = Неопределено Тогда
Продолжить;
КонецЕсли;

СведенияОбПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, Ссылка.Дата);
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, Ссылка.Дата);
СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель), Ссылка.Дата);
СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, Ссылка.Дата);

Если ДанныеДляПечати.Свойство("АдресДоставки")
И Не ПустаяСтрока(ДанныеДляПечати.АдресДоставки) Тогда
ПредставлениеГрузополучателя = ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
ДанныеДляПечати.АдресДоставки,
ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование") + ", " + ДанныеДляПечати.АдресДоставки);

Иначе
ПредставлениеГрузополучателя = ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
"",
ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование, ФактическийАдрес,"));
КонецЕсли;

ВыборкаПоТоварам = ДанныеДляПечати.ТабличнаяЧасть.Скопировать();

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

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

ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре = глЗначениеПеременной("ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФак­туре");
Если ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре <> '00010101'
И ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре <= Ссылка.Дата
И Не Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,") +
" (" + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "НаименованиеСокращенное,") + ")";
Иначе
ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
КонецЕсли;

ОбластьМакета.Параметры.АдресПоставщика = "Адрес: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,");

Строка_ПоДокументу = "";
Для Каждого ПараметрыДокументаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
Строка_ПоДокументу = Строка_ПоДокументу + ?(ПустаяСтрока(Строка_ПоДокументу), "К платежно-расчетному документу № ",", ")
+ ПараметрыДокументаОплаты.НомерПлатежноРасчетногоДокумента + " от " + Формат(ПараметрыДокументаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy");
КонецЦикла;
Если ПустаяСтрока(Строка_ПоДокументу) Тогда
Строка_ПоДокументу = "К платежно-расчетному документу № -- от --"
КонецЕсли;

ОбластьМакета.Параметры.ПоДокументу = Строка_ПоДокументу;
ОбластьМакета.Параметры.ПредставлениеПокупателя = "Покупатель: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,");
ОбластьМакета.Параметры.АдресПокупателя = "Адрес: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,");

Если ТолькоУслуги Тогда
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + "--";
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + "--";
Иначе
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + ?(НЕ ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель), "", ?(ДанныеДляПечати.Грузоотправитель = "он же", ДанныеДляПечати.Грузоотправитель, ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузоотправителе, "ПолноеНаименование,ФактическийАдрес,")));
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + ПредставлениеГрузополучателя;
КонецЕсли;

Если Ссылка.Дата < '20040216' Тогда
ОбластьМакета.Параметры.ИННпоставщика = "Идентификационный номер продавца (ИНН): " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь);
ОбластьМакета.Параметры.ИННПокупателя = "Идентификационный номер покупателя (ИНН): " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь);
Иначе
КПП = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "КПП,", Ложь);
Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННпоставщика = "ИНН/КПП продавца: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь) + КПП;

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

Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННПокупателя = "ИНН/КПП покупателя: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь) + КПП;
КонецЕсли;

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

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ПовторятьПриПечатиСтроки = ТабДокумент.Область("ЗаголовокТаблицы");

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

ИтогоСуммаНДС = 0;
ИтогоВсего = 0;

ВыборкаСтрокТовары = ДанныеДляПечати.ТабличнаяЧасть;
ВыборкаСтрокТовары.Колонки.Добавить("СуммаБезНДС");
ВыборкаСтрокТовары.Колонки.Добавить("СуммаСНДС");

Для Каждого Строчка Из ВыборкаСтрокТовары Цикл

Строчка.СуммаСНДС = Строчка.Сумма + ?(Строчка.СуммаВключаетНДС, 0, Строчка.СуммаНДС);

Если (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120)
Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118)
Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
Строчка.СуммаБезНДС = Строчка.СуммаСНДС;
Если Не Строчка.СуммаВключаетНДС тогда
Строчка.Цена = 0;
КонецЕсли;
Иначе
Строчка.СуммаБезНДС = Строчка.СуммаСНДС - Строчка.СуммаНДС;
Если Строчка.СуммаВключаетНДС тогда
Строчка.Цена = 0;
КонецЕсли;
КонецЕсли;

Если Строчка.Цена = 0 Тогда
Строчка.Цена = ?(Строчка.Количество = 0, 0, Строчка.СуммаБезНДС / Строчка.Количество);
КонецЕсли;

КонецЦикла;

ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, СтранаПроисхождения, ПредставлениеСтраны, НомерГТД, ПредставлениеГТД, ЕдиницаИзмерения, Цена, СтавкаНДС", "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");

Для Каждого Строчка Из ВыборкаСтрокТовары Цикл

ОбластьМакета.Параметры.Заполнить(Строчка);

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

Если Строка(Строчка.ПредставлениеСтраны) = "Россия"
Или Строка(Строчка.ПредставлениеСтраны) = "Российская Федерация"
Или Строчка.СтранаПроисхождения = Справочники.КлассификаторСтранМира.РОССИЯ Тогда
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
КонецЕсли;

ОчищатьКоличество = Неопределено;
ОчищатьКоличество = ?(ДанныеДляПечати.Свойство("ОчищатьКоличество", ОчищатьКоличество), ОчищатьКоличество, Истина);

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

Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс
Или Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаСуммовуюРазницу
Или Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент
Тогда
Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС;
Иначе
// В счетах-фактурах на аванс колонка 5 не выводится
ОбластьМакета.Параметры.Стоимость = 0;
КонецЕсли;
ОбластьМакета.Параметры.Количество = 0;
ОбластьМакета.Параметры.Цена = 0;
Иначе
ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС;
ОбластьМакета.Параметры.Цена = Строчка.Цена;
КонецЕсли;

ОбластьМакета.Параметры.Всего = Строчка.СуммаСНДС;
ОбластьМакета.Параметры.СтавкаНДС = Строчка.СтавкаНДС;

ИтогоСуммаНДС = ИтогоСуммаНДС + Строчка.СуммаНДС;
ИтогоВсего = ИтогоВсего + Строчка.СуммаСНДС;

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

КонецЦикла;

Если ВыборкаСтрокТовары.Количество()>0 Тогда
ТабДокумент.Область(ТабДокумент.ВысотаТаблицы,,ТабДокумент.ВысотаТаблицы,).ВместеСоСледующим = Истина;
КонецЕсли;

ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС;
ОбластьМакета.Параметры.ИтогоВсего = ИтогоВСего;

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



Если Модификация451 <> "СчетФактура451модиф" тогда


ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
Если не Ссылка.Дата < '20040216' Тогда
Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "Свидетельство,");
Иначе
ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "Свидетельство,");
КонецЕсли;
КонецЕсли;

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



иначе

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

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

ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции


вот вроде все, что достаточно по минимуму, если знать раньше как то сделать оказываеца не очень долго. буду теперь другое задание пытаться разобрать по аналогии.
30. 1cspbru 200 12.01.12 17:38 Сейчас в теме
НЕ МНОГО лИ ТЕКСТА?!! :))

(27) katya0702, спасибо большое за подсказки и советы, вроде бы разобрались как сделать (сейчас попробую перенести из локальной версии где работает в основную), массив объектов действительно не причем был (заморачивал себе по неопытности голову не совсем тем.
Встраивание печатной формы внутрь документа.

1) встроить макет модифицированный

2) внести в модуле объектакоррективы в функцию

Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
СтруктураМакетов = Новый Структура;
Если НЕ ЗначениеЗаполнено(Дата) Тогда
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура 283");
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура 575");
СтруктураМакетов.Вставить("СчетФактура84" , "Счет-фактура 84");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
Если Дата < '20040216' Тогда
СтруктураМакетов.Вставить("СчетФактура575", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
ИначеЕсли Дата < '20060530' Тогда
СтруктураМакетов.Вставить("СчетФактура84", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
Иначе
СтруктураМакетов.Вставить("СчетФактура283", "Счет-фактура");
СтруктураМакетов.Вставить("СчетФактура451модиф" , "Счет-фактура 451модиф");
КонецЕсли;
КонецЕсли;
Возврат СтруктураМакетов;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()

3) внести дополнения в Печать и ПечатьСчетаФактуры в модуле менеджера

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

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетФактура451модиф") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетФактура451модиф", "Счет фактура", ПечатьСчетаФактуры(МассивОбъектов, ОбъектыПечати, "СчетФактура451модиф"));
КонецЕсли;
КонецПроцедуры



Функция ПечатьСчетаФактуры(МассивОбъектов, ОбъектыПечати, Модификация451 = "")
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДокумент.ПолеСверху = 13;
ПервыйДокумент = Истина;
Для каждого Ссылка Из МассивОбъектов Цикл
Если Модификация451 <> "СчетФактура451модиф" тогда
Если Ссылка.Дата < '20040216' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура575";
Макет = ПолучитьОбщийМакет("СчетФактура575");
ИначеЕсли Ссылка.Дата < '20060530' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура84";
Макет = ПолучитьОбщийМакет("СчетФактура84");
ИначеЕсли Ссылка.Дата < '20090609' Тогда
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура283";
Макет = ПолучитьОбщийМакет("СчетФактура283");
Иначе
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
Макет = ПолучитьОбщийМакет("СчетФактура451");
КонецЕсли;
иначе
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетФактураВыданный_СчетФактура451";
Макет = ПолучитьМакет("СчетФактура451модиф");
конецесли;
Если Не ПервыйДокумент Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

ДанныеДляПечати = Неопределено;
УчетнаяПолитика = Неопределено;

СобратьДанныеДляПечати(Ссылка, ДанныеДляПечати, УчетнаяПолитика);

Если ТипЗнч(ДанныеДляПечати) = Тип("Соответствие") Тогда
Продолжить;
ИначеЕсли ДанныеДляПечати = Неопределено Тогда
Продолжить;
КонецЕсли;

СведенияОбПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Покупатель, Ссылка.Дата);
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Поставщик, Ссылка.Дата);
СведенияОГрузоотправителе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(?(ДанныеДляПечати.Грузоотправитель = "он же", Неопределено, ДанныеДляПечати.Грузоотправитель), Ссылка.Дата);
СведенияОГрузополучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(ДанныеДляПечати.Грузополучатель, Ссылка.Дата);

Если ДанныеДляПечати.Свойство("АдресДоставки")
И Не ПустаяСтрока(ДанныеДляПечати.АдресДоставки) Тогда
ПредставлениеГрузополучателя = ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
ДанныеДляПечати.АдресДоставки,
ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование") + ", " + ДанныеДляПечати.АдресДоставки);

Иначе
ПредставлениеГрузополучателя = ?(Не ЗначениеЗаполнено(ДанныеДляПечати.Грузополучатель),
"",
ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузополучателе, "ПолноеНаименование, ФактическийАдрес,"));
КонецЕсли;

ВыборкаПоТоварам = ДанныеДляПечати.ТабличнаяЧасть.Скопировать();

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

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

ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре = глЗначениеПеременной("ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФак­туре");
Если ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре <> '00010101'
И ДатаНачалаУказанияСокращенногоНаименованияПродавцаВСчетеФакт­уре <= Ссылка.Дата
И Не Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,") +
" (" + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "НаименованиеСокращенное,") + ")";
Иначе
ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
КонецЕсли;

ОбластьМакета.Параметры.АдресПоставщика = "Адрес: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес,");

Строка_ПоДокументу = "";
Для Каждого ПараметрыДокументаОплаты Из ДанныеДляПечати.ТаблицаДатОплат Цикл
Строка_ПоДокументу = Строка_ПоДокументу + ?(ПустаяСтрока(Строка_ПоДокументу), "К платежно-расчетному документу № ",", ")
+ ПараметрыДокументаОплаты.НомерПлатежноРасчетногоДокумента + " от " + Формат(ПараметрыДокументаОплаты.ДатаПлатежноРасчетногоДокумента, "ДФ=dd.MM.yyyy");
КонецЦикла;
Если ПустаяСтрока(Строка_ПоДокументу) Тогда
Строка_ПоДокументу = "К платежно-расчетному документу № -- от --"
КонецЕсли;

ОбластьМакета.Параметры.ПоДокументу = Строка_ПоДокументу;
ОбластьМакета.Параметры.ПредставлениеПокупателя = "Покупатель: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ПолноеНаименование,");
ОбластьМакета.Параметры.АдресПокупателя = "Адрес: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ЮридическийАдрес,");

Если ТолькоУслуги Тогда
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + "--";
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + "--";
Иначе
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: " + ?(НЕ ЗначениеЗаполнено(ДанныеДляПечати.Грузоотправитель), "", ?(ДанныеДляПечати.Грузоотправитель = "он же", ДанныеДляПечати.Грузоотправитель, ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОГрузоотправителе, "ПолноеНаименование,ФактическийАдрес,")));
ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: " + ПредставлениеГрузополучателя;
КонецЕсли;

Если Ссылка.Дата < '20040216' Тогда
ОбластьМакета.Параметры.ИННпоставщика = "Идентификационный номер продавца (ИНН): " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь);
ОбластьМакета.Параметры.ИННПокупателя = "Идентификационный номер покупателя (ИНН): " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь);
Иначе
КПП = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "КПП,", Ложь);
Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННпоставщика = "ИНН/КПП продавца: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ИНН,", Ложь) + КПП;

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

Если ЗначениеЗаполнено(КПП) Тогда
КПП = "/" + КПП;
КонецЕсли;
ОбластьМакета.Параметры.ИННПокупателя = "ИНН/КПП покупателя: " + ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "ИНН,", Ложь) + КПП;
КонецЕсли;

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

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ПовторятьПриПечатиСтроки = ТабДокумент.Область("ЗаголовокТаблицы");

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

ИтогоСуммаНДС = 0;
ИтогоВсего = 0;

ВыборкаСтрокТовары = ДанныеДляПечати.ТабличнаяЧасть;
ВыборкаСтрокТовары.Колонки.Добавить("СуммаБезНДС");
ВыборкаСтрокТовары.Колонки.Добавить("СуммаСНДС");

Для Каждого Строчка Из ВыборкаСтрокТовары Цикл

Строчка.СуммаСНДС = Строчка.Сумма + ?(Строчка.СуммаВключаетНДС, 0, Строчка.СуммаНДС);

Если (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120)
Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118)
Или (Строчка.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
Строчка.СуммаБезНДС = Строчка.СуммаСНДС;
Если Не Строчка.СуммаВключаетНДС тогда
Строчка.Цена = 0;
КонецЕсли;
Иначе
Строчка.СуммаБезНДС = Строчка.СуммаСНДС - Строчка.СуммаНДС;
Если Строчка.СуммаВключаетНДС тогда
Строчка.Цена = 0;
КонецЕсли;
КонецЕсли;

Если Строчка.Цена = 0 Тогда
Строчка.Цена = ?(Строчка.Количество = 0, 0, Строчка.СуммаБезНДС / Строчка.Количество);
КонецЕсли;

КонецЦикла;

ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, СтранаПроисхождения, ПредставлениеСтраны, НомерГТД, ПредставлениеГТД, ЕдиницаИзмерения, Цена, СтавкаНДС", "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");

Для Каждого Строчка Из ВыборкаСтрокТовары Цикл

ОбластьМакета.Параметры.Заполнить(Строчка);

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

Если Строка(Строчка.ПредставлениеСтраны) = "Россия"
Или Строка(Строчка.ПредставлениеСтраны) = "Российская Федерация"
Или Строчка.СтранаПроисхождения = Справочники.КлассификаторСтранМира.РОССИЯ Тогда
ОбластьМакета.Параметры.ПредставлениеСтраны = "--";
КонецЕсли;

ОчищатьКоличество = Неопределено;
ОчищатьКоличество = ?(ДанныеДляПечати.Свойство("ОчищатьКоличество", ОчищатьКоличество), ОчищатьКоличество, Истина);

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

Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаАванс
Или Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НаСуммовуюРазницу
Или Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент
Тогда
Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС;
Иначе
// В счетах-фактурах на аванс колонка 5 не выводится
ОбластьМакета.Параметры.Стоимость = 0;
КонецЕсли;
ОбластьМакета.Параметры.Количество = 0;
ОбластьМакета.Параметры.Цена = 0;
Иначе
ОбластьМакета.Параметры.Стоимость = Строчка.СуммаБезНДС;
ОбластьМакета.Параметры.Цена = Строчка.Цена;
КонецЕсли;

ОбластьМакета.Параметры.Всего = Строчка.СуммаСНДС;
ОбластьМакета.Параметры.СтавкаНДС = Строчка.СтавкаНДС;

ИтогоСуммаНДС = ИтогоСуммаНДС + Строчка.СуммаНДС;
ИтогоВсего = ИтогоВсего + Строчка.СуммаСНДС;

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

КонецЦикла;

Если ВыборкаСтрокТовары.Количество()>0 Тогда
ТабДокумент.Область(ТабДокумент.ВысотаТаблицы,,ТабДокумент.ВысотаТаблицы,).ВместеСоСледующим = Истина;
КонецЕсли;

ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.ИтогоСуммаНДС = ИтогоСуммаНДС;
ОбластьМакета.Параметры.ИтогоВсего = ИтогоВСего;

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



Если Модификация451 <> "СчетФактура451модиф" тогда


ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.Заполнить(ДанныеДляПечати);
Если не Ссылка.Дата < '20040216' Тогда
Если Ссылка.ВидСчетаФактуры = Перечисления.НДСВидСчетаФактуры.НалоговыйАгент Тогда
ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОбПокупателе, "Свидетельство,");
Иначе
ОбластьМакета.Параметры.Свидетельство = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "Свидетельство,");
КонецЕсли;
КонецЕсли;

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



иначе

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

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

ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции


вот вроде все, что достаточно по минимуму, если знать раньше как то сделать оказываеца не очень долго. буду теперь другое задание пытаться разобрать по аналогии.
23. goodwin12 01.12.11 12:23 Сейчас в теме
использовать внешнюю печатную форму, кот. легко подключается к документу и в 8 сохраняется в базе. на практике у меня были случаи, когда с помощью внешней печатной формы не только печать организовывал, но и изменения в документе, если других возможностей для его изменения не было, а конфигурацию изменять нельзя
24. Airman81 01.12.11 14:31 Сейчас в теме
(23) goodwin12, как я уже писал выше проблема в том, что надо сделать это без внешней печатной формы, а как сделать это пока не пойму..
25. Diego_Iv 34 01.12.11 14:57 Сейчас в теме
Airman81 пишет:
goodwin12, как я уже писал выше проблема в том, что надо сделать это без внешней печатной формы, а как сделать это пока не пойму..

Все же интересно, это просто тестовое задание для программиста, чтобы узнать его навыки или действительно задание от работодателя "покурочить" реально работающую конфигурацию.
Если второе, то напрашивается мысль о полной неадекватности того, кто это требует. Хотя возможно он просто не представляет, что такое ВПФ.
26. Airman81 01.12.11 15:56 Сейчас в теме
(25) Diego_Iv, это мизерная часть задачи в переработке стандартной конфигурации под определенное производство, в котором было решено отказаться от множества внешних обработок. ну и соответственно и проверка уровня знаний паралельно.. а это мое ПЕРВОЕ ЗАДАНИЕ после завершения курсов программирования (на которых в глубины УПП вообще не залезали, а создавали какие-то свои программы не такого уровня.. показал бы мне кто-нибудь пошагово разок как это делается, далее по аналогии было бы проще думаю подобное сделать.. материалов где расписано подробно где что находится и формируется в процедурах, связанных с выводом печатных форм в УПП я не нашел пока, не знаю есть ли такие (комментариев к ним мне не хватает для окончательного понимания)
29. Airman81 07.12.11 13:37 Сейчас в теме
Приветствую форумчан. продолжение темы, начал встраивать печатную форму справки к Акту ИНВ-17 документа ИнвентаризацияРасчетовСКонтрагентами http://forum.infostart.ru/forum24/topic23435/, но т.к. выложенная там обработка при подключении выдавала ошибку, причину которой я так и не смог понять, то начал встраивать и заполнять ее сам, анализируя частично код обработки и что надо получить в итоге, встроил в печать форму и частично заполнил ее, но возникли сложности с заполнением некоторых колонок, ввиду недостатка знаний и опыта,проблему описал в последнем сообщении по ссылке, если у кого-то из опытных специалистов (для вас я думаю это наверно легко и времени много не займет) найдется свободное время для просвещения и помощи новичку-программисту, то был бы вам признателен. :)
31. alika_vv 19.01.12 06:37 Сейчас в теме
Лучше создавай внешнюю печатную фопму..проблем будет меньше..это точно. В ней ссылку на объект и.т.д.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот