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