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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Як знайти дату найпершого документа на видалення

Автор: alex-l1904 05.05.23, 8:21

Доброго дня,
якщо треба знайти серед всіх типів документів дату найпершого з поміткою на видалення,
пропоную варіант рішення.

ЗапросПервогоДокумента = Новый Запрос;
    ТекстЗапроса =  "";
    ПервыйВидДок = Истина;
    
    Для Каждого ТедВидДок Из Документы Цикл
        
        Имя = ТедВидДок.Пустаяссылка().Метаданные().Имя;
        
        Если  ПервыйВидДок тогда
            
                        ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
                                       |    МИНИМУМ(Док.Дата) КАК Дата
                                       | Поместить ТаблДат
                                       |ИЗ
                                       |    Документ."+Имя+" КАК Док
                                       |
                                       |ГДЕ
                                       |    Док.ПометкаУдаления  И  Док.Дата < &текДата
                                       |    
                                       |
                                       |ОБЪЕДИНИТЬ ВСЕ ";
    
              ПервыйВидДок = Ложь;
        
        Иначе
              ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ
                                       |    МИНИМУМ(Док.Дата) КАК Дата
                                     |ИЗ
                                       |    Документ."+Имя+" КАК Док
                                       |
                                       |ГДЕ
                                       |    Док.ПометкаУдаления И Док.Дата < &текДата
                                       |    
                                       |
                                       |ОБЪЕДИНИТЬ ВСЕ ";

        КонецЕсли
    
    КонецЦикла;
    
    ТекстЗапроса = ТекстЗапроса + "
                            |ВЫБРАТЬ
                            |    &текДата; // ";

           ТекстЗапроса = ТекстЗапроса + "
          | ВЫБРАТЬ
          |    МИНИМУМ(ТаблДат.Дата) КАК Дата
          |ИЗ
          |    ТаблДат КАК ТаблДат";
          
    ЗапросПервогоДокумента.Текст =     ТекстЗапроса;
    ЗапросПервогоДокумента.УстановитьПараметр("текДата", ТекущаяДата());
    
    Выб = ЗапросПервогоДокумента.Выполнить().Выбрать();
    Выб.Следующий();
    
    ДатаПервого = Выб.Дата;


може хто запропонує як покращити ?

Автор: Vofka 05.05.23, 12:09

Я би замість

"ВЫБРАТЬ
|    МИНИМУМ(Док.Дата) КАК Дата
| Поместить ТаблДат
|ИЗ
|    Документ."+Имя+" КАК Док
|
|ГДЕ
|    Док.ПометкаУдаления  И  Док.Дата < &текДата
|    
|
|ОБЪЕДИНИТЬ ВСЕ "


написав би щось таке

"ВЫБРАТЬ ПЕРВЫЕ 1
|   Дата
|ИЗ
|   Документ."+Имя+" КАК Док
|ГДЕ
|   Док.ПометкаУдаления И Док.Дата < &текДата
|УПОРЯДОЧИТЬ ПО
|   Дата
|
|ОБЪЕДИНИТЬ"


Після того, як це все згенерується в якусь змінну, можно зобити щось типу такого:

"ВЫБРАТЬ ПЕРВЫЕ 1
|   Дата
|ИЗ
|(
|   "+ПеременнаяСЗапросомВыше+"
|)
|УПОРЯДОЧИТЬ ПО
|   Дата"

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