Создание внешних печатных форм для 1С 8.1 на основе типовых. (Через подмену контекста).

09.11.11

Учетные задачи - Печатные формы

Есть стандартный способ: Скопировать процедуры и функции в обработку, добавить "СсылкаНаОбъект" ко всем "Дата", "Номер", добавить объявление "мВалютаРегламентированногоУчета", заменить "ЭтотОбъект()" и проч. А можно заменить контекст формы и большинство кода просто скопировать. Не скажу, что это легче или быстрей, но у этого метода есть свои последователи :)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ВнешнийСчетФактураВыданный.epf
.epf 34,41Kb
771
771 Скачать (1 SM) Купить за 1 850 руб.

Предисловие: Этот способ является лишь альтернативой стандартному, который вы можете почерпнуть из цикла статей  от poppy

1. Внешние печатные формы в восьмерке
2. Внешние печатные формы в восьмерке II 
3. Обработка для тестирования внешних печатных форм в восьмерке

Как показала практика, применение этого способа оправдано лишь в очень редких случаях. Но сам по себе способ итересен в смысле возможности исполнения процедур и функций, которые будут выполнятся в контексте другого объекта.


Итак. Чтобы далеко не ходить, возьмем типовую 1С Бухгалтерию 1.6. И сделаем для нее внешнюю печатную форму печати счета-фактуры выданного со своим макетом и с возможностью изменения модуля формирования печатной формы.

Мы проделаем такую работу:

1. Создадим внешнюю печатную форму, повторяющую типовую.

2. Заменим в печати в поле грузоотправителя "он же" на данные организации.

3. Немного изменим макет.

Начнем :)

 


Начало ничем не отличается от создания обыной внешней печатной формы.

 

1. Создаем внешнюю обработку.

2. Назавем ее "ВнешнийСчетФактураВыданный".

3. Добавим реквизит "СсылкаНаОбъект" с типом "ДокументСсылка.СчетФактураВыданный".

4. В модуле обработки создадим экспортную функцию "Печать".

5. Добавим форму, упрощающую отладку (идея была почерпнута с инфостарта). Назовем ее "ФормаПрямойПечати". В ней должно быть полеВвода для ввода значения "СсылкаНаОбъект". А по нажатю на кнопку "Выполнить" будет вызываться наша функция "Печать" с выводом на экран результата.

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
Печать().Показать();
КонецПроцедуры

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

6. Скопируем макет счета фактуры в нашу обработку. Так как этих макетов полно, скопируем все. На всякий случай.

Пока все как обычно. Результат - см рисунок 1.

А вот теперь, начинается "Магия".

7. Создаем еще одну форму. Назовем ее "ФормаСчетаФактуры".

8. Изменим основной реквизит второй формы ("ФормаСчетаФактуры"): Поменяем наименование с "ОбработкаОбъект" на "ДокументОбъект", а тип с "ВнешняяОбработка.ВнешнийСчетФактураВыданный" на "ДокументОбъект.СчетФактураВыданный". Обращаю ваше внимание, именно ДокументОбъект!

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

10. В модуле обработки в функции "Печать" добавим код:

Функция Печать() Экспорт
   
СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();

   
ФормаСчетаФактуры = ПолучитьФорму("ФормаСчетаФактуры");
   
ФормаСчетаФактуры.ДокументОбъект = СчетФактураОбъект;
   
ФормаСчетаФактуры.ВнОбработка    = ЭтотОбъект;
   
ТабДок = ФормаСчетаФактуры.ПечатьВнешнейФормы();

    Возврат(
ТабДок);
КонецФункции

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

Дело за малым:

11. Переносим (методом копировать/вставить) из модуля Документа в модуль формы "ФормаСчетаФактуры" все необходимые процедуры. А их надо сказать у Счета-фактуры много:

  • ИнициализацияТаблицыСтрок
  • СобратьДанныеПоОтчетКомитентуОПродажах
  • СобратьДанныеПоОтчетКомиссионераОПродажах
  • СобратьДанныеПоРеализацияТоваровУслуг
  • СобратьДанныеПоВозвратТоваровПоставщику
  • СобратьДанныеПоПКО
  • СобратьДанныеПоСВП
  • СобратьДанныеПоПлатежномуОрдеру
  • СобратьДанныеПоАкту
  • СобратьДанныеПоПередачеОС
  • СобратьДанныеПоПередачеНМАОрганизаций
  • СобратьДанныеПоОтражениюРеализацииТоваровИУслуг
  • СобратьДанныеПоРеализацияУслугПоПереработке
  • СобратьДанныеПоПринятиюКУчетуОС
  • СобратьДанныеПоМодернизацииОС
  • СобратьДанныеПоНачислениеНДСпоСМРхозспособом
  • СобратьДанныеСФнаАвансИСуммовуюРазницу
  • ПроставитьПрочеркиВПустыеПоля
  • ПерезаполнитьСуммыПоУЕвРублях
  • ПечатьСчетаФактуры

Но пусть вас не пугает их количество. Как видите большинство из них это "СобратьДанные...". И служебные для печати. Также есть функция "ПечатьСчетаФактуры".

Стоит заметить что все они не экспортные. Именно из-за этого мы их и копировали.

Отдельный разговор по переносу процедуры Печать(...) из модуля документа.

Это самый сложный момент.

Переименуем ее в ПечатьВнешнейФормы. Но мало того, переделаем ее в функцию. Для этого заменим все "Возврат" на Возврат (Неопределено).

А вызов процедуры в конце модуля процедуры

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

заменим на

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

Также теперь нам не нужны параметры: КоличествоЭкземпляров, НаПринтер, НепосредственнаяПечать.

Да и параметр "ИмяМакета" нам неактуален. Просто зададим его значение в теле функции:

ИмяМакета = "СчетФактура";

убрав его из параметров.

12. Осталось заменить вызов общих Макетов на макеты из обработки. Меняем строки вида

Макет = ПолучитьОбщийМакет("...") и Макет = ПолучитьМакет("...")

заменим на

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

ВСЁ! (практически)

У нас есть внешняя печатная форма Счета-Фактуры, с перенесенными в неё функциями и процедурами формирования и макетами.

Сохраняем. Ага - ругается на "мНадписьПредоплата". Смотрим в модуле документа - это переменная модуля объекта. Объявляем в нашей форме и присваеваем значение(как в модуле документа).


Перем ВнОбработка Экспорт;
Перем
мНадписьПредоплата;

//... (все процедуры и функции)

мНадписьПредоплата = "Предварительная оплата";

Октрываем в 1С предприятие и тестируем!).

 


Заменяем Грузоотправитель.

В функции ПечатьВнешнейФормы после строк

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

Вставляем

// Заменяем в печати "он же" на Организацию
Если ДанныеДляПечати.Грузоотправитель = "он же" тогда
   
ДанныеДляПечати.Грузоотправитель = ДанныеДляПечати.Организация;
КонецЕсли;

А вот теперь вообще всё! Меняем как хотим макеты, получение данных, формирование печатных форм.

 

PS. Обработку см во вложении.

Дополнение1. Рассмотрен "сложный" пример. Счет на оплату, накладная и проч печатаются еще легче, но принцип тот же. Критика и замечания приветствуются.

Дополнение2. Работает только на релизе платформы старше 8.1.11.

Дополнение3. Долго думал над картинками. Так и не придумал.

Дополнение4. При подключении внешней печатной формы можно заместить ей штатную, дабы не напрягать юзеров выбором в диалоге (с) Поручик

Дополнение5. Для тестирования и отладки внешней печатной формы вместо создания спецформы в КАЖДОЙ обработке можно воспользоваться инструментом от poppy //infostart.ru/public/14686/ (с) artbear

Дополнение6. Шаблоны для создания внешних печатных форм и примеры внешних печатных форм http://www.infostart.ru/public/67060/ (с) alexk-is

См. также

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    13459    34    7    

67

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    229817    984    894    

985

Печатные формы Производство готовой продукции (работ, услуг) Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Строительство Россия Бухгалтерский учет Платные (руб)

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

3600 руб.

13.02.2019    93205    428    44    

409

Печатные формы Логистика, склад и ТМЦ Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Комплексная автоматизация 2.х Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Программа для автоматизации учета путевых листов в 1С - расширение, добавляющее в конфигурацию "Комплексная автоматизация", документ Путевой лист и печатные формы установленных образцов для легковых и грузовых авто, расчет и списание нормативного количества топлива, отчет "Реестр путевых листов" с отбором по автомобилю и по водителю (через настройки) Позволит контролировать расход топлива, потому что сразу будет виден сверхнормативный расход.

13200 руб.

27.06.2023    3258    9    1    

9

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Бухгалтер Пользователь Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

12000 руб.

13.03.2018    59061    200    76    

119

Печатные формы Программист Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Научите вашу 1C печатать из 1С в файл Word (Например: трудовые договоры, договоры с контрагентами, спецификации, дополнительные соглашения, приказы, коммерческие предложения, акты, накладные, карточки партнера или любого справочника и многие другие). Универсальная печать предназначена для формирования печатных форм на основе шаблонов в формате Word из любой конфигурации 1С. С помощью данного инструмента можно самостоятельно заполнить шаблон реквизитами справочника или документа 1С и сформировать печатные формы на основании ссылки на любой объект.

5400 руб.

08.10.2019    45787    159    89    

154

Печатные формы Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Транспорт, автопарки, такси Бухгалтерский учет Платные (руб)

Учет путевых листов выполнен в виде расширения. Предназначен для учета путевых листов в конфигурации БП 3.0., УТ 11.5 и КА 2.5 Печатная форма: Типовая межотраслевая форма № 3. Утверждена постановлением Госкомстата России от 28.11.97 № 78. Типовая межотраслевая форма № 4-П от 18.09.2008 г. N 152 с учетом изменений указанных в Приказе Министерства транспорта Российской Федерации №368 от 11 сентября 2020 г. №368, Типовая межотраслевая форма № ЭСМ-7, и др. ЭСМ-2, 4-С, 3 спец., 6 спец., ПЛ для Автомобильного крана.

3600 руб.

14.10.2019    38137    245    216    

156

Печатные формы Учет рабочего времени Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

Программа «Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0» - заполнить, распечатать, сохранить. Вы можете не только внести всю информацию и распечатать путевой лист грузового автомобиля в 1С, но и повторно использовать ранее введенные данные спустя любое время - данные путевого листа водителя сохраняются в "1С:Бухгалтерия 3.0" без каких-либо доработок.

4500 руб.

23.08.2019    56046    167    64    

160
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wirg 03.03.10 19:50 Сейчас в теме
ну ты крут за 10 минут столько операций сделать
3. yku 376 03.03.10 22:43 Сейчас в теме
(1) Хм. Это просто кажется, что долго делается. На самом деле, когда этим способом создашь несколько печатных форм для разных документов время приближается к этому значению. Тем более, что набор от клиента к клиенту не блещет разнообразностью: счет на оплату, накладная, акт оказания услуг, счет-фактура. Это покрывает 80% просьб изменения печатных форм. Набор этих четырех печатных форм я делаю за 20-25 минут (без внесения изменений).

Так что ваш сарказм напрасен :).
Strannik99; +1 Ответить
2. Поручик 4690 03.03.10 22:23 Сейчас в теме
Полезная статья. Для чайников, которые недолго думая, будут курочить конфу.
Я бы ещё добавил в статью слова о том, что полученной внешней формой можно заместить штатную, дабы не напрягать юзеров выбором в диалоге. Ведь не все догадаются нажать кнопку "По умолчанию".
Собственно, это я у себя и сделал, заместив почти все штатные формы подключаемыми. Цель: быстрая доработка или исправление в случае необходимости.
Strannik99; +1 Ответить
4. yku 376 03.03.10 22:51 Сейчас в теме
(2) Спасибо за отзыв и замечание :). Одной из причин написания статьи как раз и явились проблемы с обновлением типовых конфигураций снятых с поддержки только лишь по причине изменения печатных форм. И ведь изменят еще черт знает как!
5. Поручик 4690 03.03.10 23:51 Сейчас в теме
(4) Спасибо за упоминание моей скромной персоны.
Ещё совет по оформлению: раскрась фрагменты программного кода. Разукрашка есть на этом сайте.
8. yku 376 04.03.10 00:39 Сейчас в теме
(5) Вот убей не пойму как включить разукрашку. Или надо "тупо" выделил - назначил цвет, выделил - цвет? Научите :)
9. Поручик 4690 04.03.10 11:17 Сейчас в теме
10. yku 376 04.03.10 12:45 Сейчас в теме
(9) Спасибо :) Буду знать.
6. АнатолийСтриж 04.03.10 00:09 Сейчас в теме
Спасибо. Там еще неразрешимые ссылки - реквизиты Документа СчетФактураВыданный полезли, но это легко устраняется. Буду эту идею тиражировать. Вот не могу включиться в проблему: Печать().Показать();
Печать() - все хорошо, а .Показать() уже ругается.
7. yku 376 04.03.10 00:37 Сейчас в теме
(6) Хм. У меня все отлично. Без всяких неразрешимых ссылок.
11. anig99 2850 04.03.10 16:21 Сейчас в теме
Мой виртуальный минус с вами
12. artbear 1560 04.03.10 21:08 Сейчас в теме
1. Автор слукавил в п.11 и далее - откуда в общем случае можно узнать, какие процедуры нужно копировать из модуля документа в модуль обработки?
только из изучения кода печати - основного метода Печать.
т.е. сначала нужно скопировать печать к себе, а уж потом по ошибкам синтаксиса найти недостающие процедуры
2. Метод все-таки неудобен - нужно делать кучу копирований и замен кода и типов данных.

ИМХО намного проще тупо скопировать код из модуля формы, поправить все недостающие реквизиты в полученном коде и т.п.
а отладку выполнять не в спец.форме КАЖДОЙ обработки, а спец.обработкой от poppy.
13. yku 376 04.03.10 21:42 Сейчас в теме
(12) Спасибо за развернутый отзыв! :)

1. Хы. Но что хорошо в конфигурациях от 1С так это то, что в них есть кое-какой порядок. И как правило это 1-2 процедуры/функции. Счет-фактура - исключение. Но в целом вы правы, действительно никак не узнать. Но узнавать нужно в любом случае (хоть моим способом, хоть копированием). Либо писать эти процедуры с нуля.
Если не хочется думать - скопировать все, что не экспортное. + переделать процедуру печати на функцию.

2. Про копирование - согласен. Много. Про замен кода (5 шт) и типов данных (1-2 шт в зависимости от того что считать заменой типов данных) - не согласен.

3. Спец обработку от poppy я пробовал. Вещь хорошая, но, видимо, каждому своё. И от случая зависит. Стоит упомянуть в статье :)

Насчет простоты - осмелюсь не согласиться :) Для примера: Нужно заменить в печатной форме СчетаФактуры выданного поля "ИтогоСуммаНДС" и "ИтогоВсего" сделать жирными и с размером шрифта 9. Если вы сможете это сделать имея только базу за сравнимое вермя - тогда прошу научить :) (я без сарказма).
14. artbear 1560 04.03.10 21:49 Сейчас в теме
(13) Обычная схема создания внешней печатной формы вполне подойдет.
задача простая.
Обычно как раз и тратится 10-15 минут, не больше :)
15. yku 376 05.03.10 11:44 Сейчас в теме
(14) Я уже и расписал факты "подтверждающие" преимущества способа "через форму" (не осмелюсь называть этот метод "своим"), но решил проверить. Проверил, протестировал. И пришел к выводу что, действительно, вы полностью правы! Нет у моего способа выраженных преимуществ. Видимо, дело привычки, так как мне метод "через форму" все равно кажется менее "вниманиеёмким" :)

Поменяю-ка я описание статьи :)
16. alexk-is 6541 11.03.10 14:35 Сейчас в теме
По материалам статьи написал шаблон. На основе шаблона провел замеры по созданию "типовых" внешних печатных форм. Получил следующие результаты:
Счет - 4 минуты
ТОРГ12 - 4 минуты

Думаю, что если потренироваться, то можно довести до 2 минут :)
17. artbear 1560 11.03.10 17:11 Сейчас в теме
21. alexk-is 6541 12.03.10 08:20 Сейчас в теме
19. yku 376 11.03.10 21:51 Сейчас в теме
(16) ого! скоростной Вы :) Я шаблон тож думал создать, но подумав, решил, что мне легче его заново сделать, чем искать где он хранится :)
18. IP43 303 11.03.10 20:17 Сейчас в теме
Помогло разобраться с созданием внешних печатных форм, написал шаблон для Приказа о приеме на работу Т-1. завтра попробую тиражнуть на все Т-ХХ. посмотрим скорость.
20. yku 376 11.03.10 21:53 Сейчас в теме
(18) Хы. Признаюсь, очень приятно, когда твоя собственная статья приносит пользу кому-то :)
22. IP43 303 13.03.10 10:53 Сейчас в теме
Реально здорово :) на базе формы Т-1 за 15 минут (засекал время) сделал внешнюю печатную форму Т-6.
23. wolder 133 18.08.10 16:25 Сейчас в теме
24. Bold Enough 11 08.02.11 13:00 Сейчас в теме
Благодарю, очень доходчиво написано! 8-)
25. Strannik99 27.02.11 22:37 Сейчас в теме
Спасибо, получилось сделать ВПФ Акта вып. работ для ут 10.3. Оказалось не сложно, кто может подсказать как в Акт добавить печать ИНН исполнителя , заказчика. В типовом нету Как такие данные выдёргивать в ПФ, может где доходчиво описано ?
26. pantera190 23.09.11 13:11 Сейчас в теме
27. Соня 4 27.09.11 15:40 Сейчас в теме
Спасибо огромное! Всегда этим способом теперь пользуюсь. Удобно, потому, что без отладчика никак, очень удобно, что если делать так - то на точках останова стопается!
28. Victor_62 10.10.11 14:05 Сейчас в теме
29. Boroda 90 12.10.11 00:03 Сейчас в теме
Неплохое пособие для обучения созданию печатных форм, да и вооще отчётов. Во всяком случае, на первоначальных этапах обучения программированию в 8-ке очень пригодится. Спасибо!
30. LarisaSG 09.11.11 15:52 Сейчас в теме
Спасибо! Очень пригодилось. Но проблема такая : если печать идет из формы "формаПрямойПечати", то на предварительном просмотре ориентация печати = ландшафт, если печать из формы "ФормаСчетафактуры"(т.е из документа), то на просмотре ориентация = портрет и надо обязательно устанавливать перед печатью ландшафт, хотя в модуле формы стоит : ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт.
31. yku 376 09.11.11 16:02 Сейчас в теме
(30)(29) и другие. Этот способ создания внешних печатных форм - альтернативный!

Стандартный способ см Повышение удобства разработки в среде 1С:Предприятие 8 Пункт 2.5 (раньше был 2.4)
53. AlexO 135 31.05.12 17:30 Сейчас в теме
(31)
Стандартный способ см Повышение удобства разработки в среде 1С:Предприятие 8 Пункт 2.4

пункт 2.5:
"Довольно часто приходится создавать печатные формы к различным объектам конфигураций..."
а вообще сравнение методов создания ВПФ есть? я насчитал 3 метода, но достоинства и недостатки каждого явно не выражены.
54. yku 376 01.06.12 14:09 Сейчас в теме
(53) AlexO,
Не совсем понял о каких трёх методах речь.
Я знаю только два:
1. Стандартный. Создаем обработку, и пишем код с нуля или копируем его из базы и модифицируем.
2. Альтернатива стандартному (мой). Пишем спец. код для подмены контекста и создаем спец. форму, копируем код из базы и немного его редактируем.
А какой третий?

Что же касается первых двух - что их сравнивать? достаточно попробовать самому каждый из них. Тогда уже станет понятно, что и когда применять. Я же лично был изначально за мой метод, так как к нему привык, да и он мой. Как по мне так, он лёгок для обновления печатных форм при существенном изменении печатных форм и алгоритмов их заполнения в самой базе.

Сейчас же, многие печатные формы формируются вызовом процедур из модуля менеджера передачей ему массива ссылок. И мой метод становится излишним усложнением. А пользоваться разными методами для одного и того же - не есть путь джедая. Так что в любом случае я рекомендую делать ВПФ используя методичку poppy, указанную по ссылке выше и в самой статье.
32. vodyanoi 25.11.11 08:23 Сейчас в теме
Спасибо. пригодилось для объяснений обучающимся сотрудникам
33. пользователь 15.12.11 10:19
Сообщение было скрыто модератором.
...
34. feit 16.12.11 16:30 Сейчас в теме
Спасибо. Помогло разобраться с основами. Сделал несколько внешних печатных форм, такие небольшие руководства с примерами помогают быстрее освоить и понять работу системы.
35. Mshaydurov 2 23.12.11 10:34 Сейчас в теме
круто чо. учиться, учиться и еще раз учиться!
36. jirafff 25.12.11 15:52 Сейчас в теме
на первое время пригодилось
37. Craig 275 05.01.12 21:18 Сейчас в теме
Спасибо, на основе вашей статьи подготовил счет-фактуры адаптированные на платформе 1С:Предприятие 8.2 (8.2.14.540) для конфигурации Бухгалтерия предприятия, редакция 2.0 (2.0.30.8) http://infostart.ru/public/103687/
38. Гость 06.01.12 13:21
Спaсибо! Очень пригодилось. Но проблемa такaя : если печaть идет из формы "формаПрямойПечaти", то нa предварительном просмотре ориентация печати = ландшафт, если печaть из формы "ФормаСчетaфактуры"(т.е из документ), то на просмотре ориентация = портрет и надо обязaтельно устанавливать перед печатью ландшaфт, хотя в модуле формы стоит : ТaбДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшaфт.
39. bekas1977 11.01.12 00:33 Сейчас в теме
Здравствуйте! Если есть возможность помогите сделать внешнюю печатную форму счета на оплату покупателю. Задача такая - в 1с заведены три организации - необходимо для каждой из них "вставлять" разные печать и подпись руководителя (как картинки). Скачал шаблоны - подключаю в самом 1с (не в конфигураторе) на выходе - чистый лист, как туда вставть информацию не могу понять.
40. Styvi 6 11.01.12 13:51 Сейчас в теме
Спасибо за статью, очень полезное чтиво...
41. Styvi 6 11.01.12 17:53 Сейчас в теме
(ту 1) Без тренировки действительно столько операций не сделать, но на втором шаблоне - уже без подсказок получилось сделать внешнюю печать минут за 15...
А вот отладить и отредактировать - согласен, чуть больше времени потребуется...
Ещё раз выражаю автору большую благодарность...
42. erdos 13.01.12 09:18 Сейчас в теме
43. dagovich 13.01.12 10:40 Сейчас в теме
а у меня в КА 1.1 вообще в модуле документа нет перечисленных процедур и функций у счет-фактуры! С ног сбился их искать.
44. X-morph 16.01.12 12:02 Сейчас в теме
Спасибо, искал именно внешнюю счет фактуру. Будем учиться на ее примере делать собственные внешние печатные формы.
45. BalVlad 18.01.12 19:45 Сейчас в теме
Буду пробовать на основе этой статьи учиться создавать ВПФ для 8.2. Вопрос большие различия между созданием ВПФ под 8.1 и 8.2?
46. fonomo0 23.01.12 09:46 Сейчас в теме
выражаю автору большую благодарность... Как раз то что мне сейчас надо!
47. kmar 01.02.12 08:59 Сейчас в теме
Очень ценный пост! Благодарен автору!
48. Valdemar87 16.02.12 17:55 Сейчас в теме
Отличные обработки, автору спасибо за шаблоны
49. evg300183 17.02.12 14:08 Сейчас в теме
спасибо - помогло - оооогромное
50. winsloow 19.02.12 15:22 Сейчас в теме
Хорошая статья для тех кто только начинает программировать в 1с .
Написано доступно и понятно автору спасибо за труд.
51. vladir 114 06.03.12 17:52 Сейчас в теме
Спасибо за статью, очень пригодилась.
52. olsy 23 18.04.12 07:06 Сейчас в теме
Спасибо, пригодилось!
55. luksiar 08.06.12 08:58 Сейчас в теме
Попробовал сделать ВПФ Счет-фактура полученный, но выдает такую ошибку в модуле объекта:
Ошибка при вызове метода контекста (ПолучитьОбъект)
СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();
по причине:
Элемент не выбран!

Вроде все сделал по пунктам и перепроверил.
56. Amras 43 08.06.12 09:09 Сейчас в теме
СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();


<СсылкаНаОбъект> - как реквизит ВПФ? Тип установлен?

Да и если это ВПФ, добавлена в конфу как "Дополнительная внешняя печатная форма" и там установлен тип документа, то получать объект не нужно.
57. luksiar 08.06.12 09:21 Сейчас в теме
СсылкаНаОбъект установлена.
Да я добавил как дополнительную внешнюю печатную форму, сейчас поправлю. Спасибо.
58. Amras 43 08.06.12 09:54 Сейчас в теме
Но в некоторых случаях объект получать надо.

Например:
СсылкаНаОбъект >> Тип: ДокументСсылка >> надо определить новый документ или нет <... Если СчетФактураОбъект.ЭтоНовый() Тогда ...> (работает с объектами, но не ссылками)

П.С.
Тип: ДокументСсылка.<Документ> или ДокументОбъект.<Документ>
59. yku 376 08.06.12 12:05 Сейчас в теме
(58) Amras,
Но в некоторых случаях объект получать надо.

Например:
СсылкаНаОбъект >> Тип: ДокументСсылка >> надо определить новый документ или нет <... Если СчетФактураОбъект.ЭтоНовый() Тогда ...> (работает с объектами, но не ссылками)

Если ссылка получена из базы, то СчетФактураОбъект.ЭтоНовый() всегда Ложь.
Если нам не нужно записывать документ, то можно обойтись без получения объекта.
60. Amras 43 08.06.12 13:06 Сейчас в теме
(59)

Если нам не нужно записывать документ, то можно обойтись без получения объекта.


Вот и возникает вопрос. Зачем в типовых печатных формах реализована эта проверка? А народ не задумываясь, порой, берет код и корректирует только несколько строчек, оставляя исходный.
61. yku 376 08.06.12 13:31 Сейчас в теме
(60) Amras,
Вот и возникает вопрос. Зачем в типовых печатных формах реализована эта проверка?

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

Народ вообще редко думает. Только чья ж в этом проблема?
62. Amras 43 08.06.12 16:06 Сейчас в теме
(61)

А у меня не возникает.


Ну учитывая, что печатная форма не сохраняет объект, а только проверяет его... ну может быть да. В большинстве случаев требуется проведенный или сохраненный документ. Но все равно. Раз возникают вопросы, то надо бы как-то их растолковать.

В код мы вставляем <СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();>, а зачем нам его получать? Ведь все можно проще сделать. И на сколько я понял, данная обработка вызывается путем вызова команды "Открыть".

Я же делал немножко не так:
- Брал необходимы процедуры для формирования печатной формы;
- Для формы тестирования-отладки писал тот же код, что описан выше:

Процедура КнопкаВыполнитьНажатие(Кнопка)
Печать().Показать();
КонецПроцедуры

- А вот для использования как внешняя печатная форма, другим путем (никаких объектов не получал, ну не встретил я пока случая, чтобы это было реально необходимо):

Функция СформироватьЗапросДляПечати()

Запрос = Новый Запрос;
...
Возврат Запрос.Выполнить();


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

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

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


КонецФункции
63. yku 376 08.06.12 16:56 Сейчас в теме
(62) Amras,
Вот и возникает вопрос. Зачем в типовых печатных формах реализована эта проверка?

В код мы вставляем <СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();>, а зачем нам его получать? Ведь все можно проще сделать.

Вопрос был задан по типовым печатным формам. Вот именно по типовым у меня вопросов как правило не возникает.
В код мы вставляем <СчетФактураОбъект = СсылкаНаОбъект.ПолучитьОбъект();>, а зачем нам его получать?

А статью читали? Или заголовок? Вот прям в заголовке написано, цитирую:"...(через подмену контекста)." Вот для того, чтобы подменить контекст формы нам и нужно получить объект.
Ведь все можно проще сделать.

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

И на сколько я понял, данная обработка вызывается путем вызова команды "Открыть".

Нет, не правильно поняли.

В общем, насколько я понял ситуацию, вы на начале пути освоения 1С. Если так то, эту обработку можно смело не смотреть и не разбирать. Она в обычном приложении-то имела сомнительный смысл, а в управляемом так вообще потеряла свой... ну короче, неактуальная она.

Если что, прошу прощения за свой тон. Уж очень сегодня день тяжелый выдался.
65. Amras 43 09.06.12 15:28 Сейчас в теме
(63)

То что в управляемом не актуальна, это понятно.

Тон нормальный. Зато все по полочкам раскладывается.

Про начало пути - не верное представление. Но это сугубо личное мнение.

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

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


Не внимательно я читал. Теперь понятно зачем вы идете эдаким путем. И если внимательно прочитать мой пост выше, я описал там свой путь, правда я так уже давно не пишу, это писалось году эдак в 2007.
66. yku 376 10.06.12 23:37 Сейчас в теме
(65) Amras,
Я все равно не люблю использовать исключительно подстановку типового контекста, т.к. там очень много мусора.

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

Не внимательно я читал. Теперь понятно зачем вы идете эдаким путем. И если внимательно прочитать мой пост выше, я описал там свой путь, правда я так уже давно не пишу, это писалось году эдак в 2007.

А вот это интересно. А сейчас как? Или в старом фишка в функции "СформироватьЗапросДляПечати"?
К слову сейчас я просто копирую функцию/процедуру из модуля менеджера объекта, и присваиваю значения необходимых параметров типа:
Ссылка = СсылкаНаОбъект;
Неужто можно проще?
64. yku 376 08.06.12 17:12 Сейчас в теме
(62) Amras,
Еще попишу.
Вот раньше (сейчас всё реже) в типовых печатных формах часто любили использовать конструкции типа
Если ВалютаДокумента = мВалютаРегламентированногоУчета Тогда...

... = ПредставлениеОрганизаций(Организация)

