1с 77 подключение к другой базе
Связь программы 1С Предприятие 7.7 с другой базой 1С (OLE)
Страшно не люблю этого делать, но иногда всё-таки приходится связываться из 1С с другой базой 1С. Из моего опыта это приходилось делать в таких случаях:
- Консолидация данных.
- Перенесение данных из одной конфигурации в другую.
- Вытаскивание данных, которые безвозвратно утеряны в рабочей базе, из архивной базы.
На этой странице я расскажу о методе соединения из одной базы 1С с другой базой 1С, а также приведу примеры программного кода, с помощью которого можно производить обмен данными.
Подключиться или соединиться с другой базой 1С:Предприятие 7.7
//подключение к другой базе 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 Тогда
Возврат( С . ТекущийЭлемент ());
Иначе
Сообщить( Ч . Код + ": Не найдено: " + ТипВид + ".ПолныйКод !" );
Возврат ПолучитьПустоеЗначение( ТипВид );
КонецЕсли;
ИначеЕсли Тип = "Документ" Тогда
ТекНомер =СокрЛП( Значение . НомерДок );
ТекДата = Значение . ДатаДок ;
//поиск
Г =СоздатьОбъект( ТипВид );
Если Г . НайтиПоНомеру ( ТекНомер , ТекДата )= 1 Тогда
Возврат( Г . ТекущийДокумент ());
Иначе
Сообщить( Ч . Код + ": Не найдено: " + ТипВид + ": " + ТекНомер + " (" + ТекДата + ")" , "!" );
Возврат ПолучитьПустоеЗначение( ТипВид );
КонецЕсли;
ИначеЕсли Тип = "Перечисление" Тогда
К =СоздатьОбъект( ТипВид );
Возврат К . ЗначениеПоИдентификатору ( Значение . Идентификатор ());
КонецЕсли;
КонецФункции
//получение элемента справочника текущей базы
//аргументы: Значение - элемент справочника базы, с которой выполнено соединение через OLE
Функция Справочник_Получить ( Значение )
Справочник = Значение . Вид ();
ТекКод = Значение . ПолныйКод ();
Если ПустаяСтрока( ТекКод )= 1 Тогда
Возврат ПолучитьПустоеЗначение( "Справочник." + Справочник );
КонецЕсли;
//справочник
С =СоздатьОбъект( "Справочник." + Справочник );
Если С . НайтиПоКоду ( ТекКод , 2 )= 1 Тогда
Возврат( С . ТекущийЭлемент ());
Иначе
Сообщить( "Не найдено: Справочник." + Справочник + ".ПолныйКод Справочник." + Справочник );
КонецЕсли;
КонецФункции
Резюме
В статье представлены образцы программного кода, который используется для установления связи между двумя базами данных, обслуживаемыми программой "1С:Предприятие".
Возможно такое? У объекта "ODBCDatabase" есть метод УстБД(), насколько я понял, он позволяет подключиться из текущей БД к любой другой, помимо родной, БД 1С. Вопрос только, как именно это сделать? Предположительно, подключение возможно как к файловой, так и к SQL-базе.
(6) Не вижу, где в примере используется переменная "Соединение"
+(7) Пробовал в метод ПрисоединитьИБ() в качестве параметра передать строку соединения, выдается ошибка:
Ошибка загрузки метаданных
(9) Такой вариант вроде пашет.
А вот для скульной базы почему-то (1), (2) и (3) - не работают. Когда использовал "ПрисоединитьИБ", ругался "Общая файловая ошибка при доступе к файлу users.usr". Поменял "ПрисоединитьИБ()" на "Открыть()" - соединение все равно не устанавливается. Какие еще м.б. варианты?
Делаю запрос к той базе, к котрой подключился.
(13) Странно. Когда делал тот же самый запрос непосредственно в родной скулевой базе, то никаких битых ссылок в результат не попадало.
(13)
А ты думал?
Ты же тянешь данные из ЧУЖОЙ базы, и пытаешься, чтобы 1С их типизировала в значения РОДНОЙ базы. Так не получиться, тащить из чужой базы можно только "сырые" данные, строки, числа, даты. Типизация не сработает.
(16) не подумал..что то не прочитал что это запрос к другой базе
(16) Так это битые ссылки или что? Я же говорю, некоторые доки имеют нормальный вид, некоторые - см. (12)
(18) "некоторые доки имеют нормальный вид"
не верь глазам своим.
типизация "чужих" ссылок невозможна.
(21) С данными родной базы? Интересно, как она то определяет, по номеру дока? Или по ИД?
Если все так, то и задача идет ф топку :( Но за информацию - все равно спасибо, думаю, в дальнейшем пригодится.
(23) Смотря какая задача. Ты же не объяснил. Объекты в понимании 1с ты не получишь, а вот всю информацию о них - легко.
В чем состоит задача? Спроси может найдутся знающие люди.
(25) Задача в том, чтобы юзеру вывалить на экран все документы из базы, к которой подключаемся, за заданный период в виде списка. Из них юзер отберет те, которые нужно загрузить в текущую ИБ, и вот с ними уже будет дальнейшая работа.
(26) Ну и зачем тебе тогда нужны ссылки?
Бери даты, названия документов и номера , показывай и пусть ставит галки.
По выбранным формируй список ИДД и по ним таким же запросом делай выборку.
Обрабатывая таблицы выборки создавай в своей базе нужные документы.
Тебе эта самая тема!
Всё будет очень быстро делаться.
(27) Сделал. В список СпДокументы поместил ИД отобранных доков. Сейчас выполняю второй запрос к базе, где в качестве условия выборки устанавливаю только эти, отобранные пользователем документы:
"SELECT
В результате возвращается пустая таблица, хотя в списке отобранных документов данные точно есть. В чем причина?
передавай строку с iddoc'ами, которую сформируешь из таблицы
(28) Временная таблица точно создается не пустая? Посмотрел?
(31) да, но пустую
(32) Из файловой подключаюсь к скуль-версии.
(35) Простите мое невежество, но что такое QA и как с ним работать? Просто раньше этой темы особо касаться не приходилось.
А в конфигураторе в парметрах базы данных SQL можешь глянуть?
Ты там вообще местный или пришлый?
(35) Он её не увидит, т.к. локальная временная таблица видна только в рамках одного @@SPID, а QA будет с @@SPID отличным от 1совского.
(43) Значит надо её делать самому без метода УложитьСписокОбъектов()
(42) Что именно там смотреть? "Сервер", "База данных", "Пользователь", "Пароль" - все, что там есть.
А ешё лучше изучать постепенно и на каждый выбранный документ посылать свой запрос. Тогда можно будет обойтись без временных таблиц. Скорость всё равно будет достаточной, а основные тормоза будут на проведении вновь созданных документов в своей базе.
а не проще ли просто написать "ВыполнитьИнструкцию(ТекстЗапроса,ТЗ,1)", где ТЗ- таблица значений ?
(45) На сервер где установлен SQL у тебя есть доступ?
Надо будет запустить там QA и посмотреть таблички базы данных
(45) Смотри (47), тебе это будет проще реализовать. Потом будешь оптимизировать (если захочешь)
(54) Что остальное?
(55) Да приведен он и так. Таблица все равно пустая.
Покажи весь код.
Как получаешь ИдДок из соседней базы?
Как накидываешь список?
Как даешь пользователю на отметку?
Как потом катишься по этому списку и берешь ИдДок в запрос?
Чё мы тут должны гадать-то?
(57) Поправочка: по одному доку все-таки работает, так что вариант в (52) в принципе применим. Хотелось бы, правда, красивее сделать.
(58) Ну вот, а то всё мама, да мама.
Красивее уже и сам сможешь. Ещё раз учти, что основные потери времени будут не на запросы к соседней базе, а на проведение вновь создаваемых документов в своей. Поэтому: а надо ли оно красивее конкретно тебе?
(58),(51) QA запускается через кнопку Пуск\Программы\Microsoft SQL Server\QueryAnalazer
У меня рабочий день заканчивается дальше пытай других.
(64) Стесняешься название произносить? Или не выговариваешь всех букв?
(66) Да нет, почему, просто многие знают уже, что такое "Столица мира". Собственно, Барнаул :)
(66) А-а. Я не знал, что она теперь туда переехала. Буду знать.
У меня там однокласник есть.
(69) Ну была и пусть дальше стоит. Мне и в моей деревне хорошо.
(59) Нашел решение, как вытащить из соседней БД только выбранные юзером доки ОДНИМ запросом.
Вместо "УложитьСписокОбъектов()" здесь нужно использовать предв. создание врем. таблицы.
27.01.2016 85830 Serginio 116
Печать таблицы значений в 1С 7.7 при отладке
Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.
30.06.2021 1400 Zoltan_Black 11
Как в 1С 7.7 сделать обмен на базе FTP
Выгрузка данных на FTP на примере в конфигурации Штрих-М Кассир 1.10.
12.05.2020 2329 Ignatov_mu 10
Расчет страховых взносов в 1С 7.7 "Учет и отчетность предпринимателя, ред. 1.2" с апреля 2020
В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.
09.04.2020 13894 Юджин58 39
1С:Предприятие 7.7. Оптимизация. Промо
Разгоняем 1С:Предприятие 7.7. Выжимаем последние соки.
31.01.2009 49397 alexk-is 110
Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки.
Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.
14.10.2019 5139 ksnik 14
Заполнение реквизитов документов из предыдущего документа
Функция для автоматического заполнения реквизитов документов.
04.02.2019 5632 drevilo 2
Проверка часового пояса
При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.
16.05.2016 11548 kudenzov 3
Как уменьшить количество заблокированных объектов Промо
История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось.
12.01.2012 15782 ShEvOvIcH 18
[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом?
Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.
12.03.2016 20273 CheBurator 18
09.03.2016 33551 Serginio 22
Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм
Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).
23.11.2015 17865 etmarket 14
Технология обновления нетиповых конфигураций 1С:Предприятия 7.7 Промо
Данная статья рассчитана на уже подготовленного пользователя, владеющего некоторыми навыками программирования и работы в конфигураторе. Статью можно использовать как поэтапное руководство к действию. Статья была написана для повышения качества работ выполняемых сотрудниками компании Информ Сервис при обновлении нетиповых конфигураций. Я надеюсь, что эта информация окажется полезной и для вас.
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
Код 1C v 8.2 УП
Разместил: E_Migachev Версии: | 7.x | 8.x | 8.2 УП | Дата: 10.04.2014 Прочитано: 45742
Похожие FAQ
Как заполнить табличную часть формы программно? 6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих
Еще в этой же категории
Как найти документ по уникальному идентификатору через com соединение? 3
Потребовалось написать небольшую синхронизацию данных в дополнении к стандартной УТ-БП, нужно по уникальному идентификатору искать документы: Стандартное Соединение.Справочники.Номенклатура.ПолучитьСсылку(УИ); Выдает ошибку <Форма.Форма.Форма(301Работа с MySQL из 1С через ODBC 0
В статье описан процесс работы с MySQL базой из 1С через ODBC. Первое что следует обязательно учесть это версия драйвера, для того чтобы все корректно работало вам потребуется драйвер версии 3.51 (с драйвером 5-ой версии я пробился пол дня пытая Посмотреть все в категории COM-объекты, WMI, WSH
Читайте также: