Почему в 1С:УНФ реквизиты нового документа заполняются неверно у конкретного пользователя?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

При работе в программе 1С:Управление нашей фирмой (УНФ) пользователи часто сталкиваются с ситуацией, когда при создании нового документа (например, Заказа покупателя) некоторые поля заполняются «не так, как у всех». Даже после очистки кэша, сброса настроек формы и удаления системных параметров проблема может сохраняться. В этой статье мы подробно разберем, почему это происходит, как работает механизм автоматического заполнения «по последним данным» и как это исправить.

Анализируем ситуацию: почему очистка настроек не помогает?

Рассмотрим типовой сценарий: у одного сотрудника в документе ЗаказПокупателя реквизит ВидЗаказа упорно принимает значение «Прочее», в то время как у всей остальной компании по умолчанию устанавливается «Основной». Стандартные действия системного администратора (чистка папки AppData, запуск с ключом /ClearCache, удаление настроек через ХранилищеСистемныхНастроек) в данном случае оказываются бесполезными.

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

Механизм №1: Свойство «Заполнять из данных заполнения»

Первым делом нам необходимо проверить свойства реквизита в конфигураторе. У многих полей в управляемых формах установлено свойство Заполнять из данных заполнения. Выясним, как это работает:

  1. Пользователь открывает список заказов.
  2. Устанавливает в правой панели или через поиск отбор по полю ВидЗаказа = «Прочее».
  3. Нажимает кнопку «Создать».

В этот момент платформа видит активный фильтр и автоматически передает это значение в параметры открытия формы нового объекта. Система считает: «Раз пользователь сейчас смотрит список заказов с видом "Прочее", значит и новый документ он хочет создать именно такого вида». Это стандартное поведение платформы 1С:Предприятие 8.3.

Механизм №2: Алгоритм заполнения по последнему созданному документу

Если же отборов в списке нет, а значение все равно подставляется «неправильное», мы имеем дело со специфической логикой 1С:УНФ. Проанализируем программный код, который отвечает за это поведение. В конфигурации существует общий модуль ЗаполнениеОбъектовУНФ, где описаны функции получения значений по умолчанию.

Рассмотрим пример функции для документа ЗаказПокупателя:


Функция ПолучитьВидЗаказаПокупателя() Экспорт
    
    Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВидыЗаказовПокупателей") Тогда
        Возврат Справочники.ВидыЗаказовПокупателей.Основной;
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
        |    ЗаказПокупателя.ВидЗаказа КАК ВидЗаказа
        |ИЗ
        |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
        |ГДЕ
        |    ЗаказПокупателя.Автор = &Автор
        |    И ЗаказПокупателя.ВидЗаказа <> ЗНАЧЕНИЕ(Справочник.ВидыЗаказовПокупателей.ПустаяСсылка)
        |    И ЗаказПокупателя.ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЗаказПокупателя.ЗаказНаряд)
        |
        |УПОРЯДОЧИТЬ ПО
        |    ЗаказПокупателя.Дата УБЫВ";
    
    Запрос.УстановитьПараметр("Автор", Пользователи.ТекущийПользователь());
    
    Выборка = Запрос.Выполнить().Выбрать();
    // ... дальнейшая логика возврата значения
КонецФункции

Как мы видим из кода, система выполняет запрос к базе данных. Она ищет самый последний по дате документ, созданный текущим пользователем (автором), и берет значение реквизита ВидЗаказа именно оттуда. Это сделано для удобства: если менеджер сегодня вводит поток однотипных заказов одного вида, ему не нужно каждый раз выбирать его вручную.

Как «вылечить» проблему без изменения кода?

Понимая работу этого алгоритма, мы можем предложить пользователю простое решение задачи. Чтобы изменить «приоритетное» значение для автоматической подстановки, выполним следующие шаги:

  1. Создадим новый документ Заказ покупателя.
  2. Вручную установим в нем верное значение (например, «Основной»).
  3. Заполним обязательные реквизиты и проведем документ (или просто запишем его).

Теперь этот документ станет «самым свежим» в базе для данного автора. При следующем создании нового заказа функция ПолучитьВидЗаказаПокупателя() найдет именно этот документ и подставит значение «Основной» всем последующим новым объектам.

Глубокая диагностика: использование замера производительности

Если вы столкнулись с подобной проблемой в другом документе или конфигурации, и не знаете, откуда берется значение, разберем методику отладки. Иногда точка останова в ПриСозданииНаСервере показывает, что объект уже заполнен, но стек вызовов пуст. В этом случае нам поможет Замер производительности.

Рассмотрим алгоритм действий:

  1. Откройте форму списка документов.
  2. Включите «Замер производительности» (меню Отладка).
  3. Нажмите «Создать».
  4. Как только форма открылась, сразу выключите замер.
  5. В появившемся окне замера отфильтруйте строки по количеству вызовов или по модулям.

Вы увидите все процедуры, которые вызывались в процессе инициализации объекта. Ищите модули с названиями ЗаполнениеОбъектов..., ОбработкаЗаполнения или ПриУстановкеНовогоНомера. Именно там скрывается логика запросов к «последним» документам автора.

Дополнительные факторы влияния

Посмотрим на ситуацию шире. На автоматическое заполнение могут влиять и другие механизмы:

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

2. Копирование документов. Если пользователь привык работать через F9 (копирование), то никакие алгоритмы заполнения по умолчанию не работают — данные просто копируются из старого объекта. Если старый объект был с ошибкой, она будет тиражироваться.

3. История выбора. У платформы 8.3 есть механизм История выбора. При нажатии на кнопку выбора в поле, первыми в списке отображаются значения, которые пользователь выбирал чаще всего в последнее время. Иногда это путают с автоматическим заполнением самого поля.

Заключение

Подведем итог нашего анализа. Если у пользователя некорректно заполняются реквизиты при открытии формы в УНФ:

Такой «умный» подход системы к заполнению реквизитов экономит массу времени при массовом вводе данных, но требует понимания логики работы от администраторов и программистов 1С.

← На главную