Нехитрое дело – добавить в типовую конфигурацию, например "1С ERP Управление предприятием 2", новый документ (назовём его "Запрос цен") и настроить его так, чтобы он создавался на основании типового документа, скажем "Заказ материалов в производство".
Однако, подводные камни всё-таки обнаруживаются. На форме документа "Заказ материалов в производство" появилось две кнопки "Создать на основании". Одна типовая, на рисунке она слева, а другая образовалась после добавления нового документа. При нажатии этой кнопки появляется список из единственного, вновь добавленного документа. Если же нажать штатную кнопку, то открывается список из нескольких типовых документов, среди которых, увы, нет нашего, добавленного. Возникает логичное желание перенести команду создания нового документа из правой кнопки в левую.
Для того, чтобы перенести команду в список штатной кнопки сделаем следующее:
В модуле менеджера документа "Заказ материалов в производство" есть процедура ДобавитьКомандыСозданияНаОсновании. Добавим в неё вызов функции, которую позже напишем в модуле менеджера документа "Запрос цен".
Документы.ЗапросЦен.ДобавитьКомандуСоздатьНаОснованииЗаказаКлиента(КомандыСоздатьНаОсновании);
Добавляем функцию в модуль менеджера документа "Запрос цен":
// Заполняет список команд создания на основании. Функция ДобавитьКомандуСоздатьНаОснованииЗаказаКлиента(КомандыСоздатьНаОсновании) Экспорт Если ПравоДоступа("Добавление", Метаданные.Документы.ЗапросЦен) Тогда КомандаСоздатьНаОсновании = КомандыСоздатьНаОсновании.Добавить(); КомандаСоздатьНаОсновании.Обработчик = "дкВводНаОснованииКлиент.ЗапросЦенСоздатьНаОснованииЗаказа"; КомандаСоздатьНаОсновании.Идентификатор = "ЗапросЦенСоздатьНаОснованииЗаказа"; КомандаСоздатьНаОсновании.Представление = НСтр("ru = 'Запрос цен'"); КомандаСоздатьНаОсновании.ПроверкаПроведенияПередСозданиемНаОсновании = Истина; Возврат КомандаСоздатьНаОсновании; КонецЕсли; Возврат Неопределено; КонецФункции
В этой функции мы указали обработчик, расположенный в общем модуле дкВводНаОснованииКлиент. В типовой конфигурации подобные обработчики находятся в общем модуле ВводНаОснованииКлиент, но чтобы не изменять штатный модуль, был создан другой, с префиксом.
В общем модуле дкВводНаОснованииКлиент создаём функцию обработчика, которая откроет нам форму создаваемого документа:
Функция ЗапросЦенСоздатьНаОснованииЗаказа(ОписаниеКоманды) Экспорт ПараметрыВыполненияКоманды = Новый Структура("Источник,Уникальность,Окно,НавигационнаяСсылка"); ЗаполнитьЗначенияСвойств(ПараметрыВыполненияКоманды, ОписаниеКоманды.ДополнительныеПараметры); // Основание - документ, на основании которого формируется документ "Запрос цен". Основание = ОписаниеКоманды.ОбъектыОснований[0]; ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("Основание",Основание); Если ПараметрыОткрытия <> Неопределено Тогда ОткрытьФорму( "Документ.ЗапросЦен.Форма.ФормаДокумента", ПараметрыОткрытия, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); КонецЕсли; КонецФункции
Таким образом мы добавили наш документ в список штатной кнопки "Создать на основании". Осталось убрать лишнюю кнопку на форме документа "Заказ материалов в производства". Делается это в форме документа "Заказ материалов в производство" в левом верхнем фрейме, на вкладке "Командный интерфейс". Снимаем флаги "Видимость" и "Автовидимость" для документа "Запрос цен".
Теперь в форме заказа материалов порядок.