При работе с конфигурациями 1С на обычных формах пользователи иногда сталкиваются с ситуацией, когда механизм «Ввод на основании» ведет себя по-разному в, казалось бы, идентичных базах. Например, в одной базе при попытке ввести документ на основании отображается полный список возможных документов-преемников, а в другой – только один или несколько. Разберем эту проблему подробно и выясним, какие факторы могут влиять на отображение списка, а также как провести диагностику и устранить расхождения.
Механизм «Ввод на основании» является одной из ключевых функций платформы 1С:Предприятие, предназначенной для автоматического создания новых объектов (чаще всего документов) и их заполнения данными из уже существующего документа-основания. Это значительно упрощает работу пользователя, сокращает время на ввод информации и минимизирует количество ошибок. Когда этот механизм работает некорректно, это может вызвать затруднения и требовать внимательного анализа.
Давайте пошагово рассмотрим наиболее распространенные причины, по которым список документов для ввода на основании может быть неполным или отличаться в разных базах, и как их диагностировать и устранить.
Первоочередным шагом всегда является проверка настроек непосредственно в конфигураторе 1С. Несмотря на то что конфигурации баз заявлены как идентичные, всегда есть вероятность, что что-то было упущено или не обновилось должным образом.
Мы проверяем следующие моменты:
Настройки на стороне как документа-основания, так и документа-преемника должны быть корректными. Если в конфигураторе все установлено правильно, но в режиме предприятия список все равно неполный, переходим к следующему пункту.
Также следует помнить, что в конфигураторе существует «Конструктор ввода на основании». Он помогает автоматически сгенерировать процедуру ОбработкаЗаполнения() в модуле объекта документа-преемника. Хотя эта процедура отвечает за *заполнение* нового документа, а не за его *появление в списке*, её отсутствие или некорректная работа может косвенно влиять на общее поведение механизма.
Одной из наиболее частых причин некорректного отображения списков, в том числе и для «Ввода на основании», являются недостаточные права пользователя. Пользователь, под которым осуществляется ввод, должен иметь соответствующие права:
Как проверить права:
В обычных формах управление правами часто осуществляется через роли. Откройте конфигуратор, перейдите к ветке «Роли». Найдите роли, назначенные пользователю, и проверьте для каждого документа (который должен быть в списке и который не отображается), установлены ли права на «Просмотр» и «Добавление».
Рассмотрим пример:
Если права отсутствуют, дополните их, обновите конфигурацию базы данных и проверьте работу в режиме предприятия.
Несогласованность в поведении идентичных баз, особенно после обновления конфигурации или перемещения баз, очень часто связана с кэшем. 1С активно кэширует метаданные и различные данные для ускорения работы, но иногда кэш может стать «битым» или устаревшим.
Мы выполняем следующие действия:
%APPDATA%\1C\1CE\ или %LOCALAPPDATA%\1C\1CE\.%TEMP%.1C:Enterprise 8.x Server Agent) через оснастку «Службы» в Windows (services.msc). Это очистит серверный кэш. Возможно, потребуется около 10 секунд ожидания между остановкой и запуском.
Очистка кэша является «универсальным» решением для многих необъяснимых проблем в 1С.
Хотя в обычных формах основной механизм «Ввода на основании» платформенный, существует возможность его доработки или расширения программными средствами.
ОбработкаЗаполнения()): Эта процедура находится в модуле объекта документа, который создается (документа-преемника). Платформа 1С вызывает её автоматически, когда новый документ создается на основании другого. Её основная задача – заполнить реквизиты нового документа данными из документа-основания. Если эта процедура содержит ошибки или некорректно реализована, это может повлиять на процесс создания документа. Хотя напрямую на *список* документов для ввода она не влияет, проблемы с ней могут создавать впечатление некорректной работы всего механизма.
Пример вызова процедуры Заполнить() из кода для программного ввода на основании:
// Допустим, у нас есть ссылка на документ-основание
Основание = Документы.ЗаказПокупателя.НайтиПоНомеру("00000001");
Если Основание <> Неопределено Тогда
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Заполнить(Основание);
НовыйДокумент.Дата = ТекущаяДата();
// ... дальнейшее заполнение или открытие формы
НовыйДокумент.Записать();
Иначе
Сообщить("Документ-основание не найден!");
КонецЕсли;
Или открытие формы нового документа с передачей основания:
// Допустим, у нас есть ссылка на документ-основание
Основание = Документы.ЗаказПокупателя.НайтиПоНомеру("00000001");
Если Основание <> Неопределено Тогда
ПараметрыОткрытия = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаДокумента", ПараметрыОткрытия);
Иначе
Сообщить("Документ-основание не найден!");
КонецЕсли;
В обоих случаях будет вызвана процедура ОбработкаЗаполнения(), если она есть в модуле объекта документа «РеализацияТоваровУслуг».
Важно помнить, что ввод на основании, как правило, возможен только для записанных документов. Если документ-основание не записан в базу (об этом часто свидетельствует звездочка в заголовке формы), то система может не предлагать его как основу для создания других документов, или список доступных документов может быть неактуальным. Убедитесь, что документ, с которым вы работаете, сохранен.
Автор подчеркивает, что конфигурации баз идентичны. Если после всех вышеописанных проверок (настройки в конфигураторе, права доступа) проблема сохраняется, а базы действительно идентичны по метаданным, это с высокой вероятностью указывает на проблемы с кэшем, временными файлами или особенностями окружения (например, файловая база на разных компьютерах, или серверный кластер с некорректно работающим кэшем).
Проблема с некорректным отображением списка документов для «Ввода на основании» в 1С на обычных формах, когда в разных базах с идентичными конфигурациями наблюдаются расхождения, часто кроется в следующих аспектах:
Рекомендуем последовательно проверять каждый из этих пунктов, начиная с конфигуратора и прав доступа, а затем переходя к очистке кэша и более глубокому анализу программного кода. Такой методичный подход позволит выявить и устранить причину некорректного поведения механизма «Ввод на основании».