Почта: info@105.ooo
Телефон: 8-800-333-6-105
Адрес: Московская область, г. Дубна,
ул. Программистов, дом 4, стр.1
«1С:ERP»

Программная настройка командной панели для всех форм документов в 1С

При работе с ERP 2 (и ее аналогами, такими как КА2 и УТ11) часто возникает необходимость настроить командную панель для документов. По умолчанию многие кнопки, такие как «Отмена проведения» и «Показать в списке», отсутствуют в управляемых формах, что создает неудобства при работе с документами. Особенно если нужно работать с большим количеством баз данных и пользователей, настройка каждой формы вручную становится неэффективной и трудоемкой.
Вместо того чтобы настраивать каждую форму по отдельности, можно централизованно настроить панель команд для всех документов. Приведенный ниже код позволяет автоматизировать этот процесс и добавить на панель нужные кнопки, такие как «Отмена проведения», «Показать в списке» и другие, для большинства форм документов.
Задачи
  1.  Добавить кнопки по умолчанию на командную панель.
  2. Убедиться, что кнопки отображаются корректно в зависимости от состояния документа.
  3. Упростить процесс настройки для всех документов.
Решение
1.Описание задачи и подход
Проблема в том, что для каждого документа требуется индивидуальная настройка панели команд. Это приводит к большому количеству однотипных действий при настройке. Чтобы избежать этого, мы написали код, который автоматически настраивает панель команд для всех форм документов.
Кнопки, такие как «Отменить проведение» или «Показать в списке», будут добавлены на панель управления всех документов, в том числе тех, в которых такие кнопки могут отсутствовать по умолчанию. Код будет работать на базе ERP 2 и ее аналогов, таких как КА2 и УТ11.

2. Основной алгоритм
Добавить в "ОбщийМодуль.МодификацияКонфигурацииПереопределяемый" в процедуру ПриСозданииНаСервере() для того, чтобы перерисовывать командную панель для всех форм документов. Это обеспечит наличие необходимых кнопок на панели для большинства документов.
Код для автоматической настройки панели команд:
1C
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт   // Проверяем, что это форма документа
Если СтрНайти(Форма.ИмяФормы, "ФормаДокумента") <> 0 Тогда
// Проверяем наличие панели команд и места для кнопок
Если (Форма.Элементы.Найти("ФормаКоманднаяПанель") <> Неопределено)
И (Форма.Элементы.Найти("ПодменюСоздатьНаОсновании") <> Неопределено) Тогда

// Определяем панель команд и место для кнопок
КоманднаяПанельДокумента = Форма.Элементы.ФормаКоманднаяПанель;
МестоРасположения = Форма.Элементы.ПодменюСоздатьНаОсновании;

// Массив кнопок, которые нужно добавить
МассивКнопок = Новый Массив;
МассивКнопок.Добавить("ФормаПровестиИЗакрыть");
МассивКнопок.Добавить("ФормаПровести");
МассивКнопок.Добавить("ФормаОтменаПроведения");
           МассивКнопок.Добавить("ФормаЗаписать");

// Разделяем имя формы для динамического добавления кнопки "Показать в списке"
ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".");
           МассивКнопок.Добавить("ФормаПоказатьВСписке" + ИмяФормыМассив[1]);

// Перебираем все кнопки и добавляем их на панель
Для Каждого ПеремещаемыйЭлементТекст Из МассивКнопок Цикл
               ПеремещаемыйЭлемент = Форма.Элементы.Найти(ПеремещаемыйЭлементТекст);

               Если ТипЗнч(ПеремещаемыйЭлемент) = Тип("КнопкаФормы") Тогда
                   // Настроим отображение кнопки: текст или картинка
                   Если ПеремещаемыйЭлементТекст = "ФормаПровестиИЗакрыть" Тогда
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Текст;
                   Иначе
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Картинка;
                   КонецЕсли;

ПеремещаемыйЭлемент.ТолькоВоВсехДействиях = Ложь;
Форма.Элементы.Переместить(ПеремещаемыйЭлемент, КоманднаяПанельДокумента, МестоРасположения);
               КонецЕсли;
КонецЦикла;

КонецЕсли;
   КонецЕсли;
КонецПроцедуры;

3. Разбор кода
  • Проверка на форму документа: код проверяет, является ли текущая форма формой документа, с помощью функции СтрНайти(Форма.ИмяФормы, "ФормаДокумента"). Это важно для того, чтобы не настраивать командную панель для других типов форм.
  • Поиск панели команд и места для кнопок: проверяется, есть ли в форме элементы с именами ФормаКоманднаяПанель и ПодменюСоздатьНаОсновании, которые являются стандартными для большинства форм. Если эти элементы найдены, продолжаем настройку.
  • Добавление кнопок: В массив кнопок добавляются стандартные кнопки:
  • "ФормаПровестиИЗакрыть"
  • "ФормаПровести"
  • "ФормаОтменаПроведения"
  • "ФормаЗаписать"
  • Кнопка для отображения в списке ("ФормаПоказатьВСписке"), которая зависит от имени формы.
  • Перемещение кнопок на панель: для каждой кнопки из массива выполняется поиск и добавление на командную панель. Также настраивается отображение кнопки (текст или изображение).

4. Особенности для других конфигураций
Для конфигураций, в которых отсутствуют события формы, например, в Бухгалтерии предприятия 3.0, код необходимо поместить в модуль «Дополнительные отчеты и обработки».
Также стоит учитывать, что в разных конфигурациях могут быть разные названия кнопок и панелей, поэтому для универсальности можно добавить несколько вариантов названий кнопок в массив.
Пример кода для Бухгалтерии 3.0:
1C
Процедура ПриСозданииНаСервере(Форма)
   Если СтрНайти(Форма.ИмяФормы, "ФормаДокумента") <> 0 Тогда
       Если (Форма.Элементы.Найти("ФормаКоманднаяПанель") <> Неопределено)
           И (Форма.Элементы.Найти("ФормаСоздатьНаОсновании") <> Неопределено) Тогда
               // Повторяем процесс добавления кнопок
               КоманднаяПанельДокумента = Форма.Элементы.ФормаКоманднаяПанель;
               МестоРасположения = Форма.Элементы.ФормаСоздатьНаОсновании;
               МассивКнопок = Новый Массив;
МассивКнопок.Добавить("ФормаПоказатьВСписке1");
МассивКнопок.Добавить("ФормаЗаписать");
МассивКнопок.Добавить("ФормаОтменаПроведения");
МассивКнопок.Добавить("ФормаОтменитьПроведение");
МассивКнопок.Добавить("ФормаПровести");
МассивКнопок.Добавить("ФормаПровестиИЗакрыть");

               Для Каждого ПеремещаемыйЭлементТекст Из МассивКнопок Цикл
                   ПеремещаемыйЭлемент = Форма.Элементы.Найти(ПеремещаемыйЭлементТекст);
                   Если ТипЗнч(ПеремещаемыйЭлемент) = Тип("КнопкаФормы") Тогда
ПеремещаемыйЭлемент.Отображение = Если(ПеремещаемыйЭлементТекст = "ФормаПровестиИЗакрыть", ОтображениеКнопки.Текст, ОтображениеКнопки.Картинка);
ПеремещаемыйЭлемент.ТолькоВоВсехДействиях = Ложь;
Форма.Элементы.Переместить(ПеремещаемыйЭлемент, КоманднаяПанельДокумента, МестоРасположения);
                   КонецЕсли;
               КонецЦикла;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры;
ЗаключениеЭтот код позволяет централизованно и автоматически добавлять необходимые кнопки на панель управления для всех форм документов, существенно экономя время при работе с большим количеством документов в различных конфигурациях 1С.
НАШИ КОНТАКТЫ
info@105.ooo
Почта:
Московская область, г. Дубна, ул. Программистов, дом 4, стр. 1
Адрес:
Контакты генерального директора
Оводков Василий Юрьевич
Телефон/WhatsApp:
vovodkov@koderline
8-800-333-6-105
Телефон:
Бесплатный звонок
+7 968 948-79-59
Почта: