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

Столкнулся с такой ошибкой, при выводе информации на печатную форму, платформа выдает следующее сообщение:
Ошибка при вызове метода контекста (ПроверитьВывод)…

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

Проверил установленные принтеры, все исправно и работает. Эмпирическим путем выяснил, что данная ошибка возникает только у конкретной печатной формы и только под одним пользователем.

Ошибка решилась следующими действиями (выполнять под пользователем, у которого возникла ошибка):
1) Создал пустой документ, что бы при формировании печатной формы не был задействован метод ПроверитьВывод(). Если же этот метод в любом случае вызывается, то придется его найти в конфигурации и закомментировать, или же поместить в конструкцию Попытка-Исключение-КонецПопытки.

1. Помещение ПроверитьВывод в попытку

2) Сформировал печатную форму.

2. Пустая печатная форма (кол-во товаров = 0)

3) Для текущей печатной формы открыл параметры страницы и установил правильные параметры.

3. Параметры страницы

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

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

UPD 04/10/2015: Если устанавливать свойство КлючПараметровПечати в конце формирования табличного документа, то метод ПроверитьВывод будет использовать параметры печати установленные по-умолчанию, а не пользовательские. Что бы избежать данной ситуации, необходимо устанавливать свойство КлючПараметровСистемы в начале формирования табличного документа, а метод ПроверитьВывод поместить в конструкцию Попытка-Исключение-КонецПопытки.

   DTX 4th

20.11.20 — 14:39

1. Сломался метод ПроверитьВывод:

{ВнешняяОбработка.ТестПечати.Форма.Форма.Форма(9)}: Ошибка при вызове метода контекста (ПроверитьВывод)
    Если ТабДок.ПроверитьВывод(Обл) Тогда
по причине:
Ошибка получения информации о принтере

2. При печати пустого табличного документа появляется ошибка «Ошибка при получении характеристик принтера»

https://i.imgur.com/bOAp6MP.png

Пробовали вот что:

— еще две последние версии 8.3.17, а также последню 8.3.18

— чистка кэша

— ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь())

— устанавливали в реестр дефолтный принтер (Прописали значение ключа «по умолчанию» — «//appServer123/printer008“)

При этом на сервере работает (где стоит сервер 1С), а на пустой локальной файловой базе нет

Кто-нибудь сталкивался? Как лечить?

В списке ошибок платформу тоже пусто.

   DTX 4th

1 — 20.11.20 — 14:41

И отключите уже автоформаттер…

   piter3

2 — 20.11.20 — 14:45

HKCUPrintersDefaults{id}» там чего?

   DTX 4th

3 — 20.11.20 — 14:49

   piter3

4 — 20.11.20 — 14:52

А если нового пользователя завести?

   DTX 4th

5 — 20.11.20 — 15:37

(4) Под новым пользователем все ок..

И что это значит?)

   dka80

6 — 20.11.20 — 15:39

Сбросьте сохраненные настройки пользователя все

   DTX 4th

7 — 20.11.20 — 15:43

(6) В винде? Или как?

Вот это вот

ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь())

не оно?

Плюс печать не работает даже на только что созданной базе

   DTX 4th

8 — 20.11.20 — 15:48

(5) Я нового пользователя винды сделал, а не 1с

Новый пользователя 1с не поможет

   dmrjan

9 — 20.11.20 — 16:35

Я до сих пор не понимаю — зачем 1с внедрила свой модуль печати. Использовали все родные драйвера принтеров. Все было более менее нормально. Нет нужно извратиться и подсунуть свой обработчик. Теперь нужно указывать — использовать настройки принтера двусторонней печати от 1с или принтера. Зачем плодить сущности?

   dmrjan

10 — 20.11.20 — 16:37

(8) Есть обработка в сети — «ХранилищеНастроек_Чистка». Можешь с помощью нее почистить настройки печати https://all4cf.ru/univof-ochistka_nastroek_polzovateley.html

   dmrjan

11 — 20.11.20 — 16:41

А ещё — может стоит по-умолчанию принтер, который не подключен.

   DTX 4th

12 — 20.11.20 — 16:47

(10) Так я же говорю, что я даже новую базу создал, и оттуда не получается на печать документ отправить

(11) В настройках печати нельзя выбрать ни один принтер

   Ногаминебить

13 — 20.11.20 — 16:54

А не из 1С под этим пользователем печатать можно? А то всякие случаи бывают.

   DTX 4th

14 — 20.11.20 — 16:58

   Lama12

15 — 20.11.20 — 17:15

Точно не ошибка Код ошибки: 10216040?

   DTX 4th

16 — 20.11.20 — 17:18

(15) Точно. Пробовал последнюю 18ую платформу, не работает ни один принтер, включал виртуальные типа Print To OneNote, XPS и т.д

   DTX 4th

17 — 20.11.20 — 18:34

Похоже, не хватает каких-то прав, т.к. под админом все работает.

Есть идеи?

   МимохожийОднако

18 — 20.11.20 — 18:36

Дай админиские права пользователю. После настройки принтера уберешь

   piter3

19 — 20.11.20 — 18:37

(5) значит, что настройки пользователей сохранились

   piter3

20 — 20.11.20 — 18:39

Нси-пользователи, дожди до настроек печатных форм, не помню как точно называется

   FormatC

21 — 20.11.20 — 18:41

ШО… Опять… на любые принтеры не печатает?

во я тему поднимал в ноябре ошибка при печати на принтеры Kyocera

   FormatC

22 — 20.11.20 — 18:43

пришлось тогда откатиться на 8.3.15.30 на ней и сидим

   piter3

23 — 20.11.20 — 18:45

(21) ну погоди, у него вроде другая машинка

   DTX 4th

24 — 20.11.20 — 19:08

(19) Пользователей 1С? Или винды?

Я же говорю, что я создал Новую Пустую Базу, и даже после этого не получается вызвать метод ПроверитьВывод табличного документа.

(21) Даже на Microfost XPS Writer, скрин в (0)

   piter3

25 — 20.11.20 — 19:24

(24) Я бы начал с 1с, но где-то видел, что может прав не хватает в винде. Но настройки пришли старые при распаковке, а движок уже по новому берет. У меня было, но я как-то быстро сделал, потом подованам раздал. Точно помню, реестр и настройки пользователей

   Lea_lbs

26 — 20.11.20 — 19:45

(25) Проблема точно в правах, но как понять в чем конкретно? И где копать?

Если запускать под пользователем, то проблема проявляется.

В случае запуска под админской учетной записью проблемы нет.

Дать всем админов не вариант. В компании более 20 человек такое делать нельзя.

   piter3

27 — 20.11.20 — 19:54

(26) Еще раз, я зачистил для начала бы в 1с настройки печатных форм, потом бы глянул бы на админство, вроде дали не админские коллеги мои

   Провинциальный 1сник

28 — 20.11.20 — 20:02

В 1с начиная с 8.3.16 функции работы с принтером выделены в отдельные приложения 1cv8p32.bin и 1cv8p64.bin, которые запускаются при обращении к принтеру. Это сделано для того, чтобы отвязать основные библиотеки 1с от работы с потенциально нестабильным драйвером принтера. Но некоторые антивирусы запуск таких приложений блокируют. Кроме того, это может быть закрыто политиками безопасности. Проверяйте там.

   d4rkmesa

29 — 20.11.20 — 21:29

Можно попробовать Process Monitor’ом глянуть с фильтром по 1cv8p64.bin и Result is not success. Но это несколько неблагодарное дело, там при запуске Ctrl+P порядка 1500-2000 событий будет, в основном поиск в ветках реестра(хотя и по ним можно отфильтровать). Главное найти то что нужно среди кучи информации.

  

piter3

30 — 20.11.20 — 21:31

