Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разные результаты в консоли запросов и в консоли СКД
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Fil15
Добрый день!
Дано:
Платформа: 1С:Предприятие 8.3 (8.3.7.2008)
Конфигурация: "Управление торговым предприятием для Украины", редакция 1.2.38.1
В СКД формирую вот такой запрос:
ВЫБРАТЬ ПЕРВЫЕ 1
    ТоварыВРознице.Номенклатура,
    ТоварыВРознице.Регистратор КАК Регистратор,
    ТоварыВРознице.Регистратор.Дата КАК РегистраторДата
ПОМЕСТИТЬ табл1
ИЗ
    РегистрНакопления.ТоварыВРознице КАК ТоварыВРознице
ГДЕ
    ТоварыВРознице.Номенклатура = &Номенклатура

УПОРЯДОЧИТЬ ПО
    Регистратор УБЫВ
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    табл2.Номенклатура,
    табл2.КоличествоКонечныйОстаток,
    табл1.Регистратор
ИЗ
    табл2 КАК табл2
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ табл1 КАК табл1
        ПО (табл1.Номенклатура = табл2.Номенклатура)

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

Разве никто не знает? Неужели нельзя сразу указать сразу и Приход и Расход?
Bernet
Fil15 @ Вчера, 22:28 необходимо зарегистрироваться для просмотра ссылки ,
Попробуйте так:
ВЫБРАТЬ ПЕРВЫЕ 1
    ТоварыВРознице.Номенклатура,
    ТоварыВРознице.Регистратор КАК Регистратор,
    ТоварыВРознице.Регистратор.Дата КАК РегистраторДата
ПОМЕСТИТЬ табл1
ИЗ
    РегистрНакопления.ТоварыВРознице КАК ТоварыВРознице
ГДЕ
    ТоварыВРознице.Номенклатура = &Номенклатура

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

СГРУППИРОВАТЬ ПО
    ТоварыВРознице.Регистратор,
    ТоварыВРознице.Номенклатура,
    ТоварыВРознице.Регистратор.Дата

Собственно я так понимаю это одно и тоже.
Bernet
Fil15 @ Сегодня, 10:16 необходимо зарегистрироваться для просмотра ссылки ,
Не совсем. Группировка по регистратору вам в данном случае ничего не даст, т.к. каждая строка в регистре по сути отличается регистратором, записи останутся не сгруппированными. Вы добавили тут поле Период в выборку и взяли максимум - запрос вернет вам последнюю дату в разрезе каждого из измерений, которые указаны в "СГРУППИРОВАТЬ ПО". Задача стоит в том чтобы найти последний документ или дату последнего события?
Группировка просто сворачивает данные в разрезе указанных измерений, т.е. например, у вас есть записи в таблице:

|-----Регистратор--|--РегистраторДата---|-Период----|
|-------------------|----------------------|-------------|
|-----Документ1---|--01.01.2017---------|-01.01.2017-|
|-----Документ2---|--03.01.2017---------|-03.01.2017-|
|-----Документ2---|--05.01.2017---------|-05.01.2017-|
|--------------------------------------------------------|

В этом случае ваша группировка вернет вам все эти три строки без изменения, т.к. не получится сгруппировать записи по Регистратор и РегистраторДата - они разные
Вот если бы у вас была такая таблица:

|-----Регистратор--|--РегистраторДата---|-Период----|
|-------------------|----------------------|-------------|
|-----Документ1---|--01.01.2017---------|-01.01.2017-|
|-----Документ1---|--01.01.2017---------|-03.01.2017-|
|-----Документ1---|--01.01.2017---------|-05.01.2017-|
|--------------------------------------------------------|

Тогда да, оно бы вернуло вам последнюю дату, т.к. свернуть данные получилось бы:

|-----Регистратор--|--РегистраторДата---|-Период----|
|-------------------|----------------------|-------------|
|-----Документ1---|--01.01.2017---------|-05.01.2017-|

Надеюсь теперь стало понятнее

Fil15 @ Сегодня, 10:16 необходимо зарегистрироваться для просмотра ссылки ,
Цитата
Собственно я так понимаю это одно и тоже.

Сортировка по моменту времени выполняет сортировку по Дате и Ссылке документа - т.е. учитывается грубо говоря дата документа и дата создания документа (кто первее появился в базе). Имеет смысл когда у вас есть два документа проведенные одной секундой, в этом случае если просто отсортировать по дате - можем не получить последний документ. Если же отсортировать по моменту времени - то 100% получим последний документ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.