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

Запрет корректировки документа

Автор Дмитрий11, 25 авг 2023, 14:08

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

Дмитрий11

Всем привет, подскажите, не могу понять, как сделать запрет корректировки документа, если на основании него создан другой?
Пробовал Если ЗначениеЗаполнено(ДокументОснование)Тогда Отказ = Истина, но это вроде как если у документа есть основание, а не он сам им является

Максим75

Дмитрий11, можно запросом выбрать доки у которых основанием является нужный.
и если есть такие - то запрещать основание редактировать.
может как-то проще и можно?

fruitella

Можно получить ссылку на связанный документ. Посмотреть связанные можно в критериях отбора, также обычно на форме есть реквизит с гиперссылкой на привязанный док, который был создан на основании
Затем просто проверяешь, если документ существует, то в событиях перед записью можно пользователю выдать предупреждение и тупо делаешь возврат

Дмитрий11

fruitella, МассивСсылок = КритерииОтбора.СвязанныеДокументы.Найти(Документы.ПеремещениеТоваров);

Если МассивСсылок.Количество() > 0 Тогда
Отказ = Истина;
Сообщить("Я обязательно прочту красно-желтую книгу!");
КонецЕсли;
Попробовал так, не работает

Дмитрий11

fruitella, Если ОбщегоНазначения.ЕстьСсылкиНаОбъект(Ссылка)Тогда
  ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
        НСтр("ru = 'Нельзя'"), , , , Отказ);

    КонецЕсли;
Попробовал так- ругается на любые ссылки, кручусь где то рядом, ни как не в еду

fruitella

Только где у меня процедура с командой это в событиях перед записью перепиши.
В параметрах указывай ссылку на свой документ в котором ты сейчас работаешь

&НаКлиенте
Процедура СвязанныеДокументы(Команда)
ДокументНайден = СвязанныеДокументыНаСервере();

Если ДокументНайден Тогда
ПоказатьПредупреждение(, "Нельза редактировать текущий документ", 15, "Редактирование документа");
Возврат;
КонецЕсли;

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

&НаСервере
Функция СвязанныеДокументыНаСервере()
ДокументНайден = Ложь;

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

НайденныйДокумент = РезультатЗапроса.Следующий();

Если НЕ РезультатЗапроса.Ссылка.Пустая() Тогда
ДокументНайден = Истина;
КонецЕсли;

Возврат ДокументНайден;
КонецФункции



Дмитрий11

fruitella, Понял, сейчас попробую

Дмитрий11

fruitella, функцию в  модуль объекта закидывать?

fruitella

Дмитрий11, Не уверен, т.к. Показать предупреждение это метод, который обрабатывается на клиенте. Хотя могу и ошибаться, уже к вечеру голова не хочет думать.
Если не получится, то попробуй в модуле самой формы документа. И там у формы есть событие перед записью.

Дмитрий11

fruitella, Спасибо огромное, правда немного подправил, все запихнул в модуль объекта "Перед Записью"
Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    СвязанныеДокументы.Ссылка КАК Ссылка
        |ИЗ
        |    КритерийОтбора.СвязанныеДокументы(&ДокСсылка) КАК СвязанныеДокументы
        |ГДЕ
        |    СвязанныеДокументы.Ссылка.Проведен";

Запрос.УстановитьПараметр("ДокСсылка", Ссылка);
     
        РезультатЗапроса = Запрос.Выполнить();
       
             
        Если НЕ РезультатЗапроса.Пустой() Тогда
                ДокументНайден = Истина;
КонецЕсли;
Если ДокументНайден=Истина Тогда Отказ=истина;
Сообщить("Нельзя!");
КонецЕсли;

Подскажи пожалуйста, может можно еще отбор по документу сделать?Чтобы только на Документы "Перемещения" смотрел

Теги:

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

Рейтинг@Mail.ru

Поиск