Имя: Пароль:
1C
1С v8
Окно предупреждения в 1С.
0 Godunov
 
05.07.16
16:36
Ребят, нужна ваша помощь в 1С 8.2, сам ещё зелёный.

Есть такой код:

Перем ТаблЗнач;

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

http://savepic.ru/10412107.png

Это предупреждение ("Данные по доставке не совпадают в заказах.");
Постоянно выводится, независимо при проверке данных доставки, что указано в коде выше.

Такой код не приемлем. Потому что окно предупреждения выскакивает тогда, когда обрабатывается строка с сообщением, т.е. если 5 строк сообщений, то будет 5 окон предупреждения, а мне надо, чтобы предупреждение выходило только один раз.

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


Как исправить, подскажете?
1 ДемонМаксвелла
 
05.07.16
16:40
до цикла присвой некое булево в ложь, каждый раз при ошибке присваивай булево в истину. После цикла проверь значение и выведи сообщение.
2 ДемонМаксвелла
 
05.07.16
16:43
ну и ошибки при обходе цикла можно в коллекции копить
3 AroxNsk
 
05.07.16
16:43
перед напиши

СообщятьОбНеСовпадаении = Ложь;

в коде замени
Предупреждение ("Данные по доставке не совпадают в заказах.");
на СообщятьОбНеСовпадаении = Истина;

в конце напиши
Если СообщятьОбНеСовпадаении  Тогда
Предупреждение ("Данные по доставке не совпадают в заказах.");
КонецЕсли;
4 Godunov
 
05.07.16
16:43
А примерный код есть с примером, а то шибко зелёный я в 1С...
5 Godunov
 
05.07.16
16:43
(2) (3) Пасиб, попробую.
6 youalex
 
05.07.16
16:44
обычно пишу сообщение в переменную (СтрокаОшибки)
После цикла -
Если Не ПустаяСтрока(СтрокаОшибки) Тогда
Предупреждение (СтрокаОшибки) //условно - предупреждение
КонецЕсли;

зы. От кода типа "Стр.ЗаказПокупателя.АдресДоставки" - следует избавляться
7 ovrfox
 
05.07.16
16:50
Код неэффективен
Лучше так

ТаблЗнач = ЭтаФорма.Товары.Выгрузить();  
    ТаблЗнач.Свернуть("ЗаказПокупателя");
СтрЭталон = Неопределено;
фДанныеНеСовпадают = Ложь;
        Для каждого Стр из ТаблЗнач Цикл  

        Если СтрЭталон = Неопределено Тогда
            СтрЭталон = Стр.ЗаказПокупателя;
        ИначеЕсли СтрЭталон.АдресДоставки <> Стр.ЗаказПокупателя.АдресДоставки Тогда
            Сообщить ("Адрес доставки не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
             фДанныеНеСовпадают = Истина;
        КонецЕсли;
        
        Если СтрЭталон.ВариантДоставки <> Стр.ЗаказПокупателя.ВариантДоставки Тогда
                Сообщить ("Вариант доставки не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
                фДанныеНеСовпадают = Истина;
        КонецЕсли;
            
        Если СтрЭталон.ОплатаДоставкиПокупателем <> Стр.ЗаказПокупателя.ОплатаДоставкиПокупателем Тогда
                Сообщить ("Оплата доставки покупателем не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
                фДанныеНеСовпадают = Истина;
        КонецЕсли;
                
    КонецЦикла;
Если фДанныеНеСовпадают Тогда
            Предупреждение ("Данные по доставке не совпадают в заказах.");
КонецЕсли;
8 Godunov
 
05.07.16
16:50
(3) Прописал так, но всё равно предупреждение выводится, если не выводит сообщения. А надо, чтобы, если нет сообщений, то нет и предупреждения.

    ТаблЗнач = ЭтаФорма.Товары.Выгрузить();  
    ТаблЗнач.Свернуть("ЗаказПокупателя");
    СообщятьОбНеСовпадаении = Ложь;
        Для каждого Стр из ТаблЗнач Цикл  
        Если ТекАдрес = Неопределено Тогда
            ТекАдрес = Стр.ЗаказПокупателя.АдресДоставки;
        ИначеЕсли ТекАдрес <> Стр.ЗаказПокупателя.АдресДоставки Тогда
            Сообщить ("Адрес доставки не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
        КонецЕсли;
        
        Если ВариантДоставки = Неопределено Тогда
                 ВариантДоставки = Стр.ЗаказПокупателя.ВариантДоставки
        ИначеЕсли ВариантДоставки <> Стр.ЗаказПокупателя.ВариантДоставки Тогда
                Сообщить ("Вариант доставки не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
        КонецЕсли;
            
        Если ОплатаДоставкиПокупателем = Неопределено Тогда
                 ОплатаДоставкиПокупателем = Стр.ЗаказПокупателя.ОплатаДоставкиПокупателем
        ИначеЕсли ОплатаДоставкиПокупателем <> Стр.ЗаказПокупателя.ОплатаДоставкиПокупателем Тогда
                Сообщить ("Оплата доставки покупателем не совпадает в заказах." + Стр.ЗаказПокупателя.Номер);
        КонецЕсли;
                
    КонецЦикла;
        
    СообщятьОбНеСовпадаении = Истина;
    Если СообщятьОбНеСовпадаении  Тогда
    Предупреждение ("Данные по доставке не совпадают в заказах.");
    
КонецЕсли;
9 Godunov
 
05.07.16
16:53
(7) Волшебник, благодарю)
10 Godunov
 
05.07.16
16:56
Всем пасиба за оперативную помощь, + к карме каждому из вас, всё работает как надо. А я буду изучать код для лучшего понимания...
2 + 2 = 3.9999999999999999999999999999999...