Имя: Пароль:
1C
1С v8
Обход элементов массива
0 breezee
 
03.12.15
12:00
У меня есть строка вида "КО_1,2;11,22+КО_3,3;11,22+КО_1,2;4,4+КО_5,5;55,55"
Эту строку я разбиваю в массив в котором содержаться стрктура. В этой струткуре содержится счет  МассивКООб[Тут мои счета]. Т.е. МассивКООб[0]=КО_1,2;11,22 У этого элемента массива Счета содержаться в значение структуры "СЧЕТ" Т.е.  МассивКООб[0].СЧЕТ = 1,2;11,22 А в этом счете содержаться еще 2 массива. В одном счета слева МассивКООб[0].СЧЕТ[0] = 1,2 и счета справа МассивКООб[0].СЧЕТ[1] = 11,22
И в этотом массиве еще 1 массив. Т.е. чтобы получить "1" из счета "КО_1,2;11,22" Мне нужно обратиться К МассивКООб[0].СЧЕТ[0][0]=1.
Из этой строки мне нужно найти все элементы самого верхнего массива МассивКООб[0] В котором одинаковы все элементы МассивКООб[к].СЧЕТ[0] или МассивКООб[кк].СЧЕТ[1].(к и ж - от 0 до конца количтва элементов главного массива МассивКООб[])
Т.е. в результате мне должно сказать что по кредиту у меня одинаковые счета
Одинаковые по кредиту КО_1,2;11,22+КО_1,2;4,4
Одинаковые по дебету КО_1,2;11,22+КО_3,3;11,22
У меня же ничего не выбирается. Я совсем запутался и не могу даже в отладчике все это дело наладить.
Я сделал обход, на мой взгляд рабочий. Я не понимаю почему он не работает. Может подскажите?
Вот код где я обхожу

Для к = 0 По ОбщееКоличествоКОСчетов цикл //Обход всех КО
        ОписаниеВнешний = МассивКООб[к].ОПИСАНИЕ; //КО с Которым сравниваю
         //КРЕДИТ////////////////////////////////////////////////////////////////////////////////////////////КРЕДИТ/
        Для ж = 0 По МассивКООб[к].СЧЕТ[0].Количество()-1 цикл //По счетам кредита верхнего КО
            СчетКредитаВнешний = МассивКООб[к].СЧЕТ[0][ж]; //Получаю счет кредита верхнего КО
            //Внутренний цикл по кредиту                                                                  
            Для кк = 0 По ОбщееКоличествоКОСчетов цикл   //Обход всех КО для еще раз для сравнения
                    ПолноеСовпадениеКредит = 0;
                Если МассивКООб[к].СЧЕТ[0].Количество()= МассивКООб[кк].СЧЕТ[0].Количество() и к<>кк тогда //Если не разное количество счетов или тот же самый счет
                    Для жк = 0 По МассивКООб[кк].СЧЕТ[0].Количество()-1 цикл //По счетам кредита нижнего КО
                               
                            СчетКредитаВнутренний = МассивКООб[кк].СЧЕТ[0][жк]; //Получаю счет кредита внутреннего КО
                            Если СчетКредитаВнешний = СчетКредитаВнутренний тогда //Если счета не равны
                                ПолноеСовпадениеКредит = ПолноеСовпадениеКредит + 1;  //Если совпало хоть с одни
                            КонецЕсли;
                    КонецЦикла;    
                КонецЕсли;
                Если ПолноеСовпадениеКредит = МассивКООб[к].СЧЕТ[0].Количество() Тогда
                    ОписаниеВнутреннийКТ = МассивКООб[кк].ОПИСАНИЕ;
                    Сообщить("1В счете "+ОписаниеВнешний+" и счете "+ ОписаниеВнутреннийКТ+" Совпало" + ПолноеСовпадениеКредит);
                КонецЕсли;
            КонецЦикла;    
            //Внутренний цикл по кредиту
        КонецЦикла;
        //DEBET////////////////////////////////////////////////////////////////////////////////////////////DEBET/
            Для ж1 = 0 По МассивКООб[к].СЧЕТ[1].Количество()-1 цикл //По счетам кредита верхнего ДО
            СчетКредитаВнешний = МассивКООб[к].СЧЕТ[1][ж1]; //Получаю счет кредита верхнего ДО
            //Внутренний цикл по кредиту
            Для кк1 = 0 По ОбщееКоличествоКОСчетов цикл   //Обход всех КО для еще раз для сравнения
                ПолноеСовпадениеКредит = 0;
                Если МассивКООб[к].СЧЕТ[1].Количество()= МассивКООб[кк1].СЧЕТ[1].Количество() и к<>кк1 тогда //Если не разное количество счетов или тот же самый счет
                    Для жк1 = 0 По МассивКООб[кк1].СЧЕТ[1].Количество()-1 цикл //По счетам кредита нижнего ДО
                               
                            СчетКредитаВнутренний = МассивКООб[кк1].СЧЕТ[1][жк1]; //Получаю счет кредита внутреннего ДО
                            Если СчетКредитаВнешний = СчетКредитаВнутренний тогда //Если счета не равны
                                ПолноеСовпадениеКредит = ПолноеСовпадениеКредит + 1;  //Если совпало хоть с одни
                            КонецЕсли;
                    КонецЦикла;    
                КонецЕсли;
                Если ПолноеСовпадениеКредит = МассивКООб[к].СЧЕТ[1].Количество() Тогда
                    ОписаниеВнутреннийКТ = МассивКООб[кк1].ОПИСАНИЕ;
                    Сообщить("2В счете "+ОписаниеВнешний+" и счете "+ ОписаниеВнутреннийКТ+" Совпало " + ПолноеСовпадениеКредит);
                КонецЕсли;
            КонецЦикла;    
            //Внутренний цикл по кредиту
        КонецЦикла;
1 Горогуля
 
03.12.15
12:11
этот глист страдал глистами, что мучались глистами сами
2 hhhh
 
03.12.15
12:16
вроде правильно работает. Ведь нет полностью совпадающих счетов.
3 hhhh
 
03.12.15
12:18
попробуй

                ПолноеСовпадениеКредит = 1;

почему 0 у тебя?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.