8.х Медленная запись в регистр расчета

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

  1. TopicStarter Overlay
    sidsukana
    Offline

    sidsukana

    Регистрация:
    5 окт 2012
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Столкнулись с проблемой - в документе "Начисление зарплаты сотрудникам организаций", когда выбираешь сотрудника подбором, заполняешь автоматически или делаешь расчет зарплаты, в коде создается проверочный набор записей для регистра расчета "Основные начисления сотрудников организаций", который записывается в него, а потом удаляется. Так вот когда происходит запись - платформа висит буквально минут по 5, а то и больше. И не важно по одному человеку делается расчет или по 100. Не ужели это баг платформы? Может кто сталкивался и посоветует решение?

    Платформа 8.3.5 1088 Конфигурация УПП 1.3.54.2, клиент-серверный варинт. Сервер базы на Postgres.

    Пример кода на участке которого платформа зависает на несколько минут:
    Код:
    Если ВидОперации <> Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда
           
           НачатьТранзакцию();
           
           НаборЗаписейДляПроверки.ОбменДанными.Загрузка = Истина;
    // !!! ТУТ НЕ ОЧЕНЬ ДЛИТЕЛЬНОЕ ЗАВИСАНИЕ !!!
           НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);
           
           ЗапросПроверки = Новый Запрос(
           "ВЫБРАТЬ
           |   Начисления.Сотрудник,
           |   Начисления.ВидРасчета,
           |   Начисления.ДатаНачала,
           |   Начисления.ДатаОкончания,
           |   Начисления.НомерСтроки
           |ПОМЕСТИТЬ ВТНачисления
           |ИЗ &парамНачисления КАК Начисления
           |ИНДЕКСИРОВАТЬ ПО Сотрудник, ВидРасчета;
           |
           |ВЫБРАТЬ РАЗЛИЧНЫЕ
           |   Начисления.НомерСтроки КАК НомерСтроки
           |ИЗ
           |   РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизации
           |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия(Регистратор = &парамСсылка) КАК ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия
           |     ПО ОсновныеНачисленияРаботниковОрганизации.НомерСтроки = ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.НомерСтроки
           |       И ОсновныеНачисленияРаботниковОрганизации.Регистратор = ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.Регистратор
           |     ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисления КАК Начисления
           |     ПО    (Начисления.Сотрудник = ОсновныеНачисленияРаботниковОрганизации.Сотрудник)
           |       И (Начисления.ВидРасчета = ОсновныеНачисленияРаботниковОрганизации.ВидРасчета)
           |       И (Начисления.ДатаНачала = ОсновныеНачисленияРаботниковОрганизации.ПериодДействияНачало)
           |       И (КОНЕЦПЕРИОДА(Начисления.ДатаОкончания, День) = КОНЕЦПЕРИОДА(ОсновныеНачисленияРаботниковОрганизации.ПериодДействияКонец, День))
           |ГДЕ
           |   ОсновныеНачисленияРаботниковОрганизации.Регистратор = &парамСсылка
           |   И ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.Регистратор ЕСТЬ NULL
           |
           |УПОРЯДОЧИТЬ ПО
           |   НомерСтроки УБЫВ");
    
           
           ЗапросПроверки.УстановитьПараметр("парамСсылка", СcылкаОбъекта);
           ЗапросПроверки.УстановитьПараметр("парамНачисления", Начисления.Выгрузить());
           СтрокиКУдалению = ЗапросПроверки.Выполнить().Выгрузить();
           // удалим проверочный набор записей
           НаборЗаписейДляПроверки.Очистить();
    // !!! ТУТ ДЛИТЕЛЬНОЕ ЗАВИСАНИЕ !!!
           НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);
           
           ЗафиксироватьТранзакцию();
           
           Для Каждого СтрокаТЗ Из СтрокиКУдалению Цикл
             Начисления.Удалить(СтрокаТЗ.НомерСтроки - 1);
           КонецЦикла;
           
         КонецЕсли;
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    1) Не знаю.
    2) А версия Postgre какая?
    3) Если есть возможность в качестве эксперимента (на копии базы):
    а) проверить как работает на файловой
    б) попробовать убрать НачатьТранзакцию(); ЗафиксироватьТранзакцию(); (это для базы на Postgre)

    Если эксперименты 3) дадут положительный результат, то дело наверно в Postgre.
  3. TopicStarter Overlay
    sidsukana
    Offline

    sidsukana

    Регистрация:
    5 окт 2012
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Версия Postgre 9.1.2. Не уверен что получится развернуться в файловом варианте, но я попробую.

    Версия с транзакциями отпадает. Все так же долго.
    Рабочая база работает на платформе 8.3.4 365. Тестируем на новых платформах - результата нет.
    Последнее редактирование: 18 сен 2014
  4. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.439
    Симпатии:
    374
    Баллы:
    104
    может обновить постгри пора?


    и ещё есть 9_1_9_1_1C


    а в тесте уже 9.3.4-1.1C

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