Имя: Пароль:
1C
 
Опять проверитьВывод(). Не верно определяет количество влезаемых областей
, , ,
0 Альбатрос
 
11.02.21
10:24
&НаСервере
Функция СформироватьРеестрНакладных(МассивОбъектов, ОбъектыПечати)
    
    ДатаПечати = "";
    Если МассивОбъектов.Количество()>1 тогда
        
        ДатаПечати = МассивОбъектов[1];
        
    КонецЕсли;

    ДокументыДляРеестра = МассивОбъектов[0];
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ПолеСлева = 5;
    ТабличныйДокумент.ПолеСправа = 5;
    ТабличныйДокумент.РазмерКолонтитулаСверху = 0;
    ТабличныйДокумент.РазмерКолонтитулаСнизу = 0;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    //ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеестрНакладных";

    
    НомерСтроки = 0;
    НомерСтраницы = 1;
    ОбщееКоличествоМест = 0;
    ОбщийВес = 0;
    СуммаВсехДокументов = 0;
    МассивВыводимыхОбластей = Новый Массив;
    
    //Вывод заголовка
    Макет = ПолучитьМакет("РеестрНакладных");
    Заголовок = Макет.ПолучитьОбласть("Заголовок");
    ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ТабличныйДокумент.Вывести(Заголовок);
    
    //Вывод шапки таблицы
    ШапкаТаблицы.Параметры.Заполнить(Новый Структура("НомерСтраницы", "Страница " + НомерСтраницы));
    ШапкаТаблицы.Параметры.ДатаПечати = ДатаПечати;
    ТабличныйДокумент.Вывести(ШапкаТаблицы);
    Если НЕ ТипЗнч(ДокументыДляРеестра) = Тип("Массив") тогда
        ДокументыДляРеестра.Сортировать("СчетФактура");
    КонецЕсли;
    Водитель = "";
    Для каждого СтрокаРеестра Из ДокументыДляРеестра Цикл
        
        //Если НЕ СтрокаРеестра.Печать Тогда
        //    Продолжить;
        //КонецЕсли;
        
        НомерСтроки = НомерСтроки + 1;
        ОбщееКоличествоМест = ОбщееКоличествоМест + СтрокаРеестра.КолВоМест;

        Водитель = СтрокаРеестра.Водитель;
        СчетФактураВыданный = СтрокаРеестра.СчетФактура;
        РеализацияТоваровУслуг = СчетФактураВыданный.ДокументОснование;
        МассивВес = ПолучитьВесПоДокументу(РеализацияТоваровУслуг);
        ТЗСвойств = УправлениеСвойствами.ПолучитьЗначенияСвойств(РеализацияТоваровУслуг, Истина, Ложь,МассивВес);
        
        Если ТЗСвойств.Количество() <> 0 Тогда
            Вес = ТЗСвойств[0].Значение;
        Иначе
            Вес = 0;
        КонецЕсли;
        ОбщийВес = ОбщийВес + Вес;
        СуммаДокумента = РеализацияТоваровУслуг.СуммаДокумента;
        ДоговорКонтрагента = РеализацияТоваровУслуг.Договор;
        
        НомерСчетаФактуры = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(СчетФактураВыданный.Номер, Ложь, Ложь);
        ДатаСчетаФактуры = Формат(СчетФактураВыданный.Дата, "ДФ=dd.MM.yyyy");
        
        НомерДоговора = СокрЛП(ДоговорКонтрагента.Номер);
        ДатаДоговора = Формат(ДоговорКонтрагента.Дата, "ДФ=dd.MM.yyyy");
        
        СтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
        СтрокаТаблицы.Параметры.НомерСтроки = НомерСтроки;
        СтрокаТаблицы.Параметры.Получатель = СтрокаРеестра.Партнер;
        СтрокаТаблицы.Параметры.СчетФактура = НомерСчетаФактуры + " от " + ДатаСчетаФактуры + "г.";
        СтрокаТаблицы.Параметры.ДоговорКонтрагента = НомерДоговора + ?(ПустаяСтрока(ДатаДоговора), "", Символы.ПС + "от " + ДатаДоговора + "г.");
        СтрокаТаблицы.Параметры.КоличествоМест = СтрокаРеестра.КолВоМест;
        СтрокаТаблицы.Параметры.Вес = Вес;
        
        РеализацияТоваровУслуг = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
        СтрокаТаблицы.Параметры.Сумма = СуммаДокумента;
        СуммаВсехДокументов = СуммаВсехДокументов + СуммаДокумента;
        
        МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(СтрокаТаблицы);
        
        Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            
            ШапкаТаблицы.Параметры.Заполнить(Новый Структура("НомерСтраницы", "Страница " + НомерСтраницы));
            ШапкаТаблицы.Параметры.ДатаПечати = ДатаПечати;
            ТабличныйДокумент.Вывести(ШапкаТаблицы);
            
        КонецЕсли;
        
        ТабличныйДокумент.Вывести(СтрокаТаблицы);
        
    КонецЦикла;
    
    Подвал = Макет.ПолучитьОбласть("Подвал");
    Подвал.Параметры.Итого = ОбщееКоличествоМест;
    Подвал.Параметры.ИтогоСумма = СуммаВсехДокументов;
    Подвал.Параметры.ИтогоВес = ОбщийВес;
    ТабличныйДокумент.Вывести(Подвал);
    
    Подписи = Макет.ПолучитьОбласть("Подписи");
    Сдал   = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ПараметрыСеанса.ТекущийПользователь.ФизическоеЛицо);
    Если ЗначениеЗаполнено(Водитель) тогда
         Принял = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(Водитель);
     Иначе
         Принял = "";
    КонецЕсли;

    Подписи.Параметры.СДал = Сдал;
    Подписи.Параметры.Принял = Принял;
    
    ТабличныйДокумент.Вывести(Подписи);    
    //ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева = ДатаПечати;
    //ТабличныйДокумент.ВерхнийКолонтитул.Выводить = Истина;

    Возврат ТабличныйДокумент;

КонецФункции


Проблема: годами работало нормально, с утра перестало верно определять количество влезаемыз строк на страницу, определяет больше, чем влезает на страницу. проблема у всех пользователей.
Что делал:
- кэш
- отключил КлючПараметровПечати.
- Пробовал разные принтеры.
- перезагрузил сервер печати.

Что еще попробовать
1 DrShad
 
11.02.21
10:38
по колесам стучал?
2 RomaH
 
naïve
11.02.21
10:39
есть такое -
попробуй через количество страниц - оно точнее работает
3 RomaH
 
naïve
11.02.21
10:40
единственное - количество страниц показывает только после вывести()

т.е. извращение то еще будет - но зато точно
4 DrShad
 
11.02.21
10:40
МассивВыводимыхОбластей.Очистить();
        МассивВыводимыхОбластей.Добавить(СтрокаТаблицы);
        
        Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда

в таком варианте оно точно работало? зачем очищается массив?
5 Альбатрос
 
11.02.21
10:42
(4) Строки таблицы выводятся в цикле, проверка проходит на каждую выводимую строку.
6 arsik
 
гуру
11.02.21
10:43
А не пробовал перед ИмяПринтера указать перед тем как проверитьВывод()?
7 RomaH
 
naïve
11.02.21
10:43
ну а если очень хочется через "ПроверитьВывод" - ищите другую версию платформы?
8 Альбатрос
 
11.02.21
10:44
(4) 100% работало до сегодняшнего утра
9 arsik
 
гуру
11.02.21
10:44
+(6) Ну и РазмерСтраницы указать
10 DrShad
 
11.02.21
10:46
(5) так оно так не работает, в массиве должны быть все области на странице
11 RomaH
 
naïve
11.02.21
10:50
(10) та ну?
12 DrShad
 
11.02.21
10:53
ТабличныйДокумент (SpreadsheetDocument)
ПроверитьВывод (CheckPut)
Синтаксис:
ПроверитьВывод(<Таблицы>)
Параметры:
<Таблицы> (обязательный)
Тип: Массив, ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:
Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:
Проверяет, умещаются ли переданные табличные документы на страницу при печати.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Следует учитывать, если для табличного документа установлены поля, размер которых меньше размера полей, установленных для принтера, на котором документ будет напечатан, то при печати содержимое некоторых строк может не уместиться на странице, даже если метод возвращает значение Истина.
Пример:
Т.Добавить(ШапкаДокумента);
Т.Добавить(СтрокаДокумента);
Т.Добавить(ПодвалДокумента);
Если Не ТабДок.ПроверитьВывод(Т) Тогда
    Сообщить("Документ не умещается на страницу!");
КонецЕсли;
13 d4rkmesa
 
11.02.21
10:55
(8) Это бред, скорее всего, это не работало ожидаемым образом.
14 Альбатрос
 
11.02.21
10:55
(10) Не, так тоже работает) Если я впихну все области в массив, то они ессесно никогда не влезут, там овер 600 строк
15 Альбатрос
 
11.02.21
10:56
(13) Что конкретно бред, я не пойму
16 DrShad
 
11.02.21
10:56
(14) так его очищать нужно не на каждой строке, а только когда начинается новая страница, не?
17 Альбатрос
 
11.02.21
10:58
(16) Не в этом случае.
18 DrShad
 
11.02.21
11:00
ну вангуй дальше тогда
19 Альбатрос
 
11.02.21
11:08
(6) (9) Не помогло
20 d4rkmesa
 
11.02.21
11:19
(15) Пардон, не разобрался сходу. Я бы вернул КлючПараметровПечати, но почистил настройки по этому ключу. Делали? И, макет нельзя переделать, чтобы работал при 100% масштабе без АвтоМасштаб = Истина?
21 1CnikPetya
 
11.02.21
11:24
(0) Там с параметрами печати есть траблы, насколько помню. Они слетают периодически у табличного документа. Попробуй устанавливать их перед выполнением ПроверитьВывод().
22 Альбатрос
 
11.02.21
11:39
(20) Так, а где они хранятся? В хранилище настроек?
23 Альбатрос
 
11.02.21
11:40
(21) Всмысле КлючПараметровПечати?
24 Альбатрос
 
11.02.21
13:35
Короче помогло старое традиционное средство - перезагрузи комп! Перезагрузили терминальный сервер и сервер 1с, глюк ушел. Пздц, полдня херней страдал...