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