Имя: Пароль:
1C
 
Внешняя печатная форма
,
0 buketovav
 
28.03.22
14:58
Всем доброго дня, Уважаемые Форумчане!

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

На скриншоте попытался обрисовать ситуацию. - https://prnt.sc/S-8Xg630f0am

Есть табличный документ, ОриентацияСтраницы.Ландшафт.
Таблица занимает примерно половину страницы слева, при выводе данных в табличный документ надо, чтобы система выводила строки в левой части до тех пор пока помещаются строки на странице, а если не помещается, то переходит на правую сторону этой же страницы таб дока и заполняет до тех пор пока помещаются строки в правую часть.
Когда не будет хватать места, то вставляем горизонтальный разделитель страниц и снова заполняем сначала левую часть и затем правую.
Ну а подписи вставляем с той стороны, где закончится вывод.

Прошу помощи и подсказки, как это возможно реализовать.

Заранее всем благодарен.
Хорошего всем дня!
1 vicof
 
28.03.22
15:01
Экономите бумагу?)
2 buketovav
 
28.03.22
15:01
да, и в конце печатной формы опечатка, ошибся с нумерацией строк
3 buketovav
 
28.03.22
15:02
(1) нет, так хочет пользователь
4 vicof
 
28.03.22
15:03
А если в правой части строки разъедутся и повлияют на левую, что будем делать?
5 Kassern
 
28.03.22
15:04
(0) высота строк фиксированная?
6 DGorgoN
 
28.03.22
15:04
Это конечно бред бредовый. Придётся сначала загнать в тз, потом тз разделить на страницы и только потом печатать.
Есть еще вариант 2 экземпляра на страницу при выводе на печать.
7 VladZ
 
28.03.22
15:04
(0) Если высота строк в таблице будет разной - есть вероятность "не попасть".
А если делать одинаковой - наименование будет обрезаться.

Общий смысл понятен, но идея так себе.
8 Kassern
 
28.03.22
15:06
(5) если фиксированная то просто проверяете на вывод, если не влазит, то присоединяете правый кусок с заранее известным фиксированным количеством строк. А после новый лист и горизонтальный разделитель. Как-то так наверное
9 Kassern
 
28.03.22
15:07
но имхо, лучше использовать портретную ориентацию и не парить мозг, не думаю, что так вы много сэкономите
10 buketovav
 
28.03.22
15:08
(5) высота строки зависит от наименования, бывает длинное, бывает короткое
11 Kassern
 
28.03.22
15:09
(10) и как вы собираетесь решать задачу, если слева будет короткое наименование, а справа будет длинное?
12 buketovav
 
28.03.22
15:09
это не надо решать (11)
13 Kassern
 
28.03.22
15:10
и в чем тогда будет экономия, если для короткой строчки вы сделаете большую высоту, так как справа будет длинная строчка?)
14 buketovav
 
28.03.22
15:10
(11) об этом пользователь уже знает, что будет не очень красиво
15 buketovav
 
28.03.22
15:10
(13) сложно ответить на этот вопрос... точнее сказать у меня нет ответа на него... просто сказали сделать так
16 vicof
 
28.03.22
15:11
(15) ты можешь передать этот вопрос пользователю)
17 buketovav
 
28.03.22
15:12
(16) хотят именно так и все...
18 unbred
 
28.03.22
15:14
в (8) решение.
сабж : задача из разряда "от нех** делать"
19 buketovav
 
28.03.22
15:15
Вы, конечно, помощники еще те)))) xDDDD
Если бы я хотел порассуждать о том, насколько нужная это задача, я бы так и написал.
Если есть идеи, то подскажите, пожалуйста.
20 Kassern
 
28.03.22
15:16
(15) (17) да не вопрос, попробуйте через А5 реализовать. Типа 2 ТД создаете и проверяете их на вывод, если не влазять то объединяете их в новый ТД. Возможно так сканает сделать с разной высотой колонок. Но это все извращения конечно же)
21 buketovav
 
28.03.22
15:16
(20) хм... спасибо, попробую
22 buketovav
 
28.03.22
15:16
еще есть идеи у кого-нибудь? )
23 Йохохо
 
28.03.22
15:25
(22) не объединять тд, печатать на а5, и попробовать заставить 1с запомнить 2 страницы на 1 лист через ключ параметров печати
выводить в файл шаблон либры
24 buketovav
 
28.03.22
15:30
(23) очень интересно, но ничего не понятно...
25 Йохохо
 
