13.07.2016, 17:48
|
#1
|
Новичок
Регистрация: 19.12.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Проблема с обменником Мод. Помогите пожалуйста
ЕстьЗначение=Спр.НайтиПоРеквизиту("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 Тогда //План счетов
Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции //ПолучитьОбъект
|
|
|
13.07.2016, 18:56
|
#2
|
Местный
Регистрация: 20.12.2011
Сообщений: 302
Сказал(а) спасибо: 1,168
Поблагодарили 773 раз(а) в 138 сообщениях
|
Ну значит в справочнике, скорее всего, после обновления, пропал реквизит IDD.
|
|
|
13.07.2016, 22:00
|
#3
|
Новичок
Регистрация: 19.12.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Спасибо огромное .Да действительно не было в некоторых справочниках реквизита IDD.
|
|
|
25.07.2016, 08:40
|
#4
|
Новичок
Регистрация: 02.04.2014
Сообщений: 1
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
|
Либо после обновления пропал IDD, либо в новые справочники, участвующие в обмене, не добавили его.
|
|
|
26.07.2016, 16:24
|
#5
|
Местный
Регистрация: 30.03.2014
Сообщений: 444
Сказал(а) спасибо: 226
Поблагодарили 709 раз(а) в 124 сообщениях
|
Цитата:
Сообщение от innainna84
ЕстьЗначение=Спр.НайтиПоРеквизиту("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 Тогда //План счетов
Возврат ПланыСчетов.ЗначениеПоИдентификатору(Стр);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции //ПолучитьОбъект
|
|
|
Любые журналы Актион-МЦФЭР регулярно !!! Пишите https://www.nado.in/private.php?do=newpm&u=12191 или на электронный адрес pantera@nado.ws
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 00:21. Часовой пояс GMT +1.
| |