(10) (1) Печать текстовых документов встречал только в Чеках, но там через драйвер кассы или принтера чеков. В (2) сказали, как это сделать. Это не долго. Макет с 1 областью, с 1 ячейкой на всю страницу и 1 параметром, в который устанавливается текст из файла.
Установить у первой ячейки табличного документа подходящую ширину, признаки переноса и т.п, присвоить ячейке весь текст табличного документа и напечатать :)
Нужна печать слипчека с банковского терминала?
У него штатная ширина 32 или 48 символов
Делал такое для китайского принтера чеков
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.Прочитать(СлипЧек, КодировкаТекста.ANSI, Символы.ПС);
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("СлипЧек");
облСтрока = Макет.ПолучитьОбласть("Строка");
Для Номер = 1 По ТекстовыйФайл.КоличествоСтрок() Цикл
Строка=ТекстовыйФайл.ПолучитьСтроку(Номер);
облСтрока.Параметры.Строка=Строка;
ТабДок.Вывести(облСтрока);
КонецЦикла;
УстановитьПараметрыТабличногоДокумента(ТабДок);
Если ЗначениеЗаполнено(Принтер) Тогда
ТабДок.Напечатать();
// Sleep(3); // До 14.09 было активно МНФ
Иначе
ТабДок.Показать();
КонецЕсли;
Процедура УстановитьПараметрыТабличногоДокумента(ТабДок)
ТабДок.ИмяПринтера=Принтер;
ТабДок.ПолеСлева=0;
ТабДок.ПолеСправа=0;
ТабДок.ПолеСверху=0;
ТабДок.ПолеСнизу=0;
ТабДок.РазмерКолонтитулаСверху=0;
ТабДок.РазмерКолонтитулаСнизу=0;
ТабДок.ВерхнийКолонтитул.Выводить=Ложь;
ТабДок.НижнийКолонтитул.Выводить=Ложь;
ТабДок.АвтоМасштаб=Истина;
КонецПроцедуры
что нибудь попроще? что бы к системе не обращаться?
Предложу свой вариант, который хоть и затрагивает систему, зато содержит минимум кода. При этом обеспечивает гибкость в настройках печати без дальнейшей модификации 1С.
А именно: установить в системе утилиту печати текстовых файлов на любом Win-принтере, лучшая из известных мне - бесплатная SPrint.
Тогда задача сводится к копированию распечатываемого файла в файл с именем, которое отслеживается этой утилитой.
Для этого в 1С достаточно всего одной команды КопироватьФайл(), даже не читая его. Ну, или можно прочитать и тут же записать прочитанный текст в файл с именем, заданным в настройках Sprint. А утилита его подхватит и распечатает.
через таб документ, как выше уже сказали, но чем париться с автоустановкой ширины и подобного, взять создать таб документ, в первой ячейке напечатать текст образец. сохранить. затем как угодно десериализовать полученный mxl (можно тупо прочитать его как текстовый документ), найти текст образец и зашаблонизировать его
Макет = ПолучитьМакет("Макет");
ТабДок = Новый ТабличныйДокумент;
Текст = Новый ЧтениеТекста(ИмяФайла);
Стр = Текст.ПрочитатьСтроку();
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТекста");
ОбластьМакета.Параметры.Заполнить(Новый Структура("ЗначениеСтроки", Стр));
ТабДок.Присоединить(ОбластьМакета);
Пока Стр <> Неопределено Цикл
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТекста");
ОбластьМакета.Параметры.Заполнить(Новый Структура("ЗначениеСтроки", Стр));
ТабДок.Присоединить(ОбластьМакета);
Стр = Текст.ПрочитатьСтроку();
КонецЦикла;
ТабДок.Показать();
Показать
Все хорошо, только что бы отображался текст правильно, нужен шрифт "Terminal 10"
В макете делаю Шрифт параметра Terminal 10 а Текст = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.OEM); выходит кракозябра, а на вывод ТабДок выводит нормально, на принтере и предварительном просмотре кракозябра, если КодировкаТекста.OEM убираю, то он шрифт меняет, и выводит на русском.
(19) Шрифт "Terminal" - это кодировка ANSI. А стандартные строки 1С - это UTF.
Для корректной печати шрифтом "Terminal" придется смириться с отображением в кракозяблах стандартными шрифтами.
С настройкой ширины колонки оказалось менее тривиально, чем я думал
&НаКлиенте
Процедура Команда1(Команда)
РаспечататьТекст("Однажды в студеную зимнюю пору, я из лесу вышел; был сильный мороз. Гляжу - поднимается медленно в году лошадка, везущая хворосту воз.
|И шествуя важно, в спокойствии чинном, лошадку ведет под узцы мужичок. В больших сапогах, в полушубке овчинном, в больших руковицах... А сам - с ноготок!",
Новый Шрифт("Verdana", 20, , Истина));
КонецПроцедуры
&НаКлиенте
Процедура РаспечататьТекст(Текст, Шрифт = Неопределено);
ТабДок = Новый ТабличныйДокумент;
ОбластьПечати = ТабДок.Область(1,1,1,1);
ОбластьПечати.Текст = Текст;
Если Шрифт <> Неопределено Тогда
ОбластьПечати.Шрифт = Шрифт;
КонецЕсли;
ОбластьПечати.ШиринаКолонки = (ТабДок.ШиринаСтраницы - 5) / 2; // эмперически под стандартный размер полей
ОбластьПечати.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ТабДок.Напечатать();
КонецПроцедуры
(22) А какое там ограничение? Хотя соглашусь, что войну и мир так вряд ли распечатаешь :)
ЗЫ. Ок. Думаю, спасет несложная модификация по ячейке на строку.
(23) вот точных данных не знаю, но уже сталкивался с тем, что в ячейке нельзя большой текст занести.
В акте нужно было подробно расписать выполненные работы. Был неприятно удивлен. И текста там было не так уж и много. Все на 1 лист укладывалось.
(29) По-идее, если будешь читать текст ANSI как UTF-8 а не как ANSI, тогда он прочитается в строку 1С без преобразований и тогда ты сможешь его корректно отобразить шрифтом Terminal, хотя в строке 1С он будет крокозяблами. Но зуб не дам :)