Имя: Пароль:
1C
 
Бесконечный цикл метода табличного документа ПроверитьВывод() в клиент-серверном режиме
, , ,
0 Svetlana_Kazan
 
21.03.24
11:39
Вдруг кто-то встречался с данной проблемой: В наличии стенд - платформа 1С:Предприятие 8.3 (8.3.13.1751)(s), клиент-серверный режим, в качестве сервера баз данных используется PostgreSQL, ОС «Astra Linux Special Edition» версии 1.6. При формировании табличного документа используется метод ПроверитьВывод(). В результате - бесконечный цикл. Клиентское приложение стоит на одном виртуальном сервере, сервер 1с:Предприятия на другом виртуальном сервере. Принтер установлен и на клиенте и на сервере. Но как будто сервер 1с:предприятия не видит(не может считать параметры страницы) принтера и от этого добавляет бесконечное количество строк после проверки вывода. Принтер установлен и доступ к нему для пользователей с любой мандатной меткой. Естественно на файловой базе подобной проблемы нет.
1 Волшебник
 
21.03.24
11:48
Ну показывайте Ваш бесконечный цикл...
2 Garykom
 
гуру
21.03.24
11:52
Надеюсь КлючПараметровПечати (или устаревшее ИмяПараметровПечати) в конце ставите, уже после цикла?
3 Garykom
 
гуру
21.03.24
11:53
Проблема старая linux и ПроверитьВывод()
Как минимум надо на сервере установленный CUPS и принтер по умолчанию, с правильным форматом бумаги
4 DJ Anthon
 
21.03.24
12:00
У меня никогда проверить вывод не работал (особенно с сетевыми принтерами), то наврет, то зависнет. Поэтому я формировал два табдока, в один добавлял строку, если количество страниц увеличивалось, то во втором добавлял разделитель и его выводил. Но это давно было. Неужели ничего не изменилось с тех пор? )
5 Волшебник
 
21.03.24
12:24
(4) 👍 Интересное решение
6 Garykom
 
гуру
21.03.24
12:31
(4) Не уверен что прокатит
КоличествоСтраниц() так же серверный метод и должен по идее работать как и ПроверитьВывод()
А надо решение для клиента фактически
Имхо неправильно использовал ПроверитьВывод() вот и были проблемы
7 Svetlana_Kazan
 
21.03.24
13:15
(1) ,
ТабДок.Вывести(ОбластьШапка);
Пока ТабДок.ПроверитьВывод(ОбластьСтроки) Цикл
ТабДок.Вывести(ОбластьСтроки);
КонецЦикла;
8 Garykom
 
гуру
21.03.24
13:20
(7) А перед этим параметры страницы установлены?
Какой формат бумаги, ориентация и т.д.
9 Злопчинский
 
21.03.24
13:24
(5) этому решению тыщу лет в обед. еще на клюшках так делалось.
10 Svetlana_Kazan
 
21.03.24
13:42
(8),
ТабДок = Новый ТабличныйДокумент;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.РазмерСтраницы = "A4";
11 Волшебник
 
21.03.24
20:47
(7) Может в источнике бумаги принтера выбран лоток с бесконечной лентой? Добавьте разумное число-ограничитель

МаксимумСтрокНаСтраницу = 30;
ТабДок.Вывести(ОбластьШапка);

ВыведеноСтрок = 0;
Пока Выборка.Следующий() Цикл
   Если НЕ ТабДок.ПроверитьВывод(ОбластьСтроки) ИЛИ ВыведеноСтрок >= МаксимумСтрокНаСтраницу Тогда
      ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      ВыыведеноСтрок = 0;
   КонецЕсли;
   ТабДок.Вывести(ОбластьСтроки);
   ВыведеноСтрок = ВыведеноСтрок + 1;
КонецЦикла; // по данным
12 Garykom
 
гуру
21.03.24
13:48
(10) Прекрасно, главное (2) сразу после не делать
Сначала цикл с ПроверитьВывод() и уже затем можно
13 Garykom
 
гуру
21.03.24
13:54
(10) Еще ЭкземпляровНаСтранице = 1 установить и ИмяПринтера
Для проверки можно РазмерСтраницы = "Custom" с заданием ВысотаСтраницы/ШиринаСтраницы

Ну и не забыть про АвтоМасштаб - если начать выводить сильно широко то строк может стать дофига
14 Svetlana_Kazan
 
21.03.24
14:48
(11) , решение получается с ПроверитьВывод() вообще не связано. Отрабатывает ВыведеноСтрок >= МаксимумСтрокНаСтраницу. Просто подсчет строк не подходит, так как имеется перенос строк и точно не подсчитать количество выводимых строк.
15 Svetlana_Kazan
 
21.03.24
14:49
(13) , не помогло.
16 Волшебник
 
21.03.24
14:49
(14) по крайней мере нет бесконечного цикла, программа работает
17 Svetlana_Kazan
 
21.03.24
14:50
(16) , но моя задача не решается. Так как если есть перенос, то строки все равно переносятся на следующую страницу.
18 Волшебник
 
21.03.24
14:52
(17) Уменьшите МаксимумСтрокНаСтраницу, чтобы снять срочность по задаче. Затем примените пункт (4). Параллельно пытайте ПроверитьВывод()
19 Garykom
 
гуру
21.03.24
15:01
Может начать с "8.3.13.1751" ?
20 Svetlana_Kazan
 
21.03.24
15:08
(19) , Вы считаете, что проблема именно в платформе может быть?
21 Волшебник
 
21.03.24
15:17
(19) там спецрелиз, защищённый, для хранения гос.тайны
22 Волшебник
 
21.03.24
20:48
(14) переменная ВыведеноСтрок содержит истинное количество выведенных строк с данными, а не занятое количество строк печатной формы.