Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> сравнить много значений          
4andriy Подменю пользователя
сообщение 10.06.20, 10:37
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 174
Спасибо сказали: 1 раз
Рейтинг: 1

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

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

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

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


возможно есть фукнция сравнить все 20 значений и уменьшить код

sava1 Подменю пользователя
сообщение 10.06.20, 12:07
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

напишите.

Vofka Подменю пользователя
сообщение 10.06.20, 12:10
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

4andriy, положить все в массив и сделать 2 цикла. Что-то вроде такого (псевдокод):
Для ъ=0 По ъ=КоличествоВМассиве Цикл
   Для ъъ = 0 По ъъ=КоличествоВМассиве Цикл
      Если ъ <> ъъ И Массив[ъ] == Массив[ъъ] Тогда
         Сообщить("Совпадение " + ъ + " и " + ъъ);
      КонецЕсли;
   КонецЦикла;
КонецЦикла;

Спасибо сказали: 4andriy,

Sharzem Подменю пользователя
сообщение 10.06.20, 12:42
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

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

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

//======================================================================
Процедура Сформировать()
    лпСписЗнач = ВернутьЗначенияДляСравнения();
    лпРазмерСписка = лпСписЗнач.РазмерСписка();
    Для лпНомСписка = 1 По лпРазмерСписка Цикл
        СравнитьЗначения(лпСписЗнач,лпНомСписка);
    КонецЦикла;
КонецПроцедуры // Сформировать


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: 4andriy,

volodya1122 Подменю пользователя
сообщение 10.06.20, 14:20
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

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

Спасибо сказали: 4andriy,

Sharzem Подменю пользователя
сообщение 11.06.20, 8:59
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(volodya1122 @ 10.06.20, 14:20) *
проверяю в табличной части документа на дубли контрагентов

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


Сообщение отредактировал Sharzem - 11.06.20, 9:18


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: volodya1122,

volodya1122 Подменю пользователя
сообщение 11.06.20, 11:13
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

Sharzem @ Сегодня, 9:59 * ,
Спеціально для мене заморочились? Звичайно це набагато краще. (оптимізовувати код можна до бескінечності). але і буковок набагато більше писати потрібно було,

Спасибо сказали: Sharzem,

Sharzem Подменю пользователя
сообщение 11.06.20, 13:21
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(volodya1122 @ 11.06.20, 11:13) *
Спеціально для мене заморочились?

Зайнятися немає чим. Радий, що оцінили.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 12:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!