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

   b612

29.07.19 — 18:00

Уважаемые.

Как получить ответ сервера, не записывая его в файл ?

Платформа 8.3.14.1630 толстый клиент, управляемое.

В инструкции написано  <ИмяВыходногоФайла> (НЕОБЯЗАТЕЛЬНЫЙ)

но на деле, если не задать или задать пустую строку, выдаёт ошибку

{ВнешняяОбработка.HTTPЗапросы.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Получить)

        ответик=Соединение.Получить(ТекстДляЗапроса,»»);

по причине:

Неправильный путь к файлу. Схема не зарегистрирована

HTTPСоединение (HTTPConnection)

Получить (Get)

Синтаксис:

Получить(<HTTPЗапрос>, <ИмяВыходногоФайла>)

Параметры:

<HTTPЗапрос> (обязательный)

Тип: HTTPЗапрос.

HTTP-запрос.

<ИмяВыходногоФайла> (необязательный)

Тип: Строка.

Имя файла, в который помещаются данные полученного ресурса. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет.

Возвращаемое значение:

Тип: HTTPОтвет.

   polosov

1 — 29.07.19 — 18:03

(0) Будь мужиком задай имя файла или убери кавычки.

   AllJoke

2 — 29.07.19 — 18:05

ПолучитьТелоКакПоток();

ПолучитьТелоКакСтроку()

   Garykom

3 — 29.07.19 — 18:17

(1) Угу ПолучитьИмяВременногоФайла(«html»)

   Garykom

4 — 29.07.19 — 18:18

В строку не рекомендую, сервер может несколько гигов отдать легко при хорошем канале достаточно шустро.

В поток сразу писать куда то так что один хрен лучше в файл.

   Вафель

5 — 29.07.19 — 18:27

(4) а чем строка от потока (по памяти) будет отличаться?

   Garykom

6 — 29.07.19 — 18:59

(5) А хз как оно в платформе 1С реализовано, но как минимум экономия и времени и памяти ибо символы в строках двухбайтовые в 1С.

   Жан Пердежон

7 — 29.07.19 — 19:08

(0) необязательный, это значит:

Соединение.Получить(ТекстДляЗапроса),

а не как у тебя;

да и первый параметр назван в лучших традициях говнокодинга.

   b612

8 — 29.07.19 — 20:20

в том и дело что сервер будет отдавать по 50 байтов на каждый запрос

   b612

9 — 29.07.19 — 20:22

Жан Пердежон

Соединение.Получить(ТекстДляЗапроса)

не работает

выдаёт ошибку

   PiotrLoginov

10 — 29.07.19 — 20:33

«не работает» — так позволено каким-нибудь юзверям выражаться, но никак не уважающему себя специалисту.

«выдает ошибку» — уже ближе к корректному посту…

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

11 — 29.07.19 — 21:33

(9) текст ошибки в студию

   b612

12 — 29.07.19 — 22:32

{ВнешняяОбработка.HTTPЗапросы.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Получить)

        ответик=Соединение.Получить(ТекстДляЗапроса);

по причине:

Неправильный путь к файлу. Схема не зарегистрирована

   trad

13 — 29.07.19 — 22:51

(12) дали же правильный ответ в (2)

   Жан Пердежон

14 — 31.07.19 — 10:39

(12) весь говнокод показывай, с инициализации переменных

   Anton R

15 — 29.12.19 — 00:19

HTTPЗапрос = Новый HTTPЗапрос(ТекстДляЗапроса);

       ответик=Соединение.Получить(HTTPЗапрос);

   Cthulhu

16 — 29.12.19 — 12:14

(12): а полностью текст ошибки прочитать — религия мешает?

«с_х_е_м_а _н_е_ з_а_р_е_г_и_с_т_р_и_р_о_в_а_н_а»

(а потом посмотреть в настройки и подумать — чо и где не так)

  

Anton R

17 — 30.12.19 — 01:46

(15) Поясняю свой ответ, в документации этого нет:

Если в метод «Получить» объекта «HTTP соединение» первым параметром передается строка, то требуется второй параметр, иначе получишь ошибку из сабжа.

Если первым параметром передается объект типа «HTTPЗапрос» — второй параметр не обязателен.

Поэтому вместо «ответик=Соединение.Получить(ТекстДляЗапроса,»»); » как в сабже, достаточно написать:

HTTPЗапрос = Новый HTTPЗапрос(ТекстДляЗапроса);

ответик=Соединение.Получить(HTTPЗапрос);

Выскакивает ошибка при попытке сохранения картинки на диск. Ошибка такого характера —

{Справочник.Товары.Форма.ФормаЭлемента.Форма(63)}: Ошибка при вызове метода контекста (ПолучитьФайл)
ПолучитьФайл (СсылкаНаФайлВИБ, Объект.ИмяФайлаКартинки);
по причине:
Ошибка при выполнении файловой операции ‘/e1cib/data/Справочник.Товары.ФайлКартинки?ref=»a25100115b79455911e0ee7de52ab47e»‘

Код 1C v 8.х

 
&НаКлиенте
Процедура ЗагрузитьСДиска(Команда)

АдресВХранилище = "";
ВыбранноеИмяфайла = "";

Если ПоместитьФайл(АдресВХранилище, , ВыбранноеИмяФайла, , УникальныйИдентификатор) Тогда
Файл = Новый Файл(ВыбранноеИмяФайла);
ИмяФайлаКартинки = Файл.Имя;
СсылкаНаКартинку = АдресВХранилище;

Модифицировать = Истина;
КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ЭтоАдресВременногоХранилища (СсылкаНаКартинку) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища (СсылкаНаКартинку);
ТекущийОбъект.ФайлКартинки = Новый ХранилищеЗначения (ДвоичныеДанные, Новый СжатиеДанных(9));
ТекущийОбъект.ИмяФайлаКартинки = ИмяФайлаКартинки;
КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере (Отказ, ТекущийОбъект, ПараметрыЗаписи)

Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
УдалитьИзВременногоХранилища (СсылкаНаКартинку);
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку (ТекущийОбъект.Ссылка, "ФайлКартинки");
КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере (Отказ, СтандартнаяОбработка)

Если Объект.ИмяФайлаКартинки <> "" Тогда
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку (Объект.Ссылка, "ФайлКартинки");
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура СохранитьНаДиск(Команда)

Если Объект.ИмяФайлаКартинки = "" Тогда
Предупреждение ("У поставщика нет сохраненной в базе картинки");
Иначе
СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФайлКартинки");
ПолучитьФайл (СсылкаНаФайлВИБ, Объект.ИмяФайлаКартинки);
КонецЕсли;

КонецПроцедуры

Код написан по книжке,поэтому не могу понять,что я делаю не так. Помоги пожалуйста.

0

27.10.2011 — 12:14


есть ссылка

https://agents.vladavia.ru/oneNet/Ne…110826.XML.xls

при открытии ее в браузере, появляется окно для ввода логина/пароля, после ввода которых файл успешно скачивается.

пишу:

Попытка
HTTP = Новый HTTPСоединение(«https://agents.vladavia.ru»,,Логин,Пароль,,Истина);
HTTP.Получить(«/oneNet/NetStorage/Home@VLADAIR/Ticket%20Reports/TKT_XF_20110826.XML.xls»,»C:temp.xls»);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

выдается ошибка:
Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: Couldn’t resolve host name

что я делаю не так?

1

27.10.2011 — 12:45

сделал так:

HTTP = Новый HTTPСоединение(«agents.vladavia.ru»,,Логин,Пароль, ,Истина);
HTTP.Получить(«/oneNet/NetStorage/Home@VLADAIR/Ticket%20Reports/TKT_XF_20110826.XML.xls»,»C:temp.xls»);

теперь ошибка следующая:

Peer certificate cannot be authenticated with known CA certificates

2

27.10.2011 — 12:48

хм… вот, похоже, решение:
http://infostart.ru:8080/public/79494/

3

27.10.2011 — 12:51

С кодировкой логина/пароля не игрался?

4

27.10.2011 — 13:12

4-VZ > нет, но там действительно с сертификатом проблемы (недействителен)

ЗЫ. решение из (3) не помогло (((

5

27.10.2011 — 13:26

5-Uho > Читаю сабж внимательно: «при открытии ее в браузере, появляется окно для ввода логина/пароля, после ввода которых файл успешно скачивается«. Про сертификат — ни слова. Скачивается, собак такой.
Вот и подумал: а чегой-то при установке через 1С пароль/логин не хавается? Сервер же не знает способа подачи этих самых логина/пароля…
Нет?

6

27.10.2011 — 13:45

6-VZ > зы, я забыл, что IE при первом открытии ругнулся на сертификат, но пропустил.
А когда я дошел таки до (2) — вспомнилось и про сертификат

7

27.10.2011 — 13:58

7-Uho > Понял. Значит, не кодировка.

8

27.10.2011 — 14:05

похоже ошибочный сертификат не обойти (((

9

27.10.2011 — 14:28

9-Uho > Рецепт, что в комментарии по ссыле в (3), пробовал?

10

27.10.2011 — 14:41

10-VZ > попробовал, но видимо, все это работает только для действительных сертификатов (что в принципе логично)

11

27.10.2011 — 16:28

а если отказаться от HTTPСоединение, каким способом посоветуете получать программно файлы?

12

27.10.2011 — 17:02

XMLHttpRequest
но вот поможет ли? 1це, скорее всего, его и использует…

13

27.10.2011 — 17:05

По ссылке в (3)предлагается добавить в файл cacert.pem сертификат сайта. Как добавлял? Недавно с похожей задачкой столкнулся. Только для получения файла *.csv

14

27.10.2011 — 17:13

13-roma n > покопаю в эту сторону
14-МимохожийОднако > именно так, как там написано, поэтому склоняюсь к (11)

15

27.10.2011 — 17:51

(15)Я получил сертификат. А вот как вставить в файл. Просто копированием? У меня тоже не получилось. Отпишись, если получится по (13)

16

28.10.2011 — 09:43

16-МимохожийОднако > да, просто копированием

следующая команда команда экспортирует сертификат в текстовый формат PEM:

openssl x509 -inform der -in D:mycert.cer -out D:textcert.pem -text -fingerprint -md5

Само собой, Вы должны изменить пути входящего и исходящего файла. Исходящий файл может не существовать. После выполнения команды на экране Вы увидите MD5 Fingerprint. Скопируйте его — с этой строки начинайте добавление своего сертификата в файл cacert.pem

17

28.10.2011 — 09:59

16-МимохожийОднако >
вот так работает, но ругается на сертификат, сволочь (выдает пару предупреждений)

x = Новый ComОбъект(«Microsoft.XMLHTTP»);
x.Open(«GET», «https://agents.vladavia.ru/oneNet/NetStorage/Home@VLADAIR/Ticket%20Reports/TKT_XF_20110826.XML.xls»,0,логин,пароль);
x.Send();
s = Новый ComОбъект(«ADODB.Stream»);
s.Mode = 3;
s.Type = 1;
s.Open();
s.Write(x.responseBody);
s.SaveToFile(«C:temp.xls», 2);

18

28.10.2011 — 12:25

какие еще есть варианты?

19

28.10.2011 — 13:23

установить сертификат
certutil.exe -f -installCert xxx.cer

20

28.10.2011 — 13:28

20-Гинзбург > а откуда его взять?

21

28.10.2011 — 13:30

——BEGIN CERTIFICATE——
MIIFKjCCBBKgAwIBAgIiAhwFYuVdQTrvi/CC9qy+UAprLoxDoVDLGfy1fG11AgIB
FjANBgkqhkiG9w0BAQUFADAuMRAwDgYDVQQKEwd2bGFkYWlyMR owGAYDVQQLExFP
cmdhbml6YXRpb25hbCBDQTAeFw0xMDAxMzEyMjE1NDFaFw0xMj AxMzEyMjE1NDFa
MCwxEDAOBgNVBAoTB1ZMQURBSVIxGDAWBgNVBAMTD29lcy52bG FkYXZpYS5ydTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7/qs+r7ntYcs0vSB9if+Uo
molfFZs1SCT9VeeuirZ0GWnl51XJbpdtXdPC3fLzTp8Pk8xsQ7 PrgjEvqNdmCmBd
Ry4yOnf8c1uWI+qHuOuIK/+LhC9bD0S3CBnrrrAulLAOtaW1Cvg36WkYk+sTIc7F
h+hkfU10OGBpQEXjf/gT0y+PdX+RtZ5komrgmROm519apiS3JrpdpcTB3MQj4v7r
0sZkHNUEggeByvJSnzTuakGjXSEHO+8rH1LBNFO4wJ/8x2YE4IU7Wcc1fBg70KBf
DDF4zfuJyCYM2PbupTxTZR2FlsgGUuVs0i7dfMg3+XIXpY6wAc WwMyyvyE5eeSUC
AwEAAaOCAjIwggIuMB0GA1UdDgQWBBS6JBml4KdJTvLo5cNnX3 MYPXyZcDAfBgNV
HSMEGDAWgBS0lMq+oKYKlfNq9vmjYEuKwQNKmjALBgNVHQ8EBA MCBaAwDwYDVR0R
BAgwBocEwKjg0zCCAcwGC2CGSAGG+DcBCQQBBIIBuzCCAbcEAg EAAQH/Ex1Ob3Zl
bGwgU2VjdXJpdHkgQXR0cmlidXRlKHRtKRZDaHR0cDovL2Rldm Vsb3Blci5ub3Zl
bGwuY29tL3JlcG9zaXRvcnkvYXR0cmlidXRlcy9jZXJ0YXR0cn NfdjEwLmh0bTCC
AUigGgEBADAIMAYCAQECAUYwCDAGAgEBAgEKAgFpoRoBAQAwCD AGAgEBAgFGMAgw
BgIBAQIBCgIBaaIGAgEXAQH/o4IBBKBYAgECAgIA/wIBAAMNAIAAAAAAAAAAAAAA
AAMJAIAAAAAAAAAAMBgwEAIBAAIIf/////////8BAQACBAbw30gwGDAQAgEAAgh/
/////////wEBAAIEBvDfSKFYAgECAgIA/wIBAAMNAEAAAAAAAAAAAAAAAAMJAEAA
AAAAAAAAMBgwEAIBAAIIf/////////8BAQACBAVi5V0wGDAQAgEAAgh/////////
/wEBAAIEBWLlXaJOMEwCAQICAQACAgD/Aw0AgAAAAAAAAAAAAAAAAwkAgAAAAAAA
AAAwEjAQAgEAAgh//////////wEBADASMBACAQACCH//////////AQEAMA0GCSqG
SIb3DQEBBQUAA4IBAQB3gv1IQv4l4sPHckSBfLZJFnbbZsf4EM zp/TqgC3vKuAZj
jczSXEzzSWyOVmQWYRuj94tEPEOeb1OvIRI10oRr2+Q4DZGAEd 7e+DI4xvJ9qElU
ANVGQO1S06UmLk+bUfsMCOQYrfULWLDRwxzFkCvFTQg/fSSoNgOTIsEsBbnjJGF+
10xiLthgu9litMC926abR++9VKMAI4tEyzuhOUuddEBG0cUGgD 4Y7a/JSpCApssX
qPtpaa4n53QsyyUORZzNVpv8y4Sdcdubi8qtJ/lqUdMBIWSQGwrwhcuWFwt3z0lb
FC4lbFvYpzebC+/ZfCYCzOMSQiBr9t6n5sO/YWxj
——END CERTIFICATE——

22

28.10.2011 — 13:33

убить пробелы между ——

23

28.10.2011 — 13:34

22-Гинзбург > так и что? установил, он от этого действительным то не стал? ИЕ все равно ругается ((

24

28.10.2011 — 13:35

он действителен

25

28.10.2011 — 14:14

т.е. эта утилита работает не как стандартный установщик сертификатов?

26

28.10.2011 — 14:27

+26 нашел, скачал, что-то она у меня не хочет работать —
пишет «не удается найти указанный файл» (путь к файлу указываю)

27

28.10.2011 — 22:00

«не удается найти указанный файл» — отнесись серьезно. Это не браузер сообщает. И не утилита проверки или установки сертификата. Это винда. Та ее часть, что для всех утил ищет файл.

28

01.11.2011 — 17:43

28-VZ > не, ну как еще?

29

01.11.2011 — 20:55

Чтож не попробовать очевидное:
certutil.exe -f -installCert C:Tempmysert.cer
?

30

01.11.2011 — 21:03

+30 И использовать папку Temp как-то стрёмно для «черного ящика» — а ну как он использует эту папку в своих служебных целях?…
Другое дело, сам скрипт пишешь, или алгоритм известен (так «восьмерка», например, использует временный каталог, для разворота и открытия внешних обработок из хранилища)

31

02.11.2011 — 09:25

30-VZ > такая же фигня
31-VZ > пробовал в корень С: положить

32

13.05.2012 — 23:25

Получилось решить проблему?

33

15.05.2012 — 09:37

32-DeMi4 > задача отпала)))

Добрый день!


По какой-то причине перестал работать обмен сайта на ocstore 3 с 1С Розница 8. Не устанавливается соединение с сайтом, при попытке обмена выдаёт такие сообщения:
 

Не удалось установить соединение с сервером. Проверьте имя пользователя и пароль.
Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль,
а также настройки подключения к Интернет.
{ОбщийМодуль.ПроцедурыОбменаССайтом(427)}: Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу ‘export/neoseo_exchange1c.php?type=catalog&mode=checkauth’: Ошибка работы с Интернет:  доступ запрещен (403). <!doctype html><html lang=»ru» class=»is_adaptive» data-panel-url=»https://vip194.hosting.reg.ru/manager»><head><meta charset=»UTF-8″><meta name=»viewport» content=»width=device-width,initial-scale=1″><meta name=»robots» content=»noindex»><title>В&nbsp;доступе на&nbsp;страницу отказано</title><style media=»all»>@keyframes moveClouds{0%{background-position:100vw 35%}to{background-position:-105vw 35%}}@keyframes moveCityClouds{0%{background-position:100vw 35%,bottom,center bottom 33vh}to{background-position:-105vw 35%,bottom,center bottom 33vh}}.b-page{display:flex;flex-direction:column;width:100%;min-width:320px;height:100%;padding:60px 0 0;margin:0;font:12px Arial,Helvetica Neue,Helvetica,FreeSans,sans-serif;background:#fff;color:#364364;-webkit-tap-highlight-color:transparent}html:not(.is_adaptive) .b-page{overflow-x:hidden}@media (min-width:1024px){.is_adaptive .b-page{overflow-x:hidden}}.b-page_type_parking{display:block!important}.b-page_type_error-page{padding:0}html:not(.is_adaptive) .b-page_menu-additi: Ошибка работы с Интернет:  доступ запрещен (403)
Соединение с сайтом не установлено.
Выгрузка товаров отменена.
Не удалось установить соединение с сервером. Проверьте имя пользователя и пароль.
Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль,
а также настройки подключения к Интернет.
{ОбщийМодуль.ПроцедурыОбменаССайтом(427)}: Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу ‘export/neoseo_exchange1c.php?type=catalog&mode=checkauth’: Ошибка работы с Интернет:  доступ запрещен (403). <!doctype html><html lang=»ru» class=»is_adaptive» data-panel-url=»https://vip194.hosting.reg.ru/manager»><head><meta charset=»UTF-8″><meta name=»viewport» content=»width=device-width,initial-scale=1″><meta name=»robots» content=»noindex»><title>В&nbsp;доступе на&nbsp;страницу отказано</title><style media=»all»>@keyframes moveClouds{0%{background-position:100vw 35%}to{background-position:-105vw 35%}}@keyframes moveCityClouds{0%{background-position:100vw 35%,bottom,center bottom 33vh}to{background-position:-105vw 35%,bottom,center bottom 33vh}}.b-page{display:flex;flex-direction:column;width:100%;min-width:320px;height:100%;padding:60px 0 0;margin:0;font:12px Arial,Helvetica Neue,Helvetica,FreeSans,sans-serif;background:#fff;color:#364364;-webkit-tap-highlight-color:transparent}html:not(.is_adaptive) .b-page{overflow-x:hidden}@media (min-width:1024px){.is_adaptive .b-page{overflow-x:hidden}}.b-page_type_parking{display:block!important}.b-page_type_error-page{padding:0}html:not(.is_adaptive) .b-page_menu-additi: Ошибка работы с Интернет:  доступ запрещен (403)

Логин и пароль, ссылка на файл обмена те же что были недавно когда все работало. Программист 1С говорит надо почистить какие-то временные файлы на хостинге. В логах модуля при этом пусто. Что можно сделать, ошибка из-за самой 1С скорее всего?
 

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста получить ссылку
  • Ошибка при вызове метода контекста получить соединение получить
  • Ошибка при вызове метода контекста открытьформу внутренняя ошибка
  • Ошибка при вызове метода контекста открытьфайл чтениеxml открытьфайл имяфайла
  • Ошибка при вызове метода контекста открытьфайл xml