Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение к базе через OLE.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Talkman
Добрый день. Есть две базы 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);
        Состояние("Заполнение остатками в Той базе");
    КонецЦикла;
denis84
Talkman @ Сегодня, 16:37 необходимо зарегистрироваться для просмотра ссылки ,
Добрый день! В 1с 8 РазорватьСоединение();
Talkman
denis84 @ Сегодня, 16:56 необходимо зарегистрироваться для просмотра ссылки ,
Семерка у меня.
wanjaas
Там = "";
Naghual
Перед Там = "";
Выполнить Там.ЗавершениеРаботыСистемы.
(как-то так. пишу по памяти)
sava1
убрать вопрос у пользователя про завершение работы
denis84
Talkman @ Вчера, 16:37 необходимо зарегистрироваться для просмотра ссылки ,
Добрый день! Вот такой вариант
 
БазаОЛЕ.ЗавершитьРаботуСистемы(0);

nik389
убрать вопрос, как вам подсказали, это первое
если все равно остается в памяти, убивать все переменные, являющиеся потомками Там = СоздатьОбъект("V77.Application"); , и сам Там тоже
Talkman
Сегодня опробую, спасибо.
Talkman
Вопрос при завершении работы системы отсутствует. Я грешу на ДЛЛку BARCODE. Она после завершения сеанса 1С выдает рекламное сообщение. Хотя меня смущает, что такие же оле подключения в коде других объектах 1С сеанс завершают без проблем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.