1с ошибка при вызове метода контекста проверитьвывод

Обновлено: 03.07.2024

(44) Сейчас отлаживаю эту процедуру, по нажатию кнопке. Ошибки в ней.

Вот. Все работает. Но иногда идет эта ошибка и все, на таких же данны!

вангую, есть попытка в функции РазложитьСтрокуВМассивПодстрок()

(48) я так и останавливаюсь на строке 2000 с лишним

(51)(52) Да можно многого добавить, но я же смотрю в отладчике, в функцию передаются верные данные, а идет ошибка.

Добавлю конечно проверки.

а ну и тестирование исправление, кэш и прочая фигня
(54) Даже для пустой базы? Я туда ни разу ещё не загрузил эти элементы номенклатуры.
(55) не знаю. у меня правило, если происходит неведомая херня, нужно сначала делать это, а потом только лезть за бубном
(57) ну тогда вперед к админам за снастью если своей нет и вызывать помощника.
Кэш почищу сейчас догрузится.
Стоит галка останавливаться по ошибке.
Ошибка видимо возникает при записи элемента.
Я смотрю что там в нем, вижу проблему в единицах измерения и родителе.
Но из за чего не пойму.
(61) платформенная проверка какая то.
Сделай обменДанными.загрузка = истина.
Потом глазами увидишь
Стоит галка при отладке останавливаться по ошибке. Вот на ней и вылетает.
У тебя ошибка не в найти по наименованию, а некорректная обработка исключения ранее
Или ошибка заполнения обязательных на уровне платформы полей: наименование, владелец (если справочник подчинённый) и тд
(71) У меня же нет попытки исключения?
Да ранее я вижу что в родителе и единицах измерения.
Но туда идут нормальные данные. Буду разбираться.
Видимо энергия ушла.
(72) Единицу измерения обязательно заполнять, выдавать ошибку стоит.
(74) технически это отказ=истина в процедуре ПроверкаЗаполнения, но не исключение

сейчас вот с этим буду бороться что это пока не знаю

(79) наверно в поле группа фигачишь элемент. Такое 1с не прощает.
(83) в общем пройдись по справочнику номенклатуры где-то есть одинаковое наименование у элемента и группы. Или если самому лень, посади за проверку девочку-восьмиклассницу, пусть проштудирует справочник от и до.

(81) Не должно такого быть.

(84) Гружу структуру из другой базы. Я пока не могу записать ни одного элемента. Так как грузится в транзакции.

Мне не лень. Я пытаюсь разобраться. Но такого не могло в принципе быть. Надеюсь докапаться до проблемы.

что-то вы вообще не так делеает. Прочиайие проПроверитьВывод, там и примеры есть.

Вы же два раза одно и то же кидаете на страницу

получается одну и ту же область два раза выводите.

Два раза ничего не выводится, вывод осуществляется 1 раз в строке
ТабДок.Вывести(Детали);
А далее область добавляется в массив
МассивВыводимыхОбластей.Добавить(Детали);

При проверке в метод ПроверитьВывод() передается массив областей.
Пробовал делать без массива и передавать сам табличный документ, но в этом случае вообще ерунда получается, так как сначала ПроверитьВывод() срабатывает на 15 строке, потом через пять, далее через две строки и потом через каждую строчку дробя документ на целую кучу страниц.

(3) Кто нибудь может подсказать, проблема все таже в типовой КА 1.1
при печати УПД первый лист режет по средине, получается шапка, заголовок таблицы и 2 строки таблицы, потом следующая с повторяющимся заголовком таблицы (норм)
В УчетНДС.ВывестиСчетФактуруВТабличныйДокумент()
Как раз построчно используется ПроверитьВывод() но толку мало, все уезжает, избился но не хочет по нормальному печатать и все тут.

Кусок кода внутри цикла ОбластьМакета вывод строки таблицы

(38) Помогло в моем сеансе удалить из хранилища настроек "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент", непонятно как они слетают и как часто придется мочить :)

Ну первое, что в голову приходит - это что у самого табличного документа сделаны настройки (колонтитулы там, или автомасштаб), а у массива областей - нет. Может быть есть смысл скопировать документ после настроек, использовать копию вместо массива и очищать как раз табличный документ.


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

Может быть есть смысл скопировать документ после настроек, использовать копию вместо массива и очищать как раз табличный документ.

С массивом на через каждую строчку не дробит, это как раз происходит без применения массива. А так массив очищается вполне корректно.

До меня тоже теперь наконец то дошло, спасибо YNik и spacecraft .
Так как это метод самого табличного документа, то мы при при проверке уже имеем данные самого табличного документа, к этому прибавляется то, что передали в качестве аргумента и таким образом проверяется следующее условие ТабличныйДокумент + МассивОбластей > Площадь листа и делается вывод поместится или нет.

Кстати код приведенный YNik , можно и нужно сократить, вообще исключив массив из употребления и передавать саму область для проверки и все будет прекрасно работать! Ура все получилось в лучшем виде :)

(10) ger_kar, сократить можно если вы проверку делаете одной строки.

А вот у меня такая штука не прокатила!


Проблема в том что у документа есть автомасштаб и что с ним делать? Выводит пол страницы пустой! (13) spacecraft, этот параметр я уже установил в начале при создании: (14) Xershi, тогда ой. Этот признак используется при печати. Вполне может не обрабатываться при проверке вывода. (15) spacecraft, так что выходит, мне нужно вручную написать алгоритм проверки количество умещаемых строк на странице?
Проблема в том что в одной строке может быть большой текст, как этот нюанс вычислять? В чем особенность проверки этого метода кто в курсе? Он что без автомасштаба проверку в "мТабДок" делает?

Новый формат строк улучшил ситуацию. Стало на странице чуть больше элементов. Похоже все дело в формате.

(17) Xershi, У меня вот так выполняется проверка. Все красиво работает.

Смысл в следующем:
Есть ТЗ. Есть подвал. Нельзя что бы подвал выводился сам на отдельной странице. Последнюю строку ТЗ добавляю в массив. Потом добавляю туда подвал. Если не выводится тогда добавляю разделитель и вывожу то что есть в массиве (последняя строка + подвал).

(17) Xershi, проверил у себя. АвтоМасштаб достаточно только в мТабДок.
А вот с МассивТаблицОбластей и правда не понятно зачем вообще его использовать?

(23) spacecraft, я его делал, для того чтобы исключить не попадание последней строки. Т.к. строка добавляется по кускам и вот 3 кусок строки может быть на 5 строк и по итогу не поместится на страницу.

Поэтому вот этот нюанс так думал обыграть.

Сейчас внимательно ваш код проверю.

Когда я сделал как вы у меня страница заполнилась полностью ну или почти до конца, но нюанс с добавлением строки остался. Т.к. проверку, то я делаю в начале вывода. Мне наверно нужно заменить вывод на добавление в новый табличный документ и в конце проверять вывод, а потом только выводить строку или нет?

(24) Xershi, не совсем понял. Есть "строка", которая может занимать несколько строк вывода? И что нужно? Совсем ее не выводить в текущей странице, если полностью не помещается? Или выводить частично, с переносом на другую страницу? (25) spacecraft, спасибо помогли понять, что там происходит. Убрал массив и переписал код, чтобы проверка шла в конце(когда строка полностью сформирована) со строкой дублером и тогда вся страница заполнилась полностью. Но я убрал оглавление для вывода чтобы проверить результат. Сейчас попробую с оглавлением вывод сделать. Если попрет, то вопрос решен. (18) 6есик, чтобы дублировать шапку на каждой странице. У меня табличный документ из 2 макетов для прайс-листа с оглавлением.

(19) Xershi, ну это я понимаю добавляете шапку на каждую новую страницу :

А зачем после этого ее добавлять в массив для проверки на вывод ? Ведь шапку вы уже вывели в табличный документ и проверка на вывод уже будет сопоставлять ваш массив и то свободное место в таб доке которое осталось после вывода шапки.


Понял в чем мои косяки и тогда проверка корректно все обработала!
Всем спс! (27) Xershi, я бы оптимизировал этот код. Как и в приведенном мной выше.
(28) spacecraft, это уже не критично я считаю. Кстати на практике такая оптимизация дает, хоть какой-то профит? (29) Xershi, как минимум избегает дублирование кода.
Честно говоря, просто бьет по глазам. Щас столкнулся с проблемой проверить вывод в ут 11.2 печатает тор12 с 1 номенклатурой в 2 листа
1 лист - путстая строка номенклатуры а на 2-м единственная номенклатура
дело должно быть в начтройках принтера по умолчанию но там вроде все нормально
что за чудеса непонятно (31) piffoff, я добавлял проверку на 1-ю строку, чтобы не выполнялся ПроверитьВывод:
Еще замечание в копилку. Сначала надо определить размер страницы, поля, автомасштаб и т.д. И уже после этого - проверять вывод. (33) Спасибо!! Пока не прописал вручную все (! слева/справа обязательно) поля - ПроверитьВывод() выполнялось некорректно

Добрый день. вывожу на печать доработанный табель.
На каждой странице должна быть шапочка ФИО, ТабНомер, Должность, Дни с 1 - 15, Итого15, 16 -Последний день, Итого за месяц. У сотрудника количество строк заранее не известно, т.к. зависит от КолВВ(количество видов времени, которые у него были за месяц. Каждый вид времени печатается на новой строке).

2 раза перенос на след. страницу делает и все. Больше разделитель не ставится.

Пока ВыборкаСотрудник.Следующий() Цикл

ОблСтрокаНомСтроки = Макет.ПолучитьОбласть("R" + СТРОКА(16 + КолСтрокВывели) + "C1:R" + СТРОКА(16 + КолВВ - 1 + КолСтрокВывели) + "C1");
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОблСтрокаНомСтроки);

Если Не ПроверитьВыводТабличногоДокумента(ТабДок, МассивВыводимыхОбластей) Тогда

КолонтитулВсегда = Макет.ПолучитьОбласть("Колонтитул|КолонкиВсегда");
ТабДок.Вывести(КолонтитулВсегда);

Колонтитул29 = Макет.ПолучитьОбласть("Колонтитул|Колонка29");
Колонтитул30 = Макет.ПолучитьОбласть("Колонтитул|Колонка30");
Колонтитул31 = Макет.ПолучитьОбласть("Колонтитул|Колонка31");
КолонтитулВсегоОтработаноЗаМесяц = Макет.ПолучитьОбласть("Колонтитул|ВсегоОтработаноЗаМесяц");


Если ПоследнийДень > 28 Тогда
ТабДок.Присоединить(Колонтитул29);
КонецЕсли;
Если ПоследнийДень > 29 Тогда
ТабДок.Присоединить(Колонтитул30);
КонецЕсли;
Если ПоследнийДень > 30 Тогда
ТабДок.Присоединить(Колонтитул31);
КонецЕсли;
ТабДок.Присоединить(КолонтитулВсегоОтработаноЗаМесяц);
КолСтрокВывели = КолСтрокВывели + 3;

КонецЕсли;
ТабДок.Вывести(ОблСтрокаНомСтроки);
КонецЦикла

Подскажите, пожалуйста, где искать ошибку?

(34) Только что с похожей проблемой столкнулся, выводились несколько разделителей в Т-13, и все, пол отчета без них.
Дело оказалось в ширине колонок 5,6,7 и 20, они в стандартном почему то уже остальных, остальные по 3, а эти 2.63-2.88, и вот кто-то с коллег видно расширил, но не у всей колонки, а у диапазона, шапка осталась уже с подвалом.
Уменьшил ширину колонки с табельным на 1.1, пунктир справа выровнялся, и ПроверитьВывод заработал как задумывалось.

Добавлю в копилку свои 5 копеек.
Была задача выводить на каждом листе внизу логотип организации (печать договоров и приложений к ним).
Естественно пользовался методом ПроверитьВывод(), для того чтобы определять помещается ли выводимая область на лист вместе в логотипом, и если нет, то вывожу пустые строки пока есть место, потом логотип и горизонтальный разделитель страниц. Пустые строки не очень большой размера, чтобы логотип практически на одном и том же месте был.

И всё хорошо выводится, кроме первой страницы. Видимо на тот момент как то по другому определяется выводимые размеры таблицы.

Решение нашлось очень странное: если метод говорит, что не умещается, то получаем количество страниц Табличного документа, а потом снова проверяем, помещается или нет. И вот тут происходит чудо)), 1С вдруг неожиданно начинает считать, что теперь помещается и продолжает выводить до самого низа (а раньше было заметно, что несколько строк еще может поместиться в конце). Код ниже.

Если НЕ ТабДокумент.ПроверитьВывод(МассивОбластейВывода) Тогда
//вот тут уже выводится и пустые строки, и логотип, и разделитель и др. нужные области шапки нового документа
КонецЕсли;

Читайте также: