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

1. Nefilimus 75 28.08.19 09:44 Сейчас в теме
Здравствуйте, уважаемые программисты.

Вопрос такой: Как проверить создан ли документ на основании?
Есть задача: если был создан документ на основании текущего, то, запретить возможность редактирования текущего.

Пока в голову толком ничего не приходит, только перебор всех возможных документов по реквизиту документ-основание, но это как-то не корректно

1С 8.3, обычные формы
По теме из базы знаний
Найденные решения
10. ranis888 104 03.09.19 09:33 Сейчас в теме
Если ЭтоНовый() Тогда 
Если НЕ ПараметрОбъектКопирования = НЕОПРЕДЕЛЕНО Тогда // Проверка на копирование 
Предупреждение("Запрещено копировать Договора!"); 
Закрыть();	
КонецЕсли;	
КонецЕсли;
Это поставишь на документ который был создан копированием / В Процедуре ПриОткрытии()


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

        Запрос.УстановитьПараметр("ТекущийДокумент", Объект.Основание);
        РезультатЗапроса = Запрос.Выполнить();
        Если Не РезультатЗапроса.Пустой() Тогда
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Это выполнение ЗАКРЫТО " + ВыборкаДетальныеЗаписи.Ссылка;
                Сообщение.Поле = "";
                Сообщение.УстановитьДанные(ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект());
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЦикла;
            Возврат;
        КонецЕсли; 
        Если Объект.Основание.ДатаВыполнения <> '00010101' Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Закрывать можно только выполненную заявку";
            Сообщение.Сообщить();
            Отказ = Истина;
            Возврат;
        КонецЕсли; 
    КонецЕсли; 
    // Если документ введен на основании, то запретим редактировать основание
    Если Не Объект.Основание.Пустая() И Объект.Проведен Тогда
        Элементы.Основание.ТолькоПросмотр = Истина;
    Иначе
        Элементы.Основание.ТолькоПросмотр = Ложь;
    КонецЕсли; 
    Если Объект.Ответственный = Справочники.Пользователи.ПустаяСсылка() Тогда
        Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    КонецЕсли; 
КонецПроцедуры
Показать
_nameless_; shcval; vv2; Nefilimus; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. platonov.e 158 28.08.19 09:47 Сейчас в теме
Поищите в сторону критерия отбора
Nefilimus; +1 Ответить
5. Nefilimus 75 28.08.19 09:55 Сейчас в теме
6. Nefilimus 75 28.08.19 09:58 Сейчас в теме
7. platonov.e 158 28.08.19 10:05 Сейчас в теме
(6) вы с помощью связанных документов сможете проверить, создавали ли на основании вашего документа другие, и если да тогда заблокировать. как то так
Nefilimus; +1 Ответить
8. Nefilimus 75 28.08.19 10:11 Сейчас в теме
(7) Спасибо огромное =) Попробую реализовать)
3. soft_wind 28.08.19 09:47 Сейчас в теме
в процедуру ПриОткрытии добавьте такую команду (пример, спои переменные нужно подставить)
ЭтаФорма.ТолькоПросмотр = Значениезаполнено(Объект.ДокументОснование);
Nefilimus; +1 Ответить
4. Nefilimus 75 28.08.19 09:55 Сейчас в теме
(3) Спасибо большое, но мне нужно блокировать не только созданный документ, но и тот, на основании которого был создан документ
9. agata_v 28.08.19 15:40 Сейчас в теме
Пишите запрос. Посмотрите, например, как в БП3 реализован механизм поиска Документов "счет-фактура выданный" к документу "Реализация".
Nefilimus; +1 Ответить
10. ranis888 104 03.09.19 09:33 Сейчас в теме
Если ЭтоНовый() Тогда 
Если НЕ ПараметрОбъектКопирования = НЕОПРЕДЕЛЕНО Тогда // Проверка на копирование 
Предупреждение("Запрещено копировать Договора!"); 
Закрыть();	
КонецЕсли;	
КонецЕсли;
Это поставишь на документ который был создан копированием / В Процедуре ПриОткрытии()


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

        Запрос.УстановитьПараметр("ТекущийДокумент", Объект.Основание);
        РезультатЗапроса = Запрос.Выполнить();
        Если Не РезультатЗапроса.Пустой() Тогда
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Это выполнение ЗАКРЫТО " + ВыборкаДетальныеЗаписи.Ссылка;
                Сообщение.Поле = "";
                Сообщение.УстановитьДанные(ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект());
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЦикла;
            Возврат;
        КонецЕсли; 
        Если Объект.Основание.ДатаВыполнения <> '00010101' Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Закрывать можно только выполненную заявку";
            Сообщение.Сообщить();
            Отказ = Истина;
            Возврат;
        КонецЕсли; 
    КонецЕсли; 
    // Если документ введен на основании, то запретим редактировать основание
    Если Не Объект.Основание.Пустая() И Объект.Проведен Тогда
        Элементы.Основание.ТолькоПросмотр = Истина;
    Иначе
        Элементы.Основание.ТолькоПросмотр = Ложь;
    КонецЕсли; 
    Если Объект.Ответственный = Справочники.Пользователи.ПустаяСсылка() Тогда
        Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    КонецЕсли; 
КонецПроцедуры
Показать
_nameless_; shcval; vv2; Nefilimus; +4 Ответить
11. Nefilimus 75 13.09.19 16:51 Сейчас в теме
12. Boabinga 18.09.20 15:55 Сейчас в теме
(10)Добавил ваш код в модуль формы. Создавать "на основании" повторно не дает, но и из формы списка по кнопке "Создать" второй раз тоже не дает. Какое условие нужно, чтобы при создании документа без основания все работало?
13. Boabinga 21.09.20 17:58 Сейчас в теме
Разобрался. Нужно добавить вот так и все работает.

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот