Связь программы 1С Предприятие 7.7 с другой базой 1С (OLE) Страшно не люблю этого делать, но иногда всё-таки приходится связываться из 1С с другой базой 1С. Из моего опыта это приходилось делать в таких случаях: • Консолидация данных. • Перенесение данных из одной конфигурации в другую. • Вытаскивание данных, которые безвозвратно утеряны в рабочей базе, из архивной базы. На этой странице я расскажу о методе соединения из одной базы 1С с другой базой 1С, а также приведу примеры программного кода, с помощью которого можно производить обмен данными. Подключиться или соединиться с другой базой 1С:Предприятие 7.7. Процедура перенос() Спр=создатьобъект('Справочник.Номенклатура'); Спр.найтипокоду('9');//Продані Род=создатьобъект('Справочник.Номенклатура'); Род.найтипокоду('6');//Двері //сообщить(спр); начатьтранзакцию(); Спр2=создатьобъект('Справочник.Номенклатура'); Спр2. (наименование группы/наименование товара). НайтиЭлемент Ищет указанный элемент справочника. Синтаксис: НайтиЭлемент(Элемент); НайтиПоКоду Ищет указанный элемент справочника по коду. Синтаксис: НайтиПоКоду(Код, [ФлагПоиска]); Здесь ФлагПоиска может принимать значения: 0 (поиск во. //подключение к другой базе 1С:Предприятие через OLE Функция гБаза_Подключить( Оле, Путь, Логин, Пароль, ФлагХорошо= 0) Экспорт Если ПустаяСтрока( Путь)= 1 Тогда Предупреждение( 'Не указан Путь к базе!' ); Возврат( 0); ИначеЕсли ФС. СуществуетФайл( Путь+ ' 1Cv7.MD')= 0 Тогда Предупреждение( 'База данных по указанному пути не обнаружена!' ); Возврат( 0); КонецЕсли; //строка запуска Оле=СоздатьОбъект( 'V1CEnterprise.Application'); СтрокаЗапуска= '/d'+ Путь; Если ПустаяСтрока( Логин)= 0 Тогда СтрокаЗапуска= СтрокаЗапуска+ ' /n'+ Логин; Если ПустаяСтрока( Пароль)= 0 Тогда СтрокаЗапуска= СтрокаЗапуска+ ' /p'+ Пароль; КонецЕсли; КонецЕсли; //подключение Удача= Оле. Initialize( Оле. RMTrade, СтрокаЗапуска,); Если Удача= 0 Тогда Предупреждение( 'Ошибка соединения!' ); Возврат( 0); ИначеЕсли ФлагХорошо= 1 Тогда Предупреждение( 'Соединение выполнено успешно'); КонецЕсли; Возврат( 1); КонецФункции Импорт данных в 1С из другой базы 1С Довольно часто возникает необходимость передать данные из одной базы в другую. Именно для таких целей можно использовать нижеприведённые примеры, в которых показано, как получать некоторые данные из базы, с которой установлено соединение посредством механизма OLE Automation. //получение значения субконто текущей базы из запроса к бухгалтерским итогам другой базы через OLE //аргументы: Б - бухгалтерские итоги, Номер - номер субконто в выборке Функция Субконто_Получить( Б, Номер) Значение= Б. Субконто( Номер); //тип Ч=СчетПоКоду( Б. Код); Тип= Ч. ВидСубконто( Номер). ТипСубконто(); Если Найти( 'Число,Строка,Дата', Тип)> 0 Тогда Возврат( Значение); ИначеЕсли Значение. Выбран()= 0 Тогда Сообщить( Ч. Код+ ': Не выбрано значение '+ Тип, '!' ); Возврат ПолучитьПустоеЗначение( Тип); КонецЕсли; //вид Позиция=Найти( Тип, '.' ); Если Позиция> 0 Тогда Вид=Сред( Тип, Позиция+ 1); Тип=Лев( Тип, Позиция- 1); Иначе Вид= Значение. Вид(); КонецЕсли; ТипВид= Тип+ '.' + Вид; //поиск Если Тип= 'Справочник' Тогда Если Метаданные. Справочник( Вид). ДлинаКода= 0 Тогда Сообщить( Ч. Код+ ': '+ ТипВид+ ': Коды не используются', '!' ); Возврат ПолучитьПустоеЗначение( ТипВид); ИначеЕсли Метаданные. Справочник( Вид). Выбран()= 1 Тогда Сообщить( Ч. Код+ ': '+ ТипВид+ ': Не найден элемент по владельцу', '!' ); Возврат ПолучитьПустоеЗначение( ТипВид); КонецЕсли; //поиск ТекКод= Значение. ПолныйКод(); С=СоздатьОбъект( ТипВид); Если С. НайтиПоКоду( ТекКод, 2)= 1 Тогда Возврат( С. ТекущийЭлемент()); Иначе Сообщить( Ч. Код+ ': Не найдено: '+ ТипВид+ '. Рудзитис Химия 8 Класс Неорганическая Химия Учебник . ПолныйКод='+ ТекКод, '!' ); Возврат ПолучитьПустоеЗначение( ТипВид); КонецЕсли; ИначеЕсли Тип= 'Документ' Тогда ТекНомер=СокрЛП( Значение. НомерДок); ТекДата= Значение. ДатаДок; //поиск Г=СоздатьОбъект( ТипВид); Если Г. НайтиПоНомеру( ТекНомер, ТекДата)= 1 Тогда Возврат( Г. ТекущийДокумент()); Иначе Сообщить( Ч. Код+ ': Не найдено: '+ ТипВид+ ': '+ ТекНомер+ ' ('+ ТекДата+ ')', '!' ); Возврат ПолучитьПустоеЗначение( ТипВид); КонецЕсли; ИначеЕсли Тип= 'Перечисление' Тогда К=СоздатьОбъект( ТипВид); Возврат К. ЗначениеПоИдентификатору( Значение. Идентификатор()); КонецЕсли; КонецФункции //получение элемента справочника текущей базы //аргументы: Значение - элемент справочника базы, с которой выполнено соединение через OLE Функция Справочник_Получить( Значение) Справочник= Значение. Вид(); ТекКод= Значение. ПолныйКод(); Если ПустаяСтрока( ТекКод)= 1 Тогда Возврат ПолучитьПустоеЗначение( 'Справочник.' + Справочник); КонецЕсли; //справочник С=СоздатьОбъект( 'Справочник.' + Справочник); Если С. НайтиПоКоду( ТекКод, 2)= 1 Тогда Возврат( С. ТекущийЭлемент()); Иначе Сообщить( 'Не найдено: Справочник.' + Справочник+ '.ПолныйКод='+ Значение. ПолныйКод()); Возврат ПолучитьПустоеЗначение( 'Справочник.' + Справочник); КонецЕсли; КонецФункции Резюме В статье представлены образцы программного кода, который используется для установления связи между двумя базами данных, обслуживаемыми программой '1С:Предприятие'. Статья с сайта http://love1c.kiev.ua/. Я новичок в области программирования. Делаю загрузку из в справочник 'Основные средства'. Подскажите пожалуйста, почему при чтении элемента появляется ошибка: Значение не представляет агрегатный объект (Значение)? Может быть потому что в XML-файле в названиях элементов добавлено d3p1: (Например: d3p1:Протяженность)? Пробовала в коде при чтении значения добавлять d3p1:, например Протяженность=СокрЛП(Строка(Элемент.ВыбратьУзел('d3p1:Протяженность').Значение));,но появляется другая ошибка: Ошибка исполнения метода. Вот часть XML: − г Липецк ул Ленина 13007-Д 1,00 − г Липецк ул 300 лет Рос.Флота 12760-Д 51,60. Советская 52700 3-С 1478,80. Сортировка включена, родители и владельцы не используются, тип один - 'Строка', при загрузке НомерДокументации использовала метод СокрЛП. В строку включаются символы как прописные, так и строчные, буквы, цифры и знаки препинания (дефис, тире, запятая). На самом деле поиск происходит, но при этом находится и записывается очень малое число элементов в связи с тем, что в строке НомерАрхивногоДела в загружаемой конфигурации могут быть несколько номеров архивных дел, например: 3869-Д,3870-Д, 3872-Д, а нужно найти значение 3872-Д. Поиск происходит по полному совпадению строк. Можно ли сделать поиск по частичному совпадению строк?
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |