Проблема с обменником Мод. Помогите пожалуйста

innainna84

New member
Регистрация
19 Дек 2011
Сообщения
14
Реакции
0
ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1); неверное имя реквизита

//_____________________________________________________________________________

//Функция возвращает объект 1С из строкового представления,

//полученного функцией ПолучитьПредставлениеОбъекта

Функция ПолучитьОбъект(Стр,УстТип,ЕстьЗначение)

Перем Спр;

Тип=ОЛЕ.ТипЗначения;

УстТип=ОЛЕ.УстанавливатьТип*Тип;

ЕстьЗначение=1;

Если Тип=0 Тогда

ЕстьЗначение=-1;

УстТип=0;

Возврат "";

ИначеЕсли Тип=1 Тогда

Возврат Число(Стр);

ИначеЕсли Тип=2 Тогда

Стр=СтрЗаменить(Стр,РазделительСтрокМОД,РазделительСтрок);

Возврат Стр;

ИначеЕсли Тип=3 Тогда

Возврат Дата(Число(Стр));

КонецЕсли;



Если Сокрлп(Стр)="" Тогда

ЕстьЗначение=-1;//Значения и не должно быть - т.е. передано пустым

Возврат "";

ИначеЕсли Тип=10 Тогда //Перечисление

Попытка

Пер=Перечисление.ПолучитьАтрибут(ОЛЕ.ВидЗначения);

Возврат Пер.ЗначениеПоИдентификатору(Стр);

Исключение

Сообщить(ОписаниеОшибки()+" ("+ОЛЕ.ВидЗначения+", "+Стр+")","!");

Возврат "";

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

ИначеЕсли Тип=11 Тогда //Справочник

Вид=Сокрлп(ОЛЕ.ВидЗначения);

Если Вид="" Тогда

//не задан вид - выполняем длительную процедуру поиска объекта по все базе!!!

Для А=1 По Метаданные.Справочник() Цикл

Если Метаданные.Справочник(А).Идентификатор="ПериферийныеБазы" Тогда

Продолжить;

КонецЕсли;

Спр=СоздатьОбъект("Справочник."+Метаданные.Справочник(А).Идентификатор);

ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=1 Тогда

Возврат Спр.ТекущийЭлемент();

КонецЕсли;

КонецЦикла;

Возврат "";

КонецЕсли;

Попытка

Спр=СоздатьОбъект("Справочник."+Вид);

Исключение



ЕстьЗначение=-1;

Возврат "";

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



ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Спр.ТекущийЭлемент();

ИначеЕсли Тип=12 Тогда //Документ

Док=СоздатьОбъект("Документ");

ЕстьЗначение=НайтиДокументПоIDD(Док,Стр);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Док.ТекущийДокумент();

ИначеЕсли Тип=13 Тогда //Календарь

Возврат Календари.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=14 Тогда //Вид расчета

Возврат ВидРасчета.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=15 Тогда //Счет

Попытка

Счет=СоздатьОбъект("Счет."+ОЛЕ.ВидЗначения);

Рез=Счет.НайтиПоКоду(Стр);

Если Рез=0 Тогда

Сообщить("Не сопоставлен счет """+Стр+""" плана счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат Счет.ТекущийСчет();

КонецЕсли;

Возврат Счет.ТекущийСчет();

Исключение

Сообщить("Не сопоставлен план счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат "";

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

ИначеЕсли Тип=16 Тогда //Виды субконто

Возврат ВидыСубконто.ЗначениеПоИдентификатору(Стр);

ИначеЕсли Тип=17 Тогда //План счетов

Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);

Иначе

Возврат Стр;

КонецЕсли;

КонецФункции //ПолучитьОбъект
 
Ну значит в справочнике, скорее всего, после обновления, пропал реквизит IDD.
 
Спасибо огромное .Да действительно не было в некоторых справочниках реквизита IDD.
 
Либо после обновления пропал IDD, либо в новые справочники, участвующие в обмене, не добавили его.
 
ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1); неверное имя реквизита

//_____________________________________________________________________________

//Функция возвращает объект 1С из строкового представления,

//полученного функцией ПолучитьПредставлениеОбъекта

Функция ПолучитьОбъект(Стр,УстТип,ЕстьЗначение)

Перем Спр;

Тип=ОЛЕ.ТипЗначения;

УстТип=ОЛЕ.УстанавливатьТип*Тип;

ЕстьЗначение=1;

Если Тип=0 Тогда

ЕстьЗначение=-1;

УстТип=0;

Возврат "";

ИначеЕсли Тип=1 Тогда

Возврат Число(Стр);

ИначеЕсли Тип=2 Тогда

Стр=СтрЗаменить(Стр,РазделительСтрокМОД,РазделительСтрок);

Возврат Стр;

ИначеЕсли Тип=3 Тогда

Возврат Дата(Число(Стр));

КонецЕсли;



Если Сокрлп(Стр)="" Тогда

ЕстьЗначение=-1;//Значения и не должно быть - т.е. передано пустым

Возврат "";

ИначеЕсли Тип=10 Тогда //Перечисление

Попытка

Пер=Перечисление.ПолучитьАтрибут(ОЛЕ.ВидЗначения);

Возврат Пер.ЗначениеПоИдентификатору(Стр);

Исключение

Сообщить(ОписаниеОшибки()+" ("+ОЛЕ.ВидЗначения+", "+Стр+")","!");

Возврат "";

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

ИначеЕсли Тип=11 Тогда //Справочник

Вид=Сокрлп(ОЛЕ.ВидЗначения);

Если Вид="" Тогда

//не задан вид - выполняем длительную процедуру поиска объекта по все базе!!!

Для А=1 По Метаданные.Справочник() Цикл

Если Метаданные.Справочник(А).Идентификатор="ПериферийныеБазы" Тогда

Продолжить;

КонецЕсли;

Спр=СоздатьОбъект("Справочник."+Метаданные.Справочник(А).Идентификатор);

ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=1 Тогда

Возврат Спр.ТекущийЭлемент();

КонецЕсли;

КонецЦикла;

Возврат "";

КонецЕсли;

Попытка

Спр=СоздатьОбъект("Справочник."+Вид);

Исключение



ЕстьЗначение=-1;

Возврат "";

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



ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Спр.ТекущийЭлемент();

ИначеЕсли Тип=12 Тогда //Документ

Док=СоздатьОбъект("Документ");

ЕстьЗначение=НайтиДокументПоIDD(Док,Стр);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Док.ТекущийДокумент();

ИначеЕсли Тип=13 Тогда //Календарь

Возврат Календари.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=14 Тогда //Вид расчета

Возврат ВидРасчета.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=15 Тогда //Счет

Попытка

Счет=СоздатьОбъект("Счет."+ОЛЕ.ВидЗначения);

Рез=Счет.НайтиПоКоду(Стр);

Если Рез=0 Тогда

Сообщить("Не сопоставлен счет """+Стр+""" плана счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат Счет.ТекущийСчет();

КонецЕсли;

Возврат Счет.ТекущийСчет();

Исключение

Сообщить("Не сопоставлен план счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат "";

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

ИначеЕсли Тип=16 Тогда //Виды субконто

Возврат ВидыСубконто.ЗначениеПоИдентификатору(Стр);

ИначеЕсли Тип=17 Тогда //План счетов

Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);

Иначе

Возврат Стр;

КонецЕсли;

КонецФункции //ПолучитьОбъект


Это только мне кажется, что правильное оформление кода легче воспринимать к чтению, чем большой кусок неотформатированного текста, чтобы не листать половину экрана в поиске ответа?
Код:
ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1); неверное имя реквизита

//__________________________________________________ ___________________________

//Функция возвращает объект 1С из строкового представления,

//полученного функцией ПолучитьПредставлениеОбъекта

Функция ПолучитьОбъект(Стр,УстТип,ЕстьЗначение)

Перем Спр;

Тип=ОЛЕ.ТипЗначения;

УстТип=ОЛЕ.УстанавливатьТип*Тип;

ЕстьЗначение=1;

Если Тип=0 Тогда

ЕстьЗначение=-1;

УстТип=0;

Возврат "";

ИначеЕсли Тип=1 Тогда

Возврат Число(Стр);

ИначеЕсли Тип=2 Тогда

Стр=СтрЗаменить(Стр,РазделительСтрокМОД,Разделител ьСтрок);

Возврат Стр;

ИначеЕсли Тип=3 Тогда

Возврат Дата(Число(Стр));

КонецЕсли;



Если Сокрлп(Стр)="" Тогда

ЕстьЗначение=-1;//Значения и не должно быть - т.е. передано пустым

Возврат "";

ИначеЕсли Тип=10 Тогда //Перечисление

Попытка

Пер=Перечисление.ПолучитьАтрибут(ОЛЕ.ВидЗначения);

Возврат Пер.ЗначениеПоИдентификатору(Стр);

Исключение

Сообщить(ОписаниеОшибки()+" ("+ОЛЕ.ВидЗначения+", "+Стр+")","!");

Возврат "";

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

ИначеЕсли Тип=11 Тогда //Справочник

Вид=Сокрлп(ОЛЕ.ВидЗначения);

Если Вид="" Тогда

//не задан вид - выполняем длительную процедуру поиска объекта по все базе!!!

Для А=1 По Метаданные.Справочник() Цикл

Если Метаданные.Справочник(А).Идентификатор="Периферийн ыеБазы" Тогда

Продолжить;

КонецЕсли;

Спр=СоздатьОбъект("Справочник."+Метаданные.Справоч ник(А).Идентификатор);

ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=1 Тогда

Возврат Спр.ТекущийЭлемент();

КонецЕсли;

КонецЦикла;

Возврат "";

КонецЕсли;

Попытка

Спр=СоздатьОбъект("Справочник."+Вид);

Исключение



ЕстьЗначение=-1;

Возврат "";

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



ЕстьЗначение=Спр.НайтиПоРеквизиту("IDD",Стр,1);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Спр.ТекущийЭлемент();

ИначеЕсли Тип=12 Тогда //Документ

Док=СоздатьОбъект("Документ");

ЕстьЗначение=НайтиДокументПоIDD(Док,Стр);

Если ЕстьЗначение=0 Тогда

ГлобСписокВторогоЦикла.ДобавитьЗначение(Стр);

КонецЕсли;

Возврат Док.ТекущийДокумент();

ИначеЕсли Тип=13 Тогда //Календарь

Возврат Календари.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=14 Тогда //Вид расчета

Возврат ВидРасчета.ПолучитьАтрибут(Стр);

ИначеЕсли Тип=15 Тогда //Счет

Попытка

Счет=СоздатьОбъект("Счет."+ОЛЕ.ВидЗначения);

Рез=Счет.НайтиПоКоду(Стр);

Если Рез=0 Тогда

Сообщить("Не сопоставлен счет """+Стр+""" плана счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат Счет.ТекущийСчет();

КонецЕсли;

Возврат Счет.ТекущийСчет();

Исключение

Сообщить("Не сопоставлен план счетов """+ОЛЕ.ВидЗначения+""" базы источника!","!");

Возврат "";

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

ИначеЕсли Тип=16 Тогда //Виды субконто

Возврат ВидыСубконто.ЗначениеПоИдентификатору(Стр);

ИначеЕсли Тип=17 Тогда //План счетов

Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);

Иначе

Возврат Стр;

КонецЕсли;

КонецФункции //ПолучитьОбъект
 
Назад
Сверху