Столкнулся с такой ошибкой, при выводе информации на печатную форму, платформа выдает следующее сообщение:
Ошибка при вызове метода контекста (ПроверитьВывод)…
ПроверитьВывод() — это метод табличного документа, который проверяет, умещаются ли переданные табличные документы на страницу при печати. В примечании у этого метода разработчики платформы 1С сразу написали, что при возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.
Проверил установленные принтеры, все исправно и работает. Эмпирическим путем выяснил, что данная ошибка возникает только у конкретной печатной формы и только под одним пользователем.
Ошибка решилась следующими действиями (выполнять под пользователем, у которого возникла ошибка):
1) Создал пустой документ, что бы при формировании печатной формы не был задействован метод ПроверитьВывод(). Если же этот метод в любом случае вызывается, то придется его найти в конфигурации и закомментировать, или же поместить в конструкцию Попытка-Исключение-КонецПопытки.
1. Помещение ПроверитьВывод в попытку |
2) Сформировал печатную форму.
1. Помещение ПроверитьВывод в попытку |
2) Сформировал печатную форму.
2. Пустая печатная форма (кол-во товаров = 0) |
3) Для текущей печатной формы открыл параметры страницы и установил правильные параметры.
3. Параметры страницы |
Ошибка возникала из-за неправильных параметров страницы, которые платформа сохранила ранее при выводе на печать печатной формы, например: платформа сохранила в параметрах страницы принтер, который в дальнейшем удалили и установили новый. Параметры страницы печатной формы хранятся в свойстве табличного документа КлючПараметровПечати. Это свойство содержит ключ значения, в котором сохраняются параметры печати таблицы. Параметры печати, настроенные и сохраненные с данным ключом, впоследствии восстанавливаются при следующем показе таблицы.
Что бы данная ошибка не возникала из-за неправильных параметров страницы, свойство КлючПараметровПечати следует устанавливать не в начале процедуры вывода на печать, а в конце, так как при установке данного свойства параметры печати тут же восстанавливаются.
UPD 04/10/2015: Если устанавливать свойство КлючПараметровПечати в конце формирования табличного документа, то метод ПроверитьВывод будет использовать параметры печати установленные по-умолчанию, а не пользовательские. Что бы избежать данной ситуации, необходимо устанавливать свойство КлючПараметровСистемы в начале формирования табличного документа, а метод ПроверитьВывод поместить в конструкцию Попытка-Исключение-КонецПопытки.
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
20.11.20 — 14:39
1. Сломался метод ПроверитьВывод:
{ВнешняяОбработка.ТестПечати.Форма.Форма.Форма(9)}: Ошибка при вызове метода контекста (ПроверитьВывод) Если ТабДок.ПроверитьВывод(Обл) Тогда по причине: Ошибка получения информации о принтере
2. При печати пустого табличного документа появляется ошибка «Ошибка при получении характеристик принтера»
https://i.imgur.com/bOAp6MP.png
Пробовали вот что:
— еще две последние версии 8.3.17, а также последню 8.3.18
— чистка кэша
— ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь())
— устанавливали в реестр дефолтный принтер (Прописали значение ключа «по умолчанию» — «//appServer123/printer008“)
При этом на сервере работает (где стоит сервер 1С), а на пустой локальной файловой базе нет
Кто-нибудь сталкивался? Как лечить?
В списке ошибок платформу тоже пусто.
1 — 20.11.20 — 14:41
И отключите уже автоформаттер…
2 — 20.11.20 — 14:45
HKCUPrintersDefaults{id}» там чего?
3 — 20.11.20 — 14:49
4 — 20.11.20 — 14:52
А если нового пользователя завести?
5 — 20.11.20 — 15:37
(4) Под новым пользователем все ок..
И что это значит?)
6 — 20.11.20 — 15:39
Сбросьте сохраненные настройки пользователя все
7 — 20.11.20 — 15:43
(6) В винде? Или как?
Вот это вот
ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь())
не оно?
Плюс печать не работает даже на только что созданной базе
8 — 20.11.20 — 15:48
(5) Я нового пользователя винды сделал, а не 1с
Новый пользователя 1с не поможет
9 — 20.11.20 — 16:35
Я до сих пор не понимаю — зачем 1с внедрила свой модуль печати. Использовали все родные драйвера принтеров. Все было более менее нормально. Нет нужно извратиться и подсунуть свой обработчик. Теперь нужно указывать — использовать настройки принтера двусторонней печати от 1с или принтера. Зачем плодить сущности?
10 — 20.11.20 — 16:37
(8) Есть обработка в сети — «ХранилищеНастроек_Чистка». Можешь с помощью нее почистить настройки печати https://all4cf.ru/univof-ochistka_nastroek_polzovateley.html
11 — 20.11.20 — 16:41
А ещё — может стоит по-умолчанию принтер, который не подключен.
12 — 20.11.20 — 16:47
(10) Так я же говорю, что я даже новую базу создал, и оттуда не получается на печать документ отправить
(11) В настройках печати нельзя выбрать ни один принтер
13 — 20.11.20 — 16:54
А не из 1С под этим пользователем печатать можно? А то всякие случаи бывают.
14 — 20.11.20 — 16:58
15 — 20.11.20 — 17:15
Точно не ошибка Код ошибки: 10216040?
16 — 20.11.20 — 17:18
(15) Точно. Пробовал последнюю 18ую платформу, не работает ни один принтер, включал виртуальные типа Print To OneNote, XPS и т.д
17 — 20.11.20 — 18:34
Похоже, не хватает каких-то прав, т.к. под админом все работает.
Есть идеи?
18 — 20.11.20 — 18:36
Дай админиские права пользователю. После настройки принтера уберешь
19 — 20.11.20 — 18:37
(5) значит, что настройки пользователей сохранились
20 — 20.11.20 — 18:39
Нси-пользователи, дожди до настроек печатных форм, не помню как точно называется
21 — 20.11.20 — 18:41
ШО… Опять… на любые принтеры не печатает?
во я тему поднимал в ноябре ошибка при печати на принтеры Kyocera
22 — 20.11.20 — 18:43
пришлось тогда откатиться на 8.3.15.30 на ней и сидим
23 — 20.11.20 — 18:45
(21) ну погоди, у него вроде другая машинка
24 — 20.11.20 — 19:08
(19) Пользователей 1С? Или винды?
Я же говорю, что я создал Новую Пустую Базу, и даже после этого не получается вызвать метод ПроверитьВывод табличного документа.
(21) Даже на Microfost XPS Writer, скрин в (0)
25 — 20.11.20 — 19:24
(24) Я бы начал с 1с, но где-то видел, что может прав не хватает в винде. Но настройки пришли старые при распаковке, а движок уже по новому берет. У меня было, но я как-то быстро сделал, потом подованам раздал. Точно помню, реестр и настройки пользователей
26 — 20.11.20 — 19:45
(25) Проблема точно в правах, но как понять в чем конкретно? И где копать?
Если запускать под пользователем, то проблема проявляется.
В случае запуска под админской учетной записью проблемы нет.
Дать всем админов не вариант. В компании более 20 человек такое делать нельзя.
27 — 20.11.20 — 19:54
(26) Еще раз, я зачистил для начала бы в 1с настройки печатных форм, потом бы глянул бы на админство, вроде дали не админские коллеги мои
28 — 20.11.20 — 20:02
В 1с начиная с 8.3.16 функции работы с принтером выделены в отдельные приложения 1cv8p32.bin и 1cv8p64.bin, которые запускаются при обращении к принтеру. Это сделано для того, чтобы отвязать основные библиотеки 1с от работы с потенциально нестабильным драйвером принтера. Но некоторые антивирусы запуск таких приложений блокируют. Кроме того, это может быть закрыто политиками безопасности. Проверяйте там.
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) Думаю там все проще
ls600 |
|
||
---|---|---|---|
|
Доброго времени суток. Ситуация такая стояла платформа 8.2.18.61 обновили на платформу 8.3.4.365.
Вылез один косяк при печати Авансового отчета. Не удалось сформировать внешнюю печатную форму! если запустить платформу 8.2 то без проблем. все печатает. подскажите как исправить? P.S конфигурация Бухгалтерия для Казахстана 2.0.11.9, даже если поставить последний релиз проблема остается |
Yandex |
|
||
---|---|---|---|
|
Jonsony |
|
||
---|---|---|---|
|
(0) ls600, писать в саппорт по 8.3 платформе
это изменения в языке 1С походу, или у полей сменить с неопределённой длины на заданное кол-во символов, но эти поля найти надо ещё PS Изменено 25.12.13 14:39:28 |
ls600 |
|
||
---|---|---|---|
|
проблема решена благодаря одному хорошему человеку. если изменить значение ИЛПеречислениеПолучателям.ДокументОснование.ВидИсполнительногоДокумента + » » <<?>>+ ПОДСТРОКА(ИЛПеречислениеПолучателям.ДокументОснование.РеквизитыИсполнительногоДокумента, 1, 900) или ниже то все нормально. видимо в 8,3 какое то ограничение стоит. |
Jonsony |
|
||
---|---|---|---|
|
(2) ls600, ну правильно, вы строку ограничили вот и перестал ругаться, просто в конфе у этого реквизита стоит «строка неопределённой длины» |
ls600 |
|
||
---|---|---|---|
|
Вопрос закрыт! |
Подсказка: Вы получили ответ на свой вопрос — закройте вопрос! |
-
#1
В 1Сv8.2Управление Предприятием Создал пользователя «кладовщик» с соответствующей ролью «кладовщик» и интерфейсом «кладовщик». По должностным обязанностям требуется создавать Требования-накладные и Лимитно-заборные карты( без права Проводки обоих ), а так же разпечатывать эти документы. Возникло две ошибки: одна при открытии (Ошибка при вызове метода контекста(Записать):Вывод запрещен ) Нажимаю ОК и она закрывается. И вторая ошибка при печати документа (Ошибка при вызове метода контекста(Напечатать):Вывод запрещен) Причем печатная форма документа показывается нормально, а ошибка возникает при отправке документа на принтер. Просмотрел все права роли а так же дополнительные права — разрешил все что так или иначе связано с печатью, но проблема не решилась. Пользователь с ролью «Полные права» и полными доп.правами нормально всё разпечатывает и не имеет сообщения об ошибке при входе . Где еще можно искать решение данной проблемы?
-
_________________.bmp
737,9 КБ
· Просмотры: 210
-
___________________.bmp
1,1 МБ
· Просмотры: 209