Каталог решений - 1С 8.2-8.3. Создать на основании новый документ или открыть существующий.

1С 8.2-8.3. Создать на основании новый документ или открыть существующий.

1С 8.2-8.3. Создать на основании новый документ или открыть существующий.

В наличии

1С 8.2-8.3 Ввод документа на основании. Если такой документ уже создан, то открыть существующий.

Категория:

Описание

Условие задачи: В конфигурацию добавлен документ , который должен заполняться на основании другого документа, например, «Реализация товаров и услуг». Причем, создан на основании может быть только один документ.

Собственно задача: Используя типовой «Ввод на основании» создать новый документ. Если таковой уже создан, то открыть существующий. Как вариант, открыть не сам документ, а форму списка с позиционированием на нем.

Готового решения не сумел найти. Может плохо искал. В типовой Бухгалтерии 3.0, например, при попытке ввести «Счет-фактуру выданный» на основании РТиУ при уже существующем, вызывается исключение и просто выдается сообщение о том, что таковой уже есть.

Немного помучался и сделал так:

В модуле формы заполняемого документа (СборкаПродукции) использую событие формы документа «ПриОткрытии»:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ДокСсылка = ПриОткрытииНаСервере();
    Если ДокСсылка <> 0 Тогда
        Отказ = Истина;
        ОткрытьЗначение(ДокСсылка);
        //Если нужно открыть не сам документ, а список с позиционированием на документе, то пред. строку заменить на:
        //ДопПараметры = Новый Структура(«ТекущаяСтрока», ДокСсылка);
        //ОткрытьФорму(«Документ.СборкаПродукции.ФормаСписка», ДопПараметры);        
    КонецЕсли;
КонецПроцедуры

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

Собственно все.

Прошу сильно не ругать — это моя первая публикация. За поправки и подсказки буду благодарен.

 

has been added to your cart:
Оформление заказа