28.03.22
15:33
(23) 1. принтер сам умеет то что ты хоченшь, но запомнит ли это 1с в параметрах страницы
2. делаем файлик одф в либреофис с нужным перетеканием текста, заполняем как умеем
26 ptiz
 
28.03.22
15:39
(22) Печатать "по 2 страницы на лист" в настройках принтера.
27 ejikbeznojek
 
28.03.22
17:28
Может быть сначала проверять  вывод левой части у временного ТД
Который получается из присоединения самой к себе левой части.

Как перестало помешаться, начинать формировать правую часть, проверяя вывод после каждой строчки.
28 Tatitutu
 
28.03.22
17:43
Сделай проще

3 макета листа

1 - шапка и подписи - влезает 18 позиций
2 - одни позиции по 13 всего 26
3 - "закрывашка" с подписью - 20 позиций

Собрал ТЗ
и условиями разделил
как заполнить - шаблоны тоже не проблема
Номенклатура[х] Количество[х] и гоняй циклом
29 Kassern
 
28.03.22
18:00
(28) с плавающей высотой колонок из-за наименований так вряд ли получится
30 Вафель
 
28.03.22
18:15
проще всего перейти на портрет
31 buketovav
 
28.03.22
18:59
(27) такой вариант сейчас и реализую.. но есть проблема..
При выводе таб дока все красиво, а при предварительном просмотре некоторые страницы переползают на следующую
32 buketovav
 
28.03.22
19:34
может "Предварительный просмотр" зависит от принтера?
33 Мимохожий Однако
 
28.03.22
19:50
(32) да
34 rozer76
 
28.03.22
20:02
35 Сияющий Асинхраль
 
29.03.22
00:12
(0) Есть в восьмерке замечательная команда, 1С ее даже кое-где использует. Называется ПроверитьВывод() - она определяет помещается ли на страницу выводимые строки. Синтаксис такой:

ТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut)
Синтаксис:
ПроверитьВывод(<Таблицы>)
Параметры:
<Таблицы> (обязательный)
Тип: Массив, ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:
Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:
Проверяет, умещаются ли переданные табличные документы на страницу при печати.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Следует учитывать, если для табличного документа установлены поля, размер которых меньше размера полей, установленных для принтера, на котором документ будет напечатан, то при печати содержимое некоторых строк может не уместиться на странице, даже если метод возвращает значение Истина.
Пример:
Т.Добавить(ШапкаДокумента);
Т.Добавить(СтрокаДокумента);
Т.Добавить(ПодвалДокумента);
Если Не ТабДок.ПроверитьВывод(Т) Тогда
    Сообщить("Документ не умещается на страницу!");
КонецЕсли;
См. также:
ТабличныйДокумент, метод ПроверитьПрисоединение
Использование в версии:
Доступен, начиная с версии 8.0.
36 buketovav
 
29.03.22
09:40
(35) это я использую и если не умещается, то вставляю горизонтальный разделитель.
Дело не в этом. Дело в том, что в самом таб доке все номр, а при предварительном просмотре косяки
37 Kassern
 
29.03.22
10:05
(36) может отступы в настройках печати вам ТД косячат?
38 buketovav
 
29.03.22
10:12
(37)Подскажите, что такое отступы и где и как их проверить?
39 Kassern
 
29.03.22
10:14
(38)    ТабличныйДокумент.ПолеСлева,ПолеСправа и т.д. Так же при печати можно интерактивно настроить
40 buketovav
 
29.03.22
10:16
вот в предварительном просмотре что у меня получается...
https://prnt.sc/3ivWGzFXs3JM
https://prnt.sc/DiurGOl3yyKM
41 buketovav
 
29.03.22
10:17
(39) не, это не помогает, это уже и убирал и ставил другие значения. В моем случае не работает
42 Сияющий Асинхраль
 
29.03.22
11:03
(40) И в чем проблемы то? Я на скринах проблем не вижу...
43 Сияющий Асинхраль
 
29.03.22
11:07
И да, любая печать зависит от конкретного принтера. Даже если ты возьмешь один и тот же файл в ворде, но посмотришь его на разных компах с разными принтерами (может быть даже одна версия ворда), то практически сто процентов получишь разную разбивку по страницам, если текст достаточно длинный. Единственный способ получить совершенно одинаковую форму на разных компах - либо иметь совершенно одинаковую технику на обоих, либо иметь дело с файлами PDF, вот они даже на разной технике будут одинаковыми...
44 buketovav
 
29.03.22
11:12
(43) понял, спасибо