Доброго времени суток.
Вот за три года работы с 1с впервые немогу нагуглить решение.
Итак.
Дано:
Справочник, который имеет следующие реквизиты:
В чем конкретно проблема? Вы не понимаете, как это логически организовать? Или проблема с технической реализацией?
Vofka @ Сегодня, 10:05 ,
Не понимаю как это сделать без говнокода с каскадом Если-Тогда
Т.к. сама задача не очень ясна, то подсказать какой-то другой вариант реализации сложно. Если принять структуру в том виде, как вы это сделали, то я бы делал так:
Пробуем определить минимально бОльшую цифру от номера текущего дня. В данном случае такой нету, т.к. 10 и 20 меньше 24. Если такой нету, это значит, что нужная дата находится в следующем месяце. Ищем теперь минимальную цифру среди всех. В данном случае это 10. Т.к. это следующий месяц от текущей даты, то месяц (даже с привязкой к году) мы знаем. Ну и все, мы знаем начальную дату и конечную. Вычисляем разницу. Если бы на шаге "Пробуем определить минимально бОльшую цифру от номера текущего дня" такая бы нашлась (например, было бы 30), то это означает, что это текущий месяц. Ну и, как в предыдущем случае, мы знаем начальную и конечную дату, поэтому вычисляем разницу.
ДатаСобытия = Мин(Срок1,Срок2);
Результат = (ДатаСобытия - ТекущаяДата)/ (60 * 60 * 24);
Vofka @ Сегодня, 10:36 ,
Спасибо за наводку. Сделал немного по другому
СпрОбъект = Категория.ПолучитьОбъект;
МасДат = Новый Массив; // Массив Дат выгрузки
Сч1 = 2; // Текущий и следующий месяц
Пока Сч1 > 0 Цикл
Сч2 = Количество; // Количество перебираемых реквизитов
НачалоМес = НачалоМесяца(ДобавитьМесяц(ТекущаяДата(), Сч1 - 1));
Пока Сч2 > 0 Цикл // Заполняем массив датами выгрузки
МасДат.Добавить(НачалоМес + ((СпрОбъект["ПолеВвода"+Сч2]-1)*60*60*24));
Сч2 = Сч2 - 1;
КонецЦикла;
Сч1 = Сч1 - 1;
КонецЦикла;
Минимум = 999; // "Нереально большой" срок
Для Каждого Дт Из МасДат Цикл // Перебираем массив в поисках подходящей даты
Разность = (НачалоДня(Дт) - НачалоДня(ТекущаяДата())) / 86400;
Если Разность < 1 Тогда // Если дата меньше текущей, то не берем к сравнению
Продолжить; // т.к. отрицательный срок будет всегда меньше
КонецЕсли;
Минимум = Мин(Минимум, Разность); // Находим наименьший положительный срок
КонецЦикла;
// Сообщаем пользователю
Предупреждение("Заявка будет отправлена " + Формат(ТекущаяДата() + (Минимум*60*60*24),"ДФ=dd.MM.yyyy"));
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua