Имя: Пароль:
1C
1С v8
ПроверитьВывод - что не так?
0 RomaH
 
naïve
31.01.12
11:02

   ВыводимыеОбласти = Новый Массив;
   
   Пока ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Цикл
       
       Если ВыводимыеОбласти.Количество() < 3 Тогда
           ВыводимыеОбласти.Добавить(ОтрывнойТалон);
       Иначе
           ВыводимыеОбласти.Добавить(ПустаяСтрока);
       КонецЕсли;
       
   КонецЦикла;
   
   Для Ш = 4 По ВыводимыеОбласти.Количество()-1 Цикл
       ТабличныйДокумент.Вывести(ПустаяСтрока);
   КонецЦикла;
   
   Для Ш = 1 По Мин(3,ВыводимыеОбласти.Количество()-1) Цикл
       ТабличныйДокумент.Вывести(ОтрывнойТалон);
   КонецЦикла;
   



суть - надо вывести "ОтрывнойТалон" в низу страницы три раза
при таком алгоритме у меня получается вывод на 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))