Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) Коллекции в 1С++ (число прочтений - 49174 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #15 - 04. Июля 2008 :: 10:49
Печать  
trdm писал(а) 04. Июля 2008 :: 08:44:
Блин, лучше сделайте в 1С++ закладки и панель инструментов, не зависимые от офисов и прочей хрени Улыбка
А структура сейчас достаточно хорошо работает, её хватает Улыбка.

офф.
Дима, может это подойдет http://www.1cpp.ru/forum/YaBB.pl?num=1215168467
  

1&&2&&3
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #16 - 04. Июля 2008 :: 11:44
Печать  
trad писал(а) 04. Июля 2008 :: 10:49:
офф.
Дима, может это подойдет http://www.1cpp.ru/forum/YaBB.pl?num=1215168467

О! Подошло! Работает!
А интересно, можно ли из этой ВК вытянуть интерфейс для добавления МФС-шных контролов,
назвать 1C++AdCtrl.dll и избавиться от этих зависимостей. А то офис ставить на терминал-сервер не очень хорошая идея...
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #17 - 04. Июля 2008 :: 12:14
Печать  
artbear писал(а) 04. Июля 2008 :: 10:37:
Народ, Не уходим от темы.

Михаил, поясни по ИменованныйВектор подробнее, как ты планируешь сделать одновременный доступ по индексу и строке, что-то не пойму.

Ну как - например, как большинство коллекций, используемых в ТП.
Типа колонок или полей поставщика ODBC.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #18 - 07. Июля 2008 :: 04:57
Печать  
kms писал(а) 04. Июля 2008 :: 08:32:
Таким образом, думаю, надо просто определиться, какие коллекции нам нужны.
Мне лично не хватает одной - единственной коллекции, о которой я вчера уже упомянул.

Это вектор, заодно индексированный строкой ("ИменованныйВектор").
Можно будет использовать вместо структуры и СЗ, в том числе во множестве мест в ИТ.
Прост в реализации, может вырождаться в просто "Вектор", если задавать пустые ключи, к примеру.
Прост в применении, ибо жестко не требует наличия итераторов, достаточно индексов.
Для реализации в icpp уже есть все, что нужно (CIStringMap/std::vector (или std::deque)).
И т.д.

Именованный вектор также можно использовать как hash_set / hash_map.
В принципе, структура - это по-сути и есть hash_map.

Посмотрел вектора и коллекции, реализованные в CSimpleCollection и CSimpleVector.
В принципе, CSimpleVector как вектор устроит.
1. Михаил, каким образом можно выписать его реализацию и зарегить его как объект "Вектор/Vector" - как обычно, создав новый контекст и продублировав код вызова? или как-то по-другому, через CSimpleCollection ?

2. Изучал CSimpleCollection, так и не понял, где в этом классе доступ по другим ключам, кроме числового индекса. Это к теме именованного вектора, индексированного и числом, и строкой Печаль
Михаил, поясни, плиз.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #19 - 07. Июля 2008 :: 09:13
Печать  
artbear писал(а) 07. Июля 2008 :: 04:57:
Посмотрел вектора и коллекции, реализованные в CSimpleCollection и CSimpleVector.
В принципе, CSimpleVector как вектор устроит.
1. Михаил, каким образом можно выписать его реализацию и зарегить его как объект "Вектор/Vector" - как обычно, создав новый контекст и продублировав код вызова? или как-то по-другому, через CSimpleCollection ?

Зарегистрировал (icpp).

Описание соответствует коллекции "ИндексыКартинок":
http://www.1cpp.ru/docum/icpp/html/TableField.html#id52

Если как-то захочется расширить возможности, ты меня подергай, прежде, чем что-то делать, плз.
Ибо здесь надо будет определиться, что принадлежит именно вектору как самостоятельному классу, а что полезно для коллекций в целом.

Например, выгрузку в СЗ я сделал универсальной для всех коллекций.
Можно поддержать и дополнительные классы, ИТ например.
Но хотелось бы, чтобы это было на этот раз универсально, через внешние интерфейсы, типа ResultLoader'а - т.е. надо продумать.

Цитата:
2. Изучал CSimpleCollection, так и не понял, где в этом классе доступ по другим ключам, кроме числового индекса. Это к теме именованного вектора, индексированного и числом, и строкой Печаль
Михаил, поясни, плиз.

Ну, это пока было в планах. Улыбка
Давайте тоже сделаем.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #20 - 07. Июля 2008 :: 09:20
Печать  
kms писал(а) 07. Июля 2008 :: 09:13:
Ибо здесь надо будет определиться, что принадлежит именно вектору как самостоятельному классу, а что полезно для коллекций в целом.

Например, выгрузку в СЗ я сделал универсальной для всех коллекций.
Можно поддержать и дополнительные классы, ИТ например.
Но хотелось бы, чтобы это было на этот раз универсально, через внешние интерфейсы, типа ResultLoader'а - т.е. надо продумать.

Например,
1) загрузка из СЗ,
2) загрузки из колонки ТЗ/ИТЗ
3) загрузка из текущей/переданной строки ТЗ/ИТЗ
все 3 варианта лучше делать через интерфейсы, конечно.
4) Для ИТЗ также лучше сделать интерфейс загрузки/выгрузки, наподобие того, как Саша сделал в 1sqlite - выгружать одно удовольствие, буквально пара строк кода Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #21 - 07. Июля 2008 :: 09:38
Печать  
Может тогда действительно сделать прокси-объекты для загрузки и выгрузки
- строки ТЗ
- колонки ТЗ
- строки ИТ
- колонки ИТ
- СЗ

При этом можно сразу спроектировать интерфейс так, чтобы заодно поддержать и коллекции, индексированные строкой.
Ну, к примеру, для строк ТЗ и ИТ ключом может являться имя колонки, для СЗ - представление.
Для колонок ТЗ и ИТ - хз, может быть, значение другой выбранной колонки?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #22 - 09. Июля 2008 :: 05:12
Печать  
Давайте решать по интерфейсам выгрузки/загрузки.

1. В ИТ нужно добавить метод ВыгрузитьСтроку для универсальности.
Т.е. у нас будут полные пары Загрузить/Выгрузить и ЗаполнитьСтроку/ВыгрузитьСтроку.

Параметры напрашиваются следующие
ИТЗ::ВыгрузитьСтроку(КудаВыгружаем, [Индекс = ""], [НомерСтроки = ""])

Интерфейс соответственно аналогично интерфейсу ISQLiteResultLoader

Цитата:
     class Utils1cpp::ICollectionLoader
     // Подготовка приемника к приему результатов
     // Должен возвращать количество элементов, которое готов принять приемник.
     virtual DWORD init(DWORD elemCountsInResult) = 0;

     // Добавление метаданных элемента в результат запроса
     virtual void setIndexMetadata(DWORD elemIdx, const CString& elemName, const CType& type) = 0;

     // Добавление строки в результат запроса.
     // Параметр - массив указателей на CValue, количеством равный количеству
     // добавленных элементов
     virtual void addValues(CValue** ppValues) = 0;

Возможно, setIndexMetadata и не нужно, но для именованных ключей может и пригодиться.

Без этого метода поставщик 1sqlite от Степана, например, работать удовлетворительно не будет Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #23 - 09. Июля 2008 :: 05:40
Печать  
artbear писал(а) 09. Июля 2008 :: 05:12:
1. В ИТ нужно добавить метод ВыгрузитьСтроку для универсальности.
Т.е. у нас будут полные пары Загрузить/Выгрузить и ЗаполнитьСтроку/ВыгрузитьСтроку.

Параметры напрашиваются следующие
ИТЗ::ВыгрузитьСтроку(КудаВыгружаем, [Индекс = ""], [НомерСтроки = ""])

Точнее так,
ИТЗ::ВыгрузитьСтроку(КудаВыгружаем, [Индекс = ""], [Колонки = ""], [НомерСтроки = ""])
для большей вариативности.
Внутренний интерфейс при этом не меняется.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #24 - 09. Июля 2008 :: 05:58
Печать  
artbear писал(а) 09. Июля 2008 :: 05:40:
artbear писал(а) 09. Июля 2008 :: 05:12:
1. В ИТ нужно добавить метод ВыгрузитьСтроку для универсальности.
Т.е. у нас будут полные пары Загрузить/Выгрузить и ЗаполнитьСтроку/ВыгрузитьСтроку.

Параметры напрашиваются следующие
ИТЗ::ВыгрузитьСтроку(КудаВыгружаем, [Индекс = ""], [НомерСтроки = ""])

Точнее так,
ИТЗ::ВыгрузитьСтроку(КудаВыгружаем, [Индекс = ""], [Колонки = ""], [НомерСтроки = ""])
для большей вариативности.
Внутренний интерфейс при этом не меняется.

Ага. Только индекс тут не нужен Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #25 - 09. Июля 2008 :: 06:12
Печать  
ADirks писал(а) 09. Июля 2008 :: 05:58:
Ага. Только индекс тут не нужен Улыбка

Ага Улыбка
Ну, типа по аналогии - насколько возможно:
Код
Выбрать все
ЗаполнитьСтроку([чНомерСтроки = 0], Источник, [чНомерСтрокиИсточника = 0], [чПоИменамКолонок = 0])
 


Код
Выбрать все
ВыгрузитьСтроку(чНомерСтроки = 0, Приемник, [Колонки = ""])
 

  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #26 - 09. Июля 2008 :: 09:59
Печать  
Ага, с индексом я тормознул Улыбка
С остальным также согласен.
И кто реализует?

ЗЫ вопросов по интерфейсу ICollectionLoader нет?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Коллекции в 1С++
Ответ #27 - 09. Июля 2008 :: 10:13
Печать  
[quote author=artbear link=1215152763/15#26 date=1215597543]
И кто реализует?
ЗЫ вопросов по интерфейсу ICollectionLoader нет?[/quote]
Все равно. :)
Но раньше, чем сделаю ассоциативные коллекции, я точно за это не возьмусь.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #28 - 10. Июля 2008 :: 10:07
Печать  
Михаил, вопрос по Вектору и коллекциям
1 - нумерация в открытых для пользователя коллекциях всегда идет с 0 ?
Не будет ли это неудобно в 1С, где привыкли к нумерации с 1.
Например, в ИТЗ и колонки, и строки нумеруются с 1.

2 - ты выгрузку в СЗ проверял?
у меня Вектор.Количество() = 2, а СЗ.РазмерСписка() = 1 после Вектор.Выгрузить(СЗ) :
(
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Коллекции в 1С++
Ответ #29 - 10. Июля 2008 :: 10:21
Печать  
Если моё мнение как-то учитывается, то пусть коллекции нумеруются с 1.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 9
ОтправитьПечать