Почему список документов для «Ввода на основании» отображается по-разному в идентичных базах 1С на обычных формах?

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

При работе с конфигурациями 1С на обычных формах пользователи иногда сталкиваются с ситуацией, когда механизм «Ввод на основании» ведет себя по-разному в, казалось бы, идентичных базах. Например, в одной базе при попытке ввести документ на основании отображается полный список возможных документов-преемников, а в другой – только один или несколько. Разберем эту проблему подробно и выясним, какие факторы могут влиять на отображение списка, а также как провести диагностику и устранить расхождения.

Механизм «Ввод на основании» является одной из ключевых функций платформы 1С:Предприятие, предназначенной для автоматического создания новых объектов (чаще всего документов) и их заполнения данными из уже существующего документа-основания. Это значительно упрощает работу пользователя, сокращает время на ввод информации и минимизирует количество ошибок. Когда этот механизм работает некорректно, это может вызвать затруднения и требовать внимательного анализа.

Основные причины и шаги по диагностике

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

  1. 1. Проверка настроек «Ввода на основании» в конфигураторе

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

    Мы проверяем следующие моменты:

    • Для документа-основания (источника): Откройте конфигуратор, найдите документ, на основании которого производится ввод (например, «ЗаказПокупателя»). Перейдите в его свойства (обычно двойной клик или через контекстное меню). Найдите вкладку «Ввод на основании». Здесь должен быть установлен флажок напротив каждого документа, который платформа должна предлагать для ввода на основании. Убедитесь, что все нужные документы отмечены.
    • Для документа-преемника (создаваемого): Аналогично, откройте свойства каждого документа, который должен быть в списке (например, «РеализацияТоваровУслуг»). На вкладке «Ввод на основании» проверьте, что в списке документов-оснований присутствует документ, из которого мы хотим вводить.

    Настройки на стороне как документа-основания, так и документа-преемника должны быть корректными. Если в конфигураторе все установлено правильно, но в режиме предприятия список все равно неполный, переходим к следующему пункту.

    Также следует помнить, что в конфигураторе существует «Конструктор ввода на основании». Он помогает автоматически сгенерировать процедуру ОбработкаЗаполнения() в модуле объекта документа-преемника. Хотя эта процедура отвечает за *заполнение* нового документа, а не за его *появление в списке*, её отсутствие или некорректная работа может косвенно влиять на общее поведение механизма.

  2. 2. Проверка прав доступа пользователя

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

    • Права на чтение документа-основания: Пользователь должен иметь возможность прочитать данные из документа, на основании которого он пытается что-либо ввести.
    • Права на создание документов-преемников: Самое главное, у пользователя должны быть права на создание тех видов документов, которые должны отображаться в списке «Ввод на основании». Если у пользователя нет права на создание определенного вида документа, он просто не будет ему предложен в списке.

    Как проверить права:

    В обычных формах управление правами часто осуществляется через роли. Откройте конфигуратор, перейдите к ветке «Роли». Найдите роли, назначенные пользователю, и проверьте для каждого документа (который должен быть в списке и который не отображается), установлены ли права на «Просмотр» и «Добавление».

    Рассмотрим пример:

    1. Откройте конфигуратор.
    2. Перейдите в «Конфигурация» → «Роли».
    3. Выберите роль пользователя, который работает в базе.
    4. В окне свойств роли разверните ветку «Документы».
    5. Найдите документ, который должен быть доступен для ввода на основании.
    6. Убедитесь, что для этого документа установлены флажки «Чтение» и «Добавление».

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

  3. 3. Очистка кэша и перезапуск компонентов 1С

    Несогласованность в поведении идентичных баз, особенно после обновления конфигурации или перемещения баз, очень часто связана с кэшем. 1С активно кэширует метаданные и различные данные для ускорения работы, но иногда кэш может стать «битым» или устаревшим.

    Мы выполняем следующие действия:

    1. Очистка кэша клиента 1С:
      • Закройте все клиентские приложения 1С.
      • В окне запуска 1С выберите базу, с которой возникла проблема.
      • Нажмите кнопку «Изменить».
      • В следующем окне перейдите к пункту «Каталог информационной базы». Запомните путь к базе.
      • Перейдите в папку пользователя: %APPDATA%\1C\1CE\ или %LOCALAPPDATA%\1C\1CE\.
      • Найдите папку, имя которой состоит из длинной строки символов (это хэш пути к вашей базе). Удалите эту папку или её содержимое.
      • Также может быть полезно очистить папки %TEMP%.
    2. Перезапуск клиентского приложения 1С: После очистки кэша обязательно перезапустите программу 1С.
    3. Для серверного варианта (если база серверная): Остановите и затем снова запустите службу агента сервера 1С:Предприятия (1C:Enterprise 8.x Server Agent) через оснастку «Службы» в Windows (services.msc). Это очистит серверный кэш. Возможно, потребуется около 10 секунд ожидания между остановкой и запуском.
    4. Перезапуск компьютера: В некоторых случаях (особенно для файловых баз), банальный перезапуск компьютера, на котором находится база, может решить проблему, так как это очистит все связанные процессы и кэши операционной системы.

    Очистка кэша является «универсальным» решением для многих необъяснимых проблем в 1С.

  4. 4. Анализ модуля менеджера и модуля объекта документов

    Хотя в обычных формах основной механизм «Ввода на основании» платформенный, существует возможность его доработки или расширения программными средствами.

    • Модуль менеджера документа: Откройте конфигуратор, найдите нужный документ. Если у него есть «Модуль менеджера», проверьте его содержимое. В этом модуле могут быть процедуры, которые программно добавляют команды для создания на основании или модифицируют список доступных документов. Если такой модуль существует и не пуст, возможно, там есть пользовательская логика, которая управляет этим списком. Например, это может быть процедура, которая выполняется при открытии формы документа и динамически формирует меню. Однако, автор в сообщении 8 указал, что модуль менеджера пуст, и все выведено под платформенной кнопкой, что исключает эту причину как основную, но как теоретическую возможность стоит помнить.
    • Модуль объекта документа-преемника (процедура ОбработкаЗаполнения()): Эта процедура находится в модуле объекта документа, который создается (документа-преемника). Платформа 1С вызывает её автоматически, когда новый документ создается на основании другого. Её основная задача – заполнить реквизиты нового документа данными из документа-основания. Если эта процедура содержит ошибки или некорректно реализована, это может повлиять на процесс создания документа. Хотя напрямую на *список* документов для ввода она не влияет, проблемы с ней могут создавать впечатление некорректной работы всего механизма.

      Пример вызова процедуры Заполнить() из кода для программного ввода на основании:

      
      // Допустим, у нас есть ссылка на документ-основание
      Основание = Документы.ЗаказПокупателя.НайтиПоНомеру("00000001"); 
      
      Если Основание <> Неопределено Тогда
          НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
          НовыйДокумент.Заполнить(Основание);
          НовыйДокумент.Дата = ТекущаяДата();
          // ... дальнейшее заполнение или открытие формы
          НовыйДокумент.Записать();
      Иначе
          Сообщить("Документ-основание не найден!");
      КонецЕсли;
      

      Или открытие формы нового документа с передачей основания:

      
      // Допустим, у нас есть ссылка на документ-основание
      Основание = Документы.ЗаказПокупателя.НайтиПоНомеру("00000001");
      
      Если Основание <> Неопределено Тогда
          ПараметрыОткрытия = Новый Структура("Основание", Основание);
          ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаДокумента", ПараметрыОткрытия);
      Иначе
          Сообщить("Документ-основание не найден!");
      КонецЕсли;
      

      В обоих случаях будет вызвана процедура ОбработкаЗаполнения(), если она есть в модуле объекта документа «РеализацияТоваровУслуг».

  5. 5. Состояние документа-основания

    Важно помнить, что ввод на основании, как правило, возможен только для записанных документов. Если документ-основание не записан в базу (об этом часто свидетельствует звездочка в заголовке формы), то система может не предлагать его как основу для создания других документов, или список доступных документов может быть неактуальным. Убедитесь, что документ, с которым вы работаете, сохранен.

  6. 6. Идентичность конфигураций и баз данных

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

Заключение

Проблема с некорректным отображением списка документов для «Ввода на основании» в 1С на обычных формах, когда в разных базах с идентичными конфигурациями наблюдаются расхождения, часто кроется в следующих аспектах:

  1. Некорректные или не до конца синхронизированные настройки в конфигураторе (несмотря на заявленную идентичность).
  2. Недостаточные права доступа у пользователя на создание определенных видов документов.
  3. Проблемы с кэшем на стороне клиента или сервера, которые приводят к отображению устаревших или поврежденных метаданных.
  4. Реже – специфические программные доработки в модулях, которые влияют на формирование списка команд.

Рекомендуем последовательно проверять каждый из этих пунктов, начиная с конфигуратора и прав доступа, а затем переходя к очистке кэша и более глубокому анализу программного кода. Такой методичный подход позволит выявить и устранить причину некорректного поведения механизма «Ввод на основании».

← На главную