Помощь - Поиск - Пользователи - Календарь
Полная версия: ТабличнаяЧасть
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
Здравствуйте! Подскажите имеется в табличной части две колонки. В одной датаНачала, в другой ДатаОкончания. Как организовать выборку в каждой, чтобы дату выбрать на один день, при этом время осталось неизменным. НачалоДня и КонецДня не проходят(убирает время). Т.е. нужно сделать выборку строки в дате начала - дата самая ранняя за день.
BabySG
Сортируйте по дате и выбирайте первую
Цитата(BabySG @ 3.10.2008, 15:04) *

Сортируйте по дате и выбирайте первую

сортировать это понятно, а вот насчет первой??? Ведь надо выбирать первую за каждый день!!! в одной колонке имеются даты ни одного дня, а различных дней
ASh
Из задачи непонятно, что получить нужно - дату или строку.

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

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



А если надо получить номера строк, содержащих в поле "ДатаНач" самые ранние значения, то можно так

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



спасибо, получилось. Нужно получить самую раннюю дату. А если в запросе использовать пользователя, то группировка не получается. Выходит ошибка "Поле не входит в группу Таблица1.Пользователь", что делать тогда, как же его вывести с этим запросом?
ASh
Может, у Вас еще куча информации нужной в таблице?
Как вариант, после выполнения вторго запроса обойти строки и получить нужную инфу. Например:

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



Можно и запросом вытащить то, что нужно. Только задача поставлена нечетко. К примеру, можно использовать запрос:

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


Но, он вернет ВСЕ наборы (НомерСтроки, Пользователь) в которых присутствует самое ранне время за день.
В общем, задачи ставьте четче biggrin.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.