Имя: Пароль:
1C
 
Работа с Соответствием
0 kathleen
 
07.08.15
11:29
Не могу понять от чего зависит порядок элементов в соответствии.
Для ИндексМассива = 0 По ПодСтроки.Количество() - 1 Цикл
        ВидВремениИКоличество = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПодСтроки[ИндексМассива], РазделительВГруппе);
        Если ВидВремениИКоличество.Количество() = 2 Тогда
            Код = мБуквенныеОбозначения[ВидВремениИКоличество[0]];
            Количество = Число(ВидВремениИКоличество[1]);
            Результат.Вставить(Код, Количество);
        КонецЕсли;
        
    КонецЦикла;
В табеле если стоит Я8С8, в соответствии первый элемент явка, второй сверхурочные. Если же я ставлю Я8РВ8, тогда почему-то первый элемент Праздники. В отладчике ничего не нашла. Отчего это может зависеть?
1 zak555
 
07.08.15
11:29
нет там понятия порядка
2 Живой Ископаемый
 
07.08.15
11:30
это не упорядоченная коллекция.
3 kathleen
 
07.08.15
11:30
тогда чем отличаются эти два случая?
4 kathleen
 
07.08.15
11:33
В  первом 2-ой элемент запихивается во вторую позицию, во втором - в первую. При обходе для каждого неправильно заполняется табличная часть
5 ДенисЧ
 
07.08.15
11:33
(4) Пихай в упорядоченную коллекцию
6 kathleen
 
07.08.15
11:35
(5)Блин, функция из типовой конфы, ну придется переписывать
7 zak555
 
07.08.15
11:49
(6) расскажи где применяешь
8 shpioleg
 
07.08.15
11:53
(0) Я один не понял, что за проблема с Соответствием?
Задаешь в нем ключ и значение которое хочешь по нему получить. И все. Зачем там порядок?
И что значит, "в отладчике ничего не нашла"?
мБуквенныеОбозначения что показывает?
9 sash-ml
 
07.08.15
11:57
(0) соответствие предназначено для быстрого нахождения значения по ключу наподобие (HashMap) поэтому сортировка там оптимизирована по ХэшКоду, и порядок никогда не соблюдается
10 kathleen
 
07.08.15
12:02
Я все понимаю о чем вы говорите, для чего служит соответствие. Но в этой фунции почему-то вместо какого-нибудь списка или таблицы значений используется именно соответствие. Разбивается текст ячей на подстроки, потом они запихиваются в соответствие, а потом обход их при помощи "для каждого". Т. о. в строке "Я8РВ8" первое значение явка, а в документе табель реквизит ПервыйВидВремени3 это праздник. При выводе на печать из-за этого ошибка
11 kathleen
 
07.08.15
12:03
Конфа белорусских разработчиков
12 sash-ml
 
07.08.15
12:09
перепиши при выводе на печать по коду времени.
13 shpioleg
 
07.08.15
12:28
(10) Судя по коду, у тебя из соответствия мБуквенныеОбозначения берется буквенный код по Виду времени.
И запихивается, возможно, в структуру Результат.
С чего ты взяла, что "потом они запихиваются в соответствие"
14 Asmody
 
07.08.15
12:39
Соответствие индексируется по ключу для поиска.
Только я в (0) не вижу Соответствия.
15 Mraque
 
07.08.15
12:57
(0) Подобная ошибка была в типовой базе 1С Документооборот. Пришлось переписать на СписокЗначений() пока разработчики сами в одном из последующих обновлений не изменили эту часть.
16 kathleen
 
07.08.15
13:11
(13)(14)вот полностью функция
Функция ПолучитьВидВремениИКоличествоЧасов(Текст , Результат) Экспорт
    Результат = Новый Соответствие;
    Если ПустаяСтрока(Текст) Тогда
        Возврат Истина;
    КонецЕсли;
    
    РазделительВГруппе = " ";
    РазделительГрупп = Символы.ПС;
    
    ПодСтроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, РазделительГрупп);
    Для ИндексМассива = 0 По ПодСтроки.Количество() - 1 Цикл
        ВидВремениИКоличество = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ПодСтроки[ИндексМассива], РазделительВГруппе);
        Если ВидВремениИКоличество.Количество() = 2 Тогда
            Код = мБуквенныеОбозначения[ВидВремениИКоличество[0]];
            Количество = Число(ВидВремениИКоличество[1]);
            Результат.Вставить(Код, Количество);
        КонецЕсли;
        
    КонецЦикла;
КонецФункции // ПолучитьВидВремениИКоличествоЧасов()
17 Живой Ископаемый
 
07.08.15
13:33
и все равно не видно где инициализируется мБуквенныеОбозначения
18 kathleen
 
07.08.15
13:41
(17) да причем тут мБуквенныеОбозначения, в этой функции формируется результат, потом в теле другой фунции этот результат читается в табличную часть документа. Дело именно в том в каком порядке формируются записи в результат
19 Живой Ископаемый
 
07.08.15
13:46
Дай значение переменной ПодСтроки  для теста
20 kathleen
 
07.08.15
15:38
(19)Это массисв из 2-х элементов. В одном случае "Я8" и "РВ8", в другом "Я8" и "С8" . В первом случае в Результат записывается в обратном порядке, во втором в том же порядке
21 kathleen
 
07.08.15
16:12
переделала в таблицузначений - все ок
22 НеБорис Нуралиев
 
07.08.15
16:16
(16) Странная функция... По всем признакам - это процедура.
23 Живой Ископаемый
 
07.08.15
17:06
2(20) м... Если у тебя "В одном случае "Я8" и "РВ8", в другом "Я8" и "С8"", то у тебя в результате будет м...

короче будет только последняя пара:

"Я8" "С8"


http://www.screencast.com/users/october.hammer/folders/Default/media/c4840d6f-49f3-4994-9d45-b91d6a486045


или я чего-то не понял