Имя: Пароль:
1C
1С v8
проверка наличия документа, введенного на основании другого документа
0 ench_es2014
 
04.08.14
08:35
Здравствуйте!
Подскажите, пожалуйста, как можно проверить, есть ли документ введенный на основании другого документа?

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

Если Выборка.Следующий() Тогда
//создаем новый документ
НовДок.ДокументОснование = Выборка.Ссылка;
КонецЕсли;

Как проверить, не был ли создан документ Б на основании документа А?
1 lxndr
 
04.08.14
08:38
лучше в запросе соединить таблицы обоих документов и отобрать по условию:
ГДЕ Б.Ссылка ЕСТЬ NULL
2 PuhUfa
 
04.08.14
08:43
(0) в Б есть ссылка на А?
3 ench_es2014
 
04.08.14
09:10
(2) Да, в Б есть реквизит ДокументОснование
4 DrShust
 
04.08.14
09:20
(3) lxndr - правильно пишет. Левым соединением. К А присоединяй Б по А.Ссылка, а Б.ДокументОснование. Если Б.Ссылка ЕстьNull, то на основании А не создавался документ Б.
5 ench_es2014
 
04.08.14
09:20
(1) Если соединяю так:
|ИЗ Документ.А КАК А                       |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Б КАК Б
|ПО А.Ссылка <> Б.ДокументОснование
|ГДЕ
|А.Дата >= &НачДата
|И А.Дата <= &КонДата
|И Б.ДокументОснование.Ссылка ЕСТЬ НЕ NULL
Тогда даже если за выбранный период нет документов Б, новый документ не создается..
6 mikecool
 
04.08.14
09:23
выбрать первые 1 1
из Док.А
где докоснование = &Основание

если результат не пустой, значит на основании &Основание есть введенный док
7 DrShust
 
04.08.14
09:23
(5) Левачить нужно!
8 Kurbash
 
04.08.14
09:24
(7)+1
9 ench_es2014
 
05.08.14
12:29
Всем большое спасибо! Кроме запроса можно использовать метод НайтиПоРеквизиту(): Документы.Б.НайтиПоРеквизиту("ДокументОснование", Выборка.Ссылка), если ссылка пустая, то не был введен документ Б на основании А
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой