Здравствуйте. Такая ситуация. Есть печатная форма, на нее с документа подтягиваются две даты. Необходимо их вывести по следующим условиям. Если заполнена какая то одна из двух дат то, выводится та, что заполнена, и если заполнены обе то, выводится меньшая (ближайшая).

    Дата = Формат(Дата(1,1,1),"ДФ=dd.MM.yyyy" );

    Если ОбъектПечати.ДатаНачалаОсновногоОтпуска < ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала Тогда
      ДанныеПечати.Вставить("ДатаОтпуска",Формат(ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала,"ДФ=dd.MM.yyyy" )) ;
    ИначеЕсли ОбъектПечати.ДатаНачалаОсновногоОтпуска = Дата Тогда
     ДанныеПечати.Вставить("ДатаОтпуска",Формат(ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала,"ДФ=dd.MM.yyyy" )) ;
     Иначе ДанныеПечати.Вставить("ДатаОтпуска",Формат(ОбъектПечати.ДатаНачалаОсновногоОтпуска,"ДФ=dd.MM.yyyy" )) ;
   КонецЕсли;

Пробовала подобный вариант, и вроде все хорошо, но при ОбъектПечати.ДатаНачалаОсновногоОтпуска заполнено выдает ошибку, индекс массива находится за пределами массива.
---
индекс массива находится за пределами массива потому что ДополнительныеОтпуска является пустым массивом. Используй функцию ЗначениеЗаполнено() проверь обе даты по условию и выбери через

```1c
    Если ЗначениеЗаполнено(Дата1) И ЗначениеЗаполнено(Дата2) Тогда
    ДатаДляВывода = Мин(Дата1, Дата2);
    ИначеЕсли ЗначениеЗаполнено(Дата1) И Не ЗначениеЗаполнено(Дата2) Тогда
    ДатаДляВывода = Дата1;
    Иначе
    ДатаДляВывода - Дата2;
    КонецЕсли;
```
---
ОбъектПечати.ДополнительныеОтпуска - Это таблица? Тогда прежде чем брать элемент таблицы нужно проверить а есть ли там элементы? Типа количествоСтрок = ОбъектПечати.ДополнительныеОтпуска.Количество() и если количество больше нуля тогда брать нулевой индекс
---
индекс массива находится за пределами массива потому что ДополнительныеОтпуска является пустым массивом. Используй функцию ЗначениеЗаполнено() проверь обе даты по условию и выбери через

```1c
    Если ЗначениеЗаполнено(Дата1) И ЗначениеЗаполнено(Дата2) Тогда
    ДатаДляВывода = Мин(Дата1, Дата2);
    ИначеЕсли ЗначениеЗаполнено(Дата1) И Не ЗначениеЗаполнено(Дата2) Тогда
    ДатаДляВывода = Дата1;
    Иначе
    ДатаДляВывода - Дата2;
    КонецЕсли;
```
---
Та же ситуация. Все равно пишет, что индекс за пределами
---
ОбъектПечати.ДополнительныеОтпуска - Это таблица? Тогда прежде чем брать элемент таблицы нужно проверить а есть ли там элементы? Типа количествоСтрок = ОбъектПечати.ДополнительныеОтпуска.Количество() и если количество больше нуля тогда брать нулевой индекс
---
```1c
    ПустаяДата = Дата(1,1,1);
    Если ДатаНачала <> ПустаяДата И ДатаОкончания <> ПустаяДата Тогда
    НужнаяДата = Мин(ДатаНачала,ДатаОкончания );
    ИначеЕсли ДатаНачала <> ПустаяДата Тогда
    НужнаяДата = ДатаНачала;
    ИначеЕсли ДатаОкончания <> ПустаяДата Тогда
    НужнаяДата = ДатаОкончания ;
    Иначе
    ВызватьИсключение "Хотя бы одна дата должна быть обязательно заполнена";
    КонецЕсли;
```
---
```1c
    Если ОбъектПечати.ДатаНачалаОсновногоОтпуска <> ПустаяДата И ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала <> ПустаяДата Тогда
    НужнаяДата = Мин(ОбъектПечати.ДатаНачалаОсновногоОтпуска,ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала );
    ИначеЕсли ОбъектПечати.ДатаНачалаОсновногоОтпуска <> ПустаяДата Тогда
    НужнаяДата = ОбъектПечати.ДатаНачалаОсновногоОтпуска;
    ИначеЕсли ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала <> ПустаяДата Тогда
    НужнаяДата = ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала ;
    Иначе
    ВызватьИсключение "Хотя бы одна дата должна быть обязательно заполнена";
    КонецЕсли;

    ДанныеПечати.Вставить("ДатаОтпуска",Формат(НужнаяДата,"ДФ=dd.MM.yyyy" )) ;
```

Опять же, выводит все результаты, кроме ИначеЕсли ОбъектПечати.ДатаНачалаОсновногоОтпуска <> ПустаяДата Тогда
НужнаяДата = ОбъектПечати.ДатаНачалаОсновногоОтпуска;
Выдает ту же ошибку
---
Вам бы пройти хотя бы базовый курс по программированию.

```1c
    Если ОбъектПечати.ДополнительныеОтпуска[0] > 0 Тогда
    ДатаНачалаДопОтпуска = ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала ;
    Иначе
    ДатаНачалаДопОтпуска = ПустаяДата;
    КонецЕсли;

    Если ОбъектПечати.ДатаНачалаОсновногоОтпуска <> ПустаяДата И ДатаНачалаДопОтпуска <> ПустаяДата Тогда
    НужнаяДата = Мин(ОбъектПечати.ДатаНачалаОсновногоОтпуска, ДатаНачалаДопОтпуска );
    ИначеЕсли ОбъектПечати.ДатаНачалаОсновногоОтпуска <> ПустаяДата Тогда
    НужнаяДата = ОбъектПечати.ДатаНачалаОсновногоОтпуска;
    ИначеЕсли ДатаНачалаДопОтпуска <> ПустаяДата Тогда
    НужнаяДата =ДатаНачалаДопОтпуска ;
    Иначе
    ВызватьИсключение "Хотя бы одна дата должна быть обязательно заполнена";
    КонецЕсли;
```
---
```1c
    КоличествоСтрок = ОбъектПечати.ДополнительныеОтпуска.Количество();
    Если КоличествоСтрок > 0 Тогда
    ДатаНачалаДопОтпуска = ОбъектПечати.ДополнительныеОтпуска[0].ДатаНачала ;
    КонецЕсли;

    Если ЗначениеЗаполнено(ОбъектПечати.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ДатаНачалаДопОтпуска) Тогда
    НужнаяДата = Мин(ОбъектПечати.ДатаНачалаОсновногоОтпуска,ДатаНачалаДопОтпуска);
    ИначеЕсли Не ЗначениеЗаполнено(ОбъектПечати.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ДатаНачалаДопОтпуска) Тогда
    НужнаяДата = ДатаНачалаДопОтпуска;
    Иначе НужнаяДата = ОбъектПечати.ДатаНачалаОсновногоОтпуска;

    КонецЕсли;

    ДанныеПечати.Вставить("ДатаОтпуска",Формат(НужнаяДата,"ДФ=dd.MM.yyyy" )) ;
```

В конечном итоге, рабочий вариант получился вот такой. Спасибо большое за помощь.1
---
Просто мысль:
Дата1
Дата2
МинимальнаяВозможнаяДатаСравнения (например 01,01,2000)

Если Дата1 - Дата2 > 0 Тогда
       Дата1
Иначе
       Дата2

Если Дата1 > МинимальнаяВозможнаяДатаСравнения И Дата2 > МинимальнаяВозможнаяДатаСравнения Тогда
//нет пустой даты