Имя: Пароль:
1C
1С v8
Сортировка результата запроса
0 Sanek_GAL
 
17.02.17
15:32
Добрый день.
Есть база УПП на постгрисе и там же ее копия из бэкапа. Учте МПЗ по средней. Стандартный запрос по партиям из ПолучитьДеревоПартийНаСкладахУпр() в консоли в обоих базах дает такой результат:
База1:
Номенклатура    Количество   Стоимость    СтатусПартии
Товар1          440          6523.57      Купленный
Товар1          4000         26873.65     Продукция

База2:
Номенклатура    Количество   Стоимость    СтатусПартии
Товар1          4000         26873.65     Продукция
Товар1          440          6523.57      Купленный

Т.е. строки совпадают, но отсортированы по-разному по статусы партий. В запросе явной сортировки по статусу партии нет, остальные поля совпадают. Что может быть, куда копать? Или по каким критериям сортируются результаты запроса?
1 jsmith82
 
17.02.17
15:34
ну по чему-то отсортированы же
2 jsmith82
 
17.02.17
15:34
доки проведи заново и посмотри результат
3 Sanek_GAL
 
17.02.17
15:35
Проводил, списывается в соответствии с таблицей приведенной
4 Sanek_GAL
 
17.02.17
15:36
Документом списывается 6единиц товара, в основной базе купленного, в копии с продукции.
5 Sanek_GAL
 
17.02.17
15:37
Сортировка в запросе:
УПОРЯДОЧИТЬ ПО
    ЧислоСерияНоменклатуры,
    ЧислоДокументОприходования,
    ЧислоЗаказ,
    ЧислоСтатусПартии Убыв,
    
    ДокументОприходования,
    ПартииТоваровНаСкладах.Склад

Значения этих полей идентичны в результатах обоих запросов
6 Sanek_GAL
 
17.02.17
17:28
ап
7 apokrit
 
17.02.17
17:38
(0) С практической точки зрения это бессмысленный вопрос.
При отсутствии заданной сортировки, СУБД выдает строки в произвольном порядке.
8 Sanek_GAL
 
17.02.17
17:41
Здесь как раз с практической точки зрения и интересно. Т.к. партионка и стоимость списания получается может резко так измениться по прихоти СУБД? В данном случае получается база выдавала сначала данные с одной сортировкой, теперь с другой. Ее копия выдает данные "по старому". Интересно было бы тогда узнать, что на это может повлиять
9 HardBall
 
17.02.17
17:49
(8) А где там партия?
10 Sanek_GAL
 
17.02.17
17:50
(9) Учет по среднему, партии как таковой нет. Но списание идет в разрезе СтатусовПартий
11 mehfk
 
17.02.17
17:51
(8) Еще раз для танкистов: нужна какая-то определенная сортировка - указывайте ее. Во всех остальных случаях порядок строк не определен.
12 Cyberhawk
 
17.02.17
17:52
"ЧислоСтатусПартии Убыв,

Значения этих полей идентичны в результатах обоих запросов" // Покажи результат любого из запросов, где будут видны поля сортироки
13 HardBall
 
17.02.17
17:54
По среднему - это отбор по конкретному статусу партии, а не сортировка.
14 Sanek_GAL
 
17.02.17
18:17
(13) запрос возвращает 2 строки с остатками (2 статуса) и списывает их по порядку. Порядок разный в 2 базах

(12) доберусь до дома скину, там нули

(11) про допилить понятно. Лучше скажите что могло повлиять на БД, что она стала возвращать данные в другом порядке. Или это непредсказуемо?
15 mehfk
 
17.02.17
18:26
(14) Порядок не определен. Предсказуемо?
16 HardBall
 
17.02.17
18:35
(14) Проиндексируй это измерение как вариант.
17 Жан Пердежон
 
17.02.17
18:36
(14) >> что могло повлиять на БД..

ппц, ты упертый. тебе 10 раз уже сказали, что если сортировка явно не задана - порядок может быть любой и сохранение его никто не гарантирует. если не можешь понять - просто смирись.

кстати, что у тебя за "ЧислоСтатусПартии убыв" и почему совпадает?
18 Sanek_GAL
 
17.02.17
19:50
(17) ЧислоСтатусПартии - в запросе определяет принятый или собственный товар и сортирует по нему, для стратегии списания. Запрос типовой из упп, не пиленный, упп релиз примерно 1.3.27.

По первой части, ты клиенту так же ответишь когда при тебе 2 раза подряд сделают восстановление партий и результаты будут разные и клиент задаст логичный вопрос "wtf?"

На всякий случай - мехинзм партионки типовой, не пилился
19 Жан Пердежон
 
17.02.17
20:14
(18) примерно. не нравится типовой вариант - допиливайте. варианты допилов такие-то, стоит это столько-то.
20 Cyberhawk
 
17.02.17
23:41
(14) "там нули" // У "Купленного" и у "Продукции" что ли? Ну тогда не понял, к чему тема создана
21 Sanek_GAL
 
18.02.17
09:10
(20) Чтобы убедиться, что это косяк типового механизма и спасение в напильнике в добавлением сортировки. Ниже код запроса, может кому будет интересно

Запрос.Текст =
    "ВЫБРАТЬ
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования,
    |    ПартииТоваровНаСкладах.Склад,
    |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладах.СерияНоменклатуры,
    |    ПартииТоваровНаСкладах.Качество,
    |    ПартииТоваровНаСкладах.Заказ,
    |    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    |    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    |    ПартииТоваровНаСкладах.СтатусПартии
    |    
    |ПОМЕСТИТЬ ПартииТоваровНаСкладах
    |ИЗ
    |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |        &Дат,
    |        Организация = &Организация
    |        И (Номенклатура, ХарактеристикаНоменклатуры) В (
    |                ВЫБРАТЬ
    |                    СписанныеТовары.Номенклатура,
    |                    СписанныеТовары.ХарактеристикаНоменклатуры
    |                ИЗ
    |                    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |                ГДЕ
    |                    СписанныеТовары.Регистратор = &Ссылка)" + ?(ВестиПартионныйУчетПоСкладам, "
    |        И (Склад В (
    |                ВЫБРАТЬ
    |                    РегистрСведений.СписанныеТовары.Склад
    |                ИЗ
    |                    РегистрСведений.СписанныеТовары
    |                ГДЕ
    |                    РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)
    |            ИЛИ Склад = &ПустойСклад)", "") + ") КАК ПартииТоваровНаСкладах
    |;
    |
    |///////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования,
    |    "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Выбор+"
    |    ПартииТоваровНаСкладах.Склад,
    |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладах.СерияНоменклатуры,
    |    ПартииТоваровНаСкладах.Качество,
    |    ПартииТоваровНаСкладах.Заказ,
    |    ПартииТоваровНаСкладах.Количество,
    |    ПартииТоваровНаСкладах.Стоимость,
    |    ПартииТоваровНаСкладах.СтатусПартии,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ТОГДА 0
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК ЧислоСерияНоменклатуры,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
    |                    ТОГДА 0
    |                ИНАЧЕ 1
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоДокументОприходования,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ТОГДА 1
    |                ИНАЧЕ 0
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоЗаказ,
    |    ВЫБОР
    |        КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ЧислоСтатусПартии
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    |            ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    |        ПО
    |            СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
    |            И (ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
    |                    ТОГДА ИСТИНА
    |                ИНАЧЕ ВЫБОР
    |                        КОГДА СписанныеТовары.Качество = &ПустоеКачество
    |                            ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
    |                        ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
    |                    КОНЕЦ
    |            КОНЕЦ)
    |            " + ?(ВестиПартионныйУчетПоСкладам, "И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)", "") + "
    |            И (ВЫБОР
    |                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
    |                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
    |                ИНАЧЕ ИСТИНА
    |            КОНЕЦ)
    |    
    |        И (ВЫБОР
    |            КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
    |                ТОГДА ВЫБОР
    |                        КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                            ТОГДА ВЫБОР
    |                                    КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО)
    |                                        ТОГДА ЛОЖЬ
    |                                    ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                                КОНЕЦ
    |                        ИНАЧЕ ИСТИНА
    |                    КОНЕЦ
    |            ИНАЧЕ ВЫБОР
    |                    КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                        ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ИНАЧЕ ИСТИНА
    |                КОНЕЦ
    |        КОНЕЦ)
    |        И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры)
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЧислоСерияНоменклатуры,
    |    ЧислоДокументОприходования,
    |    ЧислоЗаказ,
    |    ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ",
    |    "+ПараметрыЗапроса_ДатаОприходования.ДокОприходованияДата_Сортировка+"
    |    ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ",
    |    ПартииТоваровНаСкладах.Склад
    |ИТОГИ ПО
    |    НомерСтрокиДокумента
    |;
    |
    |///////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ПартииТоваровНаСкладах";