Имя: Пароль:
1C
 
Разница в применении Продолжить
,
0 NIGHTHUNTER
 
09.01.22
09:00
Есть ли разница в применении оператора продолжить в варианте 1 и варианте 2 ?
Спрашиваю так как, есть мнение. что разница принципиальна. Я же не вижу ее.

Вариант 1

    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара " + Выборка.НоменклатураПредставление + " в количестве " + (Выборка.Количество - Выборка.КоличествоОстаток);
            Сообщение.Сообщить();            
            
            Отказ = Истина;
            
        КонецЕсли;

        Если Отказ Тогда
            Продолжить;
        КонецЕсли;
        
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Склад = Склад;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        
    КонецЦикла;


Вариант 2

    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара " + Выборка.НоменклатураПредставление + " в количестве " + (Выборка.Количество - Выборка.КоличествоОстаток);
            Сообщение.Сообщить();            
            
            Отказ = Истина;
                        Продолжить;            
        КонецЕсли;

        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Склад = Склад;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        
    КонецЦикла;
1 Мимохожий Однако
 
09.01.22
09:04
(0) "есть мнение". Чьё мнение?
В чём цель кода?
2 SleepyHead
 
гуру
09.01.22
09:09
(0) Здесь напрашивается цитата про очень тонкий лед из большого куша, только про троллинг.
3 NIGHTHUNTER
 
09.01.22
09:14
(1) Это код из расходной накладной. Старая методика проведения. Цель кода, провестись.

Я вроде бы, кажется понял разницу. Вариант 1 верный. Так как, там заложен смысл того, что при возведении отказ в истина, не будут формироваться движения.

В варианте 2 же. Движения будут формироваться. И из за не там расположенного оператора Продолжить, это будет бессмысленно !
4 aka MIK
 
09.01.22
09:21
Разница в том что в первом варианты будет инфа обо всех товарах без остатка, а во втором - только о первом
5 Aleksey
 
09.01.22
09:35
(3) Почему бессмысленно? Движение будет по тем позициям которых достаточно для списания

(4) а не наоборот? В первом варианте как только нарвется на недостачу, то все последующие позиции будут без движения. По сути в первом варианте продолжить равносильно прервать
6 Мимохожий Однако
 
09.01.22
09:48
(5) Если Отказ=Истина, то движения не будут записаны. Во втором варианте будут формироваться движения, но на финише будет Отказ. И движения не сохранятся. В первом варианте движения вообще не будут формироваться при первом же отказе.
Я бы сделал 3 вариант. Сначала проверка, а потом запись движений при успехе.
7 aka MIK
 
09.01.22
10:06
(5) ну да, наоборот
8 Aleksey
 
09.01.22
10:10
(5) "Если Отказ=Истина, то движения не будут записаны" - нам отсюда не видно, может будет, может не будет.
И насчет вариантов, зависит от того что нужно в конечном итоги. У меня в самописке он пишет движения всегда, просто при недостачи делается запись в РС "Недостачи при проведении". Но в моем случае база не для интерактивной работы, а сводная, и если прилетел проведенный документ он должен провести, а с минусами потом на выходных разбираться будем.
9 NIGHTHUNTER
 
09.01.22
14:00
(5) Так если уже, отказ истина. Зачем эти движения? Документ же уже не проведется. По этому и бессмысленно.
Я не знаю тонкости внутренней работы СУБД. Но вроде как этого не нужно делать. Документ и так не проведется.

По этому считается что правда за первым вариантом. Вот я и задал вопрос, что бы точнее разобрать его.
10 Волшебник
 
модератор
09.01.22
14:06
Если Отказ Тогда
   Прервать;
КонецЕсли;
11 RomanYS
 
09.01.22
14:08
(10) тогда не узнаешь обо всех ошибках. Только о первой
12 Casey1984
 
09.01.22
14:28
Если отказ, то зачем продолжать вообще?
13 RomanYS
 
09.01.22
14:32
(12) чтобы узнать все позиции, по которым нехватка остатков.
14 Sserj
 
09.01.22
14:39
На самом деле все что тут написали - мелочь.
А разница КОЛОСАЛЬНАЯ :)
Тут как в детской задачке:
Пете дали 5 яблок, два он съел. Сколько яблок осталось у Пети.
А ответа правильного тут нет - не определено сколько было у Пети яблок изначально.
Так вот и в этом примере, НЕИЗВЕСТНО состояние Отказа на момент начала цикла. А так же что будет с этим Отказом после цикла.
15 Сергиус
 
09.01.22
14:39
(0)Разница видится только в том, что для 1-го случая проверка на Отказ происходит всегда при проходе цикла, а во 2-м только когда Кол-во из документа больше остатка.
16 Сергиус
 
09.01.22
14:41
+(15) а как правильно заметили в (14) Отказ может быть выставлен в Истина и до цикла.
17 Casey1984
 
09.01.22
14:43
(0) Весь код надо.
18 NIGHTHUNTER
 
10.01.22
03:50
(11) Это верно!!! По этому Продолжить!
19 NIGHTHUNTER
 
10.01.22
03:51
(17) Да выше там запрос, и его выполнение. Вот, выборка - выполненный запрос и идет .
20 NIGHTHUNTER
 
10.01.22
03:55
(15) Да, около того. И что во втором, будут делаться движения, количество которых не вызывает нехватку.
И проблема в том, что раз, сработал отказ, то не нужно делать уже движения. Это оптимальное выполнение.
А лепить движения, когда они нужны неправильно же. Если их 900 ?
21 NIGHTHUNTER
 
10.01.22
03:57
(20) Правлю. -

А лепить движения, когда они нужны неправильно же.

=>

А лепить движения, когда они НЕ нужны неправильно же.
22 Ненавижу 1С
 
гуру
10.01.22
06:23
Во втором случае пропускаем создание движений только у проблемных движений. В первом у всех, после первого проблемного.
Кроме того отказ мог быть установлен и до цикла
23 Волшебник
 
модератор
10.01.22
07:18
Интересно, а в запросе, который возвращает "Выборка", есть "ДЛЯ ИЗМЕНЕНИЯ"?
24 Ryzeman
 
10.01.22
07:32
(2) Не думаю, слишком тонко и разнообразно, интеллектуальные затраты на придумывание такого какими-то немыслимыми были бы)
25 Ryzeman
 
10.01.22
07:39
(0) что это вообще? Обработка проведения какого-то документа? У тебя в случае отказа дальше движения отменяются или чересстрочно должны записываться?
26 Мимохожий Однако
 
10.01.22
07:42
(25) ОФФ: Если ответить на твой вопрос, то ветка будет слишком короткой )
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой