Найти документы, введенные на основании определенного документа

1. 1CLeXx 8 06.02.12 13:25 Сейчас в теме
Здравствуйте, есть документ, на основании которого введено несколько документов. Подскажите, пожалуйста, оптимальный алгоритм поиска всех документов у которых данный документ является основанием! Нужно, чтобы потом получить табличные части этих документов для выгрузки в ТЗ! Спасибо
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Altair777 645 06.02.12 13:39 Сейчас в теме
(1) 1CLeXx, а если так?

ВыбратьПодчиненныеДокументы(<?>,,)
Синтаксис:
ВыбратьПодчиненныеДокументы(<Дата1>,<Дата2>,<Докум>)
Назначение:
Открыть выборку документов, подчиненных заданному, в интервале дат.
Возвращает:
1 - если действие выполнено и в выборке есть хотя бы один документ;
0 - если действие не выполнено или в выборке нет ни одного документа.
Параметры:
<Дата1> - дата, документ или позиция начала выборки документов. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа.
<Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.
<Докум> - документ, подчиненные которому будут включаться в выборку.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
3. Timesoft 271 06.02.12 16:01 Сейчас в теме
(2) Altair777, Ввод на основании и подчинённые документы - в общем случае абсолютно разные вещи :)
timurkhann; Pari; +2 1 Ответить
4. valval 06.02.12 16:34 Сейчас в теме
(3) В общем случае (отличном от (2)) эта задача нерешаема.
5. Ягг 497 07.02.12 07:05 Сейчас в теме
(4) valval, В общем случае эта задача решаема как пример через механизм поиска ссылок на объект (долго но верно).
В данном случае поиск через подчиненные документы дадут результат если в веденном на основании документе есть ссылка на родительский документ, и если эта ссылка не помещена в реквизит типа "неопределено" (кажется).
7. valval 07.02.12 12:17 Сейчас в теме
(5) Не понял мысль. Один документ вводится на основании другого. Ссылка на родительский документ не прописывается. В этом случае механизм поиска ссылок ничего не даст. А если ссылка на родительский документ прописалась, приходим к (2).
13. nicotin 36 07.02.12 14:34 Сейчас в теме
+11 Чтобы найти подчиненные документы, не обязательно писать код. Есть стандартные
Меню - Действия - Подчиненные документы
или
Кнопка Действия - Структура подчиненности
SORRY, сейчас прочитал первый пост - там без кода не обойтись.Тогда лучший вариант - предложенный в (2).
Только, возможно, придется дополнительно отсеять шелуху примерно так:
	СЗВидов = СоздатьОбъект("СписокЗначений");
	СЗДоков = СоздатьОбъект("СписокЗначений");
	ИсходныйДок = СоздатьОбъект("Документ.НужныйВидДокумента");
	ИсходныйДок.НайтиПоНомеру(НужныйНомер, НужнаяДата);
	Для Сч = 1 По Метаданные.Документ("НужныйВидДокумента").ВводимыеНаОснованииДокументы.Количество() Цикл
		СЗВидов.ДобавитьЗначение(Метаданные.Документ("НужныйВидДокумента").ВводимыеНаОснованииДокументы.Получить(Сч).Идентификатор);
	КонецЦикла;
	Док = СоздатьОбъект("Документ");
	Док.ВыбратьПодчиненныеДокументы(,,ИсходныйДок.ТекущийДокумент());
	Пока Док.ПолучитьДокумент()=1 Цикл
		Если СЗВидов.НайтиЗначение(Док.Вид())=0 Тогда
			Продолжить
		КонецЕсли;
		СЗДоков.ДобавитьЗначение(Док.ТекущийДокумент());
	КонецЦикла;
Показать
14. Altair777 645 07.02.12 22:54 Сейчас в теме
Итог - курим ЖКК и СП, смотрим типовые конфы :)
Имхо, писать готовый код не есть хорошо. В (2) я написал ключевое слово, для мало-мальски грамотного кодера этого должно было хватить.
6. arifulina 07.02.12 11:02 Сейчас в теме
независимо от типа реквизита, он может быть и не только "неопределенно", а вполне конкретного вида документа, НО однозначно, присоединяюсь к Ягг, выборка сработает только при наличии реквизита (в подчиненных документах), в котором выбран документ, в противном случае - связи нет никакой.
8. 11k65m 6 07.02.12 12:32 Сейчас в теме
Я думаю как то так
Если Док.ВыбратьПодчиненныеДокументы(,,Док.ТекущийДокумент()) = 1 Тогда
Пока Док.ПолучитьДокумент() = 1 Цикл
КонецЦикла;
конецЕсли;
9. пользователь 07.02.12 12:32
Сообщение было скрыто модератором.
...
10. warenic 109 07.02.12 12:41 Сейчас в теме
В стандартном механизме ввода на основании ссылка на родительский документ сохраняется в реквизите ДокументОснование.
11. nicotin 36 07.02.12 14:25 Сейчас в теме
(10) warenic, В Комплексной конфигурации (тоже ведь стандартная) кроме реквизита ДокументОснование встречается реквизит ДокОснование
12. Quick_Loader 07.02.12 14:30 Сейчас в теме
НайтиСсылки только по документам не предлагали?
15. RRmice 2 28.10.15 08:58 Сейчас в теме
Присваивай документу созданному на основании такой-же гуид и ищи по нему.
18. Flextor74 21.08.20 13:26 Сейчас в теме
16. пользователь 06.06.16 10:49
Сообщение было скрыто модератором.
...
17. Alex1c 32 30.04.20 15:40 Сейчас в теме
на всякий случай оставлю это здесь (для УПП 1.3)
// Выполняем запрос к виртуальной таблице критерия отбора "СвязанныеДокументы" с отбором по документу основания
		Запрос2 = Новый Запрос;
		Запрос2.Текст =
		"ВЫБРАТЬ
		|   СвязанныеДокументы.Ссылка
		|ИЗ
		|   КритерийОтбора.СвязанныеДокументы(&Документ) КАК СвязанныеДокументы
		|ГДЕ
		|   СвязанныеДокументы.Ссылка.Проведен";           
		Запрос2.УстановитьПараметр("Документ", ВыборкаДетальныеЗаписи.Ссылка);    
		Результат = Запрос2.Выполнить();
		Если НЕ Результат.Пустой() Тогда
			Сообщить("На основании документа имеются проведенные документы! "+ВыборкаДетальныеЗаписи.Ссылка);
			//Отказ = Истина;
			ВыборкаДетальныеЗаписи2 = Результат.Выбрать();
			
			Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
				
				Сообщить(ВыборкаДетальныеЗаписи2.Ссылка);
				
			КонецЦикла;
			
			
			
		КонецЕсли;
Показать
egoriy111; jan-pechka; +2 Ответить
19. jan-pechka 426 12.10.22 15:14 Сейчас в теме
я так сделала:
		док=ЭтотОбъект;
		УстЦен=Документы.УстановкаЦенНоменклатуры.Выбрать();
		Пока УстЦен.Следующий()Цикл
			Если УстЦен.ДокументОснование=док.Ссылка Тогда
				Если  УстЦен.ПометкаУдаления Тогда
					продолжить
				Иначе
					дУстЦен=УстЦен.ПолучитьОбъект();
					дУстЦен.Записать(РежимЗаписиДокумента.ОтменаПроведения);
					дУстЦен.УстановитьПометкуУдаления(Истина);
					Сообщить("Удален документ Установка Цен № "+дУстЦен.Номер+" от "+дУстЦен.Дата+" ,введенный на основании данной Приходной");
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
Показать
20. user1826630 12.10.22 15:18 Сейчас в теме
(19) Молодец.
1. Выбираешь все документы установки цен за все время существования компании. Это очень оптимально!
2. Делаешь неявные запросы в цикле (получение документа-основания "через точку" от ссылки)
3. Запросы? Не, не слышали о таком.
21. jan-pechka 426 14.10.22 14:40 Сейчас в теме
(20) мне период не нужен, но можно его указать.
даже интересно стало: Вы можете протестировать быстродействие предыдущего примера и моего? Пожалуйста, напишите какая разница в скорости у Вас получилась.
22. user1826630 14.10.22 14:42 Сейчас в теме
(21)
Вы можете протестировать быстродействие предыдущего примера и моего? Пожалуйста, напишите какая разница в скорости у Вас получилась.

Конечно.
Номер карты дать?
23. jan-pechka 426 14.10.22 14:46 Сейчас в теме
24. Иваныч 23 19.11.22 14:44 Сейчас в теме
А если через дерево документов?
25. user1831019 19.11.22 15:02 Сейчас в теме
(24) А откуда берется дерево документов?
Оставьте свое сообщение

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