Имя: Пароль:
1C
1С v8
Работа с запросами
,
0 Black Dragon
 
02.09.11
16:14
Доброго дня!

Вот устанавливаю COM соединение из 8.2 УТ 10.3 с 7.7 ТиС
делаю запросы, несколько, но в каждом присутствует атрибут контрагент, который является элементом справочника контрагенты.

Однако, при сравнении атрибутов разных запросов по контрагенту не выходит истиного условия! чертовщина какая-то!
1 rbcvg
 
02.09.11
16:15
типы разные?
2 salvator
 
02.09.11
16:15
Код в студию
3 qeos
 
02.09.11
16:15
ты сравниваешь объекты разных баз
4 Жан Пердежон
 
02.09.11
16:17
(3) хз что он там с чем сравниваем
5 Жан Пердежон
 
02.09.11
16:18
*ет
6 Black Dragon
 
02.09.11
16:26
База77Контрагенты = База.CreateObject("Запрос");
               ВыборКонтрагенты = Ложь;
               ТекстЗапроса = "
               | Обрабатывать НеПомеченныеНаУдаление;
               | Текущий = Справочник.Контрагенты.ТекущийЭлемент;
               | ПолнНаименование = Справочник.ФизЛица.ПолнНаименовние,Справочник.ЮрЛица.ПолнНаименование;
               | ИНН = Справочник.ФизЛица.ИНН,Справочник.ЮрЛица.ИНН;
               | ЮрАдрес = Справочник.ФизЛица.ЮрАдрес,Справочник.ЮрЛица.ЮрАдрес;
               | ФактАдрес = Справочник.ФизЛица.ФактАдрес,Справочник.ЮрЛица.ФактАдрес;
               | Телефоны = Справочник.ФизЛица.Телефоны,Справочник.ЮрЛица.Телефоны;
               | Регион = Справочник.я_Контрагенты.Регион;
               | ВД = Справочник.я_Контрагенты.ОсновнойВД;
               | ИстИнфо = Справочник.я_Контрагенты.ИсточникРекламы;
               | Условие (Справочник.я_Контрагенты.Контрагент = Справочник.Контрагенты.ТекущийЭлемент);
               | Условие (Справочник.Контрагенты.ЮрФизЛицо = Справочник.ФизЛица.ТекущийЭлемент ИЛИ Справочник.Контрагенты.ЮрФизЛицо = Справочник.ЮрЛица.ТекущийЭлемент);
               | Группировка Текущий;";
               Если База77Контрагенты.Выполнить(ТекстЗапроса) Тогда
                   Сообщить("Выборка контрагентов сформирована!");
                   ВыборКонтрагенты = Истина;
               КонецЕсли;    
               // договора контрагентов
               База77Договора = База.CreateObject("Запрос");
               ВыборДоговора = Ложь;
               ТекстЗапроса = "
               | Обрабатывать НеПомеченныеНаУдаление;
               | Текущий = Справочник.Контрагенты.ТекущийЭлемент;
               | Договор = Справочник.Договора.ТекущийЭлемент;
               | Условие (Справочник.Договора.Владелец = Справочник.Контрагенты.ТекущийЭлемент);
               | Группировка Текущий;
               | Группировка Договор;";
               Если База77Договора.Выполнить(ТекстЗапроса) Тогда
                   Сообщить("Выборка договоров сформирована!");
                   ВыборДоговора = Истина;
               КонецЕсли;
               // банковские счета
               База77Счета = База.CreateObject("Запрос");
               ВыборСчета = Ложь;
               ТекстЗапроса = "
               | Обрабатывать НеПомеченныеНаУдаление;
               | Текущий = Справочник.Контрагенты.ТекущийЭлемент;
               | Счет = Справочник.БанковскиеСчета.ТекущийЭлемент;
               | Условие (Справочник.БанковскиеСчета.ЮрФизЛицо = Справочник.Контрагенты.ТекущийЭлемент);
               | Группировка Текущий;
               | Группировка Счет;";
               Если База77Счет.Выполнить(ТекстЗапроса) Тогда
                   Сообщить("Выборка счетов сформирована!");
                   ВыборСчета = Истина;
               КонецЕсли;
               // контактные лица контрагентов
               База77Контакты = База.CreateObject("Запрос");
               ВыборКонтакты = Ложь;
               ТекстЗапроса = "
               | Обрабатывать НеПомеченныеНаУдаление;
               | Текущий = Справочник.я_КонтактныеЛица.ТекущийЭлемент;
               | Владелец = Справочник.я_КонтактныеЛица.Владелец;
               | Фамилия  = Справочник.я_КонтактныеЛица.Фамилия;
               | Имя = Справочник.я_КонтактныеЛица.Имя;
               | Отчество = Справочник.я_КонтактныеЛица.Отчество;
               | Должность = Справочник.я_КонтактныеЛица.Должность;
               | Пол = Справочник.я_КонтактныеЛица.Пол;
               | ДеньРождения = Справочник.я_КонтактныеЛица.ДеньРождения;
               | Группировка Текущий без Групп;";
               Если База77Контакты.Выполнить(ТекстЗапроса) Тогда
7 Black Dragon
 
02.09.11
16:35
Если ВыборКонтрагенты Тогда
                   Пока База77Контрагенты.Группировка() Цикл
                       Если ВыборДоговора Тогда
                           База77Договора.Получить(База77Контрагенты.Текущий);
                           Пока База77Договора.Группировка(2) Цикл
                               // сюда не заходит !!!
                           КонецЦикла;
                       КонецЕсли;    
                   КонецЦикла;
               КонецЕсли;
8 izekia
 
02.09.11
16:38
Пока База77Договора.Группировка(2) Цикл попробуй явно сравнивать?
9 Black Dragon
 
02.09.11
16:42
сама суть в том чтобы в одном запросе собрать инфо по контрагентам в одной структуре из разных справочников но имеющих отношение один к одному!

во всех остальных запросах идут отношения один ко многим: такие как договора, счета, контактные лица, контактная инфо и т.п.

нужно то ведь взять элемент запроса по контрагентам и в остальных запросах извлечь инфо по ним!!!
10 Black Dragon
 
02.09.11
16:45
может ОЛЕ не понимает несколько запросов в один момент времени к одной базе ?!
11 Black Dragon
 
02.09.11
16:45
пробовал конечно выгружать в таблицы,но уйма времени на пустую перевалку !
12 viktor_vv
 
02.09.11
16:58
| Обрабатывать НеПомеченныеНаУдаление;
               | Текущий = Справочник.Договора.Владелец;
               | Договор = Справочник.Договора.ТекущийЭлемент;
              // | Условие (Справочник.Договора.Владелец = Справочник.Контрагенты.ТекущийЭлемент);
               | Группировка Текущий;
               | Группировка Договор;";
13 Black Dragon
 
02.09.11
16:59
Получить(<?>)
Синтаксис:
Получить(<ЗначениеГруппировки1>,...,<ЗначениеГруппировкиN>)
Назначение:
Прямое позиционирование на запись в выборке по конкретным значениям группировок.
Возвращает: 1 - если запись найдена, 0 - иначе.
Параметры:
<ЗначениеГруппировкиN> - значение параметра N-ой группировки запроса.
Замечание:
Опущенные при вызове последние значения группировок должны заменяться запятыми. Если при вызове метода опущены все параметры, то выборка позиционируется на самое начало временного набора данных, на строку итогов. После выполнения метода Получить может осуществляться дальнейший обход выборки вызовами метода Группировка

может здесь что не так сказано?
14 viktor_vv
 
02.09.11
17:01
Ну и на всякий случай, хотя не уверен что надо.

                       Если ВыборДоговора Тогда
                           База77Договора.вНачалоВыборки();
                           База77Договора.Получить(База77Контрагенты.Текущий);
15 Black Dragon
 
02.09.11
17:03
(14) спасибо! щаз буду испытания проводить! :)
16 viktor_vv
 
02.09.11
17:06
Еще на всякий случай

Если База77Договора.Получить(База77Контрагенты.Текущий) = 0 Тогда
Сообщить("Облом") ;
Продолжить ;
КонецЕсли
17 viktor_vv
 
02.09.11
17:11
И таки см (8). Оно может восьмерка в условиях неявно и преобразовывает 1 или 0 в булевы, не знаю, но метод семерочный возвращает именно 1 или 0.
18 viktor_vv
 
02.09.11
17:12
А так вот оно
"Опущенные при вызове последние значения группировок должны заменяться запятыми. "

Если База77Договора.Получить(База77Контрагенты.Текущий,) = 0 Тогда