Условие задачи: В конфигурацию добавлен документ , который должен заполняться на основании другого документа, например, "Реализация товаров и услуг". Причем, создан на основании может быть только один документ.
Собственно задача: Используя типовой "Ввод на основании" создать новый документ. Если таковой уже создан, то открыть существующий. Как вариант, открыть не сам документ, а форму списка с позиционированием на нем.
Готового решения не сумел найти. Может плохо искал. В типовой Бухгалтерии 3.0, например, при попытке ввести "Счет-фактуру выданный" на основании РТиУ при уже существующем, вызывается исключение и просто выдается сообщение о том, что таковой уже есть.
Немного помучался и сделал так:
В модуле формы заполняемого документа (СборкаПродукции) использую событие формы документа "ПриОткрытии":
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ДокСсылка = ПриОткрытииНаСервере();
Если ДокСсылка <> 0 Тогда
Отказ = Истина;
ОткрытьЗначение(ДокСсылка);
//Если нужно открыть не сам документ, а список с позиционированием на документе, то пред. строку заменить на:
//ДопПараметры = Новый Структура("ТекущаяСтрока", ДокСсылка);
//ОткрытьФорму("Документ.СборкаПродукции.ФормаСписка", ДопПараметры);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПриОткрытииНаСервере()
Если НЕ РеквизитФормыВЗначение("Объект").ЭтоНовый() Тогда
Возврат 0; //открывается уже существующий док
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СборкаПродукции.Ссылка
|ИЗ
| Документ.СборкаПродукции КАК СборкаПродукции
|ГДЕ
| СборкаПродукции.ДокументОснование.Ссылка = &ТекДокОснСсылка";
Запрос.УстановитьПараметр("ТекДокОснСсылка", Объект.ДокументОснование);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0; // документа нет
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Ссылка; //Возвращаем ссылку на существующий док
КонецЕсли;
КонецЕсли;
КонецФункции
Собственно все.
Прошу сильно не ругать - это моя первая публикация. За поправки и подсказки буду благодарен.