Версия для печати темы (https://pro1c.org.ua/index.php?s=aefa8faf5d7906f8a90934a8dd7db79e&showtopic=53169)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запрос по ОЛЕ не читает значение "булево"

Автор: Мичман Харитонов 22.07.19, 10:26

Доброго дня!
Бухгалтерия для Украины 1.2, платформа 8.3.7.1860
Обращаюсь запросом по ОЛЕ к самописной учетной базе, платформа та же.

Запрос

В8 = Новый COMОбъект("V83.Application");
.........
Если Истина Тогда
            ЗапросОЛЕ = В8.NewObject("Запрос");

ТекстЗапроса = "ВЫБРАТЬ
            |        ТоварыНаСкладеОстатки.Номенклатура КАК Номенклатура,
            |        ТоварыНаСкладеОстатки.Номенклатура.Наименование КАК НоменклатураНаименование,
            |        ТоварыНаСкладеОстатки.Номенклатура.КодСТочкой КАК КодСТочкой,
            |        ТоварыНаСкладеОстатки.Склад.КодСклада КАК Склад,
            |        ТоварыНаСкладеОстатки.Склад.Наименование КАК СкладНаименование,
            |        ТоварыНаСкладеОстатки.КоличествоОстаток КАК ОстатокУпр,
            |        ТоварыНаСкладеОстатки.СуммаОстаток КАК СебестоимостьУпр
            |    ИЗ
            |        РегистрНакопления.ТоварыНаСкладе.Остатки("+
            ?(ДатаСравнения = '00010101',"","
            |                &Дата")+", Истина"+
            ?(Склад.Пустая(),""," И Склад.КодСклада  = &КодСклада") + "
            |                И Склад.ВидУчета <> &ВидУчета
            |                И Склад.НеПоказыватьВБухгалтерии = &НеПоказыватьВБухгалтерии
            |                И Фирма.КодОрганизации  = &КодБухОрганизации" +
            ?(Номенклатура.Пустая(),"","
            |                И Номенклатура В Иерархии(&Номенклатура)") + "
            |) КАК ТоварыНаСкладеОстатки" +
            
            ?(Склад.Пустая() или Склад = Справочники.Склады.ТоварыВПути,"
            |
            |ОБЪЕДИНИТЬ ВСЕ
            |
            |ВЫБРАТЬ
            |        ТоварыВПутиОстатки.Номенклатура,
            |        ТоварыВПутиОстатки.Номенклатура.Наименование,
            |        ТоварыВПутиОстатки.Номенклатура.КодСТочкой КАК КодСТочкой,
            |        ""000000000"" КАК Склад,
            |        ""Товары в пути"" КАК СкладНаименование,
            |        ТоварыВПутиОстатки.КоличествоОстаток,
            |        ТоварыВПутиОстатки.СуммаОстаток
            |    ИЗ
            |        РегистрНакопления.ТоварыВПути.Остатки("+
            ?(ДатаСравнения = '00010101',"","
            |                &Дата")+", Фирма.КодОрганизации  = &КодБухОрганизации" +
            ?(Номенклатура.Пустая(),"","
            |                И Номенклатура В Иерархии(&Номенклатура)") + "
            |                И Склад.НеПоказыватьВБухгалтерии = &НеПоказыватьВБухгалтерии
            |) КАК ТоварыВПутиОстатки", "");

            
            ЗапросОЛЕ.Текст = ТекстЗапроса;
            ЗапросОЛЕ.УстановитьПараметр("Дата", ДатаСравнения);
            ЗапросОЛЕ.УстановитьПараметр("КодБухОрганизации", Организация.Код);
            ЗапросОЛЕ.УстановитьПараметр("ВидУчета", В8.Перечисления.ВидыУчета.Торговля);
            ЗапросОЛЕ.УстановитьПараметр("НеПоказыватьВБухгалтерии", ЛОЖЬ);


Спотыкается на булевом значении, Склад.НеПоказыватьВБухгалтерии.
Ошибка
"{Отчет.СравнениеОстатковТоваровБухИУпр.МодульОбъекта(173)}: Ошибка при вызове метода контекста (Выполнить)
Результат = ЗапросОЛЕ.Выполнить();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.7.1860): {(30, 7)}: Поле не найдено "Склад.НеПоказыватьВБухгалтерии"
И <<?>>Склад.НеПоказыватьВБухгалтерии = &НеПоказыватьВБухгалтерии
" Поле точно есть, имя правильное. Что я не так-то делаю?

Автор: Petre 22.07.19, 10:30

Мичман Харитонов @ Today, 10:26 * ,

... ""000000000"" КАК Склад ...

Автор: Мичман Харитонов 22.07.19, 10:32

Petre @ Сегодня, 11:30 * ,
Эта конструкция работает.
Отчет был написан задолго до меня, я пытаюсь добавить отбор по реквизиту "НеПоказыватьВБухгалтерии"

Автор: Petre 22.07.19, 10:32

Вижу в виртуальных. Вообще, лучше отладчиком посмотреть готовый текст запроса и консолью запустить в самом источнике...

Автор: Мичман Харитонов 22.07.19, 10:45

В источнике показывает, только при выводе булево представляет как да/нет

Автор: daveal 22.07.19, 10:53

Мне кажеться, Вы смотрите первый запрос, а склада у Вас нет во втором. В РН ТоварыВПути точно есть измерение Склад?

Автор: takefive 22.07.19, 11:04

а без параметра?

И НЕ Склад.НеПоказыватьВБухгалтерии


Автор: Vladal 22.07.19, 16:13

Цитата(Мичман Харитонов @ 22.07.19, 11:26) *
И <<?>>Склад.НеПоказыватьВБухгалтерии = &НеПоказыватьВБухгалтерии
" Поле точно есть, имя правильное. Что я не так-то делаю?

Во втором запросе присоединяется необъектный тип Строка
""000000000"" КАК Склад,

Соответственно, у строки "00000000" нет поля НеПоказыватьВБухгалтерии
Это справедливо и для первой части запроса - на выходе литерал с кодом склада, а не ссылка на справочник Склады.

Советую присоединять не нолики, а пустую ссылку типа склад:
Значение(Справочник.Склады.ПустаяСсылка) как СкладСсылка
Либо поле НеПоказыватьВБухгалтерии вывести дополнительно в запросе - чтобы каждый раз не дергать соединение со справочником Склады, как это сделано с наименованием: Номенклатура.Наименование, код с точкой и другие реквизиты:

|        ТоварыНаСкладеОстатки.Номенклатура.Наименование КАК НоменклатураНаименование,
|        ТоварыНаСкладеОстатки.Номенклатура.КодСТочкой КАК КодСТочкой,
|        ТоварыНаСкладеОстатки.Склад КАК СкладСсылка,
|        ТоварыНаСкладеОстатки.Склад.КодСклада КАК Склад,
|        ТоварыНаСкладеОстатки.Склад.НеПоказыватьВБухгалтерии КАК СкладНеПоказыватьВБухгалтерии,
|        ТоварыНаСкладеОстатки.Склад.Наименование КАК СкладНаименование,
...

|        ТоварыВПутиОстатки.Номенклатура.КодСТочкой КАК КодСТочкой,
|        Значение(Справочник.Склады.ПустаяСсылка) как СкладСсылка,
|        ""000000000"" КАК Склад,
|        Истина КАК СкладНеПоказыватьВБухгалтерии, // или Ложь, что там надо по умолчанию
|        ""Товары в пути"" КАК СкладНаименование,
|        ТоварыВПутиОстатки.КоличествоОстаток,


И с условиями будет все ОК.
В первой части запроса ОК и так, а во второй условие "И Склад.НеПоказыватьВБухгалтерии = &НеПоказыватьВБухгалтерии" привести в соответствии с логикой "склада ТоварыВПути по умолчанию" - если он не отражается в БУ, то и не надо присоединять вторую часть запроса.

Цитата(Мичман Харитонов @ 22.07.19, 11:45) *
В источнике показывает, только при выводе булево представляет как да/нет

Это "бантики" визуализации. Не обращайте внимание.

Автор: mut 22.07.19, 18:43

А в регистре ТоварыВПути точно есть измерение Склад? Он как-бы нелогичен там.

Автор: Vladal 23.07.19, 8:49

Цитата(mut @ 22.07.19, 19:43) *
А в регистре ТоварыВПути точно есть измерение Склад? Он как-бы нелогичен там.

А его как бы нулями забивают. "00000000" как Склад

Там некорректно составлен запрос под конкретную задачу.

Автор: alex1c 26.07.19, 21:36

Думаю надо копать в эту сторону:

ЗапросОЛЕ.УстановитьПараметр("НеПоказыватьВБухгалтерии", В8.ЛОЖЬ);

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua