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

1. arsen_botashev 22.02.19 16:49 Сейчас в теме
Здравствуйте, создаю документ на основании бизнес процесса.
И если документ уже был создан на основании этого БП, открываю его при нажатии "Создать на основании"
Но возникла необходимость создания двух документов.
Как проверить был ли создан уже документ, если он создан то можно еще один создать, а если уже создано два документа то, открыть последний из них?
&НаСервере
Функция НайтиДокументПоБП(СсылкаНаБП)
	Возврат Документы.ОценкаЗначимостиРиска.НайтиПоРеквизиту("БизнесПроцесс", СсылкаНаБП);
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	// проверка уже созданного документа на основании БП
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) И ЗначениеЗаполнено(Объект.БизнесПроцесс) Тогда
		СсылкаНаСуществущийДок = НайтиДокументПоБП(Объект.БизнесПроцесс);
		
		Если ЗначениеЗаполнено(СсылкаНаСуществущийДок) Тогда
			Отказ = Истина;
			ОткрытьЗначение(СсылкаНаСуществущийДок);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. oleg-x 27 22.02.19 16:54 Сейчас в теме
У документа должно быть заполнено основание иначе они ни как не связаны между собой. Это раз.
Второе ищешь запросом, какие документы уже созданы, если 1, то все "ОК", создаем. Если два, то тут делема, какой из них последний. Если документы в разных датах или разное время, то просто открываете нужный.
4. arsen_botashev 22.02.19 17:16 Сейчас в теме
(2)да, у документа есть основание. По нему я и проверяю.
Да, я знаю что надо проверить есть ли уже один, тогда можно второй создать, но я не знаю как это проверить, в этом и вопрос.
И если у них даты разные, то надо выбрать тот, у которого дата ближе к текущей дате. Но, я не знаю как это сделать.
Логику я понял уже, вопрос был в том, как это реализовать?
5. oleg-x 27 22.02.19 17:36 Сейчас в теме
(4) Запросы делать умеешь?
Необходимо сделать запрос к документу, в условиях запроса указываем отбор по основанию. И сортируем по дате убывания. Таким образом если в выборке будет два документа, то выбираем первый и прерываем выборку.
Все делается через конструктор, с небольшой правкой последующего кода.
3. soft_wind 22.02.19 17:14 Сейчас в теме
попробуйте такую функцию

&НаСервере
Функция НайтиДокументПоБП(СсылкаНаБП)
//старый вариант
//Возврат Документы.ОценкаЗначимостиРиска.НайтиПоРеквизиту("БизнесПроцесс", СсылкаНаБП);

//Запрос - шаблон
лкЗапрос = Новый Запрос;
лкЗапрос.Текст = "
|Выбрать
| Док.Ссылка
|из
| Документы.ОценкаЗначимостиРиска Док
|где
| Док.БизнесПроцесс = &СсылкаНаБП //условие по БП
|и Не Док.ПометкаУдаления //пропускаем, не учитываем удаленные
|Упорядочить по
| Док.Дата убыв//или по Моменту времени, елси даты могут быть одинаковые
|";
лкЗапрос.УстановитьПараметр("СсылкаНаБП",СсылкаНаБП);

//для отладки, выгрузки запроса в файл для консоли
//ВнешниеОбработки.Создать("C:\Temp\!!!ПроизвольныйЗапрос.epf", Ложь).СохранитьЗапросВФайл(лкЗапрос, "C:\Temp\Запрос.sel")

//один из вариантов, анализа
лкВыборка = лкЗапрос.Выполнить().Выбрать();
Если лкВыборка.Количество() >= 2 Тогда
//есть несколько документов, получаем поледнюю ссылку
лкВыборка.Следующий();
лкСсылка = лкВыборка.Ссылка;
Иначе
//еще нет нужного количества документов
лкСсылка = Неопределено;
КонецЕсли;

Возврат лкСсылка;


КонецФункции
Оставьте свое сообщение

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