8.х ТабличнаяЧасть

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем W@rt, 3 окт 2008.

  1. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! Подскажите имеется в табличной части две колонки. В одной датаНачала, в другой ДатаОкончания. Как организовать выборку в каждой, чтобы дату выбрать на один день, при этом время осталось неизменным. НачалоДня и КонецДня не проходят(убирает время). Т.е. нужно сделать выборку строки в дате начала - дата самая ранняя за день.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Сортируйте по дате и выбирайте первую
  3. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    сортировать это понятно, а вот насчет первой??? Ведь надо выбирать первую за каждый день!!! в одной колонке имеются даты ни одного дня, а различных дней
  4. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Из задачи непонятно, что получить нужно - дату или строку.

    Если нужна дата (с самым ранним временем), то можно такой запрос использовать:

    Код:
    //Док - Имя документа
    //ТабличнаяЧасть - Имя табличной части
    //&НужныйДок - параметр запроса, содержащий ссылку на нужный документ
    //Запрос вернет набор значений из колонки "ДатаНач" выбранного документа,
    //содержащий самые ранние (по времени) значения за каждый день
    ВЫБРАТЬ
    МИНИМУМ(Таблица1.ДатаНач) КАК ДатаНач
    ИЗ
    Документ.Док.ТабличнаяЧасть КАК Таблица1
    ГДЕ
    Таблица1.Ссылка = &НужныйДок 
    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Таблица1.ДатаНач, ДЕНЬ)
    
    
    А если надо получить номера строк, содержащих в поле "ДатаНач" самые ранние значения, то можно так

    Код:
    //Док - Имя документа
    //ТабличнаяЧасть - Имя табличной части
    //&НужныйДок - параметр запроса, содержащий ссылку на нужный документ
    //Запрос вернет номера строк табличной части выбранного документа содержащие первое раннее 
    //значение из колонки "ДатаНач" выбранного документа за каждую дату
    ВЫБРАТЬ
    МИНИМУМ(Таблица1.НомерСтроки) КАК НомерСтроки
    ИЗ
    Документ.Док.ТабличнаяЧасть КАК Таблица1
    ГДЕ
    Таблица1.Ссылка = &НужныйДок И
    Таблица1.ДатаНач В
    (
    ВЫБРАТЬ
    МИНИМУМ(Таблица2.ДатаНач) КАК ДатаНач
    ИЗ
    Документ.Док.ТабличнаяЧасть КАК Таблица2
    ГДЕ
    Таблица2.Ссылка = &НужныйДок 
    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Таблица2.ДатаНач, ДЕНЬ)
    )
    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Таблица1.ДатаНач, ДЕНЬ)
    
    
  5. TopicStarter Overlay
    W@rt
    Offline

    W@rt Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    236
    Симпатии:
    0
    Баллы:
    26
    спасибо, получилось. Нужно получить самую раннюю дату. А если в запросе использовать пользователя, то группировка не получается. Выходит ошибка "Поле не входит в группу Таблица1.Пользователь", что делать тогда, как же его вывести с этим запросом?
  6. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Может, у Вас еще куча информации нужной в таблице?
    Как вариант, после выполнения вторго запроса обойти строки и получить нужную инфу. Например:

    Код:
    //ВыбДок - поле ввода, содержащее ссылку на нужный документ
    Рез = Запрос.Выполнить().Выбрать();
    Пока Рез.Следующий() Цикл
    //Получим нужную строку
    Строка = ВыбДок.ТабличнаяЧасть.Получить(Рез.НомерСтроки-1);
    //Здесь получаем нужную инфу
    Сообщить(""+Строка.НомерСтроки+" "+Строка.Пользователь);
    КонецЦикла;
    
    
    Можно и запросом вытащить то, что нужно. Только задача поставлена нечетко. К примеру, можно использовать запрос:

    Код:
    ВЫБРАТЬ
    Таблица1.НомерСтроки КАК НомерСтроки,
    Таблица1.Пользователь
    ИЗ
    Документ.Док.ТабличнаяЧасть КАК Таблица1
    ГДЕ
    Таблица1.Ссылка = &НужныйДок И
    Таблица1.ДатаНач В
    (
    ВЫБРАТЬ
    МИНИМУМ(Таблица2.ДатаНач) КАК ДатаНач
    ИЗ
    Документ.Док.ТабличнаяЧасть КАК Таблица2
    ГДЕ
    Таблица2.Ссылка = &НужныйДок 
    СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(Таблица2.ДатаНач, ДЕНЬ)
    )
    
    
    Но, он вернет ВСЕ наборы (НомерСтроки, Пользователь) в которых присутствует самое ранне время за день.
    В общем, задачи ставьте четче :unsure:
Похожие темы
  1. VaneS
    Ответов:
    8
    Просмотров:
    966
Загрузка...

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