|
OLE перенос справочников из 82 в 77, сохраняя иерархию. | ☑ | ||
---|---|---|---|---|
0
maxstore
30.11.11
✎
12:49
|
Цель: Перенести справочники из 7ки в 8ку. Как перенести, сохраняя иерархию?
Делаю: Подключился из 82 к 77 по OLE. Перебираю справочник из 77. Но у перебираемых элементов свойства Родитель нет. Как быть? <kod> СпрТМЦ = v77.CreateObject("Справочник.ТМЦ"); СпрТМЦ.ВыбратьЭлементы(); Пока СправочникТМЦ.ПолучитьЭлемент()=1 Цикл НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); НовыйЭлемент.Наименование = СправочникТМЦ.Наименование; Если Справочники.Номенклатура.НайтиПоНаименованию(СправочникТМЦ.Родитель,Истина)<>Неопределено Тогда НовыйЭлемент.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СправочникТМЦ.Родитель,Истина); Иначе НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); НоваяГруппа.Наименование = СправочникТМЦ.Наименование; НоваяГруппа.Записать(); НовыйЭлемент.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СправочникТМЦ.Родитель,Истина); КонецЕсли; НовыйЭлемент.Записать(); КонецЦикла; </kod> В данном примере СправочникТМЦ.Наименование работает нормально, но СправочникТМЦ.Родитель ничего не получаем. |
|||
1
Гефест
30.11.11
✎
12:51
|
СправочникТМЦ.Родитель.Наименование
|
|||
2
Ёпрст
30.11.11
✎
12:51
|
(0) СправочникТМЦ.Родитель.Наименование, если что
|
|||
3
maxstore
30.11.11
✎
12:57
|
Точно, спасибо!
|
|||
4
maxstore
30.11.11
✎
14:38
|
Подскажите, пожалуйста, как получить значение реквизита ОЛЕ объекта с типом Перечисление?
Например, СправочникТМЦ.БазЕдиница, где БазЕдиница, соответственно реквизит перечисление |
|||
5
maxstore
30.11.11
✎
14:48
|
Я так понимаю, что можно получить в переменную значение перечисления, напр.
ЕдИзмеренияШтуки = v77.Перечисление.Единицы.шт; и потом сравнить Если СправочникТМЦ.БазЕдиница = ЕдИзмеренияШтуки Тогда .... Но даже, если так будет работать, что если в перечислении единица более 20 значений, не создавать же 20 переменных и потом 20 сравнений, чтобы найти нужное значение.. |
|||
6
Шапокляк
30.11.11
✎
14:52
|
(5) А Индекс() у перечисления не поможет?
|
|||
7
maxstore
30.11.11
✎
15:08
|
(6) Имеете ввиду СправочникТМЦ.БазЕдиница.Индекс()?
Такого метода нет у объекта в базе из которой получаем этот самый объект OLE |
|||
8
maxstore
30.11.11
✎
15:26
|
Текущие выводы:
Просто получить значение реквизита справочника с типом Перечисление - не получится. Сравнивать на оно это или нет, приходится с каждым значением перечисления и столько раз, сколько этих значений предыдущий программист напридумал. Получается громоздкий код, типа такого <kod> Если СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.шт Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.кг Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кг",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.комплект Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("комплект",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("комплект",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.тонна Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("тонна",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("тонна",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.вагон Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("вагон",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("вагон",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.литр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("литр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("литр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.бутылка Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("бутылка",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("бутылка",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.грамм Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("грамм",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("грамм",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.упаковка Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("упаковка",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("упаковка",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.ящик Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("ящик",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("ящик",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.пачка Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("пачка",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("пачка",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.блок Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("блок",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("блок",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.коробка Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("коробка",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("коробка",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.контейнер Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("контейнер",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("контейнер",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.поддон Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("поддон",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("поддон",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.цистерна Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("цистерна",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("цистерна",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.метр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("метр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("метр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.километр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("километр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("километр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.квадрметр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("квадрметр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("квадрметр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.кубометр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кубометр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("кубометр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.экземпляр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("экземпляр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("экземпляр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.киловаттчас Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("киловаттчас",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("киловаттчас",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.место Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("место",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("место",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.погонныйметр Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("погонныйметр",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("погонныйметр",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.грн Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("грн",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("грн",Истина); КонецЕсли; ИначеЕсли СправочникТМЦ.БазЕдиница = v77.Перечисление.Единицы.час Тогда Если НЕ Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("час",Истина).Пустая() Тогда ЕдИз = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("час",Истина); КонецЕсли; КонецЕсли; </kod> Возможно есть более удобное и лаконичное решение. |
|||
9
maxstore
30.11.11
✎
16:27
|
Строковое значение реквизита с типом перечисления можно получить методом Идентификатор()
Напр. <kod> Значение = Справочник.Перечисление.Идентификатор(); </kod> Как всегда, все просто |
|||
10
Шапокляк
01.12.11
✎
09:54
|
(7) Ну... не до такой степени
ИндексОлеБазы=Перечисление.БазЕдиницы.индекс(ВашЭлементСправочникаТМЦПролученныйОлей.БазЕдиница) - в подключенной базе У себя ТакоеТоЗначениеПеречисления=Перечисления.БазЕдиницы.Получить(ИндексОлеБазы) как-то так |
|||
11
Шапокляк
01.12.11
✎
09:58
|
+(10) но ваш способ (9) лучше
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |