Имя: Пароль:
1C
1C 7.7
v7: в копилку приколов
🠗 (Волшебник 23.03.2015 12:39)
,
0 e2e4
 
23.03.15
11:26
вопрос на засыпку: что получим
сообщить(типзначения(группарасчетов.детскиепособия)); //или какая-то другая группа расчетов
???
(ответ - 100)
...сваял на скорую руку обработочку для сравнения состава групп расчетов - надо иногда...и долблюсь, пытаясь понять, почему на
Колво1 = группа1.Количество();
- получаю ругань "...Значение не представляет агрегатный объект (Количество)". Однако отладчик при этом упорно показывает, что группа1 - это именно группа расчетов, а не текст.
Если же тупо В КОДЕ написать перед этим:
группа1 = группарасчетов.детскиепособия;
- то все работает как надо, группа1 перебирается...
1 e2e4
 
23.03.15
11:33
(0) ...в смысле, прикол-то в том, что ругань получаю выбрав группу1 из списка на форме; а если прописываю ее непосредственно в коде - все работает. При этом, отладчик никаких различий для переменной группа1 в этих двух случаях не показывает, и типзначения и так и этак - 100....
2 Aloex
 
23.03.15
11:34
Не смешно, закрывайте.
3 e2e4
 
23.03.15
11:38
(2) ладно, это надо ощутить, чтобы уржаться
...проще раз в N месяцев вручную в код повписывать сравниваемые группы, чем очередной прыщик на теле трупа (клюшек) изучать...
4 silent person
 
23.03.15
11:44
а "группа 1" это что ?
5 Herby
 
23.03.15
11:45
(3) > ладно, это надо ощутить, чтобы уржаться

еще и грибочков не мешало бы...

может группа1 на форме это реквизит неопределенного вида? и тогда это у вас в голове прыщик, а не в 7.7
6 Spyke
 
23.03.15
11:47
(3) Клюшки - наше все
7 aka AMIGO
 
23.03.15
11:47
(5) элемент списка на форме :)
8 aka AMIGO
 
23.03.15
11:47
+7 что туда запишешь - то и получишь :)
9 e2e4
 
23.03.15
11:48
(5)во, теперь по делу; итак: на форме два списка значений, которые при старте заполняются так:
Для сч = 1 По Метаданные.ГруппаРасчетов() Цикл
    ГрРасч = Метаданные.ГруппаРасчетов(сч);
    ГрРасч1.ДобавитьЗначение(ГрРасч);
    ГрРасч2.ДобавитьЗначение(ГрРасч);
КонецЦикла;      

При выборе значения в списке, срабатывает такое:
    если ном = 1 тогда
        группа1 = ГрРасч1.ПолучитьЗначение(ГрРасч1.ТекущаяСтрока());        
        //группа1 = Метаданные.ГруппаРасчетов(ГрРасч1.ТекущаяСтрока());
    иначе
        группа2 = ГрРасч2.ПолучитьЗначение(ГрРасч2.ТекущаяСтрока());        
        //группа2 = Метаданные.ГруппаРасчетов(ГрРасч2.ТекущаяСтрока());
    конецесли;
(в комментариях - попытался другим способом - получил то же самое)
10 e2e4
 
23.03.15
11:49
(9) (ном - это в каком списке щелкнули, первом или втором)
11 e2e4
 
23.03.15
11:52
(9) типа вот так: https://yadi.sk/i/G7VXFZKjfT448
12 dmpl
 
23.03.15
11:53
(0) Вот такая вот она многоликая нетипизация в 7.7.
13 e2e4
 
23.03.15
11:53
(11) а далее жму Сформировать - и облом: https://yadi.sk/i/2IzRxxGWfT48N
14 e2e4
 
23.03.15
11:55
(13) несмотря на то, что в этот момент: https://yadi.sk/i/_Y1RvnYcfT4Cv
15 e2e4
 
23.03.15
12:01
(12) ага
то ли в принципе не существует типа "ГруппаРасчетов"? Но как тогда все работает, когда непосредственно в КОДЕ прописываю конкретную группу расчетов???

Ради интереса помучаюсь счас, попробую варианты не через списки значений на форме, а другими способами предоставить пользователю выбор групп...
16 dmpl
 
23.03.15
12:02
(9) А с чего ты взял, что Метаданные.ГруппаРасчетов(сч) возвращает менеджер объекта (у которого есть метод Количество()), а не объект метаданных?
17 dmpl
 
23.03.15
12:23
В общем, попробуй ГрРасч = СоздатьОбъект(ГрРасч.ПолныйИдентификатор())
18 e2e4
 
23.03.15
12:29
(17) гм...наверно, ты имеешь в виду что то вроде МояНоваяПеременная = СоздатьОбъект(ГрРасч.ПолныйИдентификатор()), Где ГрРасч =  Метаданные.ГруппаРасчетов(сч)
???
не катит: "Неудачная попытка создания объекта"
...насчет 16 не понял, честно. На всяк случай - это клюшки.
19 silent person
 
23.03.15
12:34
не плоди переменных. работай прямо со списком, у меня все работет

Процедура ПриОткрытии()
    СписокГрупп.ДобавитьЗначение(ГруппаРасчетов.БазаРасчетаПремий,ГруппаРасчетов.БазаРасчетаПремий);
    СписокГрупп.ДобавитьЗначение(ГруппаРасчетов.БольничныеЛисты,ГруппаРасчетов.БольничныеЛисты);
КонецПроцедуры // ПриОткрытии

//======================================================================
Процедура КоличествоВР()
    Сообщить(СписокГрупп.ПолучитьЗначение(СписокГрупп.ТекущаяСтрока()).Количество());    
КонецПроцедуры // КоличествоВР
20 dmpl
 
23.03.15
12:37
(18) 1. Другими словами, идентификатор получается, но такой объект создать невозможно. В таком случае смотри документацию по группам расчета. Со справочниками, например, это работает, а платформы с компонентой расчета у меня под рукой нет, да и книжек тоже.
2. Работающий метод ПолныйИдентификатор() указывает на то, что возвращается не менеджер объекта (в терминах 8-ки что-то типа ГруппаРасчетаМенеджер), а именно объект метаданных (т.к. только у объекта этого типа есть метод ПолныйИдентификатор()) - в терминах 8-ки что-то типа ОбъектМетаданных:ГруппаРасчета.

В общем, типы разные, поэтому и ошибка.
21 dmpl
 
23.03.15
12:38
(19) Дык лень, наверное, все группы при открытии перечислять. Да и желание универсальности, наверное, присутствует.
22 e2e4
 
23.03.15
12:54
(20) хм: https://yadi.sk/i/ORgFW8fAfT8j5
(19)(21) вово
23 e2e4
 
23.03.15
13:10
(22) ветку можно переименовать в "Как программно перебрать все группы расчетов?"...
...интересно, как?:)
24 dmpl
 
23.03.15
13:26
(23) А тебе что надо? Небольшое яндексенье наводит на мысль, что работает такая конструкция:


Метаданные.ГруппаРасчетов(сч).ВидРасчета.Получить(ном)


Так что группы перебираются через тип Метаданные, а из метаданных вида расчета уже и объект создать можно при необходимости...
25 e2e4
 
23.03.15
13:49
(24) не "Получить(ном)", а ПолучитьРасчет(сч). Мне нужно этим штатным методом перебрать все ВР, входящую в указанную пользователем группу. Т.е. типа так:
Колво1 = Метаданные.ГруппаРасчетов(ном1).Количество();
    Для сч1 = 1 По Колво1 Цикл
        ВР1 = Метаданные.ГруппаРасчетов(ном1).ПолучитьРасчет(сч1);
...
но это не работает точно так же, как и исходный вариант.
26 dmpl
 
23.03.15
13:58
(25) Именно Получить() - не стоит забывать, что и ВидРасчета - это объект метаданных. И вернет он тоже объект метаданных. Но вот на основании этого объекта можно через СоздатьОбъект получить уже привычный вид расчета. Впрочем, возможно что объект получать и не надо...
27 e2e4
 
23.03.15
14:25
(26) суть задачи - перебрать все виды расчета, входящие в группу.
Чем в (24) ограничить "ном", чтобы не вылететь с ошибкой, если количество вр в группе неизвестно?
...Можно конечно зайти с тыла - и, перебирая ВСЕ виды расчета, существующие в конфе, проверять их на вхождение в группу через ВходитВГруппу(). Но хотелось пойти прямым путем, используя штатные, предназначенные вроде как именно для этой задачи, методы Количество() и ПолучитьРасчет().
28 dmpl
 
23.03.15
14:37
(27) У коллекции ссылок метаданных кроме метода Получить() есть еще и метод Количество().
29 e2e4
 
23.03.15
14:59
(28) работает:)
раньше я не работал практически с объектом Метаданные - век живи, век учись! спасибо
...но, осталась все же нерешенной задача - сохранить в некую переменную группа1 выбранное пользователем значение, так, чтобы результат был аналогичен
группа1 = ГруппаРасчетов.<ИдентификаторВыбраннойГруппы>
и чтобы можно было далее использовать штатные Количество() и ПолучитьРасчет().
Но это так...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс