Добрый день. Есть две базы 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); Состояние("Заполнение остатками в Той базе"); КонецЦикла;
Группа: Пользователи
Сообщений: 162
Из: Украина
Спасибо сказали: 39 раз
Рейтинг: 36
убрать вопрос, как вам подсказали, это первое если все равно остается в памяти, убивать все переменные, являющиеся потомками Там = СоздатьОбъект("V77.Application"); , и сам Там тоже
Вопрос при завершении работы системы отсутствует. Я грешу на ДЛЛку BARCODE. Она после завершения сеанса 1С выдает рекламное сообщение. Хотя меня смущает, что такие же оле подключения в коде других объектах 1С сеанс завершают без проблем.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!