Коллеги, сталкиваемся с распространенной проблемой: после очередного обновления 1С:Управление торговлей до версии 11.4.13.103 (или аналогичных релизов) обнаруживаем, что привычная команда "Ввод на основании" исчезла из формы документа. Особенно это актуально для давно реализованных механизмов, например, заполнения документа "Установка цен номенклатуры" на основании "Перемещения товаров", которые раньше безотказно работали. Давайте разберем, почему это происходит и как мы можем вернуть эту важную функциональность.
Первоначально, мы можем проверить стандартные настройки, такие как включение стандартных команд и наличие команды в командном интерфейсе форм в подменю "Создать на основании". Часто такие базовые проверки не дают результата, и это указывает на более глубокие причины, связанные с изменениями в платформе, конфигурации или расширениях.
Рассмотрим основные факторы, которые могут влиять на видимость и работоспособность команды "Ввод на основании":
Давайте пошагово разберем, какие действия мы можем предпринять для устранения проблемы.
Прежде всего, давайте убедимся, что команда существует и правильно настроена в интерфейсе:
Если команда отсутствует программно или перестала корректно регистрироваться после обновления БСП, нам потребуется внести изменения в код, предпочтительно через расширение конфигурации. Это позволит сохранить возможность создания документов на основании, не затрагивая типовую конфигурацию.
Мы используем механизм подписки на событие или модификацию процедур модуля менеджера документа-основания. Рассмотрим пример, где мы хотим добавить команду создания документа "Корректировка заказа поставщику" на основании другого документа.
Шаг 1: Добавление команды для документа-основания
В модуле менеджера документа, на основании которого мы хотим вводить новый документ (например, "Перемещение товаров" в нашем случае), нам нужно переопределить или дополнить процедуру ДобавитьКомандыСозданияНаОсновании. Мы будем использовать обработчик события "После" для этой процедуры в расширении.
Например, если документ "Корректировка заказа поставщику" является тем, который вводится на основании:
В расширении для модуля менеджера документа-основания (например, Документы.ЗаказПоставщику) мы можем добавить следующий код:
&После("ДобавитьКомандыСозданияНаОсновании")
Процедура СД_ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.КорректировкаЗаказаПоставщику.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Здесь СД_ДобавитьКомандыСозданияНаОсновании – это наше название процедуры в расширении. Важно, чтобы она вызывала метод добавления команды, специфичный для документа, который мы хотим создать на основании.
Шаг 2: Реализация функции добавления команды для вводимого документа
Теперь в модуле менеджера документа, который мы хотим вводить на основании (например, Документы.КорректировкаЗаказаПоставщику), нам нужно создать или модифицировать функцию ДобавитьКомандуСоздатьНаОсновании. Эта функция будет отвечать за формирование описания самой команды.
Пример кода:
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаЗаказаПоставщику) Тогда
КомандаСоздатьНаОсновании = КомандыСоздатьНаОсновании.Добавить;
КомандаСоздатьНаОсновании.Идентификатор = Метаданные.Документы.КорректировкаЗаказаПоставщику.ПолноеИмя;
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.КорректировкаЗаказаПоставщику);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
//КомандаСоздатьНаОсновании.ПроверкаПроведенияПередСозданиемНаОсновании = Истина; // Закомментировано в примере, но может быть полезно
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
В этом коде мы проверяем права пользователя на добавление документа, затем создаем новый элемент в коллекции КомандыСоздатьНаОсновании, указываем его идентификатор (полное имя метаданных документа), представление (как оно будет выглядеть в меню) и режим записи (например, "Проводить").
Важно: для корректной работы механизма "Ввод на основании" в расширениях необходимо правильно указать объекты-основания в метаданных расширения и использовать обработчик события ОбработкаЗаполнения в модуле объекта нового документа для автоматического заполнения реквизитов из документа-основания. Если кнопка появилась, но создаваемый на основании документ пуст, это как раз указывает на проблему с процедурой ОбработкаЗаполнения().
В некоторых случаях проблема с исчезновением команды "Ввод на основании" проявляется только у одного или нескольких пользователей, хотя для других все работает корректно. В такой ситуации могут помочь следующие шаги:
Мы выяснили, что версия платформы может играть значительную роль в появлении данной проблемы. В частности, платформы 8.3.18, такие как 8.3.18.1208, упоминались как потенциально нестабильные. Однако, встречаются и противоположные случаи, когда обновление до 8.3.18, наоборот, решало проблемы с командами. Мы рекомендуем:
СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании, которая может влиять на видимость стандартной кнопки "Создать на основании". Если ваш документ обрабатывается в этой процедуре, стандартная кнопка может исчезнуть.Проблема исчезновения команды "Ввод на основании" может быть вызвана множеством факторов, от особенностей платформы и конфигурации до тонких настроек интерфейса и специфических проблем с пользователями. Комплексный подход, включающий проверку настроек, программные доработки и общие рекомендации по обслуживанию базы, поможет нам восстановить необходимую функциональность.