Несколько ошибок ЗУП 3.1.2.121

Лечение ошибок типовой базы

При создании документа Увольнение появляется сообщение «значение не является значением объектного типа (ИспользованиеПериода).

В случае, если документ создается не из журнала документов, форма документа при этом не открывается.

Ошибка возникет по сотрудникам, у которых есть дополнительный ежегодный отпуск (северный).

В этом случае начисление при создании документа не определено и выбирается после заполнения документа.

В алгоритме 1С этот момент был упущен, что приводило к ошибке.

Лечение:

Общий модуль.РасчетЗарплатыРасширенный, с 253 строки вставить условие:

//ошибка при попадании северного доп отпуска начисление не определено
если ЗначениеЗаполнено(Строка.Начисление) тогда
//ошибка
Если РеквизитыНачислений[Строка.Начисление].ИспользованиеПериода <> Перечисления.ВариантыИспользованияПериодаНачисления.ПериодДействия Тогда
Если НоваяСтрока.ПериодДействияНачало < НачалоМесяца Или НоваяСтрока.ПериодДействияНачало > КонецМесяца Тогда
НоваяСтрока.ПериодДействияНачало = НачалоМесяца;
КонецЕсли;
Если НоваяСтрока.ПериодДействияКонец < НачалоМесяца Или НоваяСтрока.ПериодДействияКонец > КонецМесяца Тогда
НоваяСтрока.ПериодДействияКонец = КонецМесяца;
КонецЕсли;
КонецЕсли;
//ошибка при попадании северного доп отпуска начисление не определено
КонецЕсли;
//ошибка

и ниже на 12 строк:

// - если не переопределяется
Если Не БазовыйПериодПереопределен Тогда
//ошибка при попадании северного доп отпуска начисление не определено
если ЗначениеЗаполнено(Строка.Начисление) тогда
//ошибка

РеквизитыНачисления = РеквизитыНачислений[Строка.Начисление];
Если РеквизитыНачисления.ИспользованиеПериода = Перечисления.ВариантыИспользованияПериодаНачисления.БазовыйПериод Тогда
БазовыйПериод = РасчетЗарплатыРасширенныйКлиентСервер.БазовыйПериодНачисления(
Месяц, РеквизитыНачисления.ПериодРасчетаБазовыхНачислений, РеквизитыНачисления.КоличествоМесяцевБазовогоПериода, РеквизитыНачисления.СдвигБазовогоПериода);
НоваяСтрока.БазовыйПериодНачало = БазовыйПериод.ДатаНачала;
НоваяСтрока.БазовыйПериодКонец = БазовыйПериод.ДатаОкончания;
КонецЕсли;
//ошибка при попадании северного доп отпуска начисление не определено
КонецЕсли;
//ошибка

КонецЕсли;

8 Comments

  1. корум

    ещё одна ошибка:

    в форме списка Сотрудники выводятся некорректные данные по окладу, ФОТ, авансу.

    Лечение:

    Общий модуль СотрудникиФормыРасширенный

    Функция ТекстыЗапросовФормыВыбораСотрудников()

    строка 3644, заменяем в запросе:

          //|   И КОНЕЦПЕРИОДА(ДанныеДляПодбора.Начало, День) МЕЖДУ ДанныеОбОплатеТрудаДляПодбора.Период И  ДанныеОбОплатеТрудаДляПодбора.ДатаОкончания}
    |   И (ДанныеОбОплатеТрудаДляПодбора.ДатаОкончания = ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59))}
    
    Reply
  2. корум
    Reply
  3. корум

    (1) дополнение: на 2 строки ниже нужно заменить такое же условие по авансам.

    Reply
  4. корум

    (0) поправка:

    Общий модуль.РасчетЗарплатыРасширенный, строка 225 (перед началом цикла)

    вставить

    идСтроки = 0;

    Общий модуль.РасчетЗарплатыРасширенный, с 253 строки вставить условие:

    //ошибка при попадании северного доп отпуска начисление не определено
    если ЗначениеЗаполнено(Строка.Начисление) тогда
    //ошибка
    Если РеквизитыНачислений[Строка.Начисление].ИспользованиеПериода <> Перечисления.ВариантыИспользованияПериодаНачисления.ПериодДействия Тогда
    Если НоваяСтрока.ПериодДействияНачало < НачалоМесяца Или НоваяСтрока.ПериодДействияНачало > КонецМесяца Тогда
    НоваяСтрока.ПериодДействияНачало = НачалоМесяца;
    КонецЕсли;
    Если НоваяСтрока.ПериодДействияКонец < НачалоМесяца Или НоваяСтрока.ПериодДействияКонец > КонецМесяца Тогда
    НоваяСтрока.ПериодДействияКонец = КонецМесяца;
    КонецЕсли;
    КонецЕсли;
    //ошибка при попадании северного доп отпуска начисление не определено
    
    //!!! дополнение
    иначе
    Движения.Начисления.удалить(идСтроки);
    продолжить;
    
    КонецЕсли;
    //ошибка

    Показать

    Перед концом цикла вставить

      идСтроки = идСтроки+1;
    Reply
  5. корум

    ВедомостьНаВыплатуЗарплатыВбанк имеет интересную логику работы с полем НомерРеестра.

    Новый номер реестра присваивается всем документам, а в регистр записываются только проведённые.

    Причём уникальность номеров при этом не проверяется.

    Минимальная заплатка, чтобы было меньше ошибок:

    Форма документа

    &НаСервере
    Процедура ПриЗакрытииНаСервере()
    //не ошибка, но обнулим номер реестра в непроведенных документах.
    если не объект.проведен тогда
    Объект.номерРеестра=0;
    Записать();
    КонецЕсли;
    //не ошибка
    КонецПроцедуры
    

    Показать

    Reply
  6. teller

    На hotline написал?

    или пираткой пользуешься?

    Reply
  7. корум

    (6) странное противопоставление.

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

    (да и смысл невелик, когда уже 154 выложен, и завтра будет ещё более свежий…)

    Reply
  8. teller

    (7) странно что ты выложил в виде публикации, сам же написал комментарии, а разработчикам ничего не написал.

    Исходя из чего 1с по твоему исправляет ошибки?

    посмотри на bugboard.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *