Имя: Пароль:
1C
1С v8
Ком ошибка при запросе
0 Jurgens73
 
21.10.14
12:55
Уже перерыл много чего но никак не могу разобраться. кто может подскажите причину.

Ком = Новый COMObject("V82.ComConnector");
Соед = Ком.Connect(СтрокаСоединения);
КомЗапрос = Соед.NewObject("Запрос");
ТекстКомЗапрос = "ВЫБРАТЬ
                          |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                          |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
                          |    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Субконто3,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК СуммаНачальныйОстатокКт,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКонечныйОстатокКт,
                          |    ХозрасчетныйОстаткиИОбороты.Счет
                          |ИЗ
                          |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачДата, &КонДата, Период, , Счет В ИЕРАРХИИ (&ВыбСчет), , ) КАК ХозрасчетныйОстаткиИОбороты
                          |ГДЕ
                          |    ХозрасчетныйОстаткиИОбороты.Организация = &Организация";
                          
                          Если  ЗначениеЗаполнено(СУбконто1) ТОгда
                              ТекстКомЗапрос = ТекстКомЗапрос + "
                              |    И ХозрасчетныйОстаткиИОбороты.Субконто1 = &Субконто1";
                              
                              КомСубконто1 = СУбконто1;
                              Если СУбконто1 = Неопределено Тогда
                              ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(СУбконто1)) Тогда
                                  КомСубконто1 = Соед.Справочники[Субконто1.метаданные().имя].НайтиПоНаименованию(Субконто1.Наименование);
                              ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(СУбконто3)) Тогда
                                  Сообщить("Документ");
                              КонецЕсли;
                              
                              КомЗапрос.УстановитьПараметр("Субконто1", КомСубконто1);
                              
                          КонецЕсли;
1 Looser-1c
 
21.10.14
12:55
Я угадаю ошибку с трёх букв!
2 Ёпрст
 
21.10.14
12:56
ВыбСчет - это че ?
3 Ёпрст
 
21.10.14
12:56
видать с счет не с оле-базы, да ?
4 Jurgens73
 
21.10.14
12:57
блин а че исходный текст нельзя редактировать7
5 Ёпрст
 
21.10.14
12:57
(4) можно - используй силу копипаста!
6 Maxus43
 
21.10.14
12:58
нет не выполнить, ни прочего.
Чего за ошибка?

(4) Тут нельзя забрать слова назад, думай чего пишешь)
7 Jurgens73
 
21.10.14
12:58
Если  ЗначениеЗаполнено(СУбконто3) ТОгда
                              ТекстКомЗапрос = ТекстКомЗапрос + "
                              |    И ХозрасчетныйОстаткиИОбороты.Субконто3 = &Субконто3";
                              
                              КомСубконто3 = СУбконто3;
                              Если СУбконто3 = Неопределено Тогда
                              ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(СУбконто3)) Тогда
                                  КомСубконто3 = Соед.Справочники[Субконто3.метаданные().имя].НайтиПоНаименованию(Субконто3.Наименование);
                              ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(СУбконто3)) Тогда
                                 ЗначениеПеречисления = Субконто3;
                                 ИмяПеречисления = ЗначениеПеречисления.Метаданные().Имя;
                                 ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(ЗначениеПеречисления);
                                 ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;
                                
                                 КомСубконто3 = соед.Метаданные().Перечисления[Субконто3.Метаданные().Имя].EnumValues[ИмяЗначенияПеречисления];
                              КонецЕсли;
                              
                              КомЗапрос.УстановитьПараметр("Субконто3", КомСубконто3);
                          КонецЕсли;

        КомЗапрос.Текст = ТекстКомЗапрос;

омРезультат = КомЗапрос.Выполнить();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.19.83): {(16, 42)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ХозрасчетныйОстаткиИОбороты.Субконто3 <<?>>= &Субконто3
8 Jurgens73
 
21.10.14
12:59
субконто3 - перечисление
9 Maxus43
 
21.10.14
13:00
(7) ну типы не совпадают судя по ошибке. Мы как узнаем что там?
Проверь в той базе план счетов, субконты его, этот же запрос выполни там
10 Jurgens73
 
21.10.14
13:01
Да там в той базе субконто3 так же перечисление этого же типа
11 Jurgens73
 
21.10.14
13:02
и педедаю перечисление в отладчике ком объект уже перечисление тип
12 palpetrovich
 
21.10.14
13:04
(10) покажи что у тебя в УстановитьПараметр для Субконто3
13 Maxus43
 
21.10.14
13:06
что-то мне кажется странно это вот соед.Метаданные().Перечисления[Субконто3.Метаданные().Имя].EnumValues[ИмяЗначенияПеречисления];...
попробуй четко указать перечисление, чтоб проверить.
соед.Перечисления[Субконто3.Метаданные().Имя].ЧтоТамУТебя
14 Maxus43
 
21.10.14
13:08
ТИп там у тебя - метаданные на выходе, а не значение перечисления
15 palpetrovich
 
21.10.14
13:11
*(12) для ВыбСчет конечно
(13) а мне вот это странно: КомСубконто1 = СУбконто1; :)
16 Maxus43
 
21.10.14
13:12
(15) это да, странно, но не смертельно если всё таки условия срабатывают)
17 palpetrovich
 
21.10.14
13:15
Если нижеизложенные предположения верны:
Субконто1 // эта база
КомСубконто1 // подключаемая база
то
Если  ЗначениеЗаполнено(СУбконто1) ТОгда
                              ТекстКомЗапрос = ТекстКомЗапрос + "
                              |    И ХозрасчетныйОстаткиИОбороты.Субконто1 = &Субконто1";
                              
                              КомСубконто1 = СУбконто1;
                              Если СУбконто1 = Неопределено Тогда // сюда по-ходу не попадаем :)
18 Jurgens73
 
21.10.14
13:45
Задал явно. сработало. спасибо. буду дальше разбираться
19 Maxus43
 
21.10.14
13:49
(18) Метаданные() - лишнее там, перемудрил
20 Jurgens73
 
21.10.14
13:55
EnumValues - вот лишнее