Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

проблема с ОЛЕ

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №1
 
26.05.2009 10:05

v77. ОЛЕ-перенос документов. хочу сделать универсальный перенос, стоб не обрабатывать реквизиты по именам. Но при переносе плей для субконто возникает вопрос: как определить тип реквизита? В метаданных стоит "Неопределённый".

deniseek
читатель
офлайн
Дата регистрации: 12.08.2008
Сообщений: 17
Пост №2
 
26.05.2009 11:29

Что бы подсказать, напишите фрагмент модуля

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №3
 
26.05.2009 11:50

" ПланОЛЕ = v7.CreateObject("Документ"); <br> <br>.....................................<br> //сам перенос<br> ПланОЛЕ.НайтиПоНомеру(ТЗ.НомерДок, ТЗ.ДатаДок,ТЗ.Вид);<br> Док = СоздатьОбъект("Документ."+ТЗ.Вид);<br> Если Есть = 0 Тогда<br> Док.Новый();<br>............................................<br> КонецЕсли;       <br> <br> МетаДок = Метаданные.Документ(ТЗ.Вид);<br> <br> //общие реквизиты документов<br> Для ном = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл<br> МетаРекв = Метаданные.ОбщийРеквизитДокумента(ном);<br> Значение = ПолучитьРеквизит(МетаРекв.Тип,ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));<br> Док.УстановитьАтрибут(МетаРекв.Идентификатор, Значение);<br> КонецЦикла;<br> <br> //шапка документов<br> Для ном = 1 По МетаДок.РеквизитШапки() Цикл<br> МетаРекв = МетаДок.РеквизитШапки(ном); <br> РеквТип = МетаРекв.Тип;<br> Если РеквТип = "Неопределенный" Тогда<br> вот здесь заморочка. в основном это - всяческие субконто к счёту. но могут быть быть поля ввода-справочники<br> РеквТип = v7.ТипЗначенияСтр(ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));<br> КонецЕсли;<br> Значение = ПолучитьРеквизит(РеквТип,ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));<br> Док.УстановитьАтрибут(МетаРекв.Идентификатор, Значение);<br> КонецЦикла; <br> Док.НомерДок = ТЗ.НомерДокНов; <br> Док.ДатаДок = ТЗ.ДатаДок; <br> Док.Записать();<br>"

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №4
 
26.05.2009 11:53

в процедуре ПолучитьРеквизит() отрабатываются неагрегатные типы, справочник, перечисление, счёт. документы пока не трогаю, но как воздух нужно отработать субконто

deniseek
читатель
офлайн
Дата регистрации: 12.08.2008
Сообщений: 17
Пост №5
 
26.05.2009 12:16

Я бы, наверное, сделал через Попытка-исключение. То есть пробуем создать объект, далее ищем по коду или наименованию, если находим, то в переменную передаем тип значения...Если не находим...вот тут ступор, либо новый создавать, либо переходить к следующему виду объектов метаданных...Может что то в этом духе?

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №6
 
26.05.2009 13:12

"> Я бы, наверное, сделал через Попытка-исключение. То есть пробуем создать объект, далее ищем по коду или наименованию, если находим, то в переменную передаем тип значения...Если не находим...вот тут ступор, либо новый создавать, либо переходить к следующему виду объектов метаданных...Может что то в этом духе?<br><br>КАКОЙ объект создаём? всё создано до нас! моя задача - определить тип конкретного ОЛЕ объекта, чтобы потом назначить этот тип соотв. реквизиту документа уже местной базы. Или же как-то вызвать процедуру ПриИзмененииСчета, благо она практически везде одинаково называется (хотя это неверное решение). пыталась использовать конструкцию:<br><br> Если РеквТип = "Неопределенный" Тогда<br> Наим = ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор).Наименование;<br> Идент = ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор).Идентификатор();<br> ВидСубк = ВидыСубконто.ЗначениеПоИдентификатору(Идент);<br> РеквТип = v7.ТипЗначенияСтр(ПланОЛЕ.ПолучитьАтрибут(МетаРекв.Идентификатор));<br> КонецЕсли;<br>но Наим - Наименование конкретнго элемента конкретного справочника, Идент = """" стабильно.<br><br>ЗЫ. прошу прощения за эмоции<br>"

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №7
 
26.05.2009 17:51

Один косяк нашла: в ОЛЕ базе все встроенные функции пишутся почему-то в англоязычном виде, т.е. надо писать не v7.ТипЗначенияСтр(), а v7.ValueTypeStr(). Сейчас проверяю эту мысль (хотя бы не ругается на отсутствие такого поля у v7)

ЕленкаА
читатель
офлайн
Дата регистрации: 29.04.2007
Сообщений: 53
Пост №8
 
27.05.2009 13:03

"Вдруг кому-то пригодится...<br>выкрутилась так:<br><br>Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда<br> Файлик = КаталогИБ()+"ExtForms\Админ\temp.txt";<br> v7.ValueToFile(Файлик,ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор),0); <br> Темп.Открыть(Файлик);<br> Строчка1 = Темп.ПолучитьСтроку(1);<br> Строчка1 = СтрЗаменить(Строчка1,"{","""");<br> Строчка1 = СтрЗаменить(Строчка1,"}","""");<br> Список = СоздатьОбъект("СписокЗначений");<br> Список.ИзСтрокиСРазделителями(Строчка1);<br> РеквТип = Список.ПолучитьЗначение(1); <br> РеквВид = Список.ПолучитьЗначение(2);<br> Док.НазначитьТип(МетаРеквизит.Идентификатор,РеквТип+"."+РеквВид);<br>КонецЕсли;<br>Значение = ПолучитьРеквизит(РеквТип,ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор));<br>Док.УстановитьАтрибут(МетаРеквизит.Идентификатор, Значение);<br><br>если кто придумает красивее - напишите, буду рада<br>"

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №9
 
27.05.2009 15:47

"Через любую глобальную переменную. Например, глРасшифровка - есть в любых типовых конфигурациях на сей день.<br><br>Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда<br> V77.глРасшифровка=ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор);<br> Сообщить(V77.EvalExpr("ТипЗначенияСтр(глРасшифровка)"));<br>...<br>"

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №10
 
27.05.2009 15:47

"Через любую глобальную переменную. Например, глРасшифровка - есть в любых типовых конфигурациях на сей день.<br><br>Если (РеквТип = "Неопределенный") и (v7.EmptyValue(ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор))=0) Тогда<br> V77.глРасшифровка=ПланОЛЕ.ПолучитьАтрибут(МетаРеквизит.Идентификатор);<br> Сообщить(V77.EvalExpr("ТипЗначенияСтр(глРасшифровка)"));<br>...<br>"

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация