8.х Последнее значение из Сраза Последних

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Siddy, 28 мар 2010.

  1. TopicStarter Overlay
    Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    не нашел в поиске ничего похоже, хотя вроде когда-то видел:

    (Платформа 15.14)
    Как выбрать из таблицы последнее (наибольшее по определенному значению) поле?

    Есть регистр сведений СписокДоговоров. Каждый контрагент заключает с компанией договор раз в определенный период времени. Нужно выбрать дату окончания действия последнего заключенного договора с каждым контрагентом. В регистре есть и дата заключения и дата расторжения (т.е. окончания).

    Код:
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ВложенныйЗапрос.ДатаКонП КАК ДатаКонП1,
    |	Контрагенты.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |			МАКСИМУМ(СписокДоговоровСрезПоследних.ДатаКонП) КАК ДатаКонП,
    |			СписокДоговоровСрезПоследних.Контрагент КАК Контрагент
    |		ИЗ
    |			РегистрСведений.СписокДоговоров.СрезПоследних КАК СписокДоговоровПоследних
    |		
    |		СГРУППИРОВАТЬ ПО
    |			СписокДоговоров.Контрагент) КАК ВложенныйЗапрос
    |		ПО Контрагенты.Ссылка = ВложенныйЗапрос.Контрагент.Ссылка
    |ГДЕ
    |	ВложенныйЗапрос.ДатаКонП ЕСТЬ НЕ NULL 
    |
    |СГРУППИРОВАТЬ ПО
    |	ВложенныйЗапрос.ДатаКонП,
    |	Контрагенты.Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |	Ссылка
    

    Выбирает, но не последние.... Подскажите, что не так?
  2. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Структуру регистра покажите
  3. TopicStarter Overlay
    Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    Измерения:
    Контрагент
    ВидДоговора
    Ресурсы
    ДатаКонП
    ДатаНачП

    Периодичность - по позиции регистратора
  4. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А что делать, если есть несколько таких договоров?
    Т.е., например, есть договор1, который не завершен, и договор2 - также не завершен.

    Поэтому тут проще не срез делать, а обратиться к реальной таблице и выбрать те договора, в которых реквизит ДатаКонП = пустой дате. Т.е. он не завершен.
  5. TopicStarter Overlay
    Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    Я, наверное, неправильно объяснил:
    Контрагент заключает с компанией договор. Дата начала и окончания договора определена. На одного контрагента может быть несколько договоров с разной датой окончания. Пока дата окончания хотя бы одного договора > текущей даты, контрагент сотрудничает с компанией. Следует выбрать наибольшую дату окончания договора контрагента из всех договоров контрагента.

    Т.е.:
    Контрагент ДатаОкончанияДоговора

    Контрагент1 31.10.2009
    Контрагент1 01.12.2010
    Контрагент2 31.10.2009

    в выборку попадут
    Контрагент1 01.12.2010
    Контрагент2 31.10.2009
  6. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    комрад, это же детская задачка, делаешь упорядочивание по нужному полю по убыванию и в запросе выбираешь ПЕРВЫЙ 1 (обращаемся к реальной таблице)

    Код:
    ВЫБРАТЬ ПЕРВЫЕ 1
    РегистрСведений1.Период,
    РегистрСведений1.Регистратор,
    РегистрСведений1.НомерСтроки,
    РегистрСведений1.Активность,
    РегистрСведений1.Ресурс1,
    РегистрСведений1.Ресурс2 КАК Ресурс2,
    РегистрСведений1.МоментВремени
    ИЗ
    РегистрСведений.РегистрСведений1 КАК РегистрСведений1
    
    УПОРЯДОЧИТЬ ПО
    Ресурс2 УБЫВ
    
    
    
    или вот, но обходить группировками
    Код:
    ВЫБРАТЬ
    РегистрСведений1.Измерение1 КАК Измерение1,
    РегистрСведений1.Ресурс2 КАК Ресурс2
    ИЗ
    РегистрСведений.РегистрСведений1 КАК РегистрСведений1
    
    УПОРЯДОЧИТЬ ПО
    Ресурс2 УБЫВ
    ИТОГИ
    МАКСИМУМ(Ресурс2)
    ПО
    Измерение1
    
    
    блин, что-то нафлудил нечаянно, а кнопки изменить нету =\
  7. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Я бы переделал сам регистр, честно говоря...
    Сделал бы подчинение регистратору, периодичность день и в период писал бы дату окончания договора.
    Тогда бы работал обычный СрезПоследних.

    Но надо прикидывать, что еще может использовать этот РС.

    Это годиться для одного контрагента, а надо по всем :)

    Думаю, что лучше структуру просто поменять :)
    Либо спионерить из ЗУПа - но там надо будет запросы писать ого-го :)
  8. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    я тоже думал, что проще писать в период дату окончания, но быть может у регистра не единственный регистратор или существуют уже другие модули обращения к регистру, которые придется переписывать
  9. TopicStarter Overlay
    Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    просто запрос в цикле по контрагентам не хочется делать...)

    тоже думал, но посмотрел, сколько всего завязано на этом рс, легче еще поковыряться)

    может, все-таки в запросе есть ошибка?
  10. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    смотрите вас мой второй пример не устраивает?

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