|
v7: Перенос операции через OLE | ☑ | ||
---|---|---|---|---|
0
alexio_alexio
22.03.12
✎
15:18
|
Прошу помочь разобраться с проблемой переноса операций чере OLE, а именно перенос субконто, которое является перечислением. Поискал, почитал, но понять не могу в чем загвоздка. Привожу свой код:
Пока Опер.ПолучитьОперацию()=1 Цикл Если Опер.Документ.НомерДок="0000000425" Тогда НовыйДок=Приемник.CreateObject("Операция"); НовыйДок.Новая(); НовыйДок.ДатаОперации=Опер.ДатаОперации; НовыйДок.Содержание=Опер.Содержание; Опер.ВыбратьПроводки(); Пока Опер.ПолучитьПроводку()=1 Цикл НовыйДок.НоваяПроводка(); Счет.НайтиПоКоду(Строка(Опер.Кредит.Счет)); НовыйДок.Кредит.Счет=Счет.ТекущийСчет(); Для Инд = 1 По Счет.КоличествоСубконто() Цикл Субк = Счет.ВидСубконто(Инд); Тип = Субк.ТипСубконто(); Вид = Опер.Кредит.Счет.ВидСубконто(Инд); Идент = Субк.Идентификатор(); Если Найти(Тип,"Перечисление")>0 Тогда Номер = Опер.Кредит.Субконто(Инд).ПорядковыйНомер(); ЗнСубк=Приемник.Перечисление.ПолучитьАтрибут(Вид).ЗначениеПоИдентификатору(Идент); Опер.Кредит.Субконто(Инд,ЗнСубк); Иначе ТипСубк = Приемник.CreateObject(Тип); Если ТипСубк.НайтиПоРеквизиту("IDD",Опер.Кредит.Субконто(Инд).IDD,1)=1 Тогда НовыйДок.Кредит.Субконто(Инд,ТипСубк.ТекущийЭлемент()); КонецЕсли; КонецЕсли; КонецЦикла; НовыйДок.Количество=Опер.Количество; НовыйДок.Сумма=Опер.Сумма; НовыйДок.Содержание=Опер.Содержание; НовыйДок.ЗаписатьПроводки(); КонецЦикла; НовыйДок.Записать(); КонецЕсли; КонецЦикла; Останавливается с ошибкой "Плохой тип" на строке: ЗнСубк=Приемник.Перечисление.ПолучитьАтрибут(Вид).ЗначениеПоИдентификатору(Идент); Как правильно тут написать? |
|||
1
alexio_alexio
22.03.12
✎
15:20
|
Конечно же тут строка не нужна:
Номер = Опер.Кредит.Субконто(Инд).ПорядковыйНомер(); |
|||
2
Ёпрст
22.03.12
✎
15:21
|
Опер - это объект какой базы ?
|
|||
3
miki
22.03.12
✎
15:22
|
Получаешь ПорядковыйНомер, а ищешь по Идентификатру? Причем о идентификатору вида субконта, а не значения перечисления...
|
|||
4
alexio_alexio
22.03.12
✎
15:22
|
(2) Опер-объект базы-источника
|
|||
5
Ёпрст
22.03.12
✎
15:23
|
(4) ага зачет, а еще ему подсовываешь перечисления от другой базы
|
|||
6
miki
22.03.12
✎
15:23
|
да, и вместо Опер тебе нужен НовыйДок.
|
|||
7
alexio_alexio
22.03.12
✎
15:23
|
Строка Номер = Опер.Кредит.Субконто(Инд).ПорядковыйНомер(); тут не нужна
|
|||
8
Ёпрст
22.03.12
✎
15:24
|
есен пень ругается (а то что перечисление не найдено будет там, это пофик - тип то ОЛЕ-базы один хрен)
|
|||
9
alexio_alexio
22.03.12
✎
15:25
|
Да-да, ошибка нужно так:
Если Найти(Тип,"Перечисление")>0 Тогда ЗнСубк=Приемник.Перечисление.ПолучитьАтрибут(Вид).ЗначениеПоИдентификатору(Идент); НовыйДок.Кредит.Субконто(Инд,ЗнСубк); Иначе ТипСубк = Приемник.CreateObject(Тип); Если ТипСубк.НайтиПоРеквизиту("IDD",Опер.Кредит.Субконто(Инд).IDD,1)=1 Тогда НовыйДок.Кредит.Субконто(Инд,ТипСубк.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Но где ошибка-то? |
|||
10
alexio_alexio
22.03.12
✎
15:27
|
Можете написать правильный код?
|
|||
11
alexio_alexio
22.03.12
✎
16:17
|
В чем ошибка?
|
|||
12
alexio_alexio
22.03.12
✎
16:21
|
с (3) согласен, но что-то не пойму как правильно сделать, буду думать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |