Ошибка при вызове метода контекста (Записать) |
Я |
16.10.13 — 22:33
Доброго времени суток:
собственно принялся устранять дубли в Бухгалтерии 3.0 скачал обработку от сюда http://infostart.ru/public/14986/ все хорошо находит дубли находит ссылки но при попытке замены и записи документа начинает ругаться на Ошибка при вызове метода контекста (Записать), как это можно поправить?
Спасибо за внимание!
1 — 16.10.13 — 22:39
Собственно по коду:
Попытка
Параметры.Объект.Записать();
Исключение
Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
Собственно происходит замена значения реквизита (дубликата) на правильное значение и после этого попытка записи измененного документа где:
Параметры — структура
Параметры.Объект — собственно ДокументОбъект
2 — 16.10.13 — 22:49
или посоветуйте достойную альтернативу, кроме сам напиши, время поджимает
3 — 16.10.13 — 23:15
Сообщить(ТипЗнч(Объект));
4 — 16.10.13 — 23:16
Ну или как там в УФ
5 — 16.10.13 — 23:19
(3) минутку
6 — 16.10.13 — 23:20
например:
Документ объект: Ввод начальных остатков
7 — 16.10.13 — 23:25
Период открыт?
8 — 16.10.13 — 23:25
Дата и номер отличны от других документов того же типа?
9 — 16.10.13 — 23:26
Объект.ОбменДанными.Загрузка = Истина?
10 — 16.10.13 — 23:27
11 — 16.10.13 — 23:27
(9) Истина
Отличны, в ручную (проставляя те же значения) все отлично перепроводится и сохраняется…
12 — 16.10.13 — 23:28
(10) искал уже…
13 — 16.10.13 — 23:32
Ну давай сюда свой код полностью
14 — 16.10.13 — 23:36
БылиИсключения = Ложь;
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
ОбрабатываемаяСсылка = Неопределено;
Параметры = Новый Структура;
Параметры.Вставить(«Объект», Неопределено);
СтруктураКоллизий = Новый Структура;
ЕСли мФормаИндикатора<>Неопределено Тогда
мФормаИндикатора.МаксимальноеЗначение = ТаблицаСсылок.Количество();
мФормаИндикатора.КомментарийЗначения = «Выполняется замена элементов.» + ЗаголовокИндикации;
мФормаИндикатора.Значение = 0;
КонецЕсли;
Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
Ссылка = СтрокаТаблицы.Ссылка;
// **** надо вынести в корень
Заменяемые = Новый Соответствие;
Заменяемые.Вставить(Ссылка, ПравильныйЭлемент);
ОбработкаПрерыванияПользователя();
Сообщить(«Обрабатывается » + СтрокаТаблицы.Данные);
Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда
Если Истина
И ОбрабатываемаяСсылка <> Неопределено
И Не ЛксЛиКлючЗаписиРегистра(ОбрабатываемаяСсылка)
Тогда
Если ОтключатьКонтрольЗаписи Тогда
Параметры.Объект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
Параметры.Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ТипЗнч(Параметры.Объект));
Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
Параметры.Объект = Неопределено;
КонецЕсли;
ОбрабатываемаяСсылка = СтрокаТаблицы.Данные;
КонецЕсли;
Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого Движение ИЗ СтрокаТаблицы.Метаданные.Движения Цикл
БылиИсключения = Не ОбработатьЗаписьРегистра(Параметры.Объект.Движения[Движение.Имя], Заменяемые);
Если Истина
И БылиИсключения
И ВыполнятьВТранзакции
Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецЦикла;
Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
НадоЗаписывать = Ложь;
НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
НаборЗаписи.Прочитать();
Если НаборЗаписи.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Для Каждого Измерение ИЗ Последовательность.Измерения Цикл
Если Истина
И Измерение.Тип.СодержитТип(ТипЗнч(Ссылка))
И НаборЗаписи[0][Измерение.Имя] = Ссылка
Тогда
НаборЗаписи[0][Измерение.Имя] = ПравильныйЭлемент;
НадоЗаписывать = Истина;
КонецЕсли;
КонецЦикла;
Если НадоЗаписывать Тогда
Если ОтключатьКонтрольЗаписи Тогда
НаборЗаписи.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
НаборЗаписи.Записать();
Исключение
Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Если СтрокаТаблицы.Метаданные.Владельцы.Содержит(Ссылка.Метаданные()) И Параметры.Объект.Владелец = Ссылка Тогда
Параметры.Объект.Владелец = ПравильныйЭлемент;
КонецЕсли;
Если СтрокаТаблицы.Метаданные.Иерархический И Параметры.Объект.Родитель = Ссылка Тогда
Параметры.Объект.Родитель = ПравильныйЭлемент;
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.ПланыСчетов.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.ПланыВидовРасчета.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.Задачи.Содержит(СтрокаТаблицы.Метаданные)
ИЛИ Метаданные.БизнесПроцессы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Если Параметры.Объект = Неопределено Тогда
Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
КонецЕсли;
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл
СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда
Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент);
ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда
МенеджерЗаписи = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьМенеджерЗаписи();
КоллизийныйМенеджерЗаписи = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьМенеджерЗаписи();
Периодический = (СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
Если Периодический Тогда
МенеджерЗаписи.Период = СтрокаТаблицы.Данные.Период;
КоллизийныйМенеджерЗаписи.Период = СтрокаТаблицы.Данные.Период;
КонецЕсли;
МассивИзмененныхИзмерений = Новый Массив;
Для каждого Рекв Из СтрокаТаблицы.Метаданные.Измерения Цикл
ЗначениеИзмерения = СтрокаТаблицы.Данные[Рекв.Имя];
МенеджерЗаписи[Рекв.Имя] = ЗначениеИзмерения;
Если ЗначениеИзмерения = Ссылка Тогда
КоллизийныйМенеджерЗаписи[Рекв.Имя] = ПравильныйЭлемент;
МассивИзмененныхИзмерений.Добавить(Рекв.Имя);
Иначе
КоллизийныйМенеджерЗаписи[Рекв.Имя] = ЗначениеИзмерения;
КонецЕсли;
КонецЦикла;
БылаКоллизия = Ложь;
Если МассивИзмененныхИзмерений.Количество() > 0 Тогда
КоллизийныйМенеджерЗаписи.Прочитать();
Если КоллизийныйМенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Прочитать();
МассивКоллекцийРеквизитов = Новый Массив;
МассивКоллекцийРеквизитов.Добавить(СтрокаТаблицы.Метаданные.Ресурсы);
МассивКоллекцийРеквизитов.Добавить(СтрокаТаблицы.Метаданные.Реквизиты);
Если Не СтруктураКоллизий.Свойство(СтрокаТаблицы.Метаданные.Имя) Тогда
ТаблицаЗаписей = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьНаборЗаписей().Выгрузить();
ТаблицаЗаписей.Колонки.Добавить(«МенеджерЗамены»);
ТаблицаЗаписей.Колонки.Добавить(«МенеджерОригинала»);
Для Каждого КоллекцияРеквизитов Из МассивКоллекцийРеквизитов Цикл
Для Каждого МетаРеквизит Из КоллекцияРеквизитов Цикл
ИмяКолонки = МетаРеквизит.Имя;
ПредставлениеКолонки = МетаРеквизит.Представление();
КолонкаОригинала = ТаблицаЗаписей.Колонки[ИмяКолонки];
КолонкаОригинала.Имя = «Оригинал» + ИмяКолонки;
КолонкаОригинала.Заголовок = «Оригинал: » + ПредставлениеКолонки;
КолонкаЗамены = ТаблицаЗаписей.Колонки.Вставить(ТаблицаЗаписей.Колонки.Индекс(КолонкаОригинала),
«Замена» + ИмяКолонки, , «Замена: » + ПредставлениеКолонки);
ЗаполнитьЗначенияСвойств(КолонкаЗамены, КолонкаОригинала, , «Имя, Заголовок»);
КонецЦикла;
КонецЦикла;
ТаблицаЗаписей.Колонки.Вставить(0, «Заменить», Новый ОписаниеТипов(«Булево»), «Заменить»);
СтруктураКоллизий.Вставить(СтрокаТаблицы.Метаданные.Имя, ТаблицаЗаписей);
КонецЕсли;
НоваяКоллизийнаяЗапись = СтруктураКоллизий[СтрокаТаблицы.Метаданные.Имя].Добавить();
Для Каждого КоллекцияРеквизитов Из МассивКоллекцийРеквизитов Цикл
Для Каждого МетаРеквизит Из КоллекцияРеквизитов Цикл
ИмяКолонки = МетаРеквизит.Имя;
ЗначениеРеквизита = МенеджерЗаписи[ИмяКолонки];
НоваяКоллизийнаяЗапись[«Оригинал» + ИмяКолонки] = КоллизийныйМенеджерЗаписи[ИмяКолонки];
Если ЗначениеРеквизита = Ссылка Тогда
НоваяКоллизийнаяЗапись[«Замена» + ИмяКолонки] = ПравильныйЭлемент;
Иначе
НоваяКоллизийнаяЗапись[«Замена» + ИмяКолонки] = ЗначениеРеквизита;
КонецЕсли;
КоллизийныйМенеджерЗаписи[ИмяКолонки] = НоваяКоллизийнаяЗапись[«Замена» + ИмяКолонки];
Если НоваяКоллизийнаяЗапись[«Оригинал» + ИмяКолонки] <> НоваяКоллизийнаяЗапись[«Замена» + ИмяКолонки] Тогда
БылаКоллизия = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если БылаКоллизия Тогда
ЗаполнитьЗначенияСвойств(НоваяКоллизийнаяЗапись, КоллизийныйМенеджерЗаписи);
Для Каждого ИмяКолонки Из МассивИзмененныхИзмерений Цикл
НоваяКоллизийнаяЗапись[ИмяКолонки] = МенеджерЗаписи[ИмяКолонки];
КонецЦикла;
НоваяКоллизийнаяЗапись.МенеджерЗамены = КоллизийныйМенеджерЗаписи;
НоваяКоллизийнаяЗапись.МенеджерОригинала = МенеджерЗаписи;
Иначе
СтруктураКоллизий[СтрокаТаблицы.Метаданные.Имя].Удалить(НоваяКоллизийнаяЗапись);
МенеджерЗаписи.Удалить();
БылаКоллизия = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если БылаКоллизия Тогда
БылиИсключения = Ложь;
Иначе
БылиИсключения = Не ОбработатьЗаписьРегистра(МенеджерЗаписи, Заменяемые);
КонецЕсли;
Если Истина
И БылиИсключения
И ВыполнятьВТранзакции
Тогда
Перейти ~ОТКАТ;
КонецЕсли;
Иначе
Сообщить(«Ссылки типа «+СтрокаТаблицы.Метаданные+» не заменяются!!»);
КонецЕсли;
ОбработкаПрерыванияПользователя();
Если мФормаИндикатора <> Неопределено Тогда
мФормаИндикатора.Значение = мФормаИндикатора.Значение + 1;
Иначе
Состояние(«Выполнено » + Формат(100 * ТаблицаСсылок.Индекс(СтрокаТаблицы) + 1 / ТаблицаСсылок.Количество(), «ЧЦ=5; ЧДЦ=2») + «%»);
КонецЕсли;
КонецЦикла;
Если Параметры.Объект <> Неопределено Тогда
Если ОтключатьКонтрольЗаписи Тогда
Параметры.Объект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Попытка
Параметры.Объект.Записать();
Если ОтключатьКонтрольЗаписи Тогда
ЗаписьЖурналаРегистрации(«Запись с флагом Загрузка», УровеньЖурналаРегистрации.Информация, СтрокаТаблицы.Метаданные,
СтрокаТаблицы.Данные, «»);
КонецЕсли;
Исключение
Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
БылиИсключения = Истина;
Если ВыполнятьВТранзакции Тогда
Перейти ~ОТКАТ;
КонецЕсли;
КонецПопытки;
КонецЕсли;
МассивЭлементовКУдалению = Новый Массив;
Для Каждого ЭлементТаблицыРегистра Из СтруктураКоллизий Цикл
Если ЭлементТаблицыРегистра.Значение.Количество() = 0 Тогда
МассивЭлементовКУдалению.Добавить(ЭлементТаблицыРегистра.Ключ);
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементКУдалению Из МассивЭлементовКУдалению Цикл
СтруктураКоллизий.Удалить(ЭлементКУдалению);
КонецЦикла;
Если СтруктураКоллизий.Количество() > 0 Тогда
ФормаЗамещенияВНезависимыхРегистрахСведений = ПолучитьФорму(«ФормаЗамещенияВНезависимыхРегистрахСведений»);
ФормаЗамещенияВНезависимыхРегистрахСведений.СтруктураКоллизий = СтруктураКоллизий;
ФормаЗамещенияВНезависимыхРегистрахСведений.ОткрытьМодально();
КонецЕсли;
~ОТКАТ:
Если ВыполнятьВТранзакции Тогда
Если БылиИсключения Тогда
ОтменитьТранзакцию();
Иначе
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецЕсли;
Возврат Не БылиИсключения;
15 — 16.10.13 — 23:49
На первый взгляд все нормуль. Может какие обязательные реквизиты не заполнены в документе.
16 — 16.10.13 — 23:49
Поковыряйся перед записью и при записи этого дока
17 — 16.10.13 — 23:50
да вроде нет вручную делаю абсолютно те же действия (меняю значения, перепровожу) все ок, ничего лишнего…
18 — 16.10.13 — 23:50
(16) в том то и дело что выскакивает на всех доках
19 — 16.10.13 — 23:51
(16) а хотя ты знаешь, не всех, есть опредеенная группа, действительно пойду в этом направлении спасибо!
20 — 17.10.13 — 00:07
посмотри в ЖР ошибки и так какую ошибку он тебе говорит?
3axap_4
21 — 17.10.13 — 00:22
(20) чёт в жр ничего про ошибки нет, если делать в транзакции то у нее статус — отменено, если без — то завершено, но документ не в том ни в другом случае не сохраняется
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;

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

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

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

Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Ошибка Записать(РежимЗаписиДокумента.ОтменаПроведения)
Автор dimanuga, 31 окт 2018, 18:14
0 Пользователей и 1 гость просматривают эту тему.
К кнопке на форме привязана отмена проведения:
&НаКлиенте
Процедура ОтменитьПроведение(Команда)
ПоказатьВопрос(Новый ОписаниеОповещения(«ПередОтменойПроведения», ЭтотОбъект),
«Отменить проведение документов?», РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПередОтменойПроведения(Результат, Отказ) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ВызовОтменыПроведения();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВызовОтменыПроведения()Экспорт
ЭтаФорма.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ЭтаФорма.Модифицированность = Ложь;
Закрыть();
КонецПроцедуры
Ошибка:
{Документ.ПоступлениеЖивотных.Форма.ФормаДокумента.Форма(242)}: Ошибка при вызове метода контекста (Записать)
ЭтаФорма.Записать(РежимЗаписиДокумента.ОтменаПроведения);
по причине:
Несоответствие типов (параметр номер ‘1’)
Несоответствие типов (параметр номер ‘1’)
В чем моя ошибка?
Скорее всего, потому что у формы записать может быть только так ЭтаФорма.Записать();
Если передавать какой либо параметр, то только через структуру, а не как обычно с объектами.
Читайте справку.
Помог, нажми спасибо. Не помог, нажми спасибо 🙂
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google
Ну хорошо, а как передать РежимЗаписи.ОтменаРедактирования ?
Можно на примере ?
Цитата: dimanuga от 31 окт 2018, 19:42
Ну хорошо, а как передать РежимЗаписи.ОтменаРедактирования ?
Можно на примере ?
Ни разу не делал, попробуй так
Структура.Вставить(«РежимЗаписиДокумента», РежимЗаписиДокумента.ОтменаПроведения);
Помог, нажми спасибо. Не помог, нажми спасибо 🙂
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google
Почему и зачем ЭтаФорма, а не ЭтотОбъект?
Ну да ладно.
ЭтаФорма.Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.ОтменаПроведения));
ЭтаФорма.Записать(Новый Структура(«РежимЗаписи», РежимЗаписиДокумента.ОтменаПроведения));
{Документ.ПоступлениеЖивотных.Форма.ФормаДокумента.Форма(262)}: Поле объекта недоступно для записи (РежимЗаписиДокумента)
РежимЗаписиДокумента = ПараметрыЗаписи;
Или так:
ПараметрыФ = Новый Структура(«РежимЗаписиДокумента», РежимЗаписиДокумента.ОтменаПроведения);
ЭтаФорма.Записать(ПараметрыФ);
{Документ.ПоступлениеЖивотных.Форма.ФормаДокумента.Форма(266)}: Поле объекта недоступно для записи (РежимЗаписиДокумента)
РежимЗаписиДокумента = ПараметрыЗаписи;
РежимЗаписиДокумента = ПараметрыЗаписи;
Ты уверен, что этого нигде не писал? Например в строке 262 или 266
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
Процедура ВыполнитьФормированиеПлан() //Состояние("Выборка данных (план)..."); Запр = Новый Запрос; Запр.Текст = "ВЫБРАТЬ | осиПЭОПриказ1.Наименование КАК НоменклатураПЭО, | осиПЭОПриказ1.Количество * осиПЭОПриказ1.Цена * 1000 КАК Сумма, | осиПЭОПриказ1.Подразделение КАК ПодразделениеПЭО, | ВЫБОР | КОГДА осиПЭОПриказ1.Пассив = &Строительство | ТОГДА &Счет106 | КОГДА осиПЭОПриказ1.Пассив = &Приобретение | ТОГДА &Счет107 | КОГДА осиПЭОПриказ1.Пассив = &ИнвестПроекты | ТОГДА &Счет108 | КОНЕЦ КАК СчетПЭО, | ВЫБОР | КОГДА осиПЭОПриказ1.Пассив = &Строительство | ТОГДА NULL | ИНАЧЕ осиПЭОПриказ1.Количество | КОНЕЦ КАК Количество |ИЗ | РегистрСведений.осиПЭОПриказ1 КАК осиПЭОПриказ1 |ГДЕ | осиПЭОПриказ1.Период МЕЖДУ &НачДата И &КонДата | И (осиПЭОПриказ1.Пассив = &Приобретение | ИЛИ осиПЭОПриказ1.Пассив = &Строительство ИЛИ осиПЭОПриказ1.Пассив = &ИнвестПроекты) | И осиПЭОПриказ1.Приоритет = 0"; Запр.УстановитьПараметр("НачДата", НачалоМесяца(Объект.ЗаПериод)); Запр.УстановитьПараметр("КонДата", КонецМесяца(Объект.ЗаПериод)); Запр.УстановитьПараметр("Приобретение", ПолучитьЭлементСправочникаПоРеквизиту("осиПЭОПассив", "Наименование", "_Приобретение оборудования")); Запр.УстановитьПараметр("Строительство", ПолучитьЭлементСправочникаПоРеквизиту("осиПЭОПассив", "Наименование", "Капитальное строительство")); Запр.УстановитьПараметр("ИнвестПроекты", ПолучитьЭлементСправочникаПоРеквизиту("осиПЭОПассив", "Наименование", "_Инвестиционные проекты")); Запр.УстановитьПараметр("Счет106", ПолучитьЭлемент("ПланСчетов", "Инт_Управленческий2", "Код", "106")); Запр.УстановитьПараметр("Счет107", ПолучитьЭлемент("ПланСчетов", "Инт_Управленческий2", "Код", "107")); Запр.УстановитьПараметр("Счет108", ПолучитьЭлемент("ПланСчетов", "Инт_Управленческий2", "Код", "108")); ТЗ=Запр.Выполнить().Выгрузить(); Выборка = Запр.Выполнить().Выбрать(); //Состояние("Формирование проводок (план)..."); Сценарий = ПолучитьЭлемент("Справочник", "Инт_Сценарии", "Наименование", "План"); ЦФО = ПолучитьЭлемент("Справочник", "Инт_ЦФО", "Наименование", "ЦЗ ""Оренбургские минералы"""); ВидСубконтоНоменклатураПЭО = ПолучитьЭлемент("ПланВидовХарактеристик", "ИНТ_Аналитика", "Код", "00000000042");//Номенклатура ПЭО ВидСубконтоПодразделенияПЭО = ПолучитьЭлемент("ПланВидовХарактеристик", "ИНТ_Аналитика", "Код", "00000000053");//Подразделения ПЭО Счет00 = ПолучитьЭлемент("ПланСчетов", "Инт_Управленческий2", "Код", "0"); Проформа = ПолучитьПроформу(Сценарий).ПолучитьОбъект(); ДвиженияУпр2 = Проформа.Движения.Инт_Управленческий2; ДвиженияУпр2.Очистить(); Пока Выборка.Следующий() Цикл Проводка = ДвиженияУпр2.Добавить(); Проводка.Период = КонецМесяца(Объект.ЗаПериод); Проводка.Содержание = "авт.загр."; Проводка.СчетДт = Выборка.СчетПЭО; Проводка.СчетКт = Счет00; Проводка.Сценарий = Сценарий; Проводка.Сумма = Выборка.Сумма; Проводка.ЦФОДт = ЦФО; Если Выборка.Количество<> 0 Тогда Проводка.КоличествоДт = Выборка.Количество; КонецЕсли; Проводка.Субконто1Дт= Выборка.НоменклатураПЭО; Проводка.Субконто2Дт = Выборка.ПодразделениеПЭО; КонецЦикла; ДвиженияУпр2.Записать(); //Состояние(); КонецПроцедуры |