1с напечатать текстовый документ
Привет всем! В данной статье предлагаю рассмотреть методы вывода макета на печать любых документов (собственных или типовых) с помощью актуальной библиотеки стандартных подсистем (БСП). Данный небольшой обзор поможет снять вам вопросы типа "как прицепить макет печати к собственному документу или справочника?" или "как разместить кнопку печать на форме списка и форме документа или справочника". На момент написания статьи - середина февраля 2021 года - точка актуальности - это БСП версии 3.1.4.148.
Для кого-то этот материал не новшество, но отмечу, что данная статья будет полезна специалистам, желающим использовать последние возможности библиотеки стандартных подсистем в методах вывода на печать. Хорошо известно, что подсистема БСП постоянно меняется и усовершенствуется, и я могу сказать определенно, что старые методы и алгоритмы вывода на печать макетов печатных форм документов и справочников уже будут вряд ли применимы в современных конфигурациях на последних БСП.
Подготовка и настройка собственного документа конфигурации для использования в подсистеме печати в системе БСП.
Начнем с простого создания документа ТестоваяПечатьДокументов в конфигурации на БСП. В качестве конфигурации я беру чистую библиотеку стандартных подсистем версии 3.1.4.148. Разработка ведется на Платформе 1с 8.3.18.1208.
Основным и главным моментом после создания собственного документа будет необходимость прописать данный документ в общем модуле - процедуре УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
выглядит это вот так:
Далее, что нам потребуется. Создаем 2 формы в документе ТестоваяПечатьДокументов - это "ФормаСписка" и "ФормаДокумента". В каждой из этих форм создаем и привязываем процедуру ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
выглядит она вот так:
Далее, для "формы списка" добавляем внутренние БСП подключаемые процедуры:
А для "формы документа" добавляем вот такие внутренние БСП подключаемые процедуры:
Хочу отметить, что данные процедуры я копирую из типовых документов БСП - их будет достаточно, чтобы активировать кнопку системы печати на формах документа. Ничего лишнего добавлять не нужно.
Далее, заполним модуль менеджера нашего документа. Напишем в нем такой код:
Здесь функция - ПечатнаяФормаТестовогоДокумента(МассивОбъектов, ОбъектыПечати) - формирует заполненный макет печатной формы и возвращает пользователю.
Процедура - Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - типовая процедура печати БСП.
Тут нет ничего сложного, но особое внимание хочу обратить на вот эту процедуру добавления команд
Открываем код БСП и смотрим какие возможности предоставляет нам функция УправлениеПечатью.СоздатьКоллекциюКомандПечати() - она используется для "наполнения" объекта КомандыПечати(). Возможности широчайшие:
Как мы видим, основные параметры - Идентификатор, Представление. Остальные являются необязательными.
Правильно разместив вышеуказанный код в конфигурации вы получите необходимый результат - вывод кнопки "Печать" для формы документа и формы списка для документа ТестоваяПечатьДокументов.
Перейдем к разделу заключений и выводов по данной статье.
Заключение и выводы
В данной статье мы рассмотрели основной алгоритм БСП для размещения команд печати на любых документах конфигурации, в основе которой лежит современная библиотека стандартных подсистем. Напомню, что разработка примера велась на "чистой" библиотеке стандартных подсистем версии 3.1.4.148 и Платформе 1с 8.3.18.1208.
Ну и конечно, знание данных методов позволит вам ускорить разработку и доработку любых типовых конфигураций 1с (БУХ, ЗУП, Розница, УНФ и т.п. ), основой которых является библиотека стандартных подсистем. И самое главное - это правильно и по стандарту профессиональных разработчиков.
Другие мои материалы по БСП
Если вам интересен мой практический подход и информация, которую вы сможете реально использовать, если у вас есть желание, чтобы данный комплекс статей наполнялся практическими материалы для программистов - я не откажусь от поддержки как данной статьи, так и всего комплекса статей в целом.
Так же прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям:
Подскажите пожалуйста как мне распечатать документ.txt из модуля формы?
(1)
Нужно его автоматически распечатать или только показать?
тд = Новый ТекстовыйДокумент;
Тд.Прочитать("C:\тест.txt");
Тд.Показать();
ай блин - это только с ТабДоками будет работать(((
(10) (1) Печать текстовых документов встречал только в Чеках, но там через драйвер кассы или принтера чеков. В (2) сказали, как это сделать. Это не долго. Макет с 1 областью, с 1 ячейкой на всю страницу и 1 параметром, в который устанавливается текст из файла.
(37) Было. Но зачем упираться в винду, если можно сделать кросс-платформенно и без внешних зависимостей?
(38)А проанализировать тип ОС и выдать команду для нее тоже не кроссплатформенно? Гораздо интереснее заниматься BDSM на страницу кода.
Установить у первой ячейки табличного документа подходящую ширину, признаки переноса и т.п, присвоить ячейке весь текст табличного документа и напечатать :)
Нужна печать слипчека с банковского терминала?
У него штатная ширина 32 или 48 символов
Делал такое для китайского принтера чеков
Файл = Новый ЧтениеТекста("C:\тест.txt",КодировкаТекста.OEM);
Файл.Закрыть();
ФайлЭкваринга = Новый ТекстовыйДокумент;
ФайлЭкваринга.Прочитать("C:\тест.txt",КодировкаТекста.OEM);
ФайлЭкваринга.Показать();
Выводит, все хорошо, теперь как сделать что бы автоматически печатался?
Метода у текстового документа ".Напечатать" нет.
Предложу свой вариант, который хоть и затрагивает систему, зато содержит минимум кода. При этом обеспечивает гибкость в настройках печати без дальнейшей модификации 1С.
А именно: установить в системе утилиту печати текстовых файлов на любом Win-принтере, лучшая из известных мне - бесплатная SPrint .
Тогда задача сводится к копированию распечатываемого файла в файл с именем, которое отслеживается этой утилитой.
Для этого в 1С достаточно всего одной команды КопироватьФайл(), даже не читая его. Ну, или можно прочитать и тут же записать прочитанный текст в файл с именем, заданным в настройках Sprint. А утилита его подхватит и распечатает.
через таб документ, как выше уже сказали, но чем париться с автоустановкой ширины и подобного, взять создать таб документ, в первой ячейке напечатать текст образец. сохранить. затем как угодно десериализовать полученный mxl (можно тупо прочитать его как текстовый документ), найти текст образец и зашаблонизировать его
(11) чего-то туплю, проще даже просто запараметризировать первую ячейку и в параметр выводить, что вообще проще простого
Макет = ПолучитьМакет("Макет");
ТабДок = Новый ТабличныйДокумент;
Текст = Новый ЧтениеТекста(ИмяФайла);
Стр = Текст.ПрочитатьСтроку();
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТекста");
ОбластьМакета.Параметры.Заполнить(Новый Структура("ЗначениеСтроки", Стр));
ТабДок.Присоединить(ОбластьМакета);
Пока Стр <> Неопределено Цикл
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТекста");
ОбластьМакета.Параметры.Заполнить(Новый Структура("ЗначениеСтроки", Стр));
ТабДок.Присоединить(ОбластьМакета);
Стр = Текст.ПрочитатьСтроку();
КонецЦикла;
ТабДок.Показать();
Все хорошо, только что бы отображался текст правильно, нужен шрифт "Terminal 10"
В макете делаю Шрифт параметра Terminal 10 а Текст = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.OEM); выходит кракозябра, а на вывод ТабДок выводит нормально, на принтере и предварительном просмотре кракозябра, если КодировкаТекста.OEM убираю, то он шрифт меняет, и выводит на русском.
(19) Шрифт "Terminal" - это кодировка ANSI. А стандартные строки 1С - это UTF.
Для корректной печати шрифтом "Terminal" придется смириться с отображением в кракозяблах стандартными шрифтами.
С настройкой ширины колонки оказалось менее тривиально, чем я думал
(18) еще более не тривиально будет попадание на ограничение размера строки в ячейки. Если текст будет большой.
(22) А какое там ограничение? Хотя соглашусь, что войну и мир так вряд ли распечатаешь :)
ЗЫ. Ок. Думаю, спасет несложная модификация по ячейке на строку.
(23) вот точных данных не знаю, но уже сталкивался с тем, что в ячейке нельзя большой текст занести.
В акте нужно было подробно расписать выполненные работы. Был неприятно удивлен. И текста там было не так уж и много. Все на 1 лист укладывалось.
(23) вот из ограничений Excel: "Общее количество знаков в ячейке - 32 767 знаков".
Думаю в 1С аналогично, или похоже.
В таких условиях можно и в ограничения размера строки 1С упереться. Пусть буферизацию пишет тот, кому это реально надо :)
(29) По-идее, если будешь читать текст ANSI как UTF-8 а не как ANSI, тогда он прочитается в строку 1С без преобразований и тогда ты сможешь его корректно отобразить шрифтом Terminal, хотя в строке 1С он будет крокозяблами. Но зуб не дам :)
От простой для отдельных компаний до комплексной автоматизации крупных холдингов.
Сдача регламентированной отчетности в соответствии с законодательством РФ.
Печать документов в программах «1С:Предприятие» осуществляется аналогично другим программам, но у пользователей могут возникать вопросы, связанные со спецификой настроек, например, печатной формы или параметров страницы, а также о выводе на печать необходимых реквизитов и т.п. Рассмотрим настройку и печать документов на примере программы «1С:Бухгалтерия предприятия 3.0».
Настройка печатного документа
Собравшись распечатать документы, первое, что необходимо сделать – сформировать печатную форму со всеми заполненными реквизитами. Большинство документов имеют обязательные реквизиты, например, подписи ответственных лиц. Для того чтобы они проставлялись в печатной форме по умолчанию, их необходимо заполнить в сведениях об организации через «Главное» - «Реквизиты организации».
Рис.1 Настройка печатного документа
Открыв раздел «Подписи», необходимо указать данные руководителя, главного бухгалтера и кассира. Если ответственные лица меняются, историю их изменения можно посмотреть, нажав гиперссылку «История». Это актуально, если нужно распечатать документы до определенного числа за подписью одного ответственного лица, а после определенной даты должна проставляться подпись другого ответственного лица.
Рис.2 Открыв раздел «Подписи», необходимо указать данные руководителя, главного бухгалтера и кассира
Также необходимо заполнить данные ответственных лиц за подготовку отчетов через гиперссылку «Ответственные лица за подготовку отчетов». Эти данные будут автоматически попадать в сформированную печатную форму отчета.
Рис.3 «Ответственные лица за подготовку отчетов»
Например, в печатной форме документа «Расходный кассовый ордер» отразились заполненные ранее данные ответственных лиц.
Рис.4 Расходный кассовый ордер
При заполнении документов важно обратить внимание на то, что для формирования печатной формы могут быть предусмотрены отдельные закладки, где вносят дополнительные данные. Например, в инвентаризационной описи или в актах на списание членов комиссии необходимо указать на отдельной закладке.
Рис.5 Отдельные закладки, где вносят дополнительные данные
Если данные не будут заполнены, поля в печатной форме останутся пустыми.
Печать табличного документа 1С. Параметры печати
Все печатные формы документов или отчетов в 1С представлены в виде таблиц, и зачастую пользователь сталкивается с тем, что документ не помещается на лист, выходит за границы печати, разделяет отчет на два листа. В таких случаях перед печатью рекомендуется воспользоваться кнопкой «Предварительный просмотр документа». Она есть в любой печатной форме документа или отчета. Нажав ее, можно увидеть, как документ будет располагаться на листе бумаги и, допустим, сменить ориентацию документа.
Рис.6 Печать табличного документа
Рис.7 Печать табличного документа
В нижней части листа при этом можно увидеть, на скольких страницах помещается отчет или документ. Бывает, что за пределы листа выходит одна колонка, и пользователю было бы удобнее, если бы документ влезал полностью на один лист. Для настройки параметров в любой печатной форме имеется кнопка «Параметры страницы». Нажав ее, мы сможем настроить параметры для вывода на печать формы документа или отчета.
Рис.8 Параметры печати
- Масштаб. Первая настройка, на которую следует обратить внимание. Автоматически программа устанавливает масштаб 100%, но при необходимости мы можем установить переключатель в положение «По ширине листа». В этом случае наша печатная форма автоматически разместится по ширине листа.
- Ориентация. При необходимости пользователь может задать ориентацию «Портрет» – вертикальное размещение, или «Альбомная» – горизонтальное размещение, для оптимального размещения документа на печатном листе.
- Поля. Бывает, что документ выходит за пределы полей немного, и чтобы не изменять масштаб документа, можно попробовать уменьшить отступы полей или увеличить отступ поля слева. Это поле необходимо для подшивки документов. Если оно будет сильно уменьшено, часть документа в подшивке окажется нечитаемой. Рекомендуется левое поле устанавливать примерно 3 сантиметра (поля в настройке указаны в миллиметрах).
- Экземпляров на странице. В этой настройке можно задать, сколько экземпляров разместить на одной странице. Установка переключателя в положение «Авто» приведет к автоматическому подбору, иначе – на лист будет выводиться по одному экземпляру. Этой настройкой удобно пользоваться при выводе на печать небольших документов, например расчетные листки сотрудников.
- Колонтитулы. Определяют размер печатной области листа. При необходимости мы можем уменьшить их размер.
- Чередование страниц и двусторонняя печать. Данные параметры позволяют распечатать документы с двух сторон листа. Актуально при больших объемах информации.
Рис.9 Параметры печати
«Предварительный просмотр. » и «Параметры страницы. » доступны в главном меню программы в пункте «Файл». Для доступа к ним надо находиться в печатной форме документа. Но способ открыть их непосредственно из формы более простой.
Рис.10 «Предварительный просмотр. » и «Параметры страницы. »
Настроив параметры страницы и нажав «Печать», мы выбираем принтер, задаем количество экземпляров и, если надо, диапазон печати.
Рис.12 Как распечатать только одну страницу документа или несколько листов из него
В данном примере на печать выводятся страницы с 3 по 5 и 10 страница.
Ошибки печати
Бывает, пользователь отправляет на печать документ, а программа или выдает ошибку, или вообще ничего не происходит. Причиной этому может быть то, что у пользователя изменился принтер, например, его переустановили. Программа по умолчанию обращается к тому принтеру, на который ранее отправляли печатать документы. Изменение принтера в параметрах печати может не дать результата и выдавать ошибку печати. В этом случае необходимо сбросить настройки печати. Для этого зайдем в пункт меню «Администрирование» - «Настройки пользователей и прав».
Рис.13 Настройки пользователей и прав
Переходим по гиперссылке «Настройки пользователей».
Рис.14 Гиперссылка «Настройки пользователей»
На закладке «Прочие настройки» для выбранного пользователя выделить строку «Настройки печати табличных документов» и нажать кнопку «Очистить».
Рис.15 Прочие настройки
После сброса настроек следует еще раз изменить принтер в меню «Параметры страницы».
При работе с программой 1С через браузер может возникнуть ситуация, когда вместо печати документ сохраняется в формат PDF. В некоторых браузерах такое бывает, когда принтер не подключен. В этом случае необходимо проверить установлен ли принтер. При нажатии на «Печать» или «Предварительный просмотр» появится окно печати документа, где, нажав кнопку «Изменить», указываем нужный принтер. Окно выглядит иначе, чем в программе 1С, так как браузер имеет свои настройки печати.
Рис.16 Прочие настройки
Зачастую ошибки, возникающие при печати документов из 1С, непосредственно с работой программы не связаны. Их самой частой причиной становятся сбои в работе сети, неверные настройки принтера или сетевого доступа к принтерам. Реже проблемы печати возникают из-за ошибок в коде программы, но разработчики сразу их ликвидируют.
Текстовый документ в 1С 8.3 это объект встроенного языка, который позволяет представлять различную информацию в виде текстов. Может быть создан интерактивно режиме 1С:Предприятие или в режиме Конфигуратор. Средствами встроенного языка 1С, е го можно сохранять в текстовый файл и читать из текстового файла. Также текстовый документ можно размещать на форме или в макете. 1С:Предприятие 8.3 поддерживает создание текстовых макетов, на основании которых могут быть сформированы текстовые документы. Эти макеты могут быть добавлены в конфигурацию с помощью объектов Макет.
✔ Запись текстового файла
&НаКлиенте
Процедура ЗаписьТекстовогоФайла ( Команда )
КаталогСохранения = "D:\Storage\data" ;
СоздатьКаталог ( КаталогСохранения ); // Имя каталога (путь)
Файл_ТХТ = Новый ТекстовыйДокумент ;
// Наполнение файла содержимым
Файл_ТХТ . УстановитьТекст ( "
|MS Windows
|Linux
|MacOS
|OSX" );
// Очистка содержимого файла
Файл_ТХТ . Очистить ();
// Добавление 1-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Word" );
// Добавление 2-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Excel" );
// Добавление 3-й строки:
Файл_ТХТ . ДобавитьСтроку ( "Powerpoint" );
// Замена первой строки на "Outlook"
Файл_ТХТ . ЗаменитьСтроку ( 1 , "Outlook" );
// Вставка новую строки сразу после 1-й (*на место 2-й)
Файл_ТХТ . ВставитьСтроку ( 2 , "Access" );
// Удаление 2-й строки: ("Access")
Файл_ТХТ . УдалитьСтроку ( 2 );
// Запись/перезапись файла (D:\Storage\data\MS.txt) на диск
// Параметры: путь, кодировка, разделитель строк
Файл_ТХТ . Записать ( КаталогСохранения + "\MS.txt" , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );
// Открытие созданного файла в блокноте
ЗапуститьПриложение ( КаталогСохранения + "\MS.txt" );
&НаКлиенте
Процедура ЧтениеТекстовогоФайла ( Команда )
Файл_ТХТ = Новый ТекстовыйДокумент ;
Файл_ТХТ . Прочитать ( ПутьКФайлу_ТХТ , КодировкаТекста . UTF8 , Символы . ВК + Символы . ПС );
// Показать текст целиком
Сообщить ( Файл_ТХТ . ПолучитьТекст ());
//Outlook
//Excel
//Powerpoint
// Показать текст по строкам
Для Индекс = 1 По Файл_ТХТ . КоличествоСтрок () Цикл
Сообщить ( Файл_ТХТ . ПолучитьСтроку ( Индекс )); //. Outlook . Excel . Powerpoint
КонецЦикла;
&НаКлиенте
Процедура ФормированиеПечатнойФормыИзТекстовогоМакета ( Команда )
ФормаПечати = СформироватьПечатнуюФорму ();
ФормаПечати . Показать ( "Счет №2020" );
&НаСервере
Функция СформироватьПечатнуюФорму ()
ФормаПечати = Новый ТекстовыйДокумент ;
Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Счета" );
// Получение области и макета по имени
Шапка = Макет . ПолучитьОбласть ( "Шапка" );
// Заполнение параметров
Шапка . Параметры . Дата = ТекущаяДата ();
Шапка . Параметры . Номер = 2020 ;
// Вывод шапки в документ
ФормаПечати . Вывести ( Шапка );
// Заголовок табличной части.
ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
ФормаПечати . Вывести ( ЗаголовокТ );
// Строки табличной части (обычно в цикле)
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Строка" );
// Строка 1
СтрокаТ . Параметры . Номенклатура = "SSD Intel Optane DC P4800X 1.5TB" ;
СтрокаТ . Параметры . Количество = 7 ;
ФормаПечати . Вывести ( СтрокаТ );
// Строка 2
СтрокаТ . Параметры . Номенклатура = "SSD Huawei 02351SPX 1.92TB" ;
СтрокаТ . Параметры . Количество = 12 ;
ФормаПечати . Вывести ( СтрокаТ );
// Вывод подвала ТЧ
СтрокаТ = Макет . ПолучитьОбласть ( "ТЧ_Подвал" );
СтрокаТ . Параметры . ИтогоКоличество = 19 ; // Всего
ФормаПечати . Вывести ( СтрокаТ );
Табличный документ в 1С 8.3 - это объект встроенного языка, который используется для создания печатных форм документов и отчетов. Является электронной таблицей, так как состоит из строк и столбцов и имеет функциональность, определенную следующими методами: ввод данных, группировка элементов, расшифровка, примечание в ячейках, оформление ячеек, форматирование, сохранение. Табличный документ использоваться как сам по себе, и может входить в состав любой из форм и служит для отображения информации.
✔ Создание печатной формы из табличного документа
&НаКлиенте
Процедура СозданиеПечатнойФормыИзТабличногоДокумента ( Команда )
НастройкаКолонтитуловПечатнойФормы ( ФормаПечати );
НастройкаПараметровПечатиТабличногоДокумента ( ФормаПечати );
ФормаПечати . Показать ( "Отчет по долгам" );
// Сохранение "Отчета по долгам"
ФормаПечати . Записать ( "D:\Storage\data\ОтчетПоДолгам.xls" , ТипФайлаТабличногоДокумента . XLS );
// Печать "Отчета по долгам" сразу на принтер
ФормаПечати . Напечатать ( РежимИспользованияДиалогаПечати . НеИспользовать );
&НаСервере
Функция СозданиеПечатнойФормыИзТабличногоДокументаНаСервере ()
Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Табл" );
// Изменение табличного макета после его создания.
ПрограммноеИзменениеТабличногоДокумента ( Макет );
ФормаПечати = Новый ТабличныйДокумент ;
// Получение области и макета по имени
Шапка = Макет . ПолучитьОбласть ( "Шапка" );
// Заполнение параметров
Шапка . Параметры . Дата = ТекущаяДата ();
Шапка . Параметры . Номер = 2020 ;
// Вывод шапки в документ
ФормаПечати . Вывести ( Шапка );
// Заголовок табличной части.
ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
ФормаПечати . Вывести ( ЗаголовокТ );
ТЧ_Строка = Макет . ПолучитьОбласть ( "ТЧ_Строка" );
SSDIntelOptaneDC = Справочники . Номенклатура . НайтиПоНаименованию ( "SSD Intel Optane DC P4800X 1.5TB" );
// Группировка строк таблицы в сворачивающийся блок
ФормаПечати . НачатьГруппуСтрок ( "Номенклатура" , Истина);
Для Х = 1 По 100 Цикл
ТЧ_Строка . Параметры . Номенклатура = SSDIntelOptaneDC ;
ТЧ_Строка . Параметры . Количество = Х ;
// Параметр расшифровки "РасшифровкаНоменклатуры" - для открытия формы номенклатуры из макета по клику
ТЧ_Строка . Параметры . РасшифровкаНоменклатуры = SSDIntelOptaneDC ;
ФормаПечати . Вывести ( ТЧ_Строка );
КонецЦикла;
Читайте также: