|
Подключение к базе 1С 7.7 Com-соединение | ☑ | ||
---|---|---|---|---|
0
ice123
08.12.09
✎
16:54
|
Народ, помогите с проблемкой, которая заключается в следующем:
есть подключение к базе 7.7 через Com-соединение. Почему-то стало подвисать соединение с 7-кой, даже если пройдена процедура закрытия 7-ки: Процедура ЗакрытьВ7(в7, параметры) Экспорт Если Не в7 = Неопределено Тогда Попытка в7.ЗавершитьРаботуСистемы(0); Исключение Сообщить("/d" + Путь + "/n" + СокрЛП(Логин) + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; КонецЕсли; Состояние("Основная база закрыта"); в7 = Неопределено; КонецПроцедуры В чем может быть проблема??? |
|||
1
ДенисЧ
08.12.09
✎
16:56
|
Не все созданные объекты занулены...
|
|||
2
ice123
08.12.09
✎
16:56
|
Дык ведь самому Com-соединению присваиваю в конце B7 =Неопределено
|
|||
3
ДенисЧ
08.12.09
✎
16:58
|
(2) А остальные-то висят...
|
|||
4
ice123
08.12.09
✎
16:58
|
Да, кстати, если свернуть все окна, то под окнами окажется окошко 7-ки, с вопросом "Завершить ли работу системы Да/Нет"...
(3)что остальное может висеть? |
|||
5
ДенисЧ
08.12.09
✎
17:00
|
ну блин...
Глобальник ПриЗавершенииРаботыСистемы() ковыряй на предмет вопроса... А висеть может любой объект, созданный через в7.CreateObject() и т.п. |
|||
6
ice123
08.12.09
✎
17:00
|
(5) где ковырять в 7-ке или в 8-ке?
|
|||
7
ДенисЧ
08.12.09
✎
17:01
|
(6) чей вопрос висит?
Продолжать7 |
|||
8
ice123
08.12.09
✎
17:02
|
(7) Спасибо! будем искать, но туплю чего-то я нешуточно...))
|
|||
9
ice123
08.12.09
✎
17:11
|
И все же...что написать бы такое, чтобы закрылись все созданные через Com-соединения объекты?
|
|||
10
ДенисЧ
08.12.09
✎
17:14
|
(9) Сразу, как созданный объект не нужен - обнуляй его...
|
|||
11
ice123
08.12.09
✎
17:16
|
(9)понятно... Попробую, спасибо!
|
|||
12
ice123
09.12.09
✎
17:41
|
Мучает меня все та же проблема. Подвисает соединение 7-ки, отслеживаю в диспетчере задач.
что не так? |
|||
13
ice123
09.12.09
✎
17:42
|
Код подсоединения к 7-ке:
Параметры = новый Структура; Параметры.Вставить("ПараметрыБД", ?(пустаяСтрока(пароль),"/d" + Путь + " /n" + СокрЛП(Логин), "/d" + Путь + " /n" + СокрЛП(Логин) + " /p" + сокрЛП(пароль))); Попытка в7 = Новый COMОбъект("V1CEnterprise.Application"); _открыта = в7.initialize(в7.RMTrade, СокрЛП(Параметры.ПараметрыБД), "NO_SPLASH_SHOW"); Исключение Состояние("/d" + Путь + "/n" + СокрЛП(Логин) + ОписаниеОшибки()); Возврат Ложь; КонецПопытки; ОткрытаБД = Новый Структура; ОткрытаБД.Вставить("_открыта", _открыта); ОткрытаБД.Вставить("в7", в7); ОткрытаБД.Вставить("Параметры", Параметры); Возврат ОткрытаБД; |
|||
14
ice123
09.12.09
✎
17:42
|
Код закрытие 7-ки:
Если Не в7 = Неопределено Тогда Попытка в7.ЗавершитьРаботуСистемы(0); Исключение Сообщить("/d" + Путь + "/n" + СокрЛП(Логин) + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; КонецЕсли; Состояние("Основная база закрыта"); в7 = 0; |
|||
15
ice123
09.12.09
✎
17:43
|
Код извлечения данных из 7-ки в 8-ку:
Попытка ТЗСравнения77 = Новый ТаблицаЗначений; ТЗСравнения77.Колонки.Добавить("КодФирмы"); //ТЗСравнения77.Колонки.Добавить("ИНН"); ТЗСравнения77.Колонки.Добавить("НомерДокумента"); ТЗСравнения77.Колонки.Добавить("ПредставлениеНомДок"); ТЗСравнения77.Колонки.Добавить("ВидДокумента"); ТЗСравнения77.Колонки.Добавить("ПредставлениеВидаДокумента"); ТЗСравнения77.Колонки.Добавить("Вид"); ТЗСравнения77.Колонки.Добавить("ДатаДокумента"); ТЗСравнения77.Колонки.Добавить("Организация"); ТЗСравнения77.Колонки.Добавить("Сумма"); ТЗСравнения77.Колонки.Добавить("Контрагент"); ТЗСравнения77.Колонки.Добавить("ДокОснНомер"); ТЗСравнения77.Колонки.Добавить("ДокОснВид"); ТЗСравнения77.Колонки.Добавить("ДокСчет"); ТЗСравнения77.Колонки.Добавить("Счет"); V7Фирма = в7.CreateObject("Справочник.НашиФирмы"); Если НЕ (Организация = Справочники.Организации.ПустаяСсылка()) Тогда Если V7Фирма.НайтиПоКоду(СокрЛП(Организация.Код)) = 1 Тогда V7Фирма = V7Фирма.ТекущийЭлемент(); ИНН = СокрЛП(V7Фирма.ИНН.Получить(ТекущаяДата())); Если ИНН = СокрЛП(Организация.ИНН) Тогда V7Организация = V7Фирма; КонецЕсли; КонецЕсли; Иначе V7Организация = в7.CreateObject("СписокЗначений"); V7Фирма.ВыбратьЭлементы(); Пока V7Фирма.ПолучитьЭлемент() > 0 Цикл Если ПустаяСтрока(V7Фирма.Префикс) = 0 Тогда V7Организация.ДобавитьЗначение(V7Фирма.ТекущийЭлемент()); КонецЕсли; КонецЦикла; КонецЕсли; V7Фирма = 0; Для каждого ЭлементСпсЗнач Из Счет77 Цикл V7Счет = в7.CreateObject("Счет"); V7Счет.НайтиПоКоду(ЭлементСпсЗнач.Значение); V7БИ = в7.CreateObject("БухгалтерскиеИтоги"); V7БИ.ИспользоватьСубконто(V7Счет.ВидСубконто(1), V7Организация); V7БИ.ИспользоватьСубконто(V7Счет.ВидСубконто(2)); Если ЭлементСпсЗнач.Значение = "РКН" Тогда V7БИ.ИспользоватьСубконто(V7Счет.ВидСубконто(3)); КонецЕсли; V7БИ.ВыполнитьЗапрос(НачДата, КонецДня(КонДата), ЭлементСпсЗнач.Значение, "", "", 3, "Проводка", "С"); V7БИ.ВыбратьСчета(); Пока V7БИ.ПолучитьСчет() = 1 Цикл СчКод = V7БИ.Счет.Код; V7БИ.ВыбратьСубконто(1); Пока V7БИ.ПолучитьСубконто(1) = 1 Цикл Код = СокрЛП(V7БИ.Субконто(1).Код); НаименованиеОрганизации = V7БИ.Субконто(1).Наименование; V7БИ.ВыбратьПериоды(); Пока V7БИ.ПолучитьПериод() = 1 Цикл V7Операция = V7БИ.Операция; Документ = V7Операция.Документ; ДокВид = Документ.Вид(); ДокПредставлениеВида = Документ.ПредставлениеВида(); ДокНомер = Документ.НомерДок; ДокДата = Документ.ДатаДок; ДокОснНомер = ?(ДокВид = "КурсовыеРазницы", СокрЛП(Документ.ДокументОснование.НомерДок), ""); ДокОснВид = ?(ДокВид = "КурсовыеРазницы", Документ.ДокументОснование.Вид(), ""); Состояние("Получение данных из основной базы, документ: " + ДокПредставлениеВида + " № " + СокрЛП(ДокНомер) + " от " + Формат(ДокДата, "ДФ=dd.MM.yyyy")); V7БИ.ВыбратьСубконто(2); Пока V7БИ.ПолучитьСубконто(2) = 1 Цикл //ИНН = СокрЛП(V7БИ.Субконто(2).ИНН); Контрагент = СокрЛП(V7БИ.Субконто(2).Код); НоваяСтрока = ТЗСравнения77.Добавить(); НоваяСтрока.ВидДокумента = ДокВид; НоваяСтрока.ПредставлениеВидаДокумента = ДокПредставлениеВида; НоваяСтрока.ДатаДокумента = ДокДата; НоваяСтрока.КодФирмы = Код; //НоваяСтрока.ИНН = ИНН; НоваяСтрока.Организация = НРег(НаименованиеОрганизации); НоваяСтрока.ДокОснНомер = ДокОснНомер; НоваяСтрока.ДокОснВид = ДокОснВид; НоваяСтрока.Счет = СчКод; НоваяСтрока.ПредставлениеНомДок = СокрЛП(ДокНомер); Если ДокВид = "ПоступлениеТМЦ" Тогда НоваяСтрока.Вид = Документ.ПолучитьАтрибут("Вид"); Если НоваяСтрока.Вид = 1 Тогда НоваяСтрока.НомерДокумента = "ОБ-" + РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 8, "0", 0); ИначеЕсли НоваяСтрока.Вид = 2 Тогда НоваяСтрока.ВидДокумента = "ПоступлениеНМА"; НоваяСтрока.НомерДокумента = РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 11, "0", 0); ИначеЕсли НоваяСтрока.Вид = 4 Тогда НоваяСтрока.НомерДокумента = "М-" + РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 9, "0", 0); ИначеЕсли НоваяСтрока.Вид = 5 Тогда НоваяСтрока.НомерДокумента = "Т-" + РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 9, "0", 0); ИначеЕсли НоваяСтрока.Вид = 6 Тогда НоваяСтрока.НомерДокумента = "РБП-" + РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 7, "0", 0); Иначе НоваяСтрока.НомерДокумента = СокрЛП(ДокНомер); КонецЕсли; ИначеЕсли НоваяСтрока.ВидДокумента = "ОприходованиеУслуг" Тогда НоваяСтрока.НомерДокумента = "У-" + РегламентированнаяОтчетность.ДополнитьСтроку(СокрЛП(ДокНомер), 9, "0", 0); ИначеЕсли (НоваяСтрока.ВидДокумента = "ВыпискаИзБанка") Тогда НоваяСтрока.НомерДокумента = СокрЛП(ПреобразованиеНомера(ДокНомер, 48)); ИначеЕсли (НоваяСтрока.ВидДокумента = "ПереоценкаВалюты") Тогда НоваяСтрока.НомерДокумента = СокрЛП(Формат(ДокДата ,"ДФ=dd.MM.yyyy")); Иначе НоваяСтрока.НомерДокумента = СокрЛП(ДокНомер); КонецЕсли; НоваяСтрока.Сумма = V7БИ.ДО() - V7БИ.КО(); НоваяСтрока.Контрагент = Контрагент; Если ЭлементСпсЗнач.Значение = "РКН" Тогда V7БИ.ВыбратьСубконто(3); Пока V7БИ.ПолучитьСубконто(3) = 1 Цикл ДокСчет = V7БИ.Субконто(3); НоваяСтрока.ДокСчет = СокрЛП(ДокСчет.НомерДок); КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; V7БИ = 0; //V7Организация = Неопределено; КонецЦикла; V7Счет = 0; //V7Фирма = Неопределено; V7Организация = 0; Состояние("Обработка информации, полученной из основной базы..."); СоотвВидовДок = Новый Соответствие; СоотвВидовДок.Вставить("БухПереброскаСредств", "Бух. переброска средств"); СоотвВидовДок.Вставить("ВыпискаИзБанка", "Выписка из банка"); Для каждого Стр Из ТЗСравнения77 Цикл Если (Стр.ДокОснВид <> "") И (Стр.ДокОснНомер <> "") Тогда СтруктураОтбора = Новый Структура(); СтруктураОтбора.Вставить("Контрагент", Стр.Контрагент); СтруктураОтбора.Вставить("ДокСчет", Стр.ДокСчет); СтруктураОтбора.Вставить("ВидДокумента", Стр.ДокОснВид); СтруктураОтбора.Вставить("ПредставлениеНомДок", Стр.ДокОснНомер); СтрокиКурсРазницы = ТЗСравнения77.НайтиСтроки(СтруктураОтбора); Если СтрокиКурсРазницы.Количество() > 0 Тогда Для каждого Элемент Из СтрокиКурсРазницы Цикл Стр.ПредставлениеНомДок = СокрЛП(Элемент.ПредставлениеНомДок); Стр.НомерДокумента = СокрЛП(Элемент.НомерДокумента); Стр.ВидДокумента = Элемент.ВидДокумента; Стр.ПредставлениеВидаДокумента = СоотвВидовДок.Получить(Стр.ДокОснВид); КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; ТЗВспом77 = ""; Если НЕ (ТЗДок77 = Неопределено) Тогда ТЗВспом77 = ТЗДок77.Скопировать(); ТЗДок77.Очистить(); КонецЕсли; ТЗДок77 = ТЗСравнения77.Скопировать(, "НомерДокумента, ПредставлениеНомДок, ПредставлениеВидаДокумента"); Если НЕ (ТЗВспом77 = "") Тогда Для каждого Стр Из ТЗВспом77 Цикл НоваяСтрока = ТЗДок77.Добавить(); НоваяСтрока.НомерДокумента = Стр.НомерДокумента; НоваяСтрока.ПредставлениеНомДок = Стр.ПредставлениеНомДок; НоваяСтрока.ПредставлениеВидаДокумента = Стр.ПредставлениеВидаДокумента; КонецЦикла; КонецЕсли; ТЗДок77.Свернуть("НомерДокумента, ПредставлениеНомДок, ПредставлениеВидаДокумента"); ТЗСравнения77.Свернуть("КодФирмы, НомерДокумента, ВидДокумента, ПредставлениеВидаДокумента, ДатаДокумента, |Организация, Счет, Контрагент", "Сумма"); Исключение //Закрытие базы после получения данных ЗакрытьВ7(в7, параметры); КонецПопытки; в7 = 0; ЗакрытьВ7(в7, параметры); Возврат ТЗСравнения77; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |