Имя: Пароль:
1C
 
Как пропустить документ, помеченый на удаление?
, ,
0 Nemirov
 
07.05.20
08:49
Студент извиняюсь заранее. Вопрос такой: Допустим есть запрос, в цикле перезаписываю документы, либо если их нет создаю. А вот если документ существует но помечен на удаление как мне его в цикле пропустить?    

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ОтчетОРозничныхПродажахТовары.Ссылка,
|    ОтчетОРозничныхПродажахТовары.Ссылка.Дата,
|    ВЫБОР
|        КОГДА ПриходныйКассовыйОрдер.Ссылка ЕСТЬ NULL
|            ТОГДА ИСТИНА
|        ИНАЧЕ ЛОЖЬ
|    КОНЕЦ КАК ПроведенныеПКО,
|    ОтчетОРозничныхПродажахТовары.Субконто
|ИЗ
|    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
|        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|        ПО ОтчетОРозничныхПродажахТовары.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование
|ГДЕ
|    ОтчетОРозничныхПродажахТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл            
      
     ЕстьПКО = Документы.ПриходныйКассовыйОрдер.НайтиПоРеквизиту("ДокументОснование", ВыборкаДетальныеЗаписи.Ссылка);
     Если НЕ ВыборкаДетальныеЗаписи.ПроведенныеПКО Тогда
        СуществующийДокумент = ЕстьПКО.ПолучитьОбъект();
    СуществующийДокумент.Заполнить(ВыборкаДетальныеЗаписи.ссылка);
        Субконто = ВыборкаДетальныеЗаписи.Субконто;
        СуществующийДокумент.Дата =   ВыборкаДетальныеЗаписи.Дата;
        СуществующийДокумент.ПринятоОт = ВыборкаДетальныеЗаписи.Субконто;
    СуществующийДокумент.Записать(РежимЗаписиДокумента.Проведение);
        Сообщить("" +СуществующийДокумент + " " + "Переписан",);
    Продолжить;    
    КонецЕсли;
1 ДенисЧ
 
07.05.20
08:55
Ну так в условии ГДЕ поставь проверку на ПометкаУдаления...
2 Nemirov
 
07.05.20
09:06
(1)  Пробовал не помогает.
3 tixis
 
07.05.20
09:08
(2) не верю, покажи условие
4 Nemirov
 
07.05.20
09:10
(3) |ГДЕ
|    ОтчетОРозничныхПродажахТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|    И ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ";
   так делал
5 tixis
 
07.05.20
09:17
И что ты этим условием хотел отрезать? У тебя левое соединенте, отчеторозничных продажах все равно попадет. Какой документ не должен попасть?
6 Nemirov
 
07.05.20
09:19
(5)  Документы.ПриходныйКассовыйОрдер
7 Nemirov
 
07.05.20
09:20
(5) Если существует помеченный на удаление документ ПриходныйКассовыйОрдер то пропустить надо его.
8 tixis
 
07.05.20
09:20
Уже в обходе выборке чтоле?
9 tixis
 
07.05.20
09:22
Выбор когда есть null это не равно пометка на удаление если ято
10 tixis
 
07.05.20
09:22
(9) это я к запросу
11 ac13
 
07.05.20
09:24
не очень понятно какие документы надо выбрать, но если что-то нужно пропустить именно при обходе в цикле, то:

Пока Выборка.Следующий() Цикл
     Если Выборка.Документ.ПометкаНаУдаление Тогда
          Продолжить;
     КонецЕсли;
КонецЦикла;
12 Fedor-1971
 
07.05.20
09:24
(4) вот так соедини

   ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
       ПО (ОтчетОРозничныхПродажахТовары.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование)
       И (НЕ ПриходныйКассовыйОрдер.ПометкаУдаления)


Если очень хочешь именно кодом, то в результат запроса вытащи
  ПриходныйКассовыйОрдер.ПометкаУдаления КАК КассовыйОрдерПомеченНаУдаление
В цикле просто проверишь и будет тебе счастье
13 Fedor-1971
 
07.05.20
09:31
(0)  Вот это ни разу не проверка на проведение:
|    ВЫБОР
|        КОГДА ПриходныйКассовыйОрдер.Ссылка ЕСТЬ NULL
|            ТОГДА ИСТИНА
|        ИНАЧЕ ЛОЖЬ
|    КОНЕЦ КАК ПроведенныеПКО,


Это просто признак, что кассового ордера просто нет

если нужно знать проведен ли ПКО:
ЕстьNull(ПриходныйКассовыйОрдер.Проведен, Ложь) КАК ПроведенПКО
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан