Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 08:47

При проведении документа показать вопрос пользователю

Автор Алексей_1985_06, 24 апр 2024, 21:34

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Всем привет! Знатоков прошу помочь, есть процедура обработки проведения документа, в которой проверяется есть ли в БД документ с такими же реквизитами приказа о назначении ("защита от дурака"), подскажите как в таком случае открыть форму и показать пользователю этот документ (который записан в БД):

Процедура ОбработкаПроведения(Отказ, Режим)

// Проверим есть ли такие документы. Чтобы не записать документ с одинаковыми реквизитами приказа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ДокументНазначениеНаДолжность.Дата, ДЕНЬ) КАК ДатаПриказа,
| ДокументНазначениеНаДолжность.Должность КАК ДолжностьРуководителя,
| ДокументНазначениеНаДолжность.НомерПриказаОНазначении КАК НомерПриказа
|ИЗ
| Документ.ДокументНазначениеНаДолжность КАК ДокументНазначениеНаДолжность
|ГДЕ
| НЕ ДокументНазначениеНаДолжность.ПометкаУдаления
| И ДокументНазначениеНаДолжность.Ссылка <> &Документ
| И ДокументНазначениеНаДолжность.Проведен";   
Запрос.УстановитьПараметр("Документ", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл 

Если Выборка.НомерПриказа = НомерПриказаОНазначении И
Выборка.ДатаПриказа = НачалоДня(Дата) И       
Выборка.ДолжностьРуководителя = Должность Тогда 

Сообщить("Документ с таким приказом уже существует");
Отказ = Истина; // Отказ от проведения документа

// ВОТ ЗДЕСЬ ХОТЕЛОСЬ БЫ ОТКРЫТЬ ФОРМУ УЖЕ СУЩЕСТВУЮЩЕГО ДОКУМЕНТА!!!!
Возврат
КонецЕсли; 

КонецЦикла;
КонецЕсли;

КонецПроцедуры

bsn-chita

Хотите взаимодействовать с пользователем делайте это на форме документа.
ЦитироватьДатаПриказа - это отдельный реквизит документа(мне так больше нравится)
СсылкаНаДокументДубль - это реквизит формы типа ДокументСсылка.ДокументНазначениеНаДолжность
Форма документа
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

    Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение И ЕстьСовпадающийДокумент(Объект.ДатаПриказа, Объект.Должность, Объект.НомерПриказаОНазначении, Объект.Ссылка, СсылкаНаДокументДубль) Тогда
        Отказ = Истина;
        Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос",ЭтотОбъект);
        ЗаголовокВопроса = "Документ с таким приказом уже существует. Открыть его?";
        ТекстВопроса = СтрШаблон("Да - Закрыть текущий документ и открыть документ дубль%1Нет - Закрыть текущий документ не сохраняя изменении%1Отмена - Продолжить редактирование текущего документа", Символы.ПС);   
        ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Да, ЗаголовокВопроса);
    КонецЕсли;
   
КонецПроцедуры

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

КонецФункции
   
&НаКлиенте
Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        Модифицированность = Ложь;
        Закрыть();
        ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокументДубль);
        ОткрытьФорму("Документ.ДокументНазначениеНаДолжность.ФормаОбъекта", ПараметрыФормы);
    ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
        Модифицированность = Ложь;
        Закрыть();
    КонецЕсли;
КонецПроцедуры


Алексей_1985_06


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск