Имя: Пароль:
1C
1С v8
Бесконечный цикл при работе через OLE
0 fdv_83
 
29.02.16
12:26
Здравствуйте, форумчане. Возникла такая проблема. Подключаюсь к базе с помощью ComConnector. В этой базе при переборе строк табличной части документа возникает бесконечный цикл, хотя в табличной части только одна строка. Подскажите, пожалуйста, как можно это решить. Код прилагается:

&НаСервере
Процедура ВыполнитьНаСервере()
    OLEБаза = Новый COMОбъект("V83.ComConnector");
    Попытка
        Если СерверныйВариант Тогда
            OLEСоединение = OLEБаза.Connect("Srvr = """+СокрЛП(ИмяСервера)+""";Ref = """+СокрЛП(ИмяБазы)+""";Usr = """+СокрЛП(Пользователь)+""";Pwd = """ + СокрЛП(Пароль) + """;");
        Иначе
            OLEСоединение = OLEБаза.Connect("File = """+СокрЛП(ПутьКбазе)+""";Usr = """+СокрЛП(Пользователь)+""";Pwd = """ + СокрЛП(Пароль) + """;");
        КонецЕсли;
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Для ц = 0 По СписокВидовДокументов.Количество()-1 Цикл
        ЭлементСпискаВидовДокументов = СписокВидовДокументов.Получить(ц);
        Если ЭлементСпискаВидовДокументов.Пометка Тогда
            ВидДокумента = ЭлементСпискаВидовДокументов.Значение;
            OLEДокументы = OLEСоединение.Документы[ВидДокумента].Выбрать(Период.ДатаНачала,Период.ДатаОкончания);
            //OLEДокументы = Документы.ПоступлениеТоваровУслуг.Выбрать(Период.ДатаНачала,Период.ДатаОкончания);
            Пока OLEДокументы.Следующий() Цикл
                Сообщить("Вид документа: "+ВидДокумента+", идентификатор: "+OLEДокументы.Ссылка.УникальныйИдентификатор());
                Для Каждого Реквизит Из OLEДокументы.Ссылка.Метаданные().Реквизиты Цикл
                    Сообщить(Символы.Таб+"Имя реквизита: "+Реквизит.Имя);
                    Сообщить(Символы.Таб+Символы.Таб+"Значение реквизита: "+Реквизит);
                КонецЦикла;
                Для ц = 0 По OLEДокументы.Ссылка.Метаданные().ТабличныеЧасти.Количество()-1 Цикл
                    ТабличнаяЧасть = OLEДокументы.Ссылка.Метаданные().ТабличныеЧасти.Получить(ц);
                    ИмяТабличнойЧасти = ТабличнаяЧасть.Name;
                    //Для й = 0 По OLEДокументы[ИмяТабличнойЧасти].Количество()-1 Цикл
                    Для Каждого ТекущаяСтрока Из OLEДокументы[ИмяТабличнойЧасти] Цикл
                        РеквизитыТабличнойЧасти = OLEДокументы.Ссылка.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты;
                        Для Каждого РеквизитТабличнойЧасти Из РеквизитыТабличнойЧасти Цикл
                            Сообщить(Символы.Таб+"Имя реквизита табличной части: "+РеквизитТабличнойЧасти.Имя);
                            Сообщить(Символы.Таб+Символы.Таб+"Значение реквизита табличной части: "+РеквизитТабличнойЧасти);
                        КонецЦикла;
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
1 Tateossian
 
29.02.16
12:28
А вот это что такое СписокВидовДокументов ???
2 Euguln
 
29.02.16
12:29
Один и тот же итератор ц
3 fdv_83
 
29.02.16
12:29
Это список видов документов из подключенной базы
4 fdv_83
 
29.02.16
12:31
(2) Ой, точно. Проглядел я. Спасибо