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

09.11.11

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

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

Скачать файлы

Наименование Файл Версия Размер
ВнешнийСчетФактураВыданный.epf
.epf 34,41Kb
771
.epf 34,41Kb 771 Скачать

Предисловие: Этот способ является лишь альтернативой стандартному, который вы можете почерпнуть из цикла статей  от 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

См. также

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7298    21    6    

39

Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2, ДО 3)

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

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

5400 руб.

08.10.2019    42697    144    88    

134

SALE! 25%

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

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

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

12000 9000 руб.

13.03.2018    56452    179    76    

112

Печатные формы КС-2 и КС-3 в "1С:Бухгалтерия 3.0"

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

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

3240 руб.

13.02.2019    88010    388    44    

371

Печать актов МХ-1, МХ-3 в 1С:Бухгалтерия 3.0

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

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

2520 руб.

18.02.2019    61109    170    14    

139

Путевые листы (расширение)

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

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

2000 руб.

14.10.2019    36531    224    215    

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

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

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

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

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

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

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

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

Думаю, что если потренироваться, то можно довести до 2 минут :)
17. artbear 1448 11.03.10 17:11 Сейчас в теме
21. alexk-is 6533 12.03.10 08:20 Сейчас в теме
19. yku 372 11.03.10 21:51 Сейчас в теме
(16) ого! скоростной Вы :) Я шаблон тож думал создать, но подумав, решил, что мне легче его заново сделать, чем искать где он хранится :)
18. IP43 303 11.03.10 20:17 Сейчас в теме
Помогло разобраться с созданием внешних печатных форм, написал шаблон для Приказа о приеме на работу Т-1. завтра попробую тиражнуть на все Т-ХХ. посмотрим скорость.
20. yku 372 11.03.10 21:53 Сейчас в теме
(18) Хы. Признаюсь, очень приятно, когда твоя собственная статья приносит пользу кому-то :)
22. IP43 303 13.03.10 10:53 Сейчас в теме
Реально здорово :) на базе формы Т-1 за 15 минут (засекал время) сделал внешнюю печатную форму Т-6.
23. wolder 129 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 372 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 372 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 274 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 372 08.06.12 12:05 Сейчас в теме
(58) Amras,
Но в некоторых случаях объект получать надо.

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

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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

А вот это интересно. А сейчас как? Или в старом фишка в функции "СформироватьЗапросДляПечати"?
К слову сейчас я просто копирую функцию/процедуру из модуля менеджера объекта, и присваиваю значения необходимых параметров типа:
Ссылка = СсылкаНаОбъект;
Неужто можно проще?
64. yku 372 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 372 15.10.12 18:54 Сейчас в теме
(68) AlexO,
Спасибо за критику.
слишком все замуторно описано.
Простые операции, можно было намного проще описать.
И в результате - по этой статье сложно научиться денлать ВПФ, а только - СчетФактуру.
Нет четкого алгоритма и представления.

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

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

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

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

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

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

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

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

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


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

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

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