Заполнение трудовой функции в штатном расписании

Вопрос задал Дмитрий В. (Москва)

Ответственный за ответ: Змиевская Светлана (★9.93/10)

Здравствуйте. При работе с этой обработкой (при сохранении значений)

https://buhexpert8.ru/1s-zup/etk-i-uchet-dlya-pfr/etk/vypushhena-vneshnyaya-obrabotka-dlya-zapolneniya-trudovyh-funktsij-v-pozitsiyah-shtatnogo-raspisaniya-iz-kartochek-dolzhnostej.html

выдает такую ошибку (см. файл)

Все комментарии (13)

  1. Зарплата и управление персоналом, редакция 3.1 (3.1.17.135)

    1. Добрый день, Дмитрий!

      Словила ошибку на рабочей базе(( Пробовала правда на ветке 3.1.14 (релизы 3.1.14.500 и 3.1.14.525), ошибка проявляется в файловом варианте при первом запуске обработки. При повторном запуске в файловой базе и в клиент-серверной базе (неважно, первый или повторный запуск) текст ошибки немного другой: «Возникла непредвиденная ситуация…», но выбрасывает из программы все равно и обработка не выполняется. Наличие монопольного режима не влияет. Написала разработчикам. Как получу от них ответ, поделюсь.

  2. Здравствуйте, Дмитрий!

    Скажите, пробуете прям на рабочей базе, развернутой в клиент-серверном режиме? Или на копии в файловом режиме? Также скажите, пробовали ли выполнять обработку в монопольном режиме (выгнать других пользователей из базы на это время)?

    Сама тестировала обработку на файловой демобазе, отработала хорошо. Поэтому предполагаю, что возможно дело в наличии других пользователей или клиент-серверном режиме? На рабочих базах пока еще не приходилось запускать обработку, пользователи ждут поближе к концу месяца, чтобы сейчас в кадровых документах не выскакивали трудовые функции 🙂

  3. Светлана, доброго времени суток. Спасибо. Мы вообще смелые), на рабочей базе все пробовали. Режим конечно клиент-серверный. Правильно понял, что в файловом режиме на 17 релизе проскочили? Пробовать или ждем ответа разработчиков?

    1. Не, ну я копию базы для очистки совести сделала)) Но правда не стала восстанавливать из копии в итоге. Так вроде целостность данных не нарушена, ошибка только при выполнении обработки проскакивает.

      По 3.1.17 у меня корректно сработало только на файловой демобазе, релиз 3.1.17.171. На рабочих базах на 3.1.17-3.1.18 пока негде опробовать. Попробуйте развернуть файловую копию. Если на ней будут проблемы, то обновить ее до 3.1.17.171 хотя бы.

  4. Ок, попробую. Отпишусь.

    1. Приложение

      Дмитрий, добрый день, разрешите присоединюсь к обсуждению.

      Ошибка, что у вас появляется не связана с местом выполнения обработки: на клиент-серверной базе или файловой.
      Ошибка «В данной транзакции уже происходили ошибки» возникает при неправильно написанном коде, когда внутри транзакции используется конструкция Попытка-Исключение-КонецПопытки. Попав в ветку «Исключение» транзакция завершается некорректно и разработчики не рекомендуют использовать Исключение внутри транзакции в обработках.
      Вот правильное выполнение кода по транзакции:
      https://its.1c.ru/db/v8std#content:783:hdoc

      В обработке же реализована конструкция:
      НачатьТранзакцию();
      ….
      Попытка
      ….
      Исключение
      ….
      КонецПопытки;
      ….
      КонецТранзакции();

      Если при отработке кода Попытка-Исключение-КонецПопытки возникнет ошибка, вы и увидите ошибку «В данной транзакции уже происходили ошибки».
      Она не информативна. Она совершенно не говорит о том, что за причина может вызвать ошибку, поэтому попробуем разобраться, исходя из самого программного кода обработки.

      Обработка записывает данные по трудовой функции в три объекта:
      — Справочник Штатное расписание.
      И тут все ок, потому что записываются в нужное поле данные с нужным типом без проблем. Это не периодический регистр, не документ в конце концов.
      — регистр сведений История использования штатного расписания, если у вас включена настройка в штатном расписании — Ведется история изменений штатного расписания (раздел Настройка — Кадровый учет — Настройка штатного расписания)

      Если вы ведете учет истории, то этот регистр будет у вас заполнен.

      1. Ирина, день добрый. Конечно присоединяйтесь. Две головы лучше). Даже две с половиной. Моя за половину сойдет).

  5. Приложение

    И после первого этапа — записи трудовой функции в справочник Штатного расписания начинается второй этап — работы с регистром. Он включает
    — нахождение последнего документа регистратора по выбранной штатной позиции, и запись в его в табличную часть «Позиции» трудовой функции. И вот тут-то начинаются проблемы. Об этом ниже.
    — запись в регистр История использования штатного расписания тудовой функции по выбранной позиции. Поскольку регистр непериодический и подчинен регистратору, проблем с ним быть не должно, в отличие от записи изменений документа выше.

  6. Приложение

    Почему запись изменений в документ-регистратор может вызвать ошибку?
    Потому что регистраторами для регистра являются следующие документы:
    — Изменение штатного расписания
    — Индексация штатного расписания
    — Перенос данных
    — Утверждение тарифной сетки
    — Утверждение штатного расписания.

    Полный набор: табличная часть «позиции» и элемент табличной части «Трудовая функция» есть только в двух из них:
    — Утверждение штатного расписания
    — Изменение штатного расписания.

    Если регистратором изменений в регистре выступает другой документ, программный код по-прежнему будет искать в нем табличную часть «Позиции» и элемент табличной части «Трудовая позиция» — не найдет и выдаст ошибку (см. скрин выше программного кода)

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

    Поэтому, скорее всего, у вас:
    — ведется история штатного расписания
    — в регистре в числе регистраторов есть не только документы утверждение и изменение штатного расписания.
    — возможно, закрыт период редактирования по найденному документу-регистратору.

    Без доработки программного кода и исправления вложенности транзакции в обработке будут происходить ошибки.

    У вас есть программист, откройте программный код и посмотрите последовательно вторую часть кода, где идет работа с регистром — это подтвердит мои слова.

    На текущий момент совсем без ошибки обработка выполняется, если:
    — не ведется история штатного расписания
    — в регистре в регистраторах только документы утверждения и изменения штатного расписания
    — не стоит запрет на изменения в документах регистраторах регистра по измененяемым штатным позициям.

    (!!!) Не забывайте про дату запрета редактирования, она тоже может помещшать записать изменения в документе, если утверждение или изменение происходило давно и период этот уже закрыт.

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

  8. Ирина, ну смысл я уловил, хотя половину из того что Вы написали, я понимаю очень поверхностно. Для полноты подучиться надо).
    Я начал с самого простого. Снял даты запрета. И все штатно сработало. Ларчик просто открывался. Вижу руку мастера). Спасибо большое. И Вам и Светлане. Пропал бы.

    1
  9. Отлично, Дмитрий. И спасибо за добрые слова, приятно. 🙂

Комментарии закрыты.