(29) Думаю там все проще

  1. Обнаружены ошибки:
    {Документ.РеализацияТоваровУслуг.МодульОбъекта (1155)}: Ошибка при вызове метода контекста (ПроверитьВывод)
    Если Ном <> 1 И НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
    по причине:

    Такая ошибка возникает у одного из пользователей удаленного рабочего стола.

    Если я со своей машины захожу таким же образом под тем же самым пользователем (и системным и пользователем 1С) у меня такая ошибка не возникает.

    что может быть?


  2. Наташа

    Offline

    Наташа
    Опытный в 1С

    Регистрация:
    14 авг 2010
    Сообщения:
    1.442
    Симпатии:
    2
    Баллы:
    29

  3. это все что есть на экране, более ничего сказать не могу.
    это же 1с!!!


  4. Requin

    Offline

    Requin
    Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29


  5. для того, чтобы сохранить документ в MXL, человеку нужно купить принтер?


  6. Requin

    Offline

    Requin
    Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29

    P.S. Принтер можете не покупать, просто установите какой-нибудь (файловый).

  7. спасибо, передам ваш совет.
    хотя уважающий себя программист осуществляет проверку на конкретное действие — в данном случае это вывод отчета: КУДА — если на экран — одна ветка, если на принтер — другая.
    я так думаю, что программистам 1с надо пройти начальные курсы по основам построения логики программы, а лучше начать с базовых курсов по информатике.


  8. x_under

    Offline

    x_under
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    16
    Баллы:
    29

    :angry: Ну какой вы агрессивный. Тут же все по принципу: не нравится не ешь.

    Эта функция используется для определения помещается на экран форма или нет. А без принтера, хотя бы виртуального этого не определить. Вдруг вы на А3 или А5 печатаете (ну или на рулоне бумаги)… Так что всем не угодишь.


  9. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    кхм, ну можно было бы возвращать неопределено, в случае, если принтера нет в системе, а не вываливаться в ошибку :)


  10. kallugin

    Offline

    kallugin

    Регистрация:
    22 ноя 2011
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1

    UP

    Та же самая ошибка, один в один, но есть нюансы:

    — переустановили Винду на терминальном сервере, был 2008 х86, стал 2008 64, соответственно, драйвера принтеров уже другие

    — документ, в котором всего одна строка, печатается нормально, больше одной — та самая ошибка

    — с одних компьютеров выдаёт такую ошибку, с других — нет, нормально печатает. Сегодня с утра заходил на тот же сервер и печатал те самые документы для бухгалтеров, я могу печатать, они — нет. Среда одинаковая, сервер один и тот же, принтеры одни и те же (их там два сетевых), конфигурацию не меняли.

    Может это быть из-за того, что система запомнила какие-то настройки «с прошлого раза» (у бухгалтеров, которые этот документ печатали)? И как бы их обнулить?


  11. x_under

    Offline

    x_under
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    16
    Баллы:
    29

    Попробуйте базу переподключить.


  12. Настя

    Offline

    Настя

    Регистрация:
    3 июл 2012
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1

    {Form.ФормаОтчета.Form(4)}: Ошибка при вызове метода контекста (Add)
    ТабЗН.Колонки.Добавить(«ТипНомера»,»Строка»,»Тип номера»);
    что за ошибка? подскажите пожалуйста


  13. 1cUserAndrew

    Offline

    1cUserAndrew
    Профессионал в 1С
    Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    5.125
    Симпатии:
    212
    Баллы:
    104

    Второй параметр имеет тип данных «ОписаниеТипов».

    ТабЗН.Колонки.Добавить("ТипНомера", Новый ОписаниеТипов("Строка"), "Тип номера");

  14. qweqweqwe123777

    Offline

    qweqweqwe123777
    Новичок в 1С

    Регистрация:
    30 янв 2015
    Сообщения:
    1
    Симпатии:
    1
    Баллы:
    4

    у меня ошибка получения информации о принтере
    решилась установкой прав на принтер.
    В свойствах принтера на вкладке Безопасность добавил группу пользователей Domain users полные права


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Добрый день, при выводе на печать СЗВ 6-4 выдает ошибку.

{Обработка.СведенияВПФ_СЗВ64.Форма.Форма.Форма(724)}: Ошибка при вызове метода контекста (ПроверитьВывод)
Если п_ПечатныйЛист.ПроверитьВывод(п_МассивПроверки) Тогда

,аналогичная ошибка при выводе на печать Поименного списка сотрудников

{Обработка.СведенияВПФ_СЗВ64.Форма.Форма.Форма(5768)}: Ошибка при вызове метода контекста (ПроверитьВывод)
Если Не л_ТабДок.ПроверитьВывод(л_Массив) Тогда

Принтер в системе установлен, другие формы корректно выводятся на печать.

В локальной конфигурации, КАМИН:Зарплата для бизнеса. Версия 4.0 (4.0.23.3)

Тема закрыта.

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка при вызове метода контекста нарушение прав доступа
  • Ошибка при вызове метода контекста найтипоуникальномуидентификатору
  • Ошибка при вызове метода контекста найтипотипу
  • Ошибка при вызове метода контекста найтипореквизиту 1с

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии