Версия для печати темы (https://pro1c.org.ua/index.php?s=a33f18d2b23500a3bb7eaa0dc11bdb5b&showtopic=53460)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Присвоить значение Неопределено (или "", или Пустая ссылка) некорректным ссылкам

Автор: Constantus 07.08.19, 7:38

Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

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

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


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

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

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

Constantus @ Сегодня, 10:01 * ,

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

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


Наверняка загрузит отчет на выполнение...

Автор: pablo 07.08.19, 8:23

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

не ДвижениеТМЦОстаткиИОбороты.Заказ Ссылка документ.Заказ


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



Но я вижу проблемы с логикой - что считать неправильными значениями

Автор: Vofka 07.08.19, 8:25

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


Со справочником аналогично.

Автор: Constantus 07.08.19, 8:47

Vofka @ Сегодня, 11:25 * ,


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

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


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

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

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


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


А данная конструкция насколько оптимально и как повлияет на время выполнения отчета?

Автор: pablo 07.08.19, 8:50

В типовых встречаются проверки на пустое значение по типу

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

При этом в пустой массив загоняются все возможные пустые ссылки

Автор: Petre 07.08.19, 8:53

Constantus @ Today, 8:47 * ,
Нет прямой зависимости производительности запроса от количества текста. Когда речь идет о составных типах, всегда готовьтесь к "многа букв".
Но ответ на вопрос зависит от того, что дальше делаете с выборкой.

Автор: Constantus 07.08.19, 9:02

pablo @ Сегодня, 11:50 * ,


А как в пустой массив в СКД загнать список этих пустых ссылкок?
В параметры СКД?

Автор: pablo 07.08.19, 9:06

Процедура модуля отчета

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)    
Масс=новый массив;
  Масс.Добавить(Справочники.Размеры.ПустаяСсылка());
...
       ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
    ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("ПустойМассив",Масс);
  КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);

Автор: Vofka 07.08.19, 9:15

Цитата(Constantus @ 07.08.19, 9:47) *
А если справочники составные и их много (7 штук)?

http://pro1c.org.ua/index.php?showtopic=21922

Автор: Constantus 07.08.19, 10:49

Vofka @ Сегодня, 12:15 * ,


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


только таким образом сработало в моем случае

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua