|
КД2 Ошибка в стандартном модуле при загрузке | ☑ | ||
---|---|---|---|---|
0
Nik_nik_nik
14.08.12
✎
17:17
|
Пишу конвертацию с самописной 7-ки (ближе всего к комплексной) в УПП. Почти все что надо написал, протестил на небольших объемах. И при полном тестировании наткнулся на вот какой глюк:
Переношу номенклатуру. Выгружаю всю сразу оптом - на этом этапе никаких ошибок. При загрузке выпадает с такой ошибкой: "Ошибка:{ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5129)}: Ошибка при установке значения атрибута контекста (Владелец): Справочник не имеет владельца" По отладчику посмотрел что происходит... в запросе номенклатура отбирается по владельцу (с типом той же номенклатуры)... никакого владельца у номенклатуры нет, справочник никому не подчинен, в ПКО ни слова ни о каких владельцах... Попробовал выгружать кусками... номенклатуры чуть больше 100 000 позиций. Делением кусков пополам нашел примерный диапазон кодов на котором случается такая беда, но дальше интереснее... Глюк случается только в определенном диапазоне кодов номенклатуры и только в случае если выгружаемых объектов больше 5102 штук (на этом объекте ошибка и происходит). Т.е. берем коды с 95000 по 97500 - количество объектов 5170 - ошибка есть берем коды с 95000 по 96000 - количество объектов 2100 - ошибки нет берем коды с 96000 по 97500 - количество объектов 3013 - ошибки нет Пробовал брать внешнюю обработку выгрузки от других версий конвертации (и от последних тоже) - эффект тот же. Куда дальше копать, граждане??? |
|||
1
SUA
14.08.12
✎
17:21
|
"По отладчику посмотрел что происходит... в запросе номенклатура отбирается по владельцу"
зачем? |
|||
2
Nik_nik_nik
14.08.12
✎
17:24
|
(1), зачем отбирается? - Без понятия - это функция поиска ссылки на объект. Запросом отбираются все элементы подходящие по фильтру и выбирается первый элемент из выборки.
зачем посмотрел? - интересно стало :) |
|||
3
0Mint
14.08.12
✎
17:42
|
А если поставить Использовать транзакции?
|
|||
4
ДемонМаксвелла
14.08.12
✎
17:45
|
ошибка происходит в какой процедуре или обработчике? и код покажи возле строки 5129.
|
|||
5
Nik_nik_nik
14.08.12
✎
17:45
|
(3) - пробовал, не помогло.
Выяснил что по сути порядок кодов не имеет значения, ошибка вылазит в любой выгрузке связанной с номенклатурой (например документ Инвентаризация), в котором объектов больше этого числа.. |
|||
6
SUA
14.08.12
✎
17:49
|
Функция НайтиЭлементПоСвойствамПоиска()?
поля/правила поиска для номенклатуры какие? |
|||
7
Nik_nik_nik
14.08.12
✎
17:58
|
Функция НайтиЭлементЗапросом(СтруктураСвойств, СвойстваПоиска, ТипОбъекта = Неопределено,
МенеджерТипа = Неопределено, КоличествоРеальныхСвойствДляПоиска = Неопределено) КоличествоСвойствДляПоиска = ?(КоличествоРеальныхСвойствДляПоиска = Неопределено, СвойстваПоиска.Количество(), КоличествоРеальныхСвойствДляПоиска); Если КоличествоСвойствДляПоиска = 0 И СтруктураСвойств.ИмяТипа = "Перечисление" Тогда Возврат СтруктураСвойств.ПустаяСсылка; КонецЕсли; ТекстЗапроса = СтруктураСвойств.СтрокаПоиска; Если ПустаяСтрока(ТекстЗапроса) Тогда Возврат СтруктураСвойств.ПустаяСсылка; КонецЕсли; ЗапросПоиска = Новый Запрос(); КоличествоСвойстПоКоторымУстановленПоиск = 0; Для каждого Свойство Из СвойстваПоиска Цикл ИмяПараметра = Свойство.Ключ; // не по всем параметрам можно искать Если ИмяПараметра = "{УникальныйИдентификатор}" ИЛИ ИмяПараметра = "{ИмяПредопределенногоЭлемента}" Тогда Продолжить; КонецЕсли; ЗначениеПараметра = Свойство.Значение; ЗапросПоиска.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); Попытка //МенеджерТипа = ?(МенеджерТипа = Неопределено, Менеджеры[ТипОбъекта], МенеджерТипа); СтрокаНеограниченнойДлины = ОпределитьЭтотПараметрНеограниченнойДлинны(СтруктураСвойств, ЗначениеПараметра, ИмяПараметра); Исключение СтрокаНеограниченнойДлины = Ложь; КонецПопытки; КоличествоСвойстПоКоторымУстановленПоиск = КоличествоСвойстПоКоторымУстановленПоиск + 1; Если СтрокаНеограниченнойДлины Тогда ТекстЗапроса = ТекстЗапроса + ?(КоличествоСвойстПоКоторымУстановленПоиск > 1, " И ", "") + ИмяПараметра + " ПОДОБНО &" + ИмяПараметра; Иначе ТекстЗапроса = ТекстЗапроса + ?(КоличествоСвойстПоКоторымУстановленПоиск > 1, " И ", "") + ИмяПараметра + " = &" + ИмяПараметра; КонецЕсли; КонецЦикла; Если КоличествоСвойстПоКоторымУстановленПоиск = 0 Тогда Возврат Неопределено; КонецЕсли; ЗапросПоиска.Текст = ТекстЗапроса; Результат = ЗапросПоиска.Выполнить(); Если Результат.Пустой() Тогда Возврат Неопределено; Иначе // возвращаем первый найденный объект Выборка = Результат.Выбрать(); Выборка.Следующий(); СсылкаНаОбъект = Выборка.Ссылка; КонецЕсли; Возврат СсылкаНаОбъект; КонецФункции ______________________________ Спотыкается на этой строке (Результат = ЗапросПоиска.Выполнить();) ТекстЗапроса такой: "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Владелец = &Владелец И ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору" |
|||
8
ДемонМаксвелла
14.08.12
✎
18:09
|
Думаю, в эту функцию вместо номенктатуры должно было попасть что-то другое, например, единицы измерения, но произошла накладка и попала номенклатура. Причиной может быть например реквизит составного типа (хотя в данном конкретном случае вряд ли).
|
|||
9
Nik_nik_nik
14.08.12
✎
18:14
|
(8) судя по всему выгружается единица измерения связанная с номенклатурой, но поиск идет не по справочнику единиц, а по справочнику номенклатуры... с чего бы? Хоть какая-то ясность была бы в случае постоянной ошибки... но если выгружать кусками до 5000 объектов - все, вроде как отрабатывает нормально...
|
|||
10
Stanislav_
Orlov 03.09.12
✎
18:34
|
(7) Может быть все-таки Владельца по коду искать, а не как объект? (Которого может не быть в этой базе)
|
|||
11
acsent
03.09.12
✎
18:39
|
рекомендую отключать перенос объектов по ссылкам
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |