|
LineNumber в табличных частях в OData | ☑ | ||
---|---|---|---|---|
0
bolero
17.02.19
✎
16:26
|
Напоролся на такую особенность. Обычно получаешь документ с его табличными частями, там у каждой строчки есть LineNumber по порядку, и пропуски делать нельзя. Т.е., удаляешь строку из ТЧ - нужно перенумеровать.
Получаю документ УстановкаЦенНоменклатуры из УТ 11.4.6.174 / 8.3.13.1644, там в табличных частях LineNumber идет в таком порядке: 1, 1, 2, 3, 5, 4, 5, 6, 9, 7, 8, 9, 13, 10, 11, 12, 17, 13, 14, 15. Т.е., все что могло с индексом массива пойти не так - пошло не так: дубли, пропуски, номера не по порядку. Если смотреть в SQL, там LineNo и _keyfield идут в строгом порядке с 1 по 20 и с 0x00 по 0x13. Естественно, даже если ничего не изменять и послать обратно ту же табличную часть в PATCH - естественно, вываливает 500. В этом месте я просто строки перенумеровал, и все взлетело. Но простите, ч-ч-что за ерунда? Уж не из-за этой ли особенности в документации прописано, что ТЧ в патче нужно слать целиком, а не по частям? Если я буду везде перенумеровывать ТЧ перед отправкой, пользователи будут обнаруживать свои документы не в том порядке, в котором они их оставляли - это нехорошо. |
|||
1
sieben
17.02.19
✎
16:54
|
Ну ты же уже сообщил об ошибке в 1С, правда?
|
|||
2
sieben
17.02.19
✎
17:03
|
(0) > Если смотреть в SQL, там LineNo и _keyfield идут в строгом порядке
Нет. |
|||
3
bolero
17.02.19
✎
17:09
|
(2)
|
|||
4
sieben
17.02.19
✎
17:19
|
(3) Без указания ORDER BY порядок результатов неопределен. SQL сервер отдает тебе записи в зависимости от настроения диска, прогрева кэша, загрузки памяти и прочих фаз луны на небе.
Эту классику даже джуниоры знают. |
|||
5
bolero
17.02.19
✎
18:14
|
(4) Хорошо. Я имел в виду, что нет дублей и пропусков.
|
|||
6
ДенисЧ
17.02.19
✎
18:19
|
(4) "SQL сервер отдает тебе записи в зависимости от настроения диска, прогрева кэша, загрузки памяти и прочих фаз луны на небе. "
Чаще всего он отдаёт порядок по использованному индексу. В запросе сверху это кластерный. |
|||
7
sieben
17.02.19
✎
18:35
|
(6) > это кластерный
Преклоняюсь перед гуру, прозревающим план запроса по имени вьюхи |
|||
8
bolero
17.02.19
✎
18:49
|
(7) план запроса здесь вообще не тема обсуждения, нажрался - спи.
Я обратил внимание, что LineNumber в OData может не совпадать с LineNo в SQL, и пытаюсь выяснить, нормальное ли это поведение системы, и чего от нее еще ожидать. OData перспективный, но пока еще очень черный ящик, который 500 выдает направо и налево, а что ему не нравится - часто не объясняет ни в ответе, ни в техножурнале. |
|||
9
bolero
17.02.19
✎
19:15
|
(0) > В этом месте я просто строки перенумеровал, и все взлетело.
И таки да, ничего не взлетело. Небольшая часть документов патчится, а большая - все еще 500 с пустым сообщением, зависимость пока не нашел. |
|||
10
bolero
17.02.19
✎
21:11
|
(9) зависимость нашел: если есть поле 'НастройкиКомпоновкиДанных_Base64Data' - то обратно его не принимает, только 'НастройкиКомпоновкиДанных' в декодированном из base64 виде.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |