8.х Работа с непереодическими регистрами

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

  1. TopicStarter Overlay
    Severwolf
    Offline

    Severwolf

    Регистрация:
    16 дек 2008
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Добрый день уважаемые форумчане.
    есть пробмема. не могу ни как разобраться.
    Пишу так отчетик "КарточкаОС" куда должно поподать основное средство и его текущее состояние с датой состояния ввода в эксплуатацию.

    <code>
    "ВЫБРАТЬ
    |ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка КАК ОсновноеСредство,
    |СостоянияОСОрганизаций.Состояние.Ссылка КАК Состояние,
    |СостоянияОСОрганизаций.Состояние.Порядок КАК Порядок,
    |СостоянияОСОрганизаций.ДатаСостояния КАК ДатаСостояния,
    |СостоянияОСОрганизаций.Активность
    |ИЗ
    |РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений) КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
    | ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка = СостоянияОСОрганизаций.ОсновноеСредство.Ссылка
    |ГДЕ
    | СостоянияОСОрганизаций.Активность = &Истина
    | И ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.Организация.Ссылка = &Организация
    |Упорядочить По
    | ОсновноеСредство";
    </code>


    на так как регистр непериодический вываливаются повторяющие элементы.
    как мне отобрать последние записи в регистре СостоянияОсОрганизации ?
    как я понял отбор должен вестись как то по "Порядок"
    МАКСИМУМ - не работает (((
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Нужно перед соединением выбрать с помощью максимума нужные значения из регистра просто. Типа такого чего-нибудь:
    Код:
    ВЫБРАТЬ
    ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка КАК ОсновноеСредство,
    ЗапросСостоянияОСОрганизаций.Состояние КАК Состояние,
    ЗапросСостоянияОСОрганизаций.Порядок КАК Порядок,
    ЗапросСостоянияОСОрганизаций.ДатаСостояния КАК ДатаСостояния,
    ЗапросСостоянияОСОрганизаций.Активность
    ИЗ
    РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, ) КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    СостоянияОСОрганизаций.ОсновноеСредство.Ссылка КАК ОС,
    СостоянияОСОрганизаций.Состояние.Ссылка КАК Состояние,
    МАКСИМУМ(СостоянияОСОрганизаций.Состояние.Порядок) КАК Порядок,
    СостоянияОСОрганизаций.ДатаСостояния КАК ДатаСостояния,
    СостоянияОСОрганизаций.Активность КАК Активность
    ИЗ
    РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
    ГДЕ
    СостоянияОСОрганизаций.Активность = ИСТИНА
    
    СГРУППИРОВАТЬ ПО
    СостоянияОСОрганизаций.ОсновноеСредство.Ссылка,
    СостоянияОСОрганизаций.Состояние.Ссылка,
    СостоянияОСОрганизаций.ДатаСостояния,
    СостоянияОСОрганизаций.Активность) КАК ЗапросСостоянияОСОрганизаций
    ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка = ЗапросСостоянияОСОрганизаций.ОС
    ГДЕ
    ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.Организация.Ссылка = &Организация
    
    УПОРЯДОЧИТЬ ПО
    ОсновноеСредство
    
  3. TopicStarter Overlay
    Severwolf
    Offline

    Severwolf

    Регистрация:
    16 дек 2008
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    ASh, попробовал ваш пример, тоже происходит задвоение, как я и говорил максимум не работает ((
    но вот кому мож пригодиться вышел из положения следующим образом (может и неказисто, хотелось то покрасивее, но зато работает ))))

    ТЗ - Таблица значений которая содержит определенный перечень ОС

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

    ASh Опытный в 1С

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

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