Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Присвоить значение Неопределено (или "", или Пустая ссылка) некорректным ссылкам
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
Constantus
Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

В запросе СКД из регистра накопления "ДвиженияТМЦ" берутся данные:

ВЫБРАТЬ
    ДвижениеТМЦОстаткиИОбороты.Заказ,
    ДвижениеТМЦОстаткиИОбороты.Модель,
    ДвижениеТМЦОстаткиИОбороты.Размеры,
    ДвижениеТМЦОстаткиИОбороты.Полировка,
        **************************
ИЗ
    РегистрНакопления.ДвижениеТМЦ.ОстаткиИОбороты(


Из-за косяков предшественников значения Заказ (документ), Модель, Размеры, Полировка (справочники) могут принимать разные значения: Ссылка, NULL, Неопределено, ""... Исправить документы бросающие в регистр данные пока не представляет возможным, тем более ссылки древних периодов...

Как можно в запросе СКД написать следующее типа:

1. Если ДвижениеТМЦОстаткиИОбороты.Заказ не является ссылкой на документ, тогда принимать значение Неопределено (или "", или Пустая ссылка)
2. Если ДвижениеТМЦОстаткиИОбороты.Размеры не является ссылкой на справочник, тогда принимать значение Неопределено (или "", или Пустая ссылка)?

Constantus @ Сегодня, 10:01 необходимо зарегистрироваться для просмотра ссылки ,

Справочники составные и их много:

ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(ДвижениеТМЦОстаткиИОбороты.Размеры) = ТИП(Справочник.01)
***************


Наверняка загрузит отчет на выполнение...
pablo
1. Если ДвижениеТМЦОстаткиИОбороты.Заказ не является ссылкой на документ
не ДвижениеТМЦОстаткиИОбороты.Заказ Ссылка документ.Заказ


2. Если ДвижениеТМЦОстаткиИОбороты.Размеры не является ссылкой на справочник,
не ДвижениеТМЦОстаткиИОбороты.Размеры ссылка Справочник.Размеры



Но я вижу проблемы с логикой - что считать неправильными значениями
Vofka
ВЫБОР
   КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ ССЫЛКА Документ.ЗаказПокупателя Тогда ДвижениеТМЦОстаткиИОбороты.Заказ
   ИНАЧЕ Неопределено
КОНЕЦ КАК Заказ


Со справочником аналогично.
Constantus
Vofka @ Сегодня, 11:25 необходимо зарегистрироваться для просмотра ссылки ,


А если справочники составные и их много (7 штук)?

ВЫБОР
   КОГДА ДвижениеТМЦОстаткиИОбороты.Модель ССЫЛКА Справочник.Справочник01 Тогда ДвижениеТМЦОстаткиИОбороты.Модель
  
   КОГДА ДвижениеТМЦОстаткиИОбороты.Модель ССЫЛКА Справочник.Справочник02 Тогда ДвижениеТМЦОстаткиИОбороты.Модель
  
   КОГДА ДвижениеТМЦОстаткиИОбороты.Модель ССЫЛКА Справочник.Справочник03 Тогда ДвижениеТМЦОстаткиИОбороты.Модель
   ИНАЧЕ Неопределено
КОНЕЦ КАК Заказ


Эта конструкция сильно будет грузить выполнение запроса?

ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(ДвижениеТМЦОстаткиИОбороты.Модель) = ТИП(Справочник.01)
        ТОГДА ДвижениеТМЦОстаткиИОбороты.Модель

    КОГДА ТИПЗНАЧЕНИЯ(ДвижениеТМЦОстаткиИОбороты.Модель) = ТИП(Справочник.02)
        ТОГДА ДвижениеТМЦОстаткиИОбороты.Модель


    ИНАЧЕ
      Неопределенно
КОНЕЦ


А данная конструкция насколько оптимально и как повлияет на время выполнения отчета?
pablo
В типовых встречаются проверки на пустое значение по типу
ВЫБОР    КОГДА ДвижениеТМЦОстаткиИОбороты.Модель В (&ПустойМассив) тогда неопределено иначе ДвижениеТМЦОстаткиИОбороты.Модель конец

При этом в пустой массив загоняются все возможные пустые ссылки
Petre
Constantus @ Today, 8:47 необходимо зарегистрироваться для просмотра ссылки ,
Нет прямой зависимости производительности запроса от количества текста. Когда речь идет о составных типах, всегда готовьтесь к "многа букв".
Но ответ на вопрос зависит от того, что дальше делаете с выборкой.
Constantus
pablo @ Сегодня, 11:50 необходимо зарегистрироваться для просмотра ссылки ,


А как в пустой массив в СКД загнать список этих пустых ссылкок?
В параметры СКД?
pablo
Процедура модуля отчета
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)    
Масс=новый массив;
  Масс.Добавить(Справочники.Размеры.ПустаяСсылка());
...
       ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
    ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("ПустойМассив",Масс);
  КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);
Vofka
Цитата(Constantus @ 07.08.19, 9:47) необходимо зарегистрироваться для просмотра ссылки
А если справочники составные и их много (7 штук)?

необходимо зарегистрироваться для просмотра ссылки
Constantus
Vofka @ Сегодня, 12:15 необходимо зарегистрироваться для просмотра ссылки ,


ВЫБОР КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ.Ссылка IS NULL ТОГДА Неопределено ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ КОНЕЦ


только таким образом сработало в моем случае
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.