Имя: Пароль:
1C
1С v8
Получение значения перечисления при Com-соединении
0 web_profiler
 
12.05.13
17:35
Осуществляю перенос справочников из 7.7 в 8. В 7.7 есть реквизит-перечисление, так вот его немогу никак  получить в восьмерке. ПолучитьАтрибутпробывал, также пробывал через Идентификатор() - нет результата.
Подскажите, пожалуйста, где ошибся.
1 Fragster
 
гуру
12.05.13
17:36
[]
2 web_profiler
 
12.05.13
17:37
чего?
3 marvak
 
12.05.13
17:38
(0)
По индексу сравнивай и ищи.
Старая тема, поищи в инете
4 web_profiler
 
12.05.13
17:50
да в нете лазил никак немогу достать
5 Cyberhawk
 
12.05.13
17:52
(0) как остальные реквизиты переносишь, так и перечисление переноси
6 web_profiler
 
12.05.13
17:57
неа перечисление как-то странно переносится. Точнее у меня не переносится
7 marvak
 
12.05.13
17:57
8 СтрашнаяПравда
 
12.05.13
17:58
КомОбъект.Перечисление.ТипМороженного.Пломбир
9 web_profiler
 
12.05.13
18:09
Ничего не выходит - запутался совсем. Ткните носом

           СпрБлюда7 = app.CreateObject("Справочник.Блюда");
           СпрБлюда7.ВыбратьЭлементы();
           Пока СпрБлюда7.ПолучитьЭлемент() = 1 Цикл

   СписокТМЦ = app.CreateObject("СписокЗначений"); // список ТМЦ для запроса
   СписокСкладов = app.CreateObject("СписокЗначений");

   //Калькуляция.УдалитьСТроки();
   //Калькуляция = app.CreateObject("ТаблицаЗначений");
   Калькуляция = Новый ТаблицаЗначений;
   Калькуляция.Колонки.Добавить("Владелец",,"Владелец");
   Калькуляция.Колонки.Добавить("КодВладельца",,"КодВладельца");
   Калькуляция.Колонки.Добавить("Продукт",,"Продукт");
   Калькуляция.Колонки.Добавить("ВидПродукта",,"ВидПродукта");
   Калькуляция.Колонки.Добавить("КодПродукта",,"КодПродукта");
   Калькуляция.Колонки.Добавить("Брутто",,"Брутто");
   Калькуляция.Колонки.Добавить("Нетто",,"Нетто");
   _состав = app.CreateObject("Справочник.Калькуляции");
   _состав.ИспользоватьДату(ТекущаяДата());
   _состав.ИспользоватьВладельца(СпрБлюда7.ТекущийЭлемент());
   _состав.ВыбратьЭлементы();
   Пока _состав.ПолучитьЭлемент() = 1 Цикл
       Если (_состав.ПометкаУдаления() = 0) и (ЗначениеЗаполнено(_состав.продукт.наименование)) Тогда
           СтрКалькуляция = Калькуляция.Добавить();
           СтрКалькуляция.Владелец = СпрБлюда7.Наименование;
           СтрКалькуляция.КодВладельца = СпрБлюда7.Код;
           СтрКалькуляция.Продукт = _состав.Продукт.Наименование;
           СтрКалькуляция.КодПродукта = _состав.Продукт.Код;
           СтрКалькуляция.ВидПродукта = app.Перечисление.СтатьяКалькуляции(_состав);
           СтрКалькуляция.Брутто = _состав.Количество;
           СтрКалькуляция.Нетто = _состав.Нетто;
       КонецЕсли;
   КонецЦикла;
10 web_profiler
 
12.05.13
18:09
ВидПродукта получить не могу!!!
11 СтрашнаяПравда
 
12.05.13
18:33
ну например

...
СтрКалькуляция.КодПродукта = _состав.Продукт.Код;
//вычисляется индекс текущего значения перечисления
СтрКалькуляция.ВидПродукта = Перечисления.СтатьяКалькуляцииИлиКакОноВВосьмерке[ИндексИз77];
СтрКалькуляция.Брутто = _состав.Количество;
...

естественно, что перечисления в 7 и 8 должны совпадать по индексу
12 web_profiler
 
12.05.13
19:21
Поднимаю тему заново - ничего не выходит. Мне хотя бы получить строку от перечисления получить.
13 Mitriy
 
12.05.13
19:24
XMLСтрока(ПеречислениСсылка)... это в восьмерке...
14 web_profiler
 
12.05.13
19:25
(13) ссылки нет - Ком соединение
15 Худой
 
12.05.13
19:30
А через конвертацию данных не судьба?
16 web_profiler
 
12.05.13
19:31
какая конвертация???? Буха переписана под общепит!!!
17 web_profiler
 
12.05.13
19:32
правила писать 3 дня буду!!!
18 СтрашнаяПравда
 
12.05.13
19:32
тююю

Идентификатор() возвращает строку - идентификатор значения перечисления
ПорядковыйНомер() возвращает порядковый номер значения в перечислении
19 Mitriy
 
12.05.13
19:34
(17) покажи, как у тебя Идентификатор() не работает... я в семерке ни бум-бум, но, авось, другие подскажут...
20 web_profiler
 
12.05.13
19:34
(18) ты чего думаешь я "дурачек" полный, не знаю этих методов? Пробывал кучу раз - ничего.
21 Худой
 
12.05.13
19:35
(17) Не гони! Правила, особенно по справочникам, генерятся сами. Начни, хотя бы с одного. Минут 5 уйдет.
22 СтрашнаяПравда
 
12.05.13
19:36
"Пробывал кучу раз - ничего."

код в студию
23 web_profiler
 
12.05.13
19:36
кидаю текст

   app = Новый COMОбъект("V77.Application");
   иниц = "";
   отк = app.Initialize(app.RMTrade, иниц, "");
           СпрБлюда7 = app.CreateObject("Справочник.Блюда");
           СпрБлюда7.ВыбратьЭлементы();
           Пока СпрБлюда7.ПолучитьЭлемент() = 1 Цикл

   СписокТМЦ = app.CreateObject("СписокЗначений"); // список ТМЦ для запроса
   СписокСкладов = app.CreateObject("СписокЗначений");

   //Калькуляция.УдалитьСТроки();
   //Калькуляция = app.CreateObject("ТаблицаЗначений");
   Калькуляция = Новый ТаблицаЗначений;
   Калькуляция.Колонки.Добавить("Владелец",,"Владелец");
   Калькуляция.Колонки.Добавить("КодВладельца",,"КодВладельца");
   Калькуляция.Колонки.Добавить("Продукт",,"Продукт");
   Калькуляция.Колонки.Добавить("ВидПродукта",,"ВидПродукта");
   Калькуляция.Колонки.Добавить("КодПродукта",,"КодПродукта");
   Калькуляция.Колонки.Добавить("Брутто",,"Брутто");
   Калькуляция.Колонки.Добавить("Нетто",,"Нетто");
   _состав = app.CreateObject("Справочник.Калькуляции");
   _состав.ИспользоватьДату(ТекущаяДата());
   _состав.ИспользоватьВладельца(СпрБлюда7.ТекущийЭлемент());
   _состав.ВыбратьЭлементы();
   Пока _состав.ПолучитьЭлемент() = 1 Цикл
       Если (_состав.ПометкаУдаления() = 0) и (ЗначениеЗаполнено(_состав.продукт.наименование)) Тогда
           СтрКалькуляция = Калькуляция.Добавить();
           СтрКалькуляция.Владелец = СпрБлюда7.Наименование;
           СтрКалькуляция.КодВладельца = СпрБлюда7.Код;
           СтрКалькуляция.Продукт = _состав.Продукт.Наименование;
           СтрКалькуляция.КодПродукта = _состав.Продукт.Код;
Ном = app.Перечисление.СтатьяКалькуляции.Индекс(_состав.Вид);        
//Имя = COM_ОбъектБД.Метаданные().Перечисления.ВидПеречисления.EnumValues.Get(Ном).Name;            
           СтрКалькуляция.Брутто = _состав.Количество;
           СтрКалькуляция.Нетто = _состав.Нетто;
       КонецЕсли;
   КонецЦикла;
24 СтрашнаяПравда
 
12.05.13
19:38
_состав.Вид.ПорядковыйНомер()  не работает?
25 web_profiler
 
12.05.13
19:41
(24) Ошибка при получении значения атрибута контекста (Вид)
26 web_profiler
 
12.05.13
19:44
помогите, намудохался уже с этой ерундой!!!!
27 Mitriy
 
12.05.13
19:59
28 Mitriy
 
12.05.13
20:01
и вообще, поищи в гугле: 77 значение перечисления строка
там куча всяких примеров...
29 wise
 
12.05.13
20:10
(25)глянь в отладчике ТипЗнч(_состав.Вид)
30 web_profiler
 
12.05.13
20:13
(29) Ошибка при получении значения атрибута контекста (Вид)
31 web_profiler
 
12.05.13
20:15
Б... Я счас повешусь с этим 1С. "Бубен" у кого-то есть?
32 wise
 
12.05.13
20:15
(30) ТОГДА ТипЗнч(_состав)
33 web_profiler
 
12.05.13
20:16
Мож кто может подключится по амми-админом и посмотреть что к чему?
34 СтрашнаяПравда
 
12.05.13
20:16
Давай по порядку

Сообщить(_состав.Вид);
сообщает COMОбъект ?
35 web_profiler
 
12.05.13
20:16
(32) COM Объект
36 web_profiler
 
12.05.13
20:17
(34) - см. (30)
37 СтрашнаяПравда
 
12.05.13
20:17
отлично

Сообщить(_состав.Вид.ПорядковыйНомер());
ругается?
38 СтрашнаяПравда
 
12.05.13
20:18
так сообщает или не сообщает? ))
39 web_profiler
 
12.05.13
20:20
(37), (38) в отладчике пишет: Ошибка при получении значения атрибута контекста (Вид)
40 СтрашнаяПравда
 
12.05.13
20:21
помощь еще нужна? )
41 СтрашнаяПравда
 
12.05.13
20:21
просто если

Сообщить(_состав.Вид);

выдает ошибку, логично предположить, что у твоего семерошного справочника нет реквизита "Вид"
42 web_profiler
 
12.05.13
20:26
кидаю скриншот справочника с необходимым пепечислением
http://iscr.ru/1368375962/
43 web_profiler
 
12.05.13
20:34
???
44 Mitriy
 
12.05.13
20:37
а ты точно базы не попутал?
45 web_profiler
 
12.05.13
20:41
в смысле? в 8 гружу с 7.7
46 web_profiler
 
12.05.13
20:41
(44) можешь подключиться и посмотреть
47 СтрашнаяПравда
 
12.05.13
20:45
мистика, не иначе )
специально для вас, не поленилась и набросала обработку
даже в извращенном виде код
Сообщить(Спр.РеквизитТипаПеречисление);
сообщает мне COMОбъект

...
сорри, чем могла )
48 Mitriy
 
12.05.13
20:46
(46) а ты по ссылке ходил? Там чего-то про периодический реквизит было...
49 web_profiler
 
12.05.13
20:49
(48) реквизит не периодический - точно. :(
50 web_profiler
 
12.05.13
20:50
никаких ссылок- нужна просто строка
51 СтрашнаяПравда
 
12.05.13
20:50
значение периодического реквизита нельзя получить, если не установлена дата выборки справочника, но получить COM он должен по любому )
52 web_profiler
 
12.05.13
20:50
(47) спасибо солнце, мучаюсь дальше
53 marvak
 
12.05.13
20:51
ужас,
54 web_profiler
 
12.05.13
20:52
(53) не то слово - полтергейст какой-то
55 СтрашнаяПравда
 
12.05.13
20:53
а без этой статьи калькуляции остальное отрабатывает? )
56 web_profiler
 
12.05.13
20:54
все ок- строковые реквизиты
57 СтрашнаяПравда
 
12.05.13
20:54
тогда забей! ))
58 web_profiler
 
12.05.13
20:55
(57) как? надо!!!
59 marvak
 
12.05.13
20:56
(58)
по порядковому номеру вытаскивал?
60 СтрашнаяПравда
 
12.05.13
20:56
часть фторая )
61 web_profiler
 
12.05.13
21:02
нет помощи
62 marvak
 
12.05.13
21:16
(61)
Неужели так сложно по идентификатору попробовать получить перчисление?
63 web_profiler
 
12.05.13
21:21
так как это сделать? я сейчас "если-тогда-конецесли" забуду!!!
64 web_profiler
 
12.05.13
21:21
:)
65 marvak
 
12.05.13
21:30
(64)
:(
66 web_profiler
 
12.05.13
21:34
(65) конструктивная помощь
67 wise
 
12.05.13
21:36
(66)СКАЖИ что в отладчике {_состав.Вид()}
68 marvak
 
12.05.13
21:39
База77.Перечисления.ВидыТМЦ.Получить(ИНД)
где ИНД - число, индекс нужного значениея в перечислении

v8: Запрос из 8.1 в 7.7 по OLE и перечисление
v8: Запрос из 8.1 в 7.7 по OLE и перечисление
69 marvak
 
12.05.13
21:40
(66)
и больше не говори , что ты ..
70 marvak
 
12.05.13
21:40
71 EvgeniuXP
 
12.05.13
21:45
"Для доступа к константам, перечислениям и видам субконто достаточно использовать свойства глобального контекста Константа, Перечисление или ВидыСубконто сервера приложения (листинг 4.2)

Сообщить(БазаОЛЕ.Константа.ДатаЗапретаРедактирования);
Сообщить(БазаОЛЕ.Перечисление.КатегорияКонтрагента.Поставщик);
Сообщить(БазаОЛЕ.ВидСубконто.Контрагенты);"

1С:Предприятие 7.7/8.0 системное программирование 2-е издание, 2007 г., 4 глава 128 страница.
72 web_profiler
 
12.05.13
21:47
(71) вообще суперский ответ. А как в ком-соединении получить эту строку?, а?
73 EvgeniuXP
 
12.05.13
21:53
(72) да возьми глобальную функцию напиши (сравнивай свои перечисления и возвращай значение) и вызови ее и получи параметр и анализируй.
74 web_profiler
 
12.05.13
21:53
(70) НАКОНЕЦ-ТО!!!! Былл бы рядом разцеловал бы (по-дружески)!СПАСИБО ОГРОМНОЕ 3 часа дибилизма. Как же я "люблю" 1С!!!
75 web_profiler
 
12.05.13
21:54
Всем кто помогал огромное спасибо!!!!
app.Перечисление.Статьякалькуляции.Блюдо.Идентификатор() = "Блюдо"
76 web_profiler
 
12.05.13
21:55
(72) не разбирался - работает (75), но тоже сенкс
77 web_profiler
 
12.05.13
21:55
сорри(73)
78 EvgeniuXP
 
12.05.13
21:56
(75) а говоришь не работает Идентификатор() :)

но 3 часа мог бы и не долбаться, по 73 сделал бы и всё.
79 web_profiler
 
12.05.13
21:58
да просто у меня этих перечислений нет - они в 7.7 присутсвуют в 8 - справочник
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс