Пользовательский тип данных

1. artir 23.03.17 09:42 Сейчас в теме
Доброго времени суток. С недавних пор понадобилось освоить программирование в 1С, и возник один вопрос: можно ли в 1С добавить пользовательский тип данных. В частности необходимый тип на языке VBA я бы описал следующим образом:
Type MyType
Value1 As String
Value2 As Array
Value3 As Array
End Type

Описание переменной выглядело бы: Dim List As MyType
И обращение к данным List(i).Value1, List(i).Value2() и так далее.
Меня интересует как можно реализовать подобную структуру в 1С. Я пробовал использовать ТаблицаЗначений, но в итоге необходимой функциональности добиться не удалось. В частности обращения к ячейке колонки как к массиву.

Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки());
Массив.Очистить();
ОписаниеТиповМ = Новый ОписаниеТипов(Массив, , ,Новый КвалификаторыЧисла());

ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Значение1", ОписаниеТиповС, "Значение1");
ТаблицаЗначений.Колонки.Добавить("Значение2", ОписаниеТиповМ, "Значение2");
ТаблицаЗначений.Колонки.Добавить("Значение3", ОписаниеТиповМ, "Значение3");
Показать

К примеру я не могу обратиться как к массиву к элементу ТаблицаЗначений.Колонки.Значение2
+
По теме из базы знаний
Найденные решения
5. herfis 498 23.03.17 11:29 Сейчас в теме
Ну и типизированных массивов в 1С нет.
Т.е. будет как-то так:

Function NewMyType(Name)
     Return new Structure("Name,Set1,Set2", Name, new Array, new Array)
EndFunction

Procedure Test()
     List = new Array;
     List.Add(NewMyType("s1"));
     List.Add(NewMyType("s2"));
     Message(List[0].Name);
     List[1].Set2.Add("Test");
     Message(List[1].Set2.Count());
EndProcedure
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. caponid 23.03.17 10:40 Сейчас в теме
(1) нет ни своих типов, ни ООП (в классическом понимании) - это плата за простоту
+
2. ResetAtreides 23.03.17 10:33 Сейчас в теме
Это вам, вроде, обычная структура подойдет
MyType  = Новый Структура("Value1,Value2,Value3", "String", Новый Массив, Новый Массив);

А если по индексу ещё нужно обращаться, то запихните её в массив, а ещё "Определяемые типы" во вкладке "Общие" есть
+
4. herfis 498 23.03.17 10:42 Сейчас в теме
Пользовательские типы в 1С создавать нельзя.
Но, как уже сказали, нужная вам структура данных легко моделируется на ассоциативном массиве (тип "Структура" в 1С).
Инициализировать новые экземпляры в нужном виде, ессно, придется каждый раз с нуля.
Можете функцию для этого написать. Эдакий эмулятор конструктора.
+
5. herfis 498 23.03.17 11:29 Сейчас в теме
Ну и типизированных массивов в 1С нет.
Т.е. будет как-то так:

Function NewMyType(Name)
     Return new Structure("Name,Set1,Set2", Name, new Array, new Array)
EndFunction

Procedure Test()
     List = new Array;
     List.Add(NewMyType("s1"));
     List.Add(NewMyType("s2"));
     Message(List[0].Name);
     List[1].Set2.Add("Test");
     Message(List[1].Set2.Count());
EndProcedure
Показать
+
6. artir 23.03.17 11:42 Сейчас в теме
(5) Благодарю, это то, что нужно.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот