Автор: Мичман Харитонов 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.ЛОЖЬ);