Очередная краткая заметка по не вполне очевидному оператору языка запросов 1С: Предприятия 8.

Данную проблему я предлагаю рассмотреть на примере построения запроса в рамках типовой конфигурации "Управление торговлей", редакция 10.2. Собственно, передо мной встала задача - получить количество списанного товара. Имеется в виду, товар списывается именно документом "Списание товара". При изучении движений этого документа выяснилось, что он, помимо всего прочего, выполняет расход по регистру ТоварыНаСкладах. С другой стороны, в качестве регистраторов движений по этому регистру выступает большое количество различных документов, следовательно, в запросе нужно отобрать только те регистраторы, тип которых - документ списания товаров. Ну и еще одно примечание - воспользоваться виртуальной таблицей, к сожалению, не получится, так как в ней не предусмотрены средства отбора по регистратору.

Итак, как же проверить тип ссылки в запросе? Первоначально мои мысли заработали в направлении функции ПОДСТРОКА, и я написал конструкцию вида ГДЕ ПОДСТРОКА(ТоварыНаСкладах.Регистратор.Представление, 1, 8 ) = "Списание". Разумеется, такая конструкция конструктору запросов крайне не понравилась, и это к лучшему (так как иначе эта статья бы не появилась smile). Оказалось, что для решения поставленной задачи нужно применять оператор ССЫЛКА, то есть, условие будет выглядеть так: ГДЕ ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров, т.е. оператор проверяет, является ли значение выражения, указанного слева от него, ссылкой на таблицу, указанной справа (кстати в документации почему-то наоборот написано. Ошибка rolleyes). Таким образом, наш запрос будет выглядеть так:

ВЫБРАТЬ
  ТоварыНаСкладах.Номенклатура КАК Номенклатура,
  СУММА(ТоварыНаСкладах.Количество) КАК Количество
ИЗ
  РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
  ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров
  И ТоварыНаСкладах.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
  ТоварыНаСкладах.Номенклатура

В запрос необходимо будет передать два параметра (начало и конец периода). Условие по виду движения, очевидно, не нужно, так как "маловероятно" wink, что документ списания будет делать приход biggrin

Вопросы и ответы

Несколько вопросов и ответов со старого сайта.

Вопрос (ZolteR): а вот у меня параметр &Контрагент составной (Склады или контрагенты) и почему при выборе одного из них в поле ввода выдает ошибку на другое?

Если Склады:

&Контрагент ССЫЛКА Справочник.Контрагенты

Если Контрагенты:

&Контрагент ССЫЛКА Справочник.Склады

Ответ: на первый взгляд, нужно определять тип значения поля до вызова запроса и, соответственно, использовать разные запросы. Если честно, не понял вопрос. Желательно задачу полностью поставить.

Вопрос (Владимир): несовместимые типы "ССЫЛКА"

И НЕ СчетФактураПолученный.ДокументОснование ССЫЛКА Документ.ОтчетКомитентуОПродажах

Соотвественно ошибка идет и при выполнении программы. Галка о том, что ДокументОсновние может быть основанием ОтчетаКомитента поставлена. Какие могут быть идеи?

Ответ: СчетФактураПолученный.ДокументОснование
В данном случае это реквизит, поэтому в первую очередь нужно проверять состав типов реквизита, а не возможность ввода на основании. Также необходимо убедиться, что при вводе на основании (процедура ОбработкаЗаполнения, если не ошибаюсь) этот реквизит заполняется ссылкой на собственно документ-основание.

Вопрос (Владимир): пока сходу могу добавить только, что Документов ОтчетКомитентуОПродажах не заведено на предприятии вообще ни одного. Но это не должно влиять на сравнение по типу. ДокументОснование - да, там я поставил галку в качестве состава реквизитов и на ОтчетеКомитента.

Ответ: по идее-то да (не должно влиять на сравнение по типу), но для отладки все-таки попробуйте завести.
Еще можно попробовать выполнить тестирование и исправление ИБ (включая реиндексацию и реструктуризацию).


Категория: Программирование, 1С | Опубликовано 07.06.2009 | Редакция от 15.01.2017

Похожие материалы:


Комментарии, обсуждение

комментарии простроенны на платформе Disqus