Это сейчас реквизиты документа в 95% случаев получают запросом по ссылке, а раньше сами же 1С любили напрямую к реквизитам обращаться. А еще любили к процедурам и функциям обращаться, которые используют помимо переданных им параметров значения реквизитов и переменных объекта. Что уж говорить о нетиповых конфигурациях. Так вот, мой способ как раз позволяет для таких вот юродивых типовых печатных форм создать внешнюю, тупо скопировав большинство процедур и функций из модуля объекта.
67. Veduin 19.06.12 10:51 Сейчас в теме
Отличная статья со своими минусами но ВСЕ ЖЕ, автору спасибо
68. AlexO 135 15.10.12 18:05 Сейчас в теме
(0) слишком все замуторно описано.
Простые операции, можно было намного проще описать.
И в результате - по этой статье сложно научиться денлать ВПФ, а только - СчетФактуру.
Нет четкого алгоритма и представления.
И удобнее проверять через обработку poppy - тем более, второстепенные к теме разъяснения по поводу второй формы перегружают статью и слишком громоздки.
69. yku 376 15.10.12 18:54 Сейчас в теме
(68) AlexO,
Спасибо за критику.
слишком все замуторно описано.
Простые операции, можно было намного проще описать.
И в результате - по этой статье сложно научиться денлать ВПФ, а только - СчетФактуру.
Нет четкого алгоритма и представления.

Согласен. С каждым предложением.

И удобнее проверять через обработку poppy - тем более, второстепенные к теме разъяснения по поводу второй формы перегружают статью и слишком громоздки.

А вот с этим не согласен в корне. Вторая форма - она вовсе не для проверки, а для подмены контекста. Форма проверки, о которой вы говорите, она в 5ом пункте. Возможно, взглянув на статью еще раз, вы поменяете мнение о статье. Не говорю о диаметральном, а о лежащем в совсем другой "плоскости", если так говорят о мнении.

PS. Я уже давно осознал, что нужно поменять и название статьи и саму статью, но всё никак не соберусь. Сейчас я вижу эту статью не как инструкцию о печати ВПФ, а как описание способа подмены контекста с демонстрацией использования на примере создания ВПФ типовых конфигураций старых релизов. Во как. Сразу и не выговоришь!
К слову, способ на данный момент представляет из себя чисто теоретический интерес. Практического смысла я в нем не вижу. Я не применял его уже, наверное, года полтора.
70. AlexO 135 16.10.12 09:36 Сейчас в теме
(69)
Вторая форма - она вовсе не для проверки, а для подмены контекста.

помните, я спрашивал вас -
а вообще сравнение методов создания ВПФ есть?

так вот, в сравнении с обычныч способом создания ВПФ - в чем преимущество подмены контекста при создании ВПФ? пока кроме как теоретического смысла я не нашел :)
а как описание способа подмены контекста с демонстрацией использования

ну, если осилите - то давайте, ждем.
только чтоб не там сумбурно, как эта статья - а кратко, по делу и последовательно по пунктам :)
71. yku 376 16.10.12 12:46 Сейчас в теме
(70)
помните, я спрашивал вас -
а вообще сравнение методов создания ВПФ есть?

а помните, что я вам ответил
Что же касается первых двух - что их сравнивать? достаточно попробовать самому каждый из них. Тогда уже станет понятно, что и когда применять. ...

Сейчас же, многие печатные формы формируются вызовом процедур из модуля менеджера передачей ему массива ссылок. И мой метод становится излишним усложнением. А пользоваться разными методами для одного и того же - не есть путь джедая. Так что в любом случае я рекомендую делать ВПФ используя методичку poppy, указанную по ссылке выше и в самой статье.


кроме как теоретического смысла я не нашел :)

опять процитирую себя же:
... на данный момент представляет из себя чисто теоретический интерес. Практического смысла я в нем не вижу.

Раньше был смысл. Когда в самых потаённых уголках формирования печатных форм обращались к данными не через передаваемую ссылку, а напрямую - к реквизиту объекта. И чтобы не исправлять все такие использования на СсылкаНаОбъект.%ИмяРеквизита%, и заново не переопределять переменные модуля объекта, достаточно было подменить контекст.
72. AlexO 135 16.10.12 13:13 Сейчас в теме
(71)
т.е. присвоение
ЭтотОбъект = СсылкаНаОбъект.ПолучитьОбъект() вы назвали "подмена контекста"? :)
73. yku 376 16.10.12 13:39 Сейчас в теме
Оставьте свое сообщение