Среда, 24.04.2024. 13:33 | RSS
 Приветствуем Вас, Гость! Регистрация | Вход с параметрами
Меню сайта
Категории каталога
Обзоры оборудования [44]
Обзоры различного оборудования, побывавшего в руках автора сайта: ноутбуки, винчестеры, мониторы, материнские платы, видеокарты и др.
Тестирование [7]
Отчасти перекликается с обзорами оборудования, однако здесь сделан упор именно на тестирование в каких-либо бенчмарках
Практика апгрейда [9]
Статьи, посвященные вопросам апгрейда компьютера. Примеры конфигураций, оценка стоимости
Решение проблем [5]
Рассматриваются различные мелкие и не очень проблемы и их возможные варианты решения
Обзоры софта [6]
Обзоры программного обеспечения: антивирусы, браузеры, утилиты и др.
Игры [37]
Обзоры игр, советы по прохождению
Программирование, 1С [13]
Освещаются вопросы по программированию, в немалой степени - на платформе 1С: Предприятия
Цифровое фото, видео [5]
Выделенный раздел, посвященным цифровым фотоаппаратам и видеокамерам
Вход на сайт
Параллельные проекты
Друзья сайта
Статистика

Околокомпьютерный сайт Дмитрия Косолапова
Главная » Статьи » Программирование, 1С

Проверка типа ссылки в запросах 1С: Предприятия 8

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

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

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

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

СГРУППИРОВАТЬ ПО
  ТоварыНаСкладах.Номенклатура

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

Категория: Программирование, 1С | Добавил: Vetkhy (07.06.2009) | Автор: Дмитрий Косолапов | Просмотров: 40117

Метки: ссылка, 1С: Предприятие 8, Проверка, , запросы

Всего комментариев: 16
0  
1 Егор   (23.10.2009 09:25) [Материал]
спасибо! Мне надо было не списание, а оприходывание поменял слово и все!:)

0  
2 Vetkhy   (23.10.2009 11:00) [Материал]
О как хорошо все получилось! smile Рад, что моя заметка помогла!

0  
3 mangy   (11.05.2010 17:58) [Материал]
Спасибо, добрый человек. Сэкономил кучу времени и сил. Побольше бы таких людей.

0  
4 Olga   (24.05.2010 08:59) [Материал]
И от меня спасибо!

0  
5 Dinozavr   (02.07.2010 10:03) [Материал]
И мне помогло, спасибо. Статья отлично ищется в google.

0  
6 Вован   (09.09.2010 02:46) [Материал]
Да помогла, спасибо

0  
7 ZolteR   (13.09.2010 14:56) [Материал]
А вот у меня параметр &Контрагент составной (Склады или контрагенты) и почему при выборе одного из них в поле ввода выдает ошибку на другое
Если Склады:
&Контрагент ССЫЛКА Справочник.Контрагенты
Если Контрагенты:
&Контрагент ССЫЛКА Справочник.Склады

0  
8 Vetkhy   (14.09.2010 09:13) [Материал]
На первый взгляд, нужно определять тип значения поля до вызова запроса и, соответственно, использовать разные запросы.

Если честно, не понял вопрос. Желательно задачу полностью поставить.


0  
9 mike_a   (02.03.2011 17:41) [Материал]
вот помнил же что как-то это делалось :)
Яндексом кстати тоже ищется хорошо
спасибо

0  
10 Vetkhy   (03.03.2011 09:52) [Материал]
Пожалуйста smile Рад, что помог вспомнить smile И с Яндексом вроде хорошие у нас отношения, да smile

0  
11 Владимир   (07.11.2012 10:03) [Материал]
Несовместимые типы "ССЫЛКА"

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

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

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

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

0  
14 Vetkhy   (07.11.2012 10:57) [Материал]
"Пока сходу могу добавить только, что Документов ОтчетКомитентуОПродажах не заведено на предприятии вообще ни одного. Но это не должно влиять на сравнение по типу."

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

0  
15 Сергей   (16.04.2014 11:44) [Материал]
И от меня тоже спасибо!!!

0  
16 vetkhytest   (16.04.2014 15:30) [Материал]
Рад, что моя заметка оказалась полезной!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Сайт управляется системой uCozДмитрий Косолапов © 2007-2024