Как вставить разделитель страниц в макет 1с
Перейти к содержимому

Как вставить разделитель страниц в макет 1с

  • автор:

Настройка печати в 1С

Здравствуйте дорогие читатели блога 1С Программист.

Спонсор Поста: Прошивка принтеров, заправка картриджей, ремонт принтеров в Москве. Прошивка принтера Samsung ML-2950ND/2955ND. Перепрошивка принтера Samsung ML 3300, прошивка принтеров Xerox.

В работе 1С Программист часто имеет дело с созданием и редактированием печатных формам документов, и сегодня поговорим о создании печатных формы для документов и настройкой печати.

При построении печатной формы используются следующие объекты:
1) Макет – В нем содержатся различные области для формирования печатной формы.
2) Табличный документ – Необходим для вывода печатной формы на экран.

Построение печатной формы происходит в следующем порядке:
1) Получить макет (созданный для данного объекта или общий)
2) Получаем области макета (в областях макета содержится параметр или текст)
3) Создаем табличный документ (тот объект, куда будет происходить вывод).
4) Подставляем значения в параметры и выводим области в табличный документ.
5) Отображаем табличный документ на экране.

Создание Макетов и областей макетов затрагивать сейчас не будем, а сразу перейдем к типу данных “ТабличныйДокумент”, который необходим для вывода печатной формы созданной на основании макета.
“Макет” доступен только на сервере и толстом клиенте, поэтому для формирования печатной формы потребуется серверный вызов, Заполнение макета будем производить на сервере, а вывод на клиенте.

Пример создания простейшей печатной формы:

Существует множество методов и свойств класса ТабличныйДокумент, с помощью которых можно сразу же выводить табличный документ на печать, устанавливать настройки принтера, свойства страницы, многое другое.

Сейчас рассмотрим более подробней как документ будет выгладить в распечатанном виде, задавая установки параметров печати через свойства и методы объекта «Табличный документ».

Свойства Табличного Документа

Зададим для печати принтер, отличный от установленного по умолчанию.
Используем свойство Табличного документа «ИмяПринтера» которое позволяет задать имя принтера известного в системе, на который бедет выводится печать.

Установим количество копий печатуемого документа программно.

Установив признак разбора по копиям для документа.

Установим через свойство «РазмерСтраницы» которое позволяет задать стандартные форматы страницы – “A3”, “A4”, “A5” (полный список в справке 1С).

Если размер бумаги нестандартен (Custom – произвольный размер бумаги ) то укажем значения высоты и ширины страницы (в мм):

Зададим поля для страницы (по умолчанию поля 10мм).

Программно управляем вывводом колонтиттула и его содержимым в 1С через свойства «ВерхнийКолонтитул» и «НижнийКолонтитул».
Пример:

Еще пару свойств страницы:

Если свойство АвтоМасштаб имеет значение Ложь или еще не заданно то можно указать значение масштабирования в процентах (через свойство «МасштабПечати»).

Методы Табличного Документа

Отправим на печать табличный документ непосредственно на принтер.

Перед печатью будет выведен диалог печати.

Скрываем окно табличного документа.

Или открываем окно для показа и редактирования табличного документа.

Можно принудительно вставить разрывы страниц используя методы «ВывестиГоризонтальныйРазделительСтраниц()» и «ВывестиВертикальныйРазделительСтраниц()»

Более полный список по свойствам и методам Табличного Документа смотрите в справке 1С.

На платформе «1С:Предприятие 8.2» у свойств и методов идет четкое разделение по контексту исполнения. Если свойства доступны в любом контексте, то методы в основном недоступны на «Тонком» клиенте. Следовательно, оформляем документ на сервере, а отправку на печать производим в клиентской процедуре.

Чтобы понять, что написано в модуле формы необходимо разбираться в контексте модуля формы.

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

Пожалуйста, оставляйте комментарий мне важно ваше мнение.

Страницы табличного документа в 1С

В этой статье вы узнаете, по какому принципу осуществляется работа со страницами в табличном документе 1С 8.3. Будет показано, как определить помещается ли область (или области) в страницу, а также как принудительно осуществить разделение страниц.

Для демонстрации принципов работы страниц в табличном документе реализуем простой учебный пример: в табличном документе выведем строки со случайными числами и их текстовое представление, количество строк с числами, которые нужно вывести будем вводить в поле на управляемой форме обработки.

Управляемая форма обработки 1С

Создадим макет табличного документа с горизонтальными областями.

Макет табличного документа 1С

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

Этот код комментировать не будем, если у вас он вызывает затруднения, то ознакомьтесь с моими предыдущими статьями и видео-уроками.

Сейчас, когда мы выполним команду и выведем, например, 80 строк, то у нас все будет показано на одной странице, а при попытке распечатать (или выполнить предварительный просмотр) платформа самостоятельно разобьет табличный документ на страницы.

Страницы табличного документа 1С Страницы табличного документа 1С

Согласитесь, что такой вариант формирования печатной формы не лицеприятно выглядит.

Для более приятного формирования печатной формы, сделаем так, чтобы каждый раз в конце страницы выводился подвал таблицы, а в начале новой страницы (кроме первой) выводилась шапка таблицы. Для этого доработаем код в методе СформироватьТабличныйДокумент.

Поясним этот код.

Используя метод табличного документа ПроверитьВывод можно проверить, войдет ли вывод области или нескольких областей на страницу табличного документа. Этот метод возвращает Истина, если область вмещается на страницу, и ложь – если нет. Параметром этого метода может быть как область, так и массив областей.

В функции мы создали массив, который состоит из области строки и из области подавала таблицы.

В каждой итерации цикла, в котором осуществляется вывод строк табличного документа, при помощи метода ПроверитьВывод выполняется проверка: вмещается ли область строки и область подвала таблицы в страницу табличного документа.

Если области не вмещаются на страницу табличного документа, то выводится подвал таблицы, потом выводится горизонтальный разделитель таблицы, который, по сути, создает новую страницу таблицы, и осуществляется вывод шапки таблицы уже на новой странице.

В результате, вывод табличного документа осуществится в более удобном виде.

Страницы табличного документа 1С Страницы табличного документа 1С

Другие статьи про табличные документы в 1С:

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.png

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

СКД. Использование встроенного макета, разделителя страниц

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "///// echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1.
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once ‘connection.php’; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
<
///// echo ‘<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>’;
$failure=TRUE;
wp_die( $wpdb2->error );
>

$m_size_file=0;
$m_mtime_file=0;
$m_comment=»;
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.’/_1c_alfa_exchange/AA_hist.csv’;
if (!file_exists($file_hist))
<
///// echo ‘<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>’;
$m_comment=’Файл обмена с сервисными книжками не существует’;
$failure=TRUE;
>

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure) <
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’]
///// echo ‘<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>’;
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>$m_mtime_file,’last_size_upload’=>$m_size_file,’comment’=>$m_comment));
wp_die();
///// echo ‘<H2><b>Возврат в начало.</b></H2><br>’;
return $failure;
>
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

///// echo ‘<H2><b>Размер файла: ‘.$m_size_file.'</b></H2><br>’;
///// echo ‘<H2><b>Штамп времени файла: ‘.$m_mtime_file.'</b></H2><br>’;
///// echo ‘<H2><b>Формирование запроса на выборку из лога</b></H2><br>’;
////препарируем запрос
$text_zaprosa=$wpdb2->prepare(«SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s», $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
< foreach ( $results as $r)
<
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>$m_mtime_file,’last_size_upload’=>$m_size_file,’comment’=>’Загрузка отменена, новых данных нет, т.к. найдена запись в логе.’));
wp_die();
return $failure;
>
>
>
////если данные новые, пишем в лог запись о начале загрузки
/////echo ‘<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>’;
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>0, ‘last_size_upload’=>$m_size_file, ‘comment’=>’Начало загрузки’));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare(«TRUNCATE TABLE %s», ‘vin_history’);
$clear_tbl_zap_repl=str_replace(«‘»,»`»,$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo ‘<H2><b>Очистка таблицы сервисных книжек</b></H2><br>’;
if (empty($results))
<
///// echo ‘<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>’;
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
>

////загружаем данные
$table=’vin_history’; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=’;’; // Разделитель полей в CSV файле
$enclosed='»‘; // Кавычки для содержимого полей
$escaped=’\

Как в печатной форме выводить номер страницы

Если требуется вывести это в самом начале или конце, то самый простой способ использовать колонтитулы.

Колонтитулы

Это автоматически отображаемый в документе текст.

Можно управлять его шрифтом или вертикальным/горизонтальным положением текста в «ячейках» (6 зон)

Для текста существует список доступных «макропеременных»:

  • [&НомерСтраницы] ([&PageNumber]) — отобразить номер листа;
  • [&СтраницВсего] ([&PagesTotal]) — отобразить общее количество;
  • [&Дата] ([&Date]) — отобразить текущий дату ;
  • [&Время] ([&Time]) — отобразить текущее время (момент печати)

Код для вывода колонтитула

Если необходимо вывести счетчик листов внизу/справа, код будет таким:

ТабДок . НижнийКолонтитул . ТекстСправа = «Лист [&НомерСтраницы] из [&СтраницВсего]» ;
ТабДок . НижнийКолонтитул . Выводить = Истина ;
ТабДок . НижнийКолонтитул . НачальнаяСтраница = 1 ;

Важно располагать данный код после установки имени настроек печати.

Аналогично делается для верхнего колонтитула и других частей.

В режиме «Предприятие» также можно задать/убрать колонтитул в меню «Таблица\Настройки печати\Колонтитулы..» , если документ в режиме правки (меню «Таблица\Вид\Редактирование»)

Области макета

Когда же требуется вывести в середине табличного документа, например в шапке таблицы, или более сложное отображение, тогда следует использовать области.

Считать листы в таком варианте придется самостоятельно.

Для вывода нам потребуется использовать функцию

Массив из проверяемых таблиц или табличный документ.

  • Перед выводом очередной секции создается/очищается переменная массива.
  • В нее добавляется эта секция, а также секция колонтитула
  • Проверяется вывод
  • Если успешно: просто выводится секция, иначе выводится колонтитул
  • Выводится горизонтальный разделитель страницы
  • При выводе колонтитула увеличивается счетчик страниц, и сразу заполняется в секцию колонтитула

В данном случае есть риск, что не получится вывести сам колонтитул: он должен быть не большим, чтобы снизить эту вероятность, либо потребуется усложнить алгоритм, перед выводом секции проверять получится ли вывести сам колонтитул.

В случае например Торг-12, где номер страницы выводится в шапке, требуется только проверять получится ли вывести очередную строку, если нет . то просто выводится горизонтальный разделитель и «итерируется» счетчик страницы.

Реклама — узаконенная ложь.

— Герберт Уэллс

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *