Полная версия этой страницы:
Подключение к базе через OLE.
Добрый день. Есть две базы 1С 7.7 ПУБ глубоко переработанные. 1С 7.7 0,27. Конфигурации идентичные. Сделал отчет анализа продаж с подключением из одной базы 1С в другую по OLE. Отчет работает, показывает нужные данные, но после завершения процедуры анализа сеанс 1С, созданный OLE подключением не закрывается. Итого 5-7 нажатий кнопки анализировать и в системе висит куча сеансов 1С. Вопрос: как правильно завершать подключение по OLE, чтобы оно закрывалось после завершения процедуры. Мой пример подключения по OLE (кусок кода).
необходимо зарегистрироваться для просмотра ссылки Там = СоздатьОбъект("V77.Application");
КаталогБазыОЛе = СокрЛП(Константа.Туда);
ПользовательОле = "***";
ПарольОле = "***";
МонопольныйРежимOLE = ""; // для немонопольного запуска указать пустую строку!
ЗапускБезЗаставки = 0; // для появления заставки (например, чтобы наблюдать
// процесс запуска базы OLE визуально) поставьте здесь "0"
РезультатПодключения = Там.Initialize ( Там.RMTrade , "/d" + СокрЛП(КаталогБазыОле) + " /n" + СокрЛП(ПользовательОле) + " /p" + СокрЛП(ПарольОле) + МонопольныйРежимOLE, ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
Если РезультатПодключения = 0 Тогда
Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
КонецЕсли;
Би = СоздатьОбъект("БухгалтерскиеИтоги");
Би.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Склад,2);
Би.ИспользоватьСубконто(ВидыСубконто.ТМЦ,СТМЦ);
Би.ВыполнитьЗапрос(КонДата, КонДата, "281");
Би.ВыбратьСубконто(ВидыСубконто.ТМЦ);
Пока Би.ПолучитьСубконто(ВидыСубконто.ТМЦ) = 1 Цикл //Анализ остатков на магазине эта база
Если Би.СКД(3) <= 0 Тогда
Продолжить;
КонецЕсли;
Ы = "";
Т.НайтиЗначение(Би.Субконто(ВидыСубконто.ТМЦ),Ы,"Т");
Т.ПОлучитьСтрокуПоНомеру(Ы);
Т.ОстМ = Би.СКД(3);
Состояние("Заполнение остатками в этой базе");
КонецЦикла;
СкладТам = Там.CreateObject("Справочник.МестаХранения");
Если СкладТам.НайтиПоНаименованию(СокрЛП(Склад.Наименование),0) = 0 ТОгда
Сообщить("Не могу там найти склад "+СокрЛП(Склад.Наименование));
возврат;
КонецЕсли;
СТМЦТам = Там.CreateObject("СписокЗначений");
ТМЦТАМ = Там.CreateObject("Справочник.ТМЦ");
Т.ВыбратьСтроки();
Пока Т.ПолучитьСтроку() = 1 Цикл
Если ТМЦТам.НайтиПоКоду(Т.Код,0) = 1 Тогда
СТМЦТам.ДобавитьЗначение(ТМЦТам.ТекущийЭлемент());
Состояние("Формирование списка товаров для анализа в ТОЙ базе")
КонецЕсли;
КонецЦикла;
БиТам = Там.CreateObject("БухгалтерскиеИтоги");
БиТам.ИспользоватьСубконто(Там.ВидыСубконто.МестаХранения,СкладТам,2);
БиТам.ИспользоватьСубконто(Там.ВидыСубконто.ТМЦ,СТМЦТам);
БиТам.ВыполнитьЗапрос(КонДата, КонДата, "281"); //Анализ остатков на магазине ТА база
БиТам.ВыбратьСубконто(Там.ВидыСубконто.ТМЦ);
Пока БиТам.ПолучитьСубконто(Там.ВидыСубконто.ТМЦ) = 1 Цикл
Если БиТам.СКД(3) <= 0 Тогда
Продолжить;
КонецЕсли;
Ы = "";
Т.НайтиЗначение(БиТам.Субконто(Там.ВидыСубконто.ТМЦ).Код,Ы,"Код");
Т.ПОлучитьСтрокуПоНомеру(Ы);
Т.ОстМ = Т.ОстМ + БиТам.СКД(3);
Состояние("Заполнение остатками в Той базе");
КонецЦикла;
Talkman @ Сегодня, 16:37 необходимо зарегистрироваться для просмотра ссылки
,
Добрый день! В 1с 8 РазорватьСоединение();
denis84 @ Сегодня, 16:56 необходимо зарегистрироваться для просмотра ссылки
,
Семерка у меня.
Перед Там = "";
Выполнить Там.ЗавершениеРаботыСистемы.
(как-то так. пишу по памяти)
убрать вопрос у пользователя про завершение работы
Talkman @ Вчера, 16:37
необходимо зарегистрироваться для просмотра ссылки
,
Добрый день! Вот такой вариант
БазаОЛЕ.ЗавершитьРаботуСистемы(0);
убрать вопрос, как вам подсказали, это первое
если все равно остается в памяти, убивать все переменные, являющиеся потомками Там = СоздатьОбъект("V77.Application"); , и сам Там тоже
Сегодня опробую, спасибо.
Вопрос при завершении работы системы отсутствует. Я грешу на ДЛЛку BARCODE. Она после завершения сеанса 1С выдает рекламное сообщение. Хотя меня смущает, что такие же оле подключения в коде других объектах 1С сеанс завершают без проблем.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.