#0
by azernot
Господа! Возникла у меня задача автозаполнения документа реализации в документе возврат от покупателя (УПП). Как одно из условий - заполнять надо только те строки, для которых этот документ не указан. Реквизит "ДокументПартии" имеет составной тип (там много всяких документов может быть). И вот победив основную задачу долго бился над такой проблемой: Как в запросе соединиться только со строчками, где этот документ не указан? Изначально предполагал, что будет достаточно ВозвратТоваровОтПокупателяТовары.ДокументПартии = НЕОПРЕДЕЛЕНО После нкоторых тестов выяснил, что в ряде документов этот реквизит действительно неопределён, но есть документы в которых в этом реквизите ВЫБРАН ТИП но НЕ ВЫБРАНО ЗНАЧЕНИЕ. И соответственно в запросе условие не срабатывает. После долгих поисков и раздумий пришёл к такой конструкции ВозвратТоваровОтПокупателяТовары.ДокументПартии = НЕОПРЕДЕЛЕНО ИЛИ ВозвратТоваровОтПокупателяТовары.ДокументПартии В (&МассивПустыхЗначений) И вот собственно вопрос, может кто-то знает более изящный способ?
#9
by azernot
Ага, пасиб. А разве Новый (Тип) = Пустая ссылка? Т.е. равнозначны ли массивы? Для каждого ТипСсылки Из ОписаниеТипов.Типы Цикл
#10
by azernot
ТЧ.Реквизит - составного типа, там может быть и номенклатура, и договор и контрагент..
#12
by Aprobator
Ну если это документ, то у него всегда есть номер. В условие соединения или отбора НЕ РеквизитТипаДокумент.Номер ЕСТЬ NULL
#15
by azernot
+ И в случае активного использования RLS к ним ущё будут присоединяться таблицы прав, что может привести к вылету по ошибке ">256 таблиц".
#16
by Aprobator
Подбная методика используется в типовой ЗУП для определения заполнения реквизита ВидРасчета (он там составной).
#18
by Aprobator
Если есть ьпод рукой ЗУП - то можете сами посмотреть Документ.НачислениеЗаработнойПлатыРаботникамОрганизации модуль объекта - процедура ВыполнитьАвтозаполнение.
#19
by Aprobator
просто к тому, что это реально работает и, по крайней мере у меня, проблем не вызывало.
#22
by azernot
Методика безусловно имеет право на жизнь. (Разве что я бы проверял ПометкаУдаления, т.к. она есть и у документов и у справочников). Если у тебя полные права, то проблем у тебя и не возникнет. А вот если есть ограничения на уровне записей, да ещё и по нескольким реквизитам, то на ошибку SQL по 256 таблиц нарваться очень лего при использовании таких конструкций.
#23
by Aprobator
хм, а что в случае с проверкой значений с массивом значений соединения с другими таблицами будут отсутствововать? Кроме того проверяется всего 1 реквизит, где же здесь, даже с учетом RLS 256 таблиц набраться? Типа состаной реквизит в себя штук 100 включает и ограничений на просмотр его предопределенного реквизита еще штук 200?
#24
by Aprobator
(+23) впрочем да - соединения вроде должны отсутсвовать. Но нарваться на ограничение 256 тоже маловероятно.
#25
by NewNick
сравни на NULL можно нарваться на пустую ссылку с выбраном типом но это от кривизны предшествеников
#27
by hhhh
ты бы отладчиком проверил - это у тебя займет ровно 3 минуты, а ты уже полдня бьешься и всех на уши поставил.
#30
by wPa
Что ты имеешь ввиду под "хорошим" кодом при условии рабочей RLS? Тут накладываются два минуса платформы - составной тип и RLS. Какой выход с "хорошим" кодом можешь предложить при условии минимума соединений и все в запросе?
#31
by azernot
Я не считаю методику с проверкой рееквизита на Null лучше чем проверку на вхождение в массив пустых ссылок. О чём и написал в 22. Однако совсем я эту методику исключить не могу, ибо в некоторых случаях её использование может быть оправдано. Проверка ССЫЛКИ на равенство и проверка РЕКВИЗИТА ссылки совершенно разные вещи. Пара виртуальных таблиц в запросе, плюс реквизит измерения составного типа (штук 15 составляющих), плюс RLS по трём параметрам на каждый из возможных типов измерения - ошибка 256 практически гарантирована. Ты вместо споров попробуй, очень отрезвляет.
#33
by azernot
При проверке реквизита элемента составного типа идёт соединение с КАЖДОЙ таблице из составного типа, к каждой такой
#34
by azernot
+ таблице присоединятеся запрос RLS, в котором также может учавствовать несколько таблиц. В итоге кажется что проверяешь 1 реквизит, а на самом деле проверяешь немеряное количество реквизитов, с немеряным количеством таблиц.
#35
by MSensey
При какой проверке? Такой ВозвратТоваровОтПокупателяТовары.ДокументПартии В (&МассивПустыхЗначений) ? Это не приводит к соединениям, даже если будет RLS у объекта на который ссылается ДокументПартии
#37
by hhhh
а может изменить тактику: перед записью документа партии проверять на пустое значение и записывать туда автоматом НЕОПРЕДЕЛЕНО.
#38
by azernot
Думал на эту тему. Однако это обуславливает обязательную ЗАПИСЬ документа (а при условии достаточного количества строк, процедура эта небыстрая). Кроме того, я сделал запись необязательной (через менеджер временных таблиц помещаю ТЧ объекта, а не ссылки) что гораздо удобнее. Да и перебирать строки ТЧ для поиска незаполненных - тоже не самый лучший вариант.
#39
by wPa
Неоправданная загрузка сиквела в запросах. Утяжеление в разы нагрузки на систему не говоря о требованиях и стоимости. Причем обе идеи (в такой реализации) только у 1С. Или никто раньше не додумался? Составной тип в реализации 1С - интерфейсная модель. Когда одно поле может принимать значение разных типов, но никак не баз данных. Для баз данных составной тип есть структура. Тогда нет неопределенностей какого же типа на самом деле этот реквизит и "давайте притянем все что может быть на всякий случай". РЛС - изобретение фантастичное. Имитация триггера, но без средств отладки. Комментарий в типовой конфе //что-то сработало. наверно rls А любой кодер знает как важна правильная работа триггера. В сумме эти два механизма дают потрясающий эффект. Разработчики сиквела его не предусмотрели.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- v7: Периодический реквизит в запросе, как правильно получить?
- Как узнать сколько строк в запросе ?
- Как имея ссылку на документ и форму узнать есть ли в ТЧ документа реквизит?
- Как в запросе узнать количество строк в ТЧ?
- Как в запросе узнать количество строк который вернул запрос?
- Условие в запросе, аналогичное условию в запросе 77
- Интересная фишка в запросе в 7-ке. Сумма из шапки и из ТЧ в запросе
- как проверить в запросе на пустое значение составного типа ?
- Как в запросе наложить условие на реквизит составного типа?
- Заполнение ТЧ документа из ТЧ другого документа или заполнение тч и запроса
- Как передать реквизит из ТЧ одного документа в ТЧ другого документа?
- "Несовместимые типы выразить в запросе 1с" ошибка в динамическом запросе списка документов
В этой группе 1С
- Как выгрузить дерево значений в таблицу значений?
- Как для установленного SQL 2000 узнать модель лицензирования?
- Поле объекта не обнаружено (RMTrade)
- Справочник валют в 8.1
- Реализация RC4 RC6 на 1С
- Соединение регистра оборотов с регистром остатков
- как можно увеличить длину наименования в справочнике больше 100 символов?
- Как избавиться от ошибки - Превышено допустимое количество пользователей?
- УТ 10.3, редактирование номера документа
- Народ помогите свернуть поле табличного документа програмно до нужного уров
- Как в УТ 10.3 перекинуть деньги с одного счета на другой?
- Ведомость по кассе v7.7
- КД 2 перенос подчиненных справочников
- Бухгалтерская справка
- ЗУП или УПП: Документ Отражение зарплаты регл учете
- Зачем выводиться диалог выбора режима проведения для нового документа?
- Настройка ZyXEL ZyWALL 5
- История изменения в регистр сведений
- Сдельный наряд в 1С 8 УПП
- ХРюша и Вирусы. Вернуть отображение скрытых файлов.