Имя: Пароль:
1C
 
Торг12. Итоги на каждой странице, при изменении размера строк.
,
0 toran1
 
16.05.16
09:27
Доброго.
Платформа 8,2, толстый клиент, УПП1,3.
Есть док, расходная накладная. К нему внешняя печатная форма.
Пока наименование товара влезает в одну строку все хорошо, в коде есть необходимый блок подсчета строк и вывода красиво.
Но если, название товара не помещается в одну строку, то становится весело.
Шапка на одной странице, итог на другой. Потом вторая страница. И так далее.
В общем как с этим бороться?
1 NikVars
 
16.05.16
09:29
(0)Вычислять высоту строк.
2 toran1
 
16.05.16
09:33
(1) Логично. Тогда как? Свойства ячейки - установлено переносить.
3 NikVars
 
16.05.16
09:39
4 NorthWind
 
16.05.16
09:57
(0) я бы предусмотрел место исходя из максимально возможного количества строк, скажем 2 или 3 строки. И фиксированное количество таких строк на странице. Если есть желание поизвращаться, то можно корректировать количество строк, исходя из количества символов в наименовании. Допустим, поэкспериментировать и определить для себя, что если в строке 50 символов, то наименование влезет в строку, больше 50 - не влезет. Понятно, что для строк '11111' и 'ЖЖЖЖЖ' будут разные результаты по длине написания, но с учетом того что в текстах экстремальные варианты не встречаются - нечто среднее вывести можно.
5 NikVars
 
16.05.16
10:01
А если использовать моноширинный шрифт?!
6 Масянька
 
16.05.16
10:04
(0) Для семерки делала:
1. количество символов в строке (сколько помещается).
2. наименование номенклатуры разбивается по п. 1 (тупо разбивается, переносится на след. строку).
3. подсчет срок по п. 1 и 2.
4. вывод строк в соответствии с п. 3 (кол-во строк на странице (первой, след. и последней (с подписями и печатью)) - подбираешь и задаешь).
7 NikVars
 
16.05.16
10:07
(6) Вот видишь, для 7.7 - вообще проблемы нет. А в восьмерке ...
:))
8 Масянька
 
16.05.16
10:11
(7) Есть проблемы. И там, и там.
Просто мои на снеговика забили - печатает и хорошо. Глюков и так хватает.
9 rozer76
 
16.05.16
10:28
(0) используй "ПроверитьВывод"
10 aleks_default
 
16.05.16
11:06
(9) +1 в любую типовую заглянте уж наконец
11 Злопчинский
 
16.05.16
11:11
(8) в клюшках просто тупо делаешь вывод в черновик - если количество страниц не изменилось - выводишь строку в чистовик...
я у себя все печформы переделал по счф так. все работает.
12 toran1
 
16.05.16
16:04
Нарыл по вашим наводкам.
http://pro1c.org.ua/index.php?showtopic=171
Для некоторых отчетов необходимо, чтобы в конце страницы содержалась некоторая область, которая бы сообщала информацию о содержимом страницы. Это может быть, например, информация о сумме по странице, количестве строк на странице и т.п. Во встроенном языке 1С:Предприятия предусмотрены специальные средства для разбиения табличного документа на страницы. В данном разделе рассказывается, каким образом можно организовать постраничный вывод при выводе информации в табличный документ.

Метод табличного документа ПроверитьВывод()

Объект ТабличныйДокумент имеет метод ПроверитьВывод(), предназначенный для того, чтобы проверить, поместится ли список областей на текущую страницу. В случае если метод вернет значение Истина, вывод областей, переданных в метод, не приведет к созданию новой страницы, иначе, для того, чтобы вывести области, в табличном документе будет создана новая страница. Данный метод работает с учетом настроек печати документа, у которого вызывается метод.

Рассмотрим пример. Пусть нам необходимо создать отчет "Платежная ведомость". Требуется, чтобы на первой странице был заголовок, отображающий информацию о ведомости в целом, на остальных страницах - заголовок, содержащий только шапку таблицы ведомости. В подвалах страницы необходимо иметь информацию о сумме по странице. В подвале последней страницы необходимо иметь итоговую информацию по всей ведомости.

Для того чтобы реализовать подобный отчет нам потребуется использовать метод ПроверитьВывод(). Пример алгоритма отчета будет выглядеть так:

1. выводим в результирующий табличный документ область - заголовок первой страницы;
2. для каждой строки из ведомости:

2.1. проверяем, вмещается ли на текущую страницу область со строкой ведомости и область итога по странице;
2.2. если области помещаются на странице - выводим строку области;
2.3. иначе - выводим подвал страницы, выводим горизонтальный разделитель страницы, выводим шапку страницы, выводим строку ведомости;
3. выводим подвал отчета.

Ниже приведен пример того, как подобный алгоритм может быть реализован на встроенном языке 1С:Предприятия 8:




СтрокаСПодвалом = Новый Массив; // создадим массив для проверки вывода
СтрокаСПодвалом.Добавить(ОбластьДетальныхЗаписей);
СтрокаСПодвалом.Добавить(ПодвалСтраницы);

ИтогПоСтранице = 0;

ТабДок.Вывести(ОбластьЗаголовок); // выведем заголовок отчета
ТабДок.Вывести(ОбластьШапкаТаблицы); // выведем шапку страницы

Пока ВыборкаДетали.Следующий() Цикл // по всем строкам, которые необходимо вывести

    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); // заполним параметры области табличного докуента

    Если Не ТабДок.ПроверитьВывод(СтрокаСПодвалом) Тогда

        // Строка с итогом не вмещается.
        ПодвалСтраницы.Параметры.Сумма = ИтогПоСтранице; // установим итог по странице
        ТабДок.Вывести(ПодвалСтраницы); // выведем итог по странице
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); // начнем новую страницу
        ТабДок.Вывести(ОбластьШапкаТаблицы); // выведем шапку страницы
        ИтогПоСтранице = 0; // сбросим текущую сумму по странице

    КонецЕсли;

    ТабДок.Вывести(ОбластьДетальныхЗаписей); // выведем очередную строку

    ИтогПоСтранице = ИтогПоСтранице + ВыборкаДетали.Сумма; // увеличим итог по странице

КонецЦикла;

ПодвалСтраницы.Параметры.Сумма = ИтогПоСтранице; // установим итог по странице
ТабДок.Вывести(ПодвалСтраницы); // выведем итог по странице

ТабДок.Вывести(ОбластьПодвал); // выведем подвал отчета


Метод табличного документа ПроверитьПрисоединение()

Метод табличного документа ПроверитьПрисоединение() работает аналогично методу ПроверитьВывод(), с тем отличием, что данный метод проверяет, изменится ли количество страниц по горизонтали при выводе в отчет областей при помощи метода Присоединить().
13 Изучаю1С8
 
16.05.16
16:16
(11) В какой черновик?
14 Масянька
 
16.05.16
16:40
(11) На фига мне "тупо выводить в черновик"? А сразу посчитать и вывести, как надо - не кошерно? :)
15 Злопчинский
 
16.05.16
17:41
(14) объясняю для...
сразу посчитать и вывести - в общем случае не получится или будет офигеть как сложно (для разных размеров шрифтов например).
а вывод в черновик - это по сути и есть восьмерочная "ПроверитьВывод"
16 Злопчинский
 
16.05.16
17:41
.. и реализуется небольшим количеством строк
17 Злопчинский
 
16.05.16
17:41
...кода и работает универсально
18 Смотрящий
 
16.05.16
17:44
(16) Покаж
19 Масянька
 
16.05.16
17:53
(15) Не надо объяснять для ...
Я тебе объясню:
- разные шрифты: в накладных, актах, сф и пр. - на фига? У меня (как в типовых - один шрифт, разный размер, обычный + жирный + курсив).
- параметры листа (кол-во строк шапки, заголовка таблицы, подвала) - для каждого макета (накладная, сф и пр.) задаются в обработке.
- один раз для каждого макета считается кол-во символов в строке (номенклатуры). Задается там, где задаются параметры.
- при выводе строки: строка разбивается (параметры уже заданы), считается кол-во строк (выведенных ранее + сколько сейчас хотим вывести), обрабатывается - продолжаем вывод или новую страницу делаем.
Все.
А твой "черновик" может и проще (не спорю), но ни чем не лучше.
20 Злопчинский
 
16.05.16
18:14
Я тебе объясню*2:
- в _общем случае_ шрифты в разных документах (а их может быть множество всяких) - совершенно разные;
- "параметры листа (кол-во строк шапки, заголовка таблицы, подвала) - для каждого макета (накладная, сф и пр.) задаются в обработке" - ты не поверишь, но например ТОРГ12 можно печатать и портрет и ландшафт. и даже на разных форматов листов. затрахаешься считать и описывать..
- см. п.1
- я при выводе нихрена ни считаю: плюнул на вывод - получил ответ "влезло на страницу/не влезло".
.
мой черновик "лучше" тем, что он - универсален и не требует подготовительных действий, связанных с какими-то расчетами. То есть в принципе можно оформить "универсально"
.
но вообщем, как ты написала - каждый сам выбирает как делать - можно гланды у отоларинголога вырезать, а можно и проктолога пригласить...
21 Aleksey
 
16.05.16
18:53
(19) ну к примеру покупатель может быть на одной строке, а может и в 3 строки не влезть

Товар аналогично, количество строк от 1 до 3. Предлагаешь лишнее обрезать, или сразу делать макет с ячейками под 4 строки, чтобы наверняка?

(20) Не совсем понял как ты определяешь влезло/невлезло?

P.S. ПроверитьВывод в 8-ке кстати тоже не панацея, иногда ошибается
22 Злопчинский
 
16.05.16
20:49
(21) блин ну все же просто мозги напрягите - вывести документ, "посмотреть" - влезло или нет. не влезло - сделать новую страницу, потворить "процедуру"
23 Aleksey
 
16.05.16
21:01
Посмотреть это кто? Человек или машина?
24 Злопчинский
 
16.05.16
21:20
Если ТабЧерновик.КоличествоСтраниц() > ПроверяемоеКоличество Тогда
  Таб.НоваяСтраница();
25 Aleksey
 
16.05.16
23:55
(24) хм, спасибо, что то этот метод как то мимо меня прошел
26 Злопчинский
 
17.05.16
00:00
(25) он медленный.
и для правильной работы еще надо правильно макет определить - поиграться выводом строк-секций "вместе со следующим".
.
если будешь себя хорошо вести - дам живой пример (счф например)
27 Джордж1
 
17.05.16
00:03
(0)перейти на УПД?
28 Масянька
 
17.05.16
08:10
(20) Чтобы ты признал, что ты сделал не "универсально"...

Можно и в Москву через Владик прокатиться. А можно и левой рукой левое ухо почесать через затылок.

Разные шрифты и форматы - это тебе не бантики, а документы. Кстати, и ТОРГ-12 сф унифицированные формы (да, ТОРГ-12 уже исключили, но память осталась).

И, наверное, "черновик" открывается и закрывается?

(21) Аналогично номенклатуре. Не трудно посчитать, сколько строк займет покупатель, продавец и пр. в шапке.

(26) Это - универсально? :)))
29 73с
 
17.05.16
08:32
(28) "Не трудно посчитать, сколько строк займет покупатель, продавец и пр. в шапке. "
Ну не сказал бы, что нетрудно, заранее знать сколько займёт например покупатель - проблематично.
А главное - зачем считать, когда программа посчитает все сама ?

Кстати, предложенный метод через черновик реализован в типовой бюджетной 7ке
30 toran1
 
17.05.16
10:06
(27) Контрагенты не хотят УПД.
31 NikVars
 
18.05.16
09:34
(30) Тогда допил отчета. Это интересная задача: простая, но с нюансами.