innainna84
New member
ЕстьЗначение=Спр.НайтиПоРеквизиту("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 Тогда //План счетов
Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции //ПолучитьОбъект
//_____________________________________________________________________________
//Функция возвращает объект 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 Тогда //План счетов
Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции //ПолучитьОбъект