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

Выявить ошибку при восстановлении последовательности

Я

  

John83

19.04.17 — 14:20

УТ 10.3 несколько допиленная

8.3.8.2197

sql 2008 К2

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

{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(3806)}: Ошибка при вызове метода контекста (Восстановить)

            Последовательности.ПартионныйУчет.Восстановить();

по причине:

Не удалось провести «Реализация товаров и услуг А-000009577 от 26.04.2016 10:41:37»!

Но непонятно, в чем причина. Если запустить вручную, то никаких проблем.

Как отловить проблему?

  

John83

1 — 19.04.17 — 14:20

запускаю таким образом

Попытка

    Последовательности.ПартионныйУчет.Восстановить();

Исключение

    ЗаписьЖурналаРегистрации(«Сообщение», УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

КонецПопытки;

  

Cyberhawk

2 — 19.04.17 — 14:22

Надо в форме провести или в списке — возможно, будет ошибка в виде сообщения

  

Cyberhawk

3 — 19.04.17 — 14:23

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

  

John83

4 — 19.04.17 — 14:33

(2)(3) я провожу — ошибок/сообщений нет

  

John83

5 — 19.04.17 — 14:35

а если задана дата запрета редактирования (по группам), то как она будет работать на USR1CV82?

  

agarych

6 — 19.04.17 — 14:36

проведи на сервере, возможно ошибка появляется только там.

  

piter3

7 — 19.04.17 — 14:37

А что в журнале тоже пусто?

  

John83

8 — 19.04.17 — 14:38

(7) в ЖР сообщение из (0)

  

piter3

9 — 19.04.17 — 14:38

А она не открыта случаем у пользователей?

  

John83

10 — 19.04.17 — 14:39

(9) нет

перед этим все выгоняются

  

John83

11 — 19.04.17 — 14:40

(6) типа сделать обработку

#НаСервере

Док.Записать(РежимЗаписиДокумента.Проведение);

?

  

piter3

12 — 19.04.17 — 14:42

остановка по ошибке может стоит попробовать?

  

John83

13 — 19.04.17 — 14:43

(12) проходит без проблем

  

agarych

14 — 19.04.17 — 15:17

Зайти на сервер приложений, запустить 1с, провести документ. Проведется?

  

agarych

15 — 19.04.17 — 15:19

+ Запускаешь рег. задание под каким пользователем? может быть у него нет доступных ролей или доп. прав (например, проведение в минус по организациям).

  

John83

16 — 19.04.17 — 15:24

(15) по всей видимости под USR1CV82

как понимаю, у него должны быть полные права

  

John83

17 — 19.04.17 — 15:26

(14) «Зайти на сервер приложений»

это как?

  

youalex

18 — 19.04.17 — 15:39

(11) для ОФ — общий модуль с одной галкой —  Сервер

или в режиме УФ — внешник с процедурой &НаСервере

  

Buster007

19 — 19.04.17 — 15:45

(13) у тебя соблюдены не все условия…

Я подозреваю, что восстановление последовательности происходит в транзакции. До этого документа восстанавливается n документов, которые в свою очередь формируют, например, отрицательный остаток или еще какую-то ерунду…

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

Кстати, а для более полной проверки надо запустить Последовательности.ПартионныйУчет.Восстановить() под собой, а не рег. заданием.

  

John83

20 — 19.04.17 — 16:05

(18) нормально проводится

  

John83

21 — 19.04.17 — 16:06

(19) спотыкается на первом документе, т.е. вчера до какого-то момента провел и отвалился, а сегодня спотыкается на первом.

Я под собой и пробовал — ошибок нет.

  

piter3

22 — 19.04.17 — 16:25

ДАта запрета мож стоит.

  

John83

23 — 19.04.17 — 16:25

(22) дата запрета есть, но под период документа в ошибке не попадает

  

piter3

24 — 19.04.17 — 16:56

несколько допиленная значит туда копать

  

piter3

25 — 19.04.17 — 16:58

или смотреть на эту накладную внимательно.а если прводить с момента после нее то все хороршо?

С 18 релиза можно восстанавливать последовательности, используя регламентные задания. Пример настройки времени с настройками: каждый день в интервале с 8-00 по 18-00 запуск через каждые 5 мин прикрепил, в примере видны три запуска с интервалом 5 мин. Для создания напоминания нужно немного доработать в модуле самой обработки есть функция Восстановить(). В конце функции можно добавить проверку для переменной «Ошибка» и если есть ошибка создать «Напоминание» еще можно запоминать ссылку на документ, в котором произошла ошибка по тексту поищите заполнение переменной Ошибка = Истина. Примерный код создания напоминания взял из СформироватьЗаписьРСНапоминания() общего модуля сбСобытия:

// Создаем набор записей
НаборЗаписей = РегистрыСведений.Напоминания.СоздатьНаборЗаписей();

// Исключаем бесконечный цикл
НаборЗаписей.ДополнительныеСвойства.Вставить(«СозданПоЗначимомуСобытию», Истина);

НаборЗаписей.Отбор.Автор.Установить(ПараметрыНапоминания.Автор);
НаборЗаписей.Отбор.Завершено.Установить(ПараметрыНапоминания.Завершено);
НаборЗаписей.Отбор.РеальнаяДатаОповещения.Установить(ПараметрыНапоминания.РеальнаяДатаОповещения);
НаборЗаписей.Отбор.Объект.Установить(ПараметрыНапоминания.Объект);

// Количество записей будет равно количеству пользователей, которые получат напоминание.
Для Каждого ТекСтрока Из ПараметрыНапоминания.Пользователи Цикл
НоваяЗапись = НаборЗаписей.Добавить();  
НоваяЗапись.Пользователь = ТекСтрока.Пользователь;
НоваяЗапись.Автор        = ПараметрыНапоминания.Автор;
НоваяЗапись.Завершено    = ПараметрыНапоминания.Завершено;
НоваяЗапись.РеальнаяДатаОповещения = ПараметрыНапоминания.РеальнаяДатаОповещения;
НоваяЗапись.Объект       = ПараметрыНапоминания.Объект;

// Теперь ресурсы
НоваяЗапись.ДатаНачала              = ПараметрыНапоминания.ДатаНачала;
НоваяЗапись.ДатаОповещения          = ПараметрыНапоминания.ДатаОповещения;
НоваяЗапись.СрокДоНачала            = ПараметрыНапоминания.СрокДоНачала;
НоваяЗапись.Тема                    = ПараметрыНапоминания.Тема;
НоваяЗапись.ТипПериода              = ПараметрыНапоминания.ТипПериода;
НоваяЗапись.ДатаАктуальности        = ПараметрыНапоминания.ДатаАктуальности;
НоваяЗапись.Описание                = ПараметрыНапоминания.Описание;
НоваяЗапись.УдалитьПоИстеченииСрока = ПараметрыНапоминания.УдалитьПоИстеченииСрока;
НоваяЗапись.Редактирование = Ложь;                          
КонецЦикла;

Попытка
НаборЗаписей.Записать(Истина);
Параметры.ВыполненныеДействия.Добавить(«Создано напоминание.»);
Исключение
Параметры.Ошибки.Добавить(«Действие <» + Выборка.Наименование + «> — ошибка при записи: «+ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

В платформе 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С.

Иногда перестает восстанавливать выдавая ошибку: Ошибка при вызове метода контекста (Воостановить). Но самое интересное, что удачно завершает восстановление последовательности, записывая после ошибки «Фоновое задание успешное завершение». Никаких ошибок больше не выдает падает на документе, который проводится аналогично уже проведенным в этой последовательности. что делать не знаю, может кто поможет?

Воостановление идет на сервере. Если бы доки не проводились из-за не соответствия типов то выдавалась бы соответсвующая ошибка. Сервер 1С IBM DB2

ну может кто нибудь проснулся кто сталкивался с таким. На MS SQL серваке поведение такое же.

В Косоли заданий пишет, что задание выполнено, и нет никаких ошибок.

Настораживает Ваше «иногда» — проблема скорее всего в «окружении», а не в алгоритме. Работают ли в это время пользователи, фоновые задания, другие регламентные задания? Может они провоцируют востановление на ошибку?

«Фоновое задание успешное завершение» — это просто: ошибка возникает в попытке -алгоритмы «вне» попытки не «видят» эту ошибку (считается что ошибку обрабатывает исключение).

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

А другие регламенты? Кстати: текст ОписаниеОшибки озвучьте.

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

ОШИБКА: Во время восстановления последовательности произошла ошибка: {ОбщийМодуль.РаботаСДокументами}: Ошибка при вызове метода контекста (Восстановить): Операция не выполнена!

Выгоняете пользователей регламентом? Может быть процессы «подвисают», не сразу обрываются…

Мдя… информативно :( А что в системных журналах? Может быть технологический журнал пора задействовать?

«и больше не запускается» — последовательность остановилась на доке и начинает на нём буксовать? А что такого особенного в этом доке?

Я не уверен что это из-за документа, так как она останавливается на разных документах

Проблему решил пересоздав последовательности методом копирования, старые удалил, новые запустил на восстановление и все заработало. Видимо произошел какой то сбой в 1С с этими последовательностями.

Тэги:

Комментарии доступны только авторизированным пользователям

Выявить ошибку при восстановлении последовательности

Я
   John83

19.04.17 — 14:20

УТ 10.3 несколько допиленная

8.3.8.2197

sql 2008 К2

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

{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(3806)}: Ошибка при вызове метода контекста (Восстановить)

            Последовательности.ПартионныйУчет.Восстановить();

по причине:

Не удалось провести «Реализация товаров и услуг А-000009577 от 26.04.2016 10:41:37»!

Но непонятно, в чем причина. Если запустить вручную, то никаких проблем.

Как отловить проблему?

   John83

1 — 19.04.17 — 14:20

запускаю таким образом

Попытка

    Последовательности.ПартионныйУчет.Восстановить();

Исключение

    ЗаписьЖурналаРегистрации(«Сообщение», УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

КонецПопытки;

   Cyberhawk

2 — 19.04.17 — 14:22

Надо в форме провести или в списке — возможно, будет ошибка в виде сообщения

   Cyberhawk

3 — 19.04.17 — 14:23

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

   John83

4 — 19.04.17 — 14:33

(2)(3) я провожу — ошибок/сообщений нет

   John83

5 — 19.04.17 — 14:35

а если задана дата запрета редактирования (по группам), то как она будет работать на USR1CV82?

   agarych

6 — 19.04.17 — 14:36

проведи на сервере, возможно ошибка появляется только там.

   piter3

7 — 19.04.17 — 14:37

А что в журнале тоже пусто?

   John83

8 — 19.04.17 — 14:38

(7) в ЖР сообщение из (0)

   piter3

9 — 19.04.17 — 14:38

А она не открыта случаем у пользователей?

   John83

10 — 19.04.17 — 14:39

(9) нет

перед этим все выгоняются

   John83

11 — 19.04.17 — 14:40

(6) типа сделать обработку

#НаСервере

Док.Записать(РежимЗаписиДокумента.Проведение);

?

   piter3

12 — 19.04.17 — 14:42

остановка по ошибке может стоит попробовать?

   John83

13 — 19.04.17 — 14:43

(12) проходит без проблем

   agarych

14 — 19.04.17 — 15:17

Зайти на сервер приложений, запустить 1с, провести документ. Проведется?

   agarych

15 — 19.04.17 — 15:19

+ Запускаешь рег. задание под каким пользователем? может быть у него нет доступных ролей или доп. прав (например, проведение в минус по организациям).

   John83

16 — 19.04.17 — 15:24

(15) по всей видимости под USR1CV82

как понимаю, у него должны быть полные права

   John83

17 — 19.04.17 — 15:26

(14) «Зайти на сервер приложений»

это как?

   youalex

18 — 19.04.17 — 15:39

(11) для ОФ — общий модуль с одной галкой —  Сервер

или в режиме УФ — внешник с процедурой &НаСервере

   Buster007

19 — 19.04.17 — 15:45

(13) у тебя соблюдены не все условия…

Я подозреваю, что восстановление последовательности происходит в транзакции. До этого документа восстанавливается n документов, которые в свою очередь формируют, например, отрицательный остаток или еще какую-то ерунду…

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

Кстати, а для более полной проверки надо запустить Последовательности.ПартионныйУчет.Восстановить() под собой, а не рег. заданием.

   John83

20 — 19.04.17 — 16:05

(18) нормально проводится

   John83

21 — 19.04.17 — 16:06

(19) спотыкается на первом документе, т.е. вчера до какого-то момента провел и отвалился, а сегодня спотыкается на первом.

Я под собой и пробовал — ошибок нет.

   piter3

22 — 19.04.17 — 16:25

ДАта запрета мож стоит.

   John83

23 — 19.04.17 — 16:25

(22) дата запрета есть, но под период документа в ошибке не попадает

   piter3

24 — 19.04.17 — 16:56

несколько допиленная значит туда копать

  

piter3

25 — 19.04.17 — 16:58

или смотреть на эту накладную внимательно.а если прводить с момента после нее то все хороршо?

Иногда перестает восстанавливать выдавая ошибку: Ошибка при вызове метода контекста (Воостановить). Но самое интересное, что удачно завершает восстановление последовательности, записывая после ошибки «Фоновое задание успешное завершение». Никаких ошибок больше не выдает падает на документе, который проводится аналогично уже проведенным в этой последовательности. что делать не знаю, может кто поможет?

Воостановление идет на сервере. Если бы доки не проводились из-за не соответствия типов то выдавалась бы соответсвующая ошибка. Сервер 1С IBM DB2

ну может кто нибудь проснулся кто сталкивался с таким. На MS SQL серваке поведение такое же.

В Косоли заданий пишет, что задание выполнено, и нет никаких ошибок.

Настораживает Ваше «иногда» — проблема скорее всего в «окружении», а не в алгоритме. Работают ли в это время пользователи, фоновые задания, другие регламентные задания? Может они провоцируют востановление на ошибку?

«Фоновое задание успешное завершение» — это просто: ошибка возникает в попытке -алгоритмы «вне» попытки не «видят» эту ошибку (считается что ошибку обрабатывает исключение).

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

А другие регламенты? Кстати: текст ОписаниеОшибки озвучьте.

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

ОШИБКА: Во время восстановления последовательности произошла ошибка: {ОбщийМодуль.РаботаСДокументами}: Ошибка при вызове метода контекста (Восстановить): Операция не выполнена!

Выгоняете пользователей регламентом? Может быть процессы «подвисают», не сразу обрываются…

Мдя… информативно :( А что в системных журналах? Может быть технологический журнал пора задействовать?

«и больше не запускается» — последовательность остановилась на доке и начинает на нём буксовать? А что такого особенного в этом доке?

Я не уверен что это из-за документа, так как она останавливается на разных документах

Проблему решил пересоздав последовательности методом копирования, старые удалил, новые запустил на восстановление и все заработало. Видимо произошел какой то сбой в 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С.

С 18 релиза можно восстанавливать последовательности, используя регламентные задания. Пример настройки времени с настройками: каждый день в интервале с 8-00 по 18-00 запуск через каждые 5 мин прикрепил, в примере видны три запуска с интервалом 5 мин. Для создания напоминания нужно немного доработать в модуле самой обработки есть функция Восстановить(). В конце функции можно добавить проверку для переменной «Ошибка» и если есть ошибка создать «Напоминание» еще можно запоминать ссылку на документ, в котором произошла ошибка по тексту поищите заполнение переменной Ошибка = Истина. Примерный код создания напоминания взял из СформироватьЗаписьРСНапоминания() общего модуля сбСобытия:

// Создаем набор записей
НаборЗаписей = РегистрыСведений.Напоминания.СоздатьНаборЗаписей();

// Исключаем бесконечный цикл
НаборЗаписей.ДополнительныеСвойства.Вставить(«СозданПоЗначимомуСобытию», Истина);

НаборЗаписей.Отбор.Автор.Установить(ПараметрыНапоминания.Автор);
НаборЗаписей.Отбор.Завершено.Установить(ПараметрыНапоминания.Завершено);
НаборЗаписей.Отбор.РеальнаяДатаОповещения.Установить(ПараметрыНапоминания.РеальнаяДатаОповещения);
НаборЗаписей.Отбор.Объект.Установить(ПараметрыНапоминания.Объект);

// Количество записей будет равно количеству пользователей, которые получат напоминание.
Для Каждого ТекСтрока Из ПараметрыНапоминания.Пользователи Цикл
НоваяЗапись = НаборЗаписей.Добавить();  
НоваяЗапись.Пользователь = ТекСтрока.Пользователь;
НоваяЗапись.Автор        = ПараметрыНапоминания.Автор;
НоваяЗапись.Завершено    = ПараметрыНапоминания.Завершено;
НоваяЗапись.РеальнаяДатаОповещения = ПараметрыНапоминания.РеальнаяДатаОповещения;
НоваяЗапись.Объект       = ПараметрыНапоминания.Объект;

// Теперь ресурсы
НоваяЗапись.ДатаНачала              = ПараметрыНапоминания.ДатаНачала;
НоваяЗапись.ДатаОповещения          = ПараметрыНапоминания.ДатаОповещения;
НоваяЗапись.СрокДоНачала            = ПараметрыНапоминания.СрокДоНачала;
НоваяЗапись.Тема                    = ПараметрыНапоминания.Тема;
НоваяЗапись.ТипПериода              = ПараметрыНапоминания.ТипПериода;
НоваяЗапись.ДатаАктуальности        = ПараметрыНапоминания.ДатаАктуальности;
НоваяЗапись.Описание                = ПараметрыНапоминания.Описание;
НоваяЗапись.УдалитьПоИстеченииСрока = ПараметрыНапоминания.УдалитьПоИстеченииСрока;
НоваяЗапись.Редактирование = Ложь;                          
КонецЦикла;

Попытка
НаборЗаписей.Записать(Истина);
Параметры.ВыполненныеДействия.Добавить(«Создано напоминание.»);
Исключение
Параметры.Ошибки.Добавить(«Действие <» + Выборка.Наименование + «> — ошибка при записи: «+ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

  • Ошибка восстановления пароля авито
  • Ошибка воспроизведения идентификатор воспроизведения youtube на android
  • Ошибка воспроизведения кинопоиск приложение на телевизоре
  • Ошибка восстановления данных iphone
  • Ошибка воспроизведения иви на смарт тв