После долгой работы с обычными формами, большое неудобство доставляет отсутствие в управляемых формах (форме документа) включенных по умолчанию кнопок «Отмена проведения», «Показать в списке».
Конечно, документ можно настроить «под себя», но когда приходится работать с большим количеством баз и с большим количеством пользователей, да еще настраивать каждый вид документа индивидуально — данная процедура порядком надоедает. Отменять проведение через меню «Еще» — лишние движения мышкой, при тестировании и моделировании на это уходит много времени.
К тому же, без кнопки «Отмена проведения» не понятно, проведен документ или нет.
Поэтому написал несколько строк для ERP 2 (должно подойти так же для КА2 и УТ11), при которых для большинства форм документов командная панель будет выглядеть следующим образом (см. скриншот).
Для некоторых малоиспользуемых документов не вызывается СобытияФорм.ПриСозданииНаСервере, поэтому и панель не перерисуется. Но для меня оказалось достаточно, я проверил все документы, с которыми работают пользователи.
Добавить в «ОбщийМодуль.МодификацияКонфигурацииПереопределяемый» в процедуру «ПриСозданииНаСервере()» следующий код:
//
Если СтрНайти(Форма.ИмяФормы, "ФормаДокумента") <> 0 Тогда
Если (Форма.Элементы.Найти("ФормаКоманднаяПанель") <> Неопределено)
И (Форма.Элементы.Найти("ПодменюСоздатьНаОсновании") <> Неопределено) Тогда
КоманднаяПанельДокумента = Форма.Элементы.ФормаКоманднаяПанель;
МестоРасположения = Форма.Элементы.ПодменюСоздатьНаОсновании;
МассивКнопок = Новый Массив;
МассивКнопок.Добавить("ФормаПровестиИЗакрыть");
МассивКнопок.Добавить("ФормаПровести");
МассивКнопок.Добавить("ФормаОтменаПроведения");
МассивКнопок.Добавить("ФормаЗаписать");
ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".");
МассивКнопок.Добавить("ФормаПоказатьВСписке" + ИмяФормыМассив[1]);
Для Каждого ПеремещаемыйЭлементТекст Из МассивКнопок Цикл
ПеремещаемыйЭлемент = Форма.Элементы.Найти(ПеремещаемыйЭлементТекст);
Если ТипЗнч(ПеремещаемыйЭлемент) = Тип("КнопкаФормы") Тогда
Если ПеремещаемыйЭлементТекст = "ФормаПровестиИЗакрыть" Тогда
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Текст;
Иначе
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Картинка;
КонецЕсли;
ПеремещаемыйЭлемент.ТолькоВоВсехДействиях = Ложь;
Форма.Элементы.Переместить(ПеремещаемыйЭлемент, КоманднаяПанельДокумента, МестоРасположения);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
//
Для некоторых документов кнопка «Показать в списке..» называется не стандартно (по имени документа), поэтому ее может не быть в создаваемой панели, но это опять же не критично.
update:
пока свежо предание, прогнал на Бухгалтерии Предприяия 3.0
здесь есть свои особенности (тестировал на предпоследнем релизе 3.0.43).
Во первых, СобытияФорм тут отсутствуют, поэтому поместил код в ОбщийМодуль.ДополнительныеОтчетыИОбработки.
Во вторых, названия кнопок и групп не полностью унифицированы, поэтому добавил несколько вариантов. Прогнал большинство документов из интерфейса, все работает.
Ну и собственно код:
//
Если СтрНайти(Форма.ИмяФормы, "ФормаДокумента") <> 0 Тогда
Если (Форма.Элементы.Найти("ФормаКоманднаяПанель") <> Неопределено)
И (Форма.Элементы.Найти("ФормаСоздатьНаОсновании") <> Неопределено) Тогда
КоманднаяПанельДокумента = Форма.Элементы.ФормаКоманднаяПанель;
МестоРасположения = Форма.Элементы.ФормаСоздатьНаОсновании;
МассивКнопок = Новый Массив;
МассивКнопок.Добавить("ФормаПоказатьВСписке1");
МассивКнопок.Добавить("ФормаЗаписать");
МассивКнопок.Добавить("ФормаОтменаПроведения");
МассивКнопок.Добавить("ФормаОтменитьПроведение");
МассивКнопок.Добавить("ФормаПровести");
МассивКнопок.Добавить("ФормаПровестиИЗакрыть");
МассивКнопок.Добавить("ФормаЗаписатьИЗакрыть");
МассивКнопок.Добавить("ЗаписатьИЗакрыть");
Для Каждого ПеремещаемыйЭлементТекст Из МассивКнопок Цикл
ПеремещаемыйЭлемент = Форма.Элементы.Найти(ПеремещаемыйЭлементТекст);
Если ТипЗнч(ПеремещаемыйЭлемент) = Тип("КнопкаФормы") Тогда
Если ПеремещаемыйЭлементТекст = "ФормаПровестиИЗакрыть"
Или ПеремещаемыйЭлементТекст = "ФормаЗаписатьИЗакрыть"
Или ПеремещаемыйЭлементТекст = "ЗаписатьИЗакрыть" Тогда
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Текст;
Иначе
ПеремещаемыйЭлемент.Отображение = ОтображениеКнопки.Картинка;
КонецЕсли;
ПеремещаемыйЭлемент.ТолькоВоВсехДействиях = Ложь;
Форма.Элементы.Переместить(ПеремещаемыйЭлемент, КоманднаяПанельДокумента, МестоРасположения);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
//