Никакого ноухау здесь изложено не будет. Просто опубликую методику, которую я недавно для себя придумал.
Итак, есть регистр накопления РН с измерением Документ регистрации, составного типа, в который входят несколько документов: Документ1, Документ2, Документ3. Так же есть какие-то документы, в табличных частях которых есть одноименный реквизит такого же типа. При проведении документов требуется выбрать строки из табличной части, в которых заполнен Документ регистрации и сделать движения по регистру РН(на самом деле пример не реальный, но суть, надеюсь, ясна).
Если у реквизита документа имеется составной тип, то значение реквизита может принимать 2 и более значений, в нашем случае значений будет 4:
Запрос.Текст = "
|ВЫБРАТЬ
| *
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| НЕ (РеализацияТоваровУслугТовары.ДокументРегистрации = НЕОПРЕДЕЛЕНО ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ1.ПустаяСсылка) ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ2.ПустаяСсылка) ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ3.ПустаяСсылка)
| )
|";
Запрос.Текст = "
|ВЫБРАТЬ
| *
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| НЕ (РеализацияТоваровУслугТовары.ДокументРегистрации = НЕОПРЕДЕЛЕНО ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ1.ПустаяСсылка) ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ2.ПустаяСсылка) ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ3.ПустаяСсылка) ИЛИ
| РеализацияТоваровУслугТовары.ДокументРегистрации = ЗНАЧЕНИЕ(Документ.Документ4.ПустаяСсылка)
| )
|";
Функция ПолучитьПустыеДокументыРегистрации() Экспорт
Массив = Новый Массив;
Массив.Добавить(Неопределено);
Тип = Метаданные.РегистрыНакопления.РН.Измерения.ДокументРегистрации.Тип;
Для Каждого ДокументМД ИЗ Метаданные.Документы Цикл
ПустаяСсылка = Документы[ДокументМД.Имя].ПустаяСсылка();
Если Тип.ПривестиЗначение(ПустаяСсылка) <> Неопределено Тогда
Массив.Добавить(Документы[ДокументМД.Имя].ПустаяСсылка());
КонецЕсли;
КонецЦикла;
Возврат Массив;
КонецФункции
Запрос.УстановитьПараметр("МассивПустыхДокументов", РегистрыНакопления.РН.ПолучитьПустыеДокументыРегистрации());
Запрос.Текст = "
|ВЫБРАТЬ
| *
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| НЕ РеализацияТоваровУслугТовары.ДокументРегистрации В (&МассивПустыхДокументов)
|";
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua