|
|
|
ПроверитьВывод - что не так? | ☑ | ||
|---|---|---|---|---|
|
0
RomaH
naïve
31.01.12
✎
11:02
|
суть - надо вывести "ОтрывнойТалон" в низу страницы три раза при таком алгоритме у меня получается вывод на 2 страницы - одна строка из отрывного талона переносится почему так может быть? |
|||
|
1
asady
31.01.12
✎
11:05
|
(0) проверку перенеси в конец цикла
Пока ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Цикл Если ВыводимыеОбласти.Количество() < 3 Тогда ВыводимыеОбласти.Добавить(ОтрывнойТалон); |
|||
|
2
RomaH
naïve
31.01.12
✎
11:09
|
(1) зачем?
я просто на одну строку потом меньше вывожу |
|||
|
3
Reset
31.01.12
✎
11:10
|
Попробуй в первом цикле вместо
ВыводимыеОбласти.Добавить(ПустаяСтрока); использовать Вставить(0,ПустаяСтрока); |
|||
|
4
Reset
31.01.12
✎
11:11
|
Это метод тыка, но вдруг
|
|||
|
5
RomaH
naïve
31.01.12
✎
11:13
|
(3) не помогло
как бы на две страницы выводит не всегда - зависит от высоты исходного документа - ТабличныйДокумент при этом чем меньше высота ПустойСтроки, тем чаще выдает в итоге 2 страницы |
|||
|
6
dmpl
31.01.12
✎
11:14
|
(0) Все настройки печати (в т.ч. и выбор принтера) надо сделать до ПроверитьВывод().
|
|||
|
7
RomaH
naïve
31.01.12
✎
11:15
|
(6)
ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АмбулаторныйТалонПерваяСтраница1616613235"; в самом начале функции |
|||
|
8
Reset
31.01.12
✎
11:16
|
Хз :( По логике должно работать все.
А в третьем цикле, если каждый раз проверять(для отладки) на ПроверитьВывод, на третьей итерации даст ложь? |
|||
|
9
RomaH
naïve
31.01.12
✎
11:19
|
(8) странно - но нет - все в истине
Для Ш = 1 По Мин(3,ВыводимыеОбласти.Количество()-1) Цикл ВыводимыеОбласти = Новый Массив; ВыводимыеОбласти.Добавить(ОтрывнойТалон); Если Не ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда Сообщить("Нет"); КонецЕсли; ТабличныйДокумент.Вывести(ОтрывнойТалон); КонецЦикла; УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект); Возврат ТабличныйДокумент; |
|||
|
10
Reset
31.01.12
✎
11:23
|
ВыводимыеОбласти = Новый Массив;
Пока Истина Цикл Если Не ПроверитьВывод(ВыводимыеОбласти) тогда Прервать; КонецЕсли; Если ВыводимыеОбласти.Количество() < 3 Тогда ВыводимыеОбласти.Вставить(0,ОтрывнойТалон); Иначе ВыводимыеОбласти.Вставить(0,ПустаяСтрока); КонецЕсли; КонецЦикла; ВыводимыеОбласти.Удалить(0); ТабличныйДокумент.Вывести(ОтрывнойТалон); |
|||
|
11
Reset
31.01.12
✎
11:23
|
Хотя, раз (9), то гда и (10) не сработает.
Получается, что ПроверитьВывод дезинформиреует |
|||
|
12
Reset
31.01.12
✎
11:27
|
(10) Вместо "ТабличныйДокумент.Вывести(ОтрывнойТалон);", конечно же, цикл по Массиву ВыводимыеОбласти
|
|||
|
13
Reset
31.01.12
✎
11:29
|
вместо
ВыводимыеОбласти.Удалить(0); ТабличныйДокумент.Вывести(ОтрывнойТалон); ----> Для ш=1 по ВыводимыеОбласти.Количество()-1 цикл ТабличныйДокумент.Вывести(ВыводимыеОбласти[ш]); КонецЦикла; |
|||
|
14
Reset
31.01.12
✎
11:30
|
Хотя здесь скорее поможет какая-нибудь банальная переустановка драйвера принтера
|
|||
|
15
dmpl
31.01.12
✎
11:38
|
(7) Ну а потом они не меняются? Отступы там, колонтитулы...
|
|||
|
16
Reset
31.01.12
✎
11:43
|
(9) А "УправлениеПечатью.ЗадатьОбластьПечатиДокумента(" что делает? Может она что-то изменить? Потому что если меняет, то это же происходит _после_ проверки на вывод
|
|||
|
17
RomaH
naïve
31.01.12
✎
11:45
|
Процедура ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка) Экспорт
Элемент = ОбъектыПечати.НайтиПоЗначению(Ссылка); Если Элемент = Неопределено Тогда ИмяОбласти = "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ="); ОбъектыПечати.Добавить(Ссылка, ИмяОбласти); Иначе ИмяОбласти = Элемент.Представление; КонецЕсли; НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы; ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти; КонецПроцедуры |
|||
|
18
Reset
31.01.12
✎
11:57
|
(9)
Для Ш = 1 По Мин(3,ВыводимыеОбласти.Количество()-1) Цикл Если Не ТабличныйДокумент.ПроверитьВывод(ОтрывнойТалон) Тогда Сообщить("Нет"); КонецЕсли; // ТабличныйДокумент.КоличествоСтраниц() ? ТабличныйДокумент.Вывести(ОтрывнойТалон); // ТабличныйДокумент.КоличествоСтраниц() ? КонецЦикла; // ТабличныйДокумент.КоличествоСтраниц() ? УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект); // ТабличныйДокумент.КоличествоСтраниц() ? Возврат ТабличныйДокумент; // После возврата, в вызывающих процедурах, тоже отследить. Если все правильно, количество страниц должно быть 1. Иначе можно получить, на каком шаге происходит перенос строки на 2-ю. |
|||
|
19
Шапокляк
31.01.12
✎
12:03
|
(0)
Пока ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Цикл Если ВыводимыеОбласти.Количество() < 3 Тогда ВыводимыеОбласти.Добавить(ОтрывнойТалон); Иначе ВыводимыеОбласти.Добавить(ПустаяСтрока); КонецЕсли; КонецЦикла; После второго добавления отрывного талона ПроверитьВывод дает Истина. Цикл запускается в третий раз, добавляет еще один талон, который уже не помещается на странице. |
|||
|
20
Reset
31.01.12
✎
12:06
|
(19) Мин(3,ВыводимыеОбласти.Количество()-1) в этом случае вернет 2.
С этим все верно тут |
|||
|
21
Шапокляк
31.01.12
✎
12:12
|
(20) Согласна. Тогда так: 3 раза талон влез, на четвертом исполнении цикла добавили ПустуюСтроку, которая уже не влезет. Далее цикл от 4 до 4 (один раз) печатаем пустую строку. Потом от 1 до 3 раз печатаем талон, и уже последняя строка третьего талона не помещается.
|
|||
|
22
Reset
31.01.12
✎
12:14
|
(21) ==> Далее цикл от 4 до 3 (ноль раз) :)
|
|||
|
23
Шапокляк
31.01.12
✎
12:16
|
(22) В массиве есть 3 элемента, соответствующие талонам. Проверить вывод дает Истина и ПОСЛЕ этого добавляется пустаяСтрока. Вопрос знатокам: сколько элементов в массиве?
|
|||
|
24
Reset
31.01.12
✎
12:17
|
(23) После того, как добавили пустую строку? 4 :)
|
|||
|
25
Шапокляк
31.01.12
✎
12:18
|
Сдаюсь :)
|
|||
|
26
Reset
31.01.12
✎
12:24
|
Исходя из (5), ПроверитьВывод дает неточный или неверный ответ.
Я бы сначала проверил "непрограммные" моменты, типа а на тот ли принтер печатется, по которому формируется? Попробовал бы печатать на разные принтеры, сделал бы (14) и прочие характерные движения (выйти/зайти, протереть монитор :) Если бы ничего не помогло, приступил бы к маниакальному, через отладчик, поиску "плохой" строки (типа как в (18)) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |