Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: сравнить много значений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
4andriy
1С 7.7 Предприятие
Если Знач1=Знач2 Тогда
Сообщить(Совпадение);    
КонецЕсли;

Если Знач2=Знач3 Тогда
Сообщить(Совпадение);    
КонецЕсли;

Если Знач3=Знач4 Тогда
Сообщить(Совпадение);    
КонецЕсли;

... и таких 20 значений


возможно есть фукнция сравнить все 20 значений и уменьшить код
sava1
напишите.
Vofka
4andriy, положить все в массив и сделать 2 цикла. Что-то вроде такого (псевдокод):
Для ъ=0 По ъ=КоличествоВМассиве Цикл
   Для ъъ = 0 По ъъ=КоличествоВМассиве Цикл
      Если ъ <> ъъ И Массив[ъ] == Массив[ъъ] Тогда
         Сообщить("Совпадение " + ъ + " и " + ъъ);
      КонецЕсли;
   КонецЦикла;
КонецЦикла;
Sharzem
4andriy @ Сегодня, 10:37 необходимо зарегистрироваться для просмотра ссылки ,
Ще можна так:
Функция ВернутьЗначенияДляСравнения()
    лпЧетные = 2;
    лпНечетные = 3;
    лпСписЗнач = СоздатьОбъект("СписокЗначений");
    Для лпНомСписка = 1 По 20 Цикл
        Если лпНомСписка % 2 = 0 Тогда
            лпСписЗнач.ДобавитьЗначение(лпЧетные);
        Иначе
            лпСписЗнач.ДобавитьЗначение(лпНечетные);
        КонецЕсли;
    КонецЦикла;
    Возврат лпСписЗнач;
КонецФункции

//======================================================================
Процедура СравнитьЗначения(прСписЗнач,прНомер)
    лпЗначениеКотороеНужноСравнить = прСписЗнач.ПолучитьЗначение(прНомер);
    лпРазмерСписка = прСписЗнач.РазмерСписка();
    Для лпНомСписка = 1 По лпРазмерСписка Цикл
        Если лпНомСписка = прНомер Тогда
            Продолжить;
        КонецЕсли;
        лпЗначение = прСписЗнач.ПолучитьЗначение(лпНомСписка);
        Если лпЗначениеКотороеНужноСравнить = лпЗначение Тогда
            Сообщить("Значение в списке № "+лпНомСписка+" = искомому значению № "+прНомер+" т.е. = "+лпЗначение);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры // СравнитьЗначения

//======================================================================
Процедура Сформировать()
    лпСписЗнач = ВернутьЗначенияДляСравнения();
    лпРазмерСписка = лпСписЗнач.РазмерСписка();
    Для лпНомСписка = 1 По лпРазмерСписка Цикл
        СравнитьЗначения(лпСписЗнач,лпНомСписка);
    КонецЦикла;
КонецПроцедуры // Сформировать
volodya1122
Вставлю и свои 5 копеек.
Я так проверяю в табличной части документа на дубли контрагентов. Легко можно переделать на проверку на дубли в таблице значений или списке значений. Тут отработает быстрее чем цикл в цикле
   сз=СоздатьОбъект("СписокЗначений");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
        зн=Контрагент.Код;
        поз=сз.НайтиЗначение(зн);
        Если поз<>0 Тогда
            СтараСтрічка="";
            тмп=сз.ПолучитьЗначение(поз,СтараСтрічка);
            сообщить("Однаковий Контрагент: "+Контрагент+" в рядках: "+СтараСтрічка+" і "+НомерСтроки,"!");
        КонецЕсли;
        сз.ДобавитьЗначение(зн,""+НомерСтроки);
    КонецЦикла;
Sharzem
Цитата(volodya1122 @ 10.06.20, 14:20) необходимо зарегистрироваться для просмотра ссылки
проверяю в табличной части документа на дубли контрагентов

А мені не подобається Ваш код...
Я б реалізував би так:
    лпПустоеЗначение = ПолучитьПустоеЗначение("Справочник.Контрагенты");
    
    лпТаблЧасть = СоздатьОбъект("ТаблицаЗначений");//Копія табличної частини для отримання номерів строк
    лпТаблЗнач = СоздатьОбъект("ТаблицаЗначений");//Місце пошуку дублів
    
    ВыгрузитьТабличнуюЧасть(лпТаблЧасть,"Контрагент");
    лпТаблЗнач.Загрузить(лпТаблЧасть);
    
    лпТаблЗнач.НоваяКолонка("Количество");//Для підрахунку кількості дублів
    лпТаблЗнач.Заполнить(1,,,"Количество");
    лпТаблЗнач.Свернуть("Контрагент","Количество");
    лпТаблЗнач.Сортировать("Количество");//Сортуємо
    
    лпКвоСтрок = лпТаблЗнач.КоличествоСтрок();
    Для лпСчетчик = 1 По лпКвоСтрок Цикл
        лпНомСтроки = (лпКвоСтрок+1)-лпСчетчик;//Йдемо знизу вверх
        лпКвоПовтор = лпТаблЗнач.ПолучитьЗначение(лпНомСтроки,"Количество");
        Если лпКвоПовтор = 1 Тогда// Продовжувати пошук не потрібно, вище дублів немає
            Прервать;
        КонецЕсли;
        лпКонтрагент = лпТаблЗнач.ПолучитьЗначение(лпНомСтроки,"Контрагент");
        Если ПустоеЗначение(лпКонтрагент) = 1 Тогда//Може бути і таке, це не основне завдання.
            Продолжить;
        КонецЕсли;
        лпИскомаяСтрока = "";
        лпТекст = "";
        Пока лпТаблЧасть.НайтиЗначение(лпКонтрагент,лпИскомаяСтрока,"Контрагент") = 1 Цикл
            Если ПустаяСтрока(лпТекст) = 1 Тогда
                лпТекст = " разів в стрічках № "+лпИскомаяСтрока;
            Иначе
                лпТекст = лпТекст+", "+лпИскомаяСтрока;
            КонецЕсли;
            лпТаблЧасть.УстановитьЗначение(лпИскомаяСтрока,"Контрагент",лпПустоеЗначение);//Затираємо знайденого
            лпИскомаяСтрока = "";
        КонецЦикла;
        Сообщить("Дублюється контрагент "+СокрЛП(Строка(лпКонтрагент))+" "+лпКвоПовтор+лпТекст,"!");
    КонецЦикла;
volodya1122
Sharzem @ Сегодня, 9:59 необходимо зарегистрироваться для просмотра ссылки ,
Спеціально для мене заморочились? Звичайно це набагато краще. (оптимізовувати код можна до бескінечності). але і буковок набагато більше писати потрібно було,
Sharzem
Цитата(volodya1122 @ 11.06.20, 11:13) необходимо зарегистрироваться для просмотра ссылки
Спеціально для мене заморочились?

Зайнятися немає чим. Радий, що оцінили.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.