Очередная краткая заметка по не вполне очевидному оператору языка запросов 1С: Предприятия 8.
Данную проблему я предлагаю рассмотреть на примере построения запроса в рамках типовой конфигурации "Управление торговлей", редакция 10.2. Собственно, передо мной встала задача - получить количество списанного товара. Имеется в виду, товар списывается именно документом "Списание товара". При изучении движений этого документа выяснилось, что он, помимо всего прочего, выполняет расход по регистру ТоварыНаСкладах. С другой стороны, в качестве регистраторов движений по этому регистру выступает большое количество различных документов, следовательно, в запросе нужно отобрать только те регистраторы, тип которых - документ списания товаров. Ну и еще одно примечание - воспользоваться виртуальной таблицей, к сожалению, не получится, так как в ней не предусмотрены средства отбора по регистратору.
Итак, как же проверить тип ссылки в запросе? Первоначально мои мысли заработали в направлении функции ПОДСТРОКА, и я написал конструкцию вида ГДЕ ПОДСТРОКА(ТоварыНаСкладах.Регистратор.Представление, 1, 8) = "Списание"
. Разумеется, такая конструкция конструктору запросов крайне не понравилась, и это к лучшему (так как иначе эта статья бы не появилась ). Оказалось, что для решения поставленной задачи нужно применять оператор ССЫЛКА, то есть, условие будет выглядеть так:
ГДЕ ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров
, т.е. оператор проверяет, является ли значение выражения, указанного слева от него, ссылкой на таблицу, указанной справа (кстати в документации почему-то наоборот написано. Ошибка ). Таким образом, наш запрос будет выглядеть так:
ВЫБРАТЬ ТоварыНаСкладах.Номенклатура КАК Номенклатура, СУММА(ТоварыНаСкладах.Количество) КАК Количество ИЗ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах ГДЕ ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров И ТоварыНаСкладах.Период МЕЖДУ &НачПер И &КонПер СГРУППИРОВАТЬ ПО ТоварыНаСкладах.Номенклатура
В запрос необходимо будет передать два параметра (начало и конец периода). Условие по виду движения, очевидно, не нужно, так как "маловероятно" , что документ списания будет делать приход
Вопросы и ответы
Несколько вопросов и ответов со старого сайта.
Вопрос (ZolteR): а вот у меня параметр &Контрагент составной (Склады или контрагенты) и почему при выборе одного из них в поле ввода выдает ошибку на другое?
Если Склады:
&Контрагент ССЫЛКА Справочник.Контрагенты
Если Контрагенты:
&Контрагент ССЫЛКА Справочник.Склады
Ответ: на первый взгляд, нужно определять тип значения поля до вызова запроса и, соответственно, использовать разные запросы. Если честно, не понял вопрос. Желательно задачу полностью поставить.
Вопрос (Владимир): несовместимые типы "ССЫЛКА"
И НЕ СчетФактураПолученный.ДокументОснование ССЫЛКА Документ.ОтчетКомитентуОПродажах
Соотвественно ошибка идет и при выполнении программы. Галка о том, что ДокументОсновние может быть основанием ОтчетаКомитента поставлена. Какие могут быть идеи?
Ответ: СчетФактураПолученный.ДокументОснование
В данном случае это реквизит, поэтому в первую очередь нужно проверять состав типов реквизита, а не возможность ввода на основании. Также необходимо убедиться, что при вводе на основании (процедура ОбработкаЗаполнения, если не ошибаюсь) этот реквизит заполняется ссылкой на собственно документ-основание.
Вопрос (Владимир): пока сходу могу добавить только, что Документов ОтчетКомитентуОПродажах не заведено на предприятии вообще ни одного. Но это не должно влиять на сравнение по типу. ДокументОснование - да, там я поставил галку в качестве состава реквизитов и на ОтчетеКомитента.
Ответ: по идее-то да (не должно влиять на сравнение по типу), но для отладки все-таки попробуйте завести.
Еще можно попробовать выполнить тестирование и исправление ИБ (включая реиндексацию и реструктуризацию).
Категория: Программирование, веб | Опубликовано 07.06.2009 | Редакция от 02.07.2025
Похожие материалы
1С Управление торговлей 10.3. Ошибка при печати этикеток: V8 - не хватает памяти
Очень простое решение неочевидной проблемы с нехваткой памяти при печати этикеток. В моем случае - 1С: Предприятие 8.1, Управление торговлей 10.3, Windows 7 (или 8) x64, принтер этикеток Godex EZ-DT-2.
Максимальная длина строкового реквизита 1С: Предприятия 8
Как узнать длину строкового реквизита, указанную в конфигураторе, на примере дополнения числа ведущими нулями.
Особенности распределения Комплексной конфигурации 4.5 (для 1С 7.7)
В этой заметке предлагается способ избежать длительной первичной синхронизации Комплексной конфигурации после ее преобразования в распределенную (во всяком случае, это наблюдалось в релизе 7.70.459).
Позиционирование табличного поля в 1С: Предприятии 8
Рассматривается случай, когда после заполнения табличного поля нужно было выбрать определенную строку.
Таймер в 1С: Предприятии 8
Как выполнить какой-либо программный код спустя определенное время (разово), либо регулярно через определенные промежутки времени.