7.7 Выбор максимального значения

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем eXpert, 4 апр 2015.

  1. TopicStarter Overlay
    eXpert
    Offline

    eXpert

    Регистрация:
    3 ноя 2011
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Подскажите пожалуйста как получить следующее:
    Есть СПРАВОЧНИК СОТРУДНИКИ и есть подчиненный СПРАВОЧНИК ДОГОВОРА.
    В Справочнике договора например 5 элементов с датами:
    05.06.15
    04.06.15
    02.06.15
    05.05.15
    08.05.15

    Каким образом можно получить последнюю дату из этого массива?
    Просто при выборе сотрудника если текдата > даты из массива то должно писать что договор закончился.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно загрузить элементы в ТаблицуЗначений и сортировать..
    А можно установить признак сортировки у реквизита.. А потом используя ВыбратьЭлементыПоРеквизиту и ОбратныйПорядок получить последний элемент
    eXpert нравится это.
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    можно при выборе сотрудника выбрать элементы подчинённого справочника, используя Родителя, которые равны или больше текущей даты
    если в отбор ничего не попало - действующих договоров нет
    eXpert нравится это.
  4. TopicStarter Overlay
    eXpert
    Offline

    eXpert

    Регистрация:
    3 ноя 2011
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Я вот делал таким образом:
    Процедура ОбработкаПодбора(ВыбрСотр)
    Дог = СоздатьОбъект("Справочник.Договора");
    Дог.ИспользоватьВладельца(ФИО);
    Дог.ОбратныйПорядок(1);
    Дог.ВыбратьЭлементыПоРеквизиту("ДатаОкон", "05.05.15", 1, 0);
    Если Дог.ПолучитьЭлемент() = 1 Тогда
    Сообщить("УВЫ");
    Иначе

    КонецЕсли;
    КонецПроцедуры
    Скажите пожалуйста, что не так?
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Начнем с того, что вы в качестве параметра отбора передаете строку, а нужно дату.
    Дог.ВыбратьЭлементыПоРеквизиту("ДатаОкон", Дата(2015,5,5), 1, 0);
  6. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    а как-то вы владельца странно задаёте
    Код:
    Процедура ОбработкаПодбора(ВыбрСотр)
    Дог = СоздатьОбъект("Справочник.Договора");
    Дог.ИспользоватьВладельца(ФИО);

    можно просто выбрать и в цикле перебрать с проверкой на совпадение даты
    примерно так (с учётом что есть несколько договоров с датой равной или больше текущей, ну вдруг кто ошибся заполняя)
    Код:
    Процедура ОбработкаПодбора(ВыбрСотр)
        Дог = СоздатьОбъект("Справочник.Договора");
        Дог.ИспользоватьВладельца(ВыбрСотр);
        Дог.ВыбратьЭлементы();
        ЕстьРабочийДоговор=0;
        Пока Дог.ПолучитьЭлемент() = 1 Цикл
         
        Если Дог.ДатаОкон >= ТекущаяДата() Тогда
            ЕстьРабочийДоговор=ЕстьРабочийДоговор+1;
        КонецЕсли;
        КонецЦикла;
        Если ЕстьРабочийДоговор=1 Тогда
            Сообщить("Есть активный договор");
        ИначеЕсли ЕстьРабочийДоговор>1 Тогда
            Сообщить("Есть несколько активных договоров");
        ИначеЕсли ЕстьРабочийДоговор=0 Тогда
            Сообщить("Активных договоров нет");
        КонецЕсли;     
    КонецПроцедуры
    
    а если активный договор всегда один - можно так
    Код:
    Процедура ОбработкаПодбора(ВыбрСотр)
        Дог = СоздатьОбъект("Справочник.Договора");
        Дог.ИспользоватьВладельца(ВыбрСотр);
        Дог.ВыбратьЭлементы();
        ЕстьРабочийДоговор=0;
        Пока Дог.ПолучитьЭлемент() = 1 Цикл
         
        Если Дог.ДатаОкон >= ТекущаяДата() Тогда
            ЕстьРабочийДоговор=ЕстьРабочийДоговор+1;
            Сообщить("Есть активный договор "+Дог.ТекущийЭлемент());
        КонецЕсли;
        КонецЦикла;
        Если ЕстьРабочийДоговор=0 Тогда
            Сообщить("Активных договоров нет");
        КонецЕсли;     
    КонецПроцедуры
    
    eXpert нравится это.
  7. TopicStarter Overlay
    eXpert
    Offline

    eXpert

    Регистрация:
    3 ноя 2011
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Сделал вот так:
    Код:
    ФИО = ВыбрСотр;
    Дог = СоздатьОбъект("Справочник.Договора");
    Дог.ИспользоватьВладельца(ФИО);
    Дог.ПорядокКодов();
    Дог.ВыбратьЭлементы(1);
    Пока Дог.ПолучитьЭлемент() = 1 Цикл
    Если (Дог.ДатаОкон >= РабочаяДата()) И (НЕ (Дог.ПометкаУдаления()=1)) Тогда
    
    Иначе
    Сообщить("Нету" );
    КонецЕсли;
    КонецЦикла;
    Всем спасибо.
  8. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    это лишее здесь
    Код:
    ФИО = ВыбрСотр;  
    можно сразу так
    Код:
    Дог.ИспользоватьВладельца(ВыбрСотр);
    eXpert нравится это.
  9. TopicStarter Overlay
    eXpert
    Offline

    eXpert

    Регистрация:
    3 ноя 2011
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    да спасибо, сразу исправил и кое что позаимствовал у Вас=)

Поделиться этой страницей