При автоматизации кадрового учета в 1С:ЗУП часто возникает задача массового изменения должностей или параметров штатного расписания «задним числом». Однако при попытке прямого программного редактирования объектов через ПолучитьОбъект() и Записать() вы можете столкнуться с тем, что данные в регистрах (особенно в интервальных, таких как КадроваяИсторияСотрудниковИнтервальный) не обновляются, а интерфейсные формы показывают устаревшую информацию. Давайте разберем, почему это происходит и как правильно выполнять такие операции.
Важно понимать, что 1С:ЗУП — это сложная система с множеством взаимосвязанных регистров. Когда вы просто записываете объект, система не всегда автоматически запускает механизм перерасчета всех движений. Основные причины проблем включают:
ШтатноеРасписание изначально заполнена некорректно.Чтобы изменения корректно отразились в системе и во всех интервальных регистрах, необходимо использовать механизм проведения документов. Рассмотрим пошаговый алгоритм правильного внесения изменений в кадровый перевод списком.
Вместо простой записи объекта, нам необходимо сначала отменить проведение, внести изменения, а затем провести документ заново. Это позволит системе штатно пересчитать движения:
Если ТипЗнч(Объект.КадровыйПеревод) = Тип("ДокументСсылка.КадровыйПереводСписком") Тогда
КадровыйПеревод = Объект.КадровыйПеревод.ПолучитьОбъект();
НайденнаяСтрока = КадровыйПеревод.Сотрудники.Найти(Объект.Сотрудник, "Сотрудник");
Если НайденнаяСтрока <> Неопределено Тогда
// Вносим изменения
НайденнаяСтрока.Должность = Объект.Должность;
// Перепроводим документ для корректного формирования движений
КадровыйПеревод.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КадровыйПеревод.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЕсли;
Если после программного изменения вы все еще видите «старые» данные, не спешите винить платформу. Проанализируйте фактическое наполнение табличной части документа. Часто бывает так, что в документе выбрана одна позиция штатного расписания, а должность в колонке «Должность» не соответствует этой позиции.
Для диагностики используйте универсальную обработку «Поиск и замена значений» или типовую консоль запросов, чтобы убедиться, что именно записано в базу данных. Посмотрите, какие реквизиты заполнены в объекте, минуя визуальные формы. Если в истории изменения реквизитов (типовой механизм ЗУП) данные выглядят корректно, значит, проблема действительно была в кэшировании отображения формы, которая решится после перепроведения.
При работе с ЗУП КОРП, где ведется полноценная история штатного расписания, помните о следующих правилах:
ИзменениеШтатногоРасписания), а не прямым присвоением значений реквизитам справочника.Если после всех манипуляций форма документа все равно отображает старые данные, принудительно обновите содержимое формы через метод ОповеститьОбИзменении, если вы пишете внешнюю обработку, или просто закройте и заново откройте документ — это принудит форму вызвать обработчики чтения объекта из базы данных заново.