Версия для печати темы (https://pro1c.org.ua/index.php?s=e07ed8268779611532d37b78736e3362&showtopic=60668)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Администрирование и настройка серверов баз данных _ Особенности сортировки в POSTGRE SQL

Автор: onsamuy 03.08.20, 11:23

Раньше организация работала на MS SQL, после перехода на бд POSTGE вылезла проблема - в результате запроса "путаются" строки табличных частей документов. Первый раз такая проблема вылезла в документе НалоговаяНакладная, модуль менеджера, процедура

Процедура ПроизвестиУстановкуНомерСтрокиНН(Объект) Экспорт
    
    Перем СтруктураШапкиДокумента;
    Перем ТаблицаНоменклатуры, ТаблицаПоТаре, ТаблицаПоУслугам, ТаблицаПоОС, ТаблицаПоНМА;
    
    УстановитьПривилегированныйРежим(Истина);

    Если Объект.РеквизитыНомерСтрокиННАктуальны Тогда
        Возврат;
    КонецЕсли;
    
    // Подготовим таблицы
    Отказ = Ложь;
    СтруктураШапкиДокумента = Объект.ПодготовитьСтруктуруШапкиДокумента(Отказ);
    Объект.ПодготовитьТаблицы(СтруктураШапкиДокумента, ТаблицаНоменклатуры, ТаблицаПоТаре, ТаблицаПоУслугам, ТаблицаПоОС, ТаблицаПоНМА);

    // Загрузим все таблицы (кроме тары) в одну таблицу
    ОбщегоНазначенияБПВызовСервера.ЗагрузитьВТаблицуЗначений(ТаблицаПоУслугам, ТаблицаНоменклатуры);    
    ОбщегоНазначенияБПВызовСервера.ЗагрузитьВТаблицуЗначений(ТаблицаПоОС      , ТаблицаНоменклатуры);    
    ОбщегоНазначенияБПВызовСервера.ЗагрузитьВТаблицуЗначений(ТаблицаПоНМА      , ТаблицаНоменклатуры);    
    
    Если ТаблицаНоменклатуры.Количество() = 0 Тогда
        Объект.РеквизитыНомерСтрокиННАктуальны = Истина;
        Возврат;
    КонецЕсли;
    
    ТаблицаНоменклатуры.Сортировать("НомерСтрокиТЧ ВОЗР");//БС()
    
       ...................
    
КонецПроцедуры // ()


Решил проблему принудительной сортировкой таблицы значений ТаблицаНоменклатуры.Сортировать("НомерСтрокиТЧ ВОЗР");//БС() . Но сейчас вылезла проблема с Приложением2.
Можно конечно вставлять костыли до бесконечности, но хотелось бы раскопать, в чем проблема smile.gif))

Автор: TohaMonster 03.08.20, 13:25

Гм. Могу предположить "по приборам" (не зная Конфигурации), что проблему можно решить таким образом:
Объект.ПодготовитьТаблицы() вызывает ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(), где формируется запрос к документу

...
    Запрос.Текст = "ВЫБРАТЬ
                    | Док.НомерСтроки " + ТекстЗапроса + "
                    | ИЗ
                    |      Документ." + ДокументОбъект.Метаданные().Имя + "."+ СокрЛП(ИмяТабличнойЧасти) +
                    " КАК Док
                    |     ГДЕ Док.Ссылка = &ДокументСсылка";
...

Вот если ету конструкцию дополнить
...
                | УПОРЯДОЧИТЬ ПО
                |         Док.НомерСтроки
...
, то, как мне думается, это должно помочь в большинстве документов

А вот о причине такой сортировки при смене СУБД мне трудно судить: знаний не хватает. Если мне не изменяет память, у меня была подобная ситуация после перехода с файловой БД как раз на MS SQL. Но в другом запросе УТП. Где-то в УправленииЗапасами емнип. Но смысл был тот же самый: вылечилось сортировкой по НомеруСтроки

Автор: Batchir 03.08.20, 13:29

У нас нет проблем с сортировками на POSTGRE, админы вроде средствами СУБД с сортировками поигрались и всё.

Автор: onsamuy 03.08.20, 15:31

TohaMonster @ Сегодня, 14:25 * ,

да, именно до такого я додумался час назад smile.gif. Но хотелось бы чтобы еще "на берегу" все работало как надо.

Batchir @ Сегодня, 14:29 * ,

буду признателен, если напишете как. Могу быть даже признателен материально smile.gif

Автор: andr_andrey 04.08.20, 16:16

onsamuy @ Вчера, 16:31 * ,
Постгрес брали с сайта 1С? Если нет - возьмите оттуда.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua