Универсальный механизм печати из типовых конфигураций 1С 8.1 печатных документов на базе макетов, сделанных в MS Word

09.09.09

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

Механизм позволяет без особого труда пользователям создавать и изменять свои печатные формы по средствам MSWord. Механизм заполнения параметров (выбор реквизитов которые будут подставлены в конкретные параметры) определяются  пользователями в режиме предприятия.

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
ПечатьЧерезWord.cf
.1252068785 28,66Kb
409
409
1 SM
Скачать Купить за 1 850 руб.
ПечатьЧерезWordН.cf
.1252475291 32,82Kb
138
138
1 SM
Скачать Купить за 1 850 руб.

Предлагаю вашему вниманию универсальный механизм печати из типовых конфигураций 1С 8.1 печатных документов на базе макетов сделанных в MS Word. 

Для работы механизма необходимо:

  1. Скопировать в вашу конфигурацию справочник «ПечатныеФормыWord»
  2. В модуль «Универсальные механизмы» (или «Работа с диалогами» в зависимости от версии конфигурации) добавить следующую процедуру:
// Процедура дополняет таблицу печатных форма (ТаблицаМакетовWord) объекта
// из справочника "ПечатныеФормыWord"
Процедура ДобавитьВДеревоМакетовФормыWord(ДеревоМакетов, СсылкаОбъекта, Действие)
 
    СтрокиДерева = ДеревоМакетов.Строки;
    Если ТипЗнч(СсылкаОбъекта) = Тип("ОбъектМетаданных") Тогда
        Возврат;
    КонецЕсли; 
 
    МетаданныеОбъекта = СсылкаОбъекта.Метаданные();
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | ПечатныеФормыWord.Ссылка,
    | ПечатныеФормыWord.Наименование
    |ИЗ
    | Справочник.ПечатныеФормыWord КАК ПечатныеФормыWord
    |ГДЕ
    | ПечатныеФормыWord.ИмяМетоданных = &ИмяМетоданных
    | И ПечатныеФормыWord.ТипМетаданных = &ТипМетаданных";
 
    ИмяТаблицыОбъекта = "";
    Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("ТипМетаданных", "Документ");
    ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("ТипМетаданных", "Справочник");
    ИначеЕсли Метаданные.Отчеты.Содержит(МетаданныеОбъекта) Тогда
        Запрос.УстановитьПараметр("ТипМетаданных", "Отчет");
    Иначе
        Возврат;
    КонецЕсли;
    Запрос.УстановитьПараметр("ИмяМетоданных", МетаданныеОбъекта.Имя);
 
    БылРазделитель = СтрокиДерева.Количество() = 0 ;
    Выборка = Запрос.Выполнить().Выбрать();//ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
        ПорядковыйНомер = 0;
   
   
        // Только тут будем добавлять новую печ. форму в дополнение списка
        Если Не БылРазделитель Тогда
            ДобавитьСтрокуВДеревоКнопок(ДеревоМакетов, Строка(Новый УникальныйИдентификатор), ТипКнопкиКоманднойПанели.Разделитель);
            БылРазделитель = Истина;
        КонецЕсли;
   
        Суффикс = ?(ПорядковыйНомер = 0 ,"" , "("+ПорядковыйНомер+")");
        ДобавитьСтрокуВДеревоКнопок(ДеревоМакетов, Строка(Новый УникальныйИдентификатор), ТипКнопкиКоманднойПанели.Действие, Выборка.Наименование + Суффикс, Действие ,,,,,,Выборка.Ссылка);
 
    КонецЦикла;
 
КонецПроцедуры
  1. В функции «ИнициализироватьДеревоДополнительныхКнопок» добавить Колонку «СправочникWord» в возвращаемое дерево: 
Функция ИнициализироватьДеревоДополнительныхКнопок() Экспорт
 
    ДеревоКнопок = Новый ДеревоЗначений;
 
    //Если ИмяКнопки = Неопределено, создается разделитель
    //Если Дерево имеет подчиненные, то 
 
    ДеревоКнопок.Колонки.Добавить("Имя");
    ДеревоКнопок.Колонки.Добавить("ТипКнопки");
    ДеревоКнопок.Колонки.Добавить("Текст");
    ДеревоКнопок.Колонки.Добавить("Подсказка");
    ДеревоКнопок.Колонки.Добавить("Картинка");
    ДеревоКнопок.Колонки.Добавить("Действие");
    ДеревоКнопок.Колонки.Добавить("Пометка");
 
    ДеревоКнопок.Колонки.Добавить("ИзменяетДанные");
 
    //Остальные свойства кнопки
 
    ДеревоКнопок.Колонки.Добавить("Расшифровка");
    // *****Вот здесь добавить колонку
    ДеревоКнопок.Колонки.Добавить("СправочникWord");
    //******Добавили колонку. 
    Возврат ДеревоКнопок;
 
КонецФункции // ()
  1. В функцию «ДобавитьСтрокуВДеревоКнопок» добавить параметр «СсылкаНаСправочникWord» и реализовать заполнение этим параметром строки дерева:
Функция ДобавитьСтрокуВДеревоКнопок(СтрокаПодменю, Имя, Знач ТипКнопки = Неопределено ,Текст = "", Действие = Неопределено, 
Расшифровка = Неопределено, Пометка = Ложь, Подсказка = "", Картинка = Неопределено,
ИзменяетДанные = Ложь, СсылкаНаСправочникWord = Неопределено) Если ТипКнопки = Неопределено Тогда ТипКнопки = ТипКнопкиКоманднойПанели.Действие; КонецЕсли; СтрокаКнопки = СтрокаПодменю.Строки.Добавить(); СтрокаКнопки.Имя = Имя; СтрокаКнопки.ТипКнопки = ТипКнопки; СтрокаКнопки.Текст = Текст; СтрокаКнопки.Действие = Действие; СтрокаКнопки.Картинка = Картинка; СтрокаКнопки.Подсказка = Подсказка; СтрокаКнопки.Пометка = Пометка; СтрокаКнопки.ИзменяетДанные = ИзменяетДанные; СтрокаКнопки.Расшифровка = Расшифровка; // *****Начало изменений Сахно Дмитрий Если не СсылкаНаСправочникWord = Неопределено Тогда СтрокаКнопки.СправочникWord = СсылкаНаСправочникWord; КонецЕсли; //******Конец изменений Сахно Дмитрий Возврат СтрокаКнопки; КонецФункции
  1. В функцию «ПолучитьДеревоМакетовПечати» добавить вызов новой процедуры «ДобавитьВДеревоМакетовФормыWord»
Функция ПолучитьДеревоМакетовПечати(СсылкаОбъекта, ВнутренниеПечатныеФормы, Действие = Неопределено, 
ДействиеУстановитьПечатьПоУмолчанию = Неопределено) Экспорт ДеревоКнопок = ИнициализироватьДеревоДополнительныхКнопок(); Если Не ВнутренниеПечатныеФормы = Неопределено Тогда ДобавитьВДеревоМакетовВстроенныеФормы(ДеревоКнопок, ВнутренниеПечатныеФормы, Действие); КонецЕсли; ДобавитьВДеревоМакетовДополнительныеФормы(ДеревоКнопок, СсылкаОбъекта, Действие); //******Начало изменений ДобавитьВДеревоМакетовФормыWord(ДеревоКнопок, СсылкаОбъекта, Действие); //******Конец изменений СтрокаПоУмолчанию = ПолучитьСтрокуДереваМакетовПоУмолчанию(СсылкаОбъекта.Метаданные().Имя ,ДеревоКнопок); …
  1. В процедуре «ПечатьПоДополнительнойКнопке» изменить следующий код
Процедура ПечатьПоДополнительнойКнопке(УдалитьДеревоМакетов, Объект, Форма = Неопределено, ТекстКнопки) Экспорт
 
    Если Не Форма = Неопределено Тогда
        Если Не РаботаСДиалогами.ПроверитьМодифицированностьВФорме(Объект,Форма) Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
 
    Попытка
        СтруктураВнутреннихПечатныхФорм = Объект.ПолучитьСтруктуруПечатныхФорм()
    Исключение
        СтруктураВнутреннихПечатныхФорм = Новый Структура;
    КонецПопытки;
 
    ДеревоМакетовПечати = ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);
 
    СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти(ТекстКнопки,"Текст");
 
    Если СтрокаКнопки = Неопределено Тогда
  
        Предупреждение(НСтр("ru='Печать не доступна. Изменился набор реквизитов!';uk='Друк не доступний. Змінився набір реквізитів!'"));
        Возврат;
  
    КонецЕсли;
 
    НаПринтер = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ПечатьДокументовБезПредварительногоПросмотра") = Истина;
 
    Расшифровка = СтрокаКнопки.Расшифровка;
    //*****Начало изменений
    Если ЗначениеЗаполнено(СтрокаКнопки.СправочникWord) Тогда // Печать через ворд
        СправочникОбъект = СтрокаКнопки.СправочникWord.ПолучитьОбъект();
        СправочникОбъект.ОбъектВладелец = Объект.Ссылка;
        СправочникОбъект.ПечатьВорда(НаПринтер, ЗначениеЗаполнено(СправочникОбъект.ссылка.ИмяФайлаКопии));
    Иначе
    //*****Конец изменений
        Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
            ТабДокумент = НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);
            УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 0, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(Объект), Объект.Ссылка);
        Иначе
            Объект.Печать(СтрокаКнопки.Имя, 0, НаПринтер);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры // ПечатьПоДополнительнойКнопке()

По конфигурации все!!!


Как пользоваться:

  1. Подготавливаем в Word файл шаблона c расширением (.dot). В файле набираем текст и устанавливаем параметры.
    Установка параметров В MS Word 2007 Вставка => Экспресс - блоки => поле => В диалоговом окне : Категории (Все), Поля Author, Новое имя: <Имя вашего параметра>, Формат (Нет).
    Установка параметров В MS Word 2003 Вставка = поле => см. выше.
  2. Заходим из предприятия в справочник «Печатные формы Word». Добавляем элемент. Указываем наименование печатной формы. Выбираем тип владельца (например реализация товаров и услуг). Нажимаем выбрать файл шаблона, и выбираем подготовленный в п1. Файл. Важно выбранный файл именно загружается в конфигурацию и в дальнейшем берется из нее, это НЕ ССЫЛКА на файл на диске. Дальше переходим на закладку Параметры. Нажимаем получить из шаблона. Табличная часть должна заполниться названиями, которые вы вводили в шаблон в п.1 как поля.
    Дальше для каждого параметра можно определить либо постоянное значение в колонке значение. Либо выбрать из стандартного набора (например «Реквизит» позволяет выбрать любой реквизит объекта (тип владельца)). Или написать произвольный алгоритм. Произвольный алгоритм - это функция, которая должна вернуть одно значение, которое и будет подставлено вместо параметра при печати.
    В результате в любой документ, который использует типовой механизм формирования меню печати и стандартный обработчик печати, можно добавить в меню печати документа и он будет печататься. (в нашем случае в документе «Реализация товаров и услуг появится еще один пункт (так же как и работа внешних форм.).

НА МАШИНЕ-КЛИЕНТЕ ДОЛЖЕН БЫТЬ УСТАНОВЛЕН MSWord

См. также

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

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

29400 руб.

29.06.2023    5137    11    5    

20

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

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

7200 руб.

02.08.2023    3517    8    0    

27

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    4711    dimanich70    15    

20

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

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

01.03.2024    3557    dimanich70    8    

16

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

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

1 стартмани

27.10.2023    2775    21    avmartynov    14    

53

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

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

2 стартмани

22.08.2023    2850    43    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KukA.5 476 06.09.09 01:28 Сейчас в теме
Полезная вещь! Плюс!
2. Aragorn 09.09.09 07:22 Сейчас в теме
3. dsahno 95 09.09.09 09:51 Сейчас в теме
Выложил более познюю версию. в которой удобнее сделан интерфейс произвольного алгоритма
4. Ivon 676 09.09.09 12:16 Сейчас в теме
Возможна-ли печать произвольной табличной части, например графика платежей, в случае, если количество платежей заранее не известно?
5. seo23 09.09.09 13:19 Сейчас в теме
Не плохо б сделать там поддержку OpenOffice.org Writer
6. Fominro 10.09.09 07:13 Сейчас в теме
Отличная задумка, интересное решение.
7. dsahno 95 10.09.09 14:24 Сейчас в теме
... Возможна-ли печать произвольной табличной части, например графика платежей, в случае, если количество платежей заранее не известно?

Вобще средствами VBasic, можно и создавать таблицы любого формата. И из 1с-ки это сделать реально (я просто не пробовал). Можно создать ТЧ, в которой будет ИмяКолонки, ВариантЗаполнения. Кто сделает зачет и уважение. Мне сейчас не до этого. Может быть потом.
8. sedynov 04.10.09 02:39 Сейчас в теме
Плюс авансом :D
stepan_shock; +1 Ответить
9. 1Cynep4eJIoBek 22.01.10 11:22 Сейчас в теме
респект мужик плюсище огромный, только вот подскажи плиз, в модуле справочника :

РаботаСФайлами.СохранитьФайлНаДиске(МакетWord, ИмяФайла, Ложь, "ДА", Ложь);

работа с файлами это че за функция у меня еррорит, может из за того что ЕТК Казахстана??? напиши где она у тебя прописана и как???
10. 1Cynep4eJIoBek 22.01.10 12:12 Сейчас в теме
В Казахстанской конфиге ЗУП строку

РаботаСФайлами.СохранитьФайлНаДиске(МакетWord, ИмяФайла, Ложь, "ДА", Ложь);

надо заменит на

УниверсальныеМеханизмы.СохранитьФайлНаДиске(МакетWord, ИмяФайла, Ложь, "ДА", Ложь);

и будет счастье ;)
11. bikineva 04.04.10 18:46 Сейчас в теме
А ГДЕ ВЗЯТЬ МОДУЛЬ...справочник скопировали.аа вот..с модулем тупим..
12. Canabis220 65 28.10.11 08:17 Сейчас в теме
Нужно сказать что данная разработка будет работать без проблем только с крупными конфигурациями. В которых есть общие модули написанные 1с-ми. В конфигурации стороннего разработчика если нет этих модулей сложнее. Выложили бы тогда в конфигурацию и эти модули.
13. Fruit83 28 04.12.11 23:52 Сейчас в теме
Благодарю за публикацию! Сейчас опробуем что там и как.:)
15. ir-ish-ka 04.04.12 04:55 Сейчас в теме
Огромное мпасибо за интересное решение, используем в ЗУП 2.5 для печати всех практически кадровых договоров, отпусков, перемещений.... Очень удобно и всем нравится! ПЛЮС!!!
16. mrm1212 36 10.02.14 17:40 Сейчас в теме
А есть возможность использования макетов со вставкой картинок в орд???
17. RayCon 785 27.01.17 21:17 Сейчас в теме
Опечатки: по средствам MSWord -> посредством MS Word
18. mailwood 21 02.03.12 15:35 Сейчас в теме
Кроме функций общих модулей, в конфигурацию обязателен для добавления справочник ХранилищеДополнительнойИнформации. При этих добавках функционал работоспособен. А вот с русским языком у автора серьезные проблемы :)
Оставьте свое сообщение