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

09.09.09

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

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

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

Наименование Файл Версия Размер
ПечатьЧерезWord.cf
.1252068785 28,66Kb
409
.1252068785 28,66Kb 409 Скачать
ПечатьЧерезWordН.cf
.1252475291 32,82Kb
138
.1252475291 32,82Kb 138 Скачать

Предлагаю вашему вниманию универсальный механизм печати из типовых конфигураций 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

См. также

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

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

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

29400 руб.

29.06.2023    4371    8    4    

16

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

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

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

7200 руб.

02.08.2023    2897    4    0    

19

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

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

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

01.03.2024    1114    dimanich70    6    

13

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

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

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

1 стартмани

27.10.2023    1933    13    avmartynov    10    

43

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

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

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

2 стартмани

22.08.2023    2020    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 673 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 34 10.02.14 17:40 Сейчас в теме
А есть возможность использования макетов со вставкой картинок в орд???
17. RayCon 784 27.01.17 21:17 Сейчас в теме
Опечатки: по средствам MSWord -> посредством MS Word
18. mailwood 21 02.03.12 15:35 Сейчас в теме
Кроме функций общих модулей, в конфигурацию обязателен для добавления справочник ХранилищеДополнительнойИнформации. При этих добавках функционал работоспособен. А вот с русским языком у автора серьезные проблемы :)
Оставьте свое сообщение