Ввод на основании, контроль уникальности создаваемого документа.

1. userOleg 31.01.24 07:50 Сейчас в теме
Имеется Документ1 на основании его создается Документ2. Нужно сделать проверку на уникальность Документ2. Если Документ2 уже есть пересоздать с запросом у пользователя. "Документ2 уже имеется. Создать заново?".

Я понял, что в ОбработкеЗаполнения нужно отключить стандартную обработку и написать свою, но как написана стандартная я не знаю.

Можете написать пример, и нужно ли где-то еще писать кроме Обработки Заполнения?
Заранее благодарю.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 80 31.01.24 08:08 Сейчас в теме
(1)Обработка заполнения работает тогда, когда сам объект уже создан, максимум вы сможете отказаться от его заполнения.
Вам необходимо проверять существование документа при нажатии на кнопку "создать на основании".
3. userOleg 31.01.24 08:16 Сейчас в теме
(2)Я не могу найти код который выполняется этой кнопкой.
4. nomad_irk 80 31.01.24 08:51 Сейчас в теме
(3)нужно создавать свою кнопку, иначе все действия выполняет платформа.
14. CheBurator 2689 31.01.24 19:27 Сейчас в теме
(2) а пока проверяли, в другом сеансе - оппа! и уже успели создать, в итоге получится два дочерних документа, хотя должен быть один...
17. nomad_irk 80 01.02.24 07:57 Сейчас в теме
(14)Это уже методическая ошибка учета. Заменяется на проверку дублей при записи, но это уже совсем другая история © не помню кто :)
5. glek 120 31.01.24 08:58 Сейчас в теме
6. userOleg 31.01.24 09:14 Сейчас в теме
7. glek 120 31.01.24 09:16 Сейчас в теме
(6) Если своя, то стандартный ввод на основании не для вас. Используйте совет, который дал (4)
10. ActionBlog 31.01.24 10:53 Сейчас в теме
(1)
Процедура КнопкаСоздатьНаОсновании(Кнопка)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	АвансовыйОтчет.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.АвансовыйОтчет КАК АвансовыйОтчет
	|ГДЕ
	|	АвансовыйОтчет.ДокументОснование = &ТекущаяСсылка";
	
	Запрос.УстановитьПараметр("ТекущаяСсылка", Ссылка);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Если Выборка.Следующий() Тогда
		Режим = РежимДиалогаВопрос.ДаНет;
		Ответ = Вопрос("Документ2 уже имеется. Создать заново?", Режим, 0);
		Если Ответ = КодВозвратаДиалога.Нет Тогда
			Возврат;
		КонецЕсли;
		Док = Выборка.Ссылка.ПолучитьОбъект();
	Иначе	
		Док = Документы.АвансовыйОтчет.СоздатьДокумент();	
	КонецЕсли;
	
	//Заполнение документа
КонецПроцедуры
Показать
11. userOleg 31.01.24 11:29 Сейчас в теме
12. userOleg 31.01.24 11:44 Сейчас в теме
(10)Подскажите. можно ка кто запустить в качестве заполнения документа процедуру Обработка заполнения?
13. ActionBlog 31.01.24 13:13 Сейчас в теме
(12)Можно спроцедуру в кнопке перезаписать вот так:
Процедура КнопкаСоздатьНаОсновании(Кнопка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    АвансовыйОтчет.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.АвансовыйОтчет КАК АвансовыйОтчет
    |ГДЕ
    |    АвансовыйОтчет.ДокументОснование = &ТекущаяСсылка";
    
    Запрос.УстановитьПараметр("ТекущаяСсылка", Ссылка);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Режим = РежимДиалогаВопрос.ДаНет;
        Ответ = Вопрос("Документ2 уже имеется. Создать заново?", Режим, 0);
        Если Ответ = КодВозвратаДиалога.Нет Тогда
            Возврат;
        КонецЕсли;
        Док = Выборка.Ссылка.ПолучитьОбъект();
    Иначе    
        Док = Документы.АвансовыйОтчет.СоздатьДокумент();    
    КонецЕсли;
    
    Док.Заполнить(Ссылка);
КонецПроцедуры
Показать
8. userOleg 31.01.24 09:19 Сейчас в теме
Пока сделал так, В процедуре ПередЗаписью ищу документ с таким Основанием и удаляю его, если номер документа отличается от текущего.
В идеале конечно перезаписывать, но не знаю как правильно написать код чтобы заменить стандартные обработки.
Таже проблема и с написанием своей кнопки.
9. userOleg 31.01.24 10:16 Сейчас в теме
Может кто бросит пример кода в своей кнопке?
15. Fox-trot 163 01.02.24 05:47 Сейчас в теме
(9) как раз в кнопке ничего писАть нинада, весь код на сервере пишется Процедура ОбработкаЗаполнения(Основание)
16. userOleg 01.02.24 07:50 Сейчас в теме
(15)Поправьте меня если я ошибаюсь.
В модуле объекта документа есть Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
В документе создаю команду Кнопка и из модуля команды вызываю ОбработкаЗаполнения() ?
19. ActionBlog 01.02.24 09:16 Сейчас в теме
(16)Только напрямую не вызывайте прям. Есть метод ДокОбъект.Заполнить(Основание);
18. Fox-trot 163 01.02.24 07:58 Сейчас в теме
20. CheBurator 2689 02.02.24 19:25 Сейчас в теме
Проверять на дубли при записи - это и есть самая что ни на есть методическая ошибка. Пользователь минут 15 топтал документ, делал подбор, указывал партии и много чего ещё навешанного в документе, а при записи ему типа ласково "а не пошли бы вы лесом со всей работой своей, потому как дубль"...?!
22. userOleg 05.02.24 10:43 Сейчас в теме
(20)Согласен. что при записи проверять на дубли не совсем правильно, но моем случае, я при открытии выдаю пользователю информацию что документ на основании уже был создан, а при записи спрашиваю пользователя "Перезаписать новым документом или нет?"
пользователь может посмотреть старый или перезаписать новым.
Задача не запретить дубль, а исключить возможность создания дубля.
21. Fox-trot 163 02.02.24 19:48 Сейчас в теме
ахаха, насмешил
речь про создание на ОСНОВАНИИ, так что никаких там подборов
максимум это указать температуру в соседней палате))
23. CheBurator 2689 06.02.24 13:03 Сейчас в теме
(21) Речь не при создании на основании, а про проверку дублей при записи. Фильтруй базар, вникай в сущность.
Оставьте свое сообщение

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