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

09.03.12

Задачи пользователя - Адаптация типовых решений

Сделать это реально даже новичку, сужу по себе.

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

Наименование Файл Версия Размер
Чек на частное лицо
.epf 10,63Kb
81
.epf 10,63Kb 81 Скачать

Работаю с конфигурацией 1с 8.2 "Управление торговлей", редакция 10.3 (10.3.14.5), сам я не программист 1с, но была поставлена задача сделать внешнюю печатную форму "Товарный чек" с значением в строке покупатель "Частное лицо". Печатная форма будет вызываться из документа реализация товаров и услуг по кнопке "Печать".  Спасибо статье из http://www.1c-pro.ru/forum66.html, но в каждом варианте есть свои нюансы, вот их то и пришлось решать, действуя по ананлогии.

Для начала создадим пустую внешнюю обработку, только макет создавать не будем -
мы его скопируем для последующего изменения из основной конфигурации.  Находим в конфигурации документ "РеализацияТоваровУслуг" копируем макет "Накладная" в обработку из конфигурации - более удобный путь - напрямую перетащить мышкой макет из основной конфигурации в дерево данных нашей
обработки.

Открываем двойным кликом макет в нашей обработке, заходим в свойства ""  и в разделе "Макет" для строки "заполнение" меняем "параметр" на "текст", в разделе "Основные" меняем надпись "ПредставлениеПолучателя" на " Частное лицо" все Макет готов.

Что бы не изобретать велосипед - посмотрим, как происходит формирование табличного документа в основной конфигурации: для этого мы зайдём
в модуль документа "РеализацияТоваровУслуг". Найдём в модуле Процедуру  Печать, которая выглядит в моем случае (сокращенно) вот так:

 

Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    ........................

    ........................
   // Получить экземпляр документа на печать
   Если ИмяМакета ="Накладная" Тогда

     ТабДокумент = ПечатьДокумента();

   КонецЕсли;
   .........................

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

 

В нашем случае получается, что для печати накладной в эту функцию передается параметр ИмяМакета равный строковой переменной "Накладная"

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

 

Функция Печать(СуммыВРублях = Ложь)


Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

// ...код программы...

КонецФункции // ПечатьДокумента()
 

 Копируем эту функцию со всем содержимым в модуль объекта внешней обработки:

 

    Переходим к Модулю объекта внешней обработки: по кнопке "Действия" нажимаем "Открыть модуль объекта" и скопированную функцию вставляем туда

 

Функция Печать(СуммыВРублях = Ложь) Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

// ...код программы...

КонецФункции // ПечатьДокумента()

 

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

Теперь нужно найти строчку в модуле объекта:

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

И заменить надпись в шапке "Расходная накладная" на "Товарный чек".

 


Добавляем в нашу внешнюю обработку реквизит Имя             "СсылкаНаОбъект" 

                                                                                  Синоним     "Ссылка на объект"

                                                                                  Тип             " ДокументСсылка.РеализацияТоваровУслуг"

 

И как следствие меняем в модуле объекта нашей внешней обработки все "ЭтотОбъект.Ссылка " на "СсылкаНаОбъект"

После попытки закрыть модуль объекта внешней обработки:

 {ВнешняяОбработка.НакладнаяЧЛ.МодульОбъекта(391,64)}: Переменная не определена (мВалютаРегламентированногоУчета)
  + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, <>мВалютаРегламентированногоУчета); (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.НакладнаяЧЛ.МодульОбъекта(392,101)}: Переменная не определена (мВалютаРегламентированногоУчета)
  ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, <>мВалютаРегламентированногоУчета); (Проверка: Толстый клиент (обычное приложение))

 

Еще раз редактируем код модуля так:

 

Перем мВалютаРегламентированногоУчета Экспорт;

Функция Печать(СуммыВРублях = Ложь) Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

// ...код программы...

КонецФункции // ПечатьДокумента()

мВалютаРегламентированногоУчета   = глЗначениеПеременной("ВалютаРегламентированногоУчета");

 

На этом все.

Внешняя печатная форма есть во вложении. 

 

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4452    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

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

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2953    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1994    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sanja 153 09.03.12 02:38 Сейчас в теме
молодец. тебе обучать надо только пришедших
2. AlexxxMksv 41 09.03.12 10:24 Сейчас в теме
(1) sanja,
ни кого не учу, сам пришедший, и мне просто нужны балы для скачивания одной оработки - Импорт из Excel
6. Поручик 4670 09.03.12 19:30 Сейчас в теме
(2) Не проще и быстрее было купить эти баллы? http://forum.infostart.ru/forum1/topic52290/
25. fgremlin 01.08.12 18:42 Сейчас в теме
Спасибо, помогло, но у меня сразу не получилось, 1С сообщало:
Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (ПредставлениеПолучателя)

Нашел поиском в тексте модуля все строки содержащие строку "ПредставлениеПолучателя", закомментировал их и все заработало.

Это произошло в связи с тем, что мы ввели в обработке "ПредставлениеПолучателя" просто текстом "Частное лицо"

(2) посмотри на эти обработки:
http://infostart.ru/public/97416/
http://infostart.ru/public/97415/
и деньги собирать не нужно...

p.s.
1С:Предприятие 8.2 (8.2.14.540)
"Управление торговлей", редакция 10.3 (10.3.18.4)
3. BalVlad 09.03.12 15:19 Сейчас в теме
Хорошее описание создания внешней печатной формы для новичков. Спасибо и плюс.
4. echo77 1868 09.03.12 15:29 Сейчас в теме
Если ты не программист 1С то на кой хер ты взялся за "задание которое тебе дали"? Или ты занимаешься сопровождением 1С?
Смотри, а то работодатель он такой - сможет сесть тебе на шею и будешь программить в 1с :-)
8. kereo 57 11.03.12 11:33 Сейчас в теме
(4) echo77, никогда не был против этого. Начинал сисадмином с минимальной ЗП, сейчас ведущий программист с соответствующей ЗП именно благодаря тому, что брался за все что даже меня не касается и разбирался. И если это не оценит этот работодатель, оценит другой, которому разнонаправленные специалисты очень нужны. Автору респект!
DarkDaemon; +1 Ответить
9. AlexxxMksv 41 12.03.12 12:49 Сейчас в теме
(8) kereo,
Респект, мой опыт работы доказывает, что имеено спецалист который берется за все и ценится руководителем. А от руководителя, который не стимулировал мои инициативы, я ушел. И теперь свой опыт системного администратора и применяю на новом месте с более высокой зарплатой, и ни что мне не мешает освоить программирование в 1с.
DarkDaemon; +1 Ответить
5. tigrandis 340 09.03.12 16:11 Сейчас в теме
да и нафига так все через одно место делать, эту обработку можно свободно в гугли найти)))
7. akril19811 10.03.12 20:01 Сейчас в теме
10. рибак 14.03.12 15:50 Сейчас в теме
молодец! ты реально программист..это значит можно сделать из любой печ формы. это хорошо
11. zbruy 14.03.12 16:16 Сейчас в теме
Отличный урок для начинающих, я сам работал когда-то программистом 1С, однако не освоил программирование даже не этом уровне =D только сегодня искал внешнюю форму ТТН для 8.2, в итоге нашел под 8.1 перебил под 8.2, а зайди сюда чуть раньше, попробовал бы сделать сам) ...хотя у ТТН своя форма заполнения перед печатью, не знаю вышло бы там так просто или нет
12. saiten 246 14.03.12 16:54 Сейчас в теме
А если скопировать функцию печати из модуля документа не в модуль обработки, а в модуль её формы, и этой форме установить основной реквизит типа ДокументОбъект.<Нужный документ>, то не надо переименовывать ЭтотОбъект, к тому же доступны реквизиты документа, экспортные переменные и функции модуля :)
13. pt_olga 61 14.03.12 17:56 Сейчас в теме
(12) saiten, но тогда, насколько я понимаю, не будет возможности печати документа без открытия формы, что для пакетной печати и/или печати из журнала документов не подходит.
15. saiten 246 15.03.12 00:20 Сейчас в теме
(13) В модуле обработки
Функция Печать() Экспорт
Форма = ПолучитьФорму("Форма");
Форма.ЭтотОбъект = СсылкаНаОбъект.ПолучитьОбъект();
Возврат Форма.ПечатьДокумента();
КонецФункции

В модуле формы

Функция ПечатьДокумента() Экспорт
<тут формируем табличный документ>
КонецФункции

Усё. А если форму сделать основной, чтоб она открывалась при запуске обработки через файл->открыть, и кинуть на неё поле ввода ссылки на документ, то автоматически решается и проблема отладки.

P.S. А, да, забыл... При этом теряется связь формы с обработкой, т.е. не получится получить макет, определённый в обработке. Чтобы этого избежать форме добавляется ещё один реквизит типа ВнешняяОбработкаОбъект, ну, например, назовём его ЭтаОбработка, который инициализируется при создании формы в модуле обработки: Форма.ЭтаОбработка = ЭтотОбъект. Соответственно, в модуле формы макет будет получаться не через ПолучитьМакет("Макет"), а через ЭтаОбработка.ПолучитьМакет("Макет").
В общем, если интересно - могу дать мой шаблончик внешней обработки, тут, как говорится, проще один раз увидеть)
17. pt_olga 61 15.03.12 10:23 Сейчас в теме
(15) saiten,
"В общем, если интересно - могу дать мой шаблончик внешней обработки, тут, как говорится, проще один раз увидеть) "


а дайте, будьте так любезны :)
19. saiten 246 15.03.12 13:28 Сейчас в теме
(17) Вот. Шаблончик и пример использования для бухгалтерии.
Прикрепленные файлы:
ВПФ_РеализацияТоваровУслуг_ТОРГ12.epf
_ВнешняяПечатнаяФорма.epf
20. CratosX 112 16.03.12 15:19 Сейчас в теме
(19) Удивительно, но конфигуратором выдаёт ошибку:

Ошибка при выполнении файловой операции 'D:\_ВнешняяПечатнаяФорма.epf'
по причине:
Неверный формат хранилища данных 'file://D:/_ВнешняяПечатнаяФорма.epf'


Причем открываю в 8.2.15.289
21. saiten 246 16.03.12 17:01 Сейчас в теме
(20)Возможно, файл скачался битым. Попробуйте ещё раз скачать.
22. pt_olga 61 18.03.12 13:55 Сейчас в теме
14. DimitrT 13 15.03.12 00:16 Сейчас в теме
Поддерживаю и ставлю плюс - сам не программист, а внедренец, но иногда приходится править код и дописывать и кое-что и именно подобные статьи помогают в работе. Последние годы своих пользователей "заставляю" пользоваться типовыми функционалами (да и 1С-ники постепенно радуют по количеству ошибок и недоработок) - потом и с обновлениями проще будет.
Есть мысль (услышанная со стороны и по-своему разумению понята): программистам все меньше и меньше становится работы - многое хороший внедренец может "разрулить" и типовыми функционалами или стандартными обработками. А вот подобные мелочи - очень помогают не обращаться к профессиональным программистам.
16. catena 110 15.03.12 09:30 Сейчас в теме
Все правильно, разбираясь в чужом коде часто можно получить больше знаний, чем пися (пиша?) своё с нуля :)
18. anig99 2843 15.03.12 12:28 Сейчас в теме
23. Gulak 02.05.12 11:04 Сейчас в теме
24. Nadi2006 03.05.12 11:19 Сейчас в теме
Спасибо! Все получилось.
26. kostyaka 04.09.12 22:56 Сейчас в теме
Спасибо!
то же не программист)
не хотелось лезть в конфу(замок трогать).
час пыхтения, и сделал как мне надо и не надо ни кого доставать такой мелочью;)
добавил только адрес доставки.
27. buhfinans 06.09.12 10:56 Сейчас в теме
Пользуюсь этой формой, но необходимо удалить строку "НДС".. в товарном чеке у нас ее быть не должно.. подскажите как?
28. AlexxxMksv 41 06.09.12 22:14 Сейчас в теме
(27) buhfinans,

Привет, ни чего сложного, если не озадачиваться изысканными способами, а именно грубо:
в карточке товара у тебя стоит "Без НДС"?, тогда открывай в конфигураторе файл "Чек на частное лицо.epf" и редактируем:
- в разделе "Макеты" нашей обработки кликаем открывая "Накладная" ищем мешающую нам строку "ИтогоНДС" удаляем ее (навести мышь на "ИтогоНДС" и правой кнопкой мыши вызвать контекстное меню и выбрать "удалить").
Сахраняем, не забываем в пользовательском приложении, в разделе "внешние печатные формы" загрузить
"Чек на частное лицо.epf" заново. и пробуем открыть в печатную форму и видим:

Не удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (ПолучитьОбласть): Область не найдена: ИтогоНДС

- начинаем решать:
предполагая что уничтожив строку в Макете "ИтогоНДС" мы оставили в коде программы часть которая обслуживает эту строку, и спасибо производителю находим коммент
// Вывести ИтогоНДС

поэтому сами коментируем часть кода:

Если Шапка.УчитыватьНДС Тогда
ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|Товар");
ОбластьМест = Макет.ПолучитьОбласть("ИтогоНДС|Мест");
ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|КоличествоЦена");
ОбластьСкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
ОбластьСуммы = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");

ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьТовар);
Если флВыводитьМест Тогда
ТабДокумент.Присоединить(ОбластьМест);
КонецЕсли;

ОбластьДанных.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:");
ТабДокумент.Присоединить(ОбластьДанных);
Если ЕстьСкидки Тогда
ТабДокумент.Присоединить(ОбластьСкидок);
КонецЕсли;
ОбластьСуммы.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС);
ТабДокумент.Присоединить(ОбластьСуммы);
КонецЕсли;


И пожалуй все, попробуйте.

впрочем прикрепляю готовый файл.
Прикрепленные файлы:
Чек на частное лицо без НДС.epf
s_pasha07; buhfinans; +2 Ответить
29. buhfinans 07.09.12 13:01 Сейчас в теме
30. Nad_ya 26 21.11.12 21:44 Сейчас в теме
Спасибо,AlexxxMksv! Вы мне очень помогли, особенно вот этой штукой:
мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
37. user970589 10 26.07.20 20:52 Сейчас в теме
(30)а я что-то не доехал, она вне функции стоит и не как объявление переменной.
к чему это?
31. sidka89 24.10.13 13:33 Сейчас в теме
спасибо! Теперь с поддержки хоть снимать не надо)
32. ceramica 12 04.02.14 03:25 Сейчас в теме
Ну и я скачаю так сказать в познавательных целях
33. Bukaska 140 04.02.14 15:11 Сейчас в теме
В управляемых все иначе.. Только вроде на эту тему уже куча статей и тут и на соседних форумах.. Сама тоже методом тыка осваивала печатные формы, пока не приноровилась
34. MiB 19.08.14 17:54 Сейчас в теме
если не снимать с поддержки можно ли внести какое то изменение в форму, чтобы оно при обновлении не затерлось?
35. Bukaska 140 20.08.14 10:17 Сейчас в теме
(34) MiB, в бух3.0 можно в пользовательском режиме редактировать макет.. только потом при обновлении очередного макета может возникнуть проблема использования редактируемого макета
user970589; +1 Ответить
36. user1334291 26.12.19 11:56 Сейчас в теме
это все же не работает :(((
Оставьте свое сообщение