Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) несколько табличных частей как в 8 (число прочтений - 8065 )
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #15 - 27. Марта 2012 :: 20:54
Печать  
Хочу поделиться как это сделал у себя.
У меня порядка 15 документов, имеющих 2-3 табличные части ,
4 документа имеют 10 ТЧ, и один с 14 ТЧ.  
Я перепробовал все выше перечисленные способы реализации сабжа. В конце-концов остановился на хранении таб.частей в реальной табличной части документа.
Поскольку я сразу написал базовый класс ТабличныеЧасти, в котором описал всю логику сохранения-загрузки данных(если контекст - то использую перехватчик для перехвата ПриЗаписи), то для конкретных документов наращивать очень просто. А унаследовав от Документ можно писать что-то типа "Документ.ТабличныеЧасти.ПараметрыДизайнов.ВыбратьСтроки();" и т.п..
Почему выбрал такой способ хранения? Когда много документов имеющих много табличных частей, то использовать доп.документы как-то не хочется. Справочники тоже. Не знаю, но у меня возникало множество непонятных ошибок при удалении документов. Хранить в неодинэсовских табличках тоже оказалось не очень хорошо- это проявилось опять же при удалении помеченых на удаление объектов, 1-Це же не знает, что на удаляемый объект есть ссылки в посторонних табличках. Хотел повесить тригерры, но потом попробовал хранить в реальной табличной части и тут все сошлось  Улыбка.  На мой взгляд единственный недостаток сего способа, это много колонок в таб.части документа - если тип-вид реквизита не совпадает я создаю еще одну колонку.
По поводу 9999 строк. Я не видел ни разу ни одного документа с таким количеством строк. Я не думаю что кто-то из юзеров вводит в одну табличную часть более 100 строк. Скорее всего подобные документы создаются програмно, а следовательно подобный алгоритм можно и переделать.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #16 - 28. Марта 2012 :: 01:11
Печать  
zk96 писал(а) 27. Марта 2012 :: 20:54:
На мой взгляд единственный недостаток сего способа, это много колонок в таб.части документа - если тип-вид реквизита не совпадает я создаю еще одну колонку.
Для маленьких документов это подойдет, а для больших уже будут проблемы со скоростью обращения, т.к. в 1С не принято делать индексы для табличных частей, за исключением оного по номеру строки.

zk96 писал(а) 27. Марта 2012 :: 20:54:
По поводу 9999 строк. Я не видел ни разу ни одного документа с таким количеством строк. Я не думаю что кто-то из юзеров вводит в одну табличную часть более 100 строк.
Самые простые примеры: переоценка и инвентаризация. Оба изначально заполняются автоматически, но затем правятся руками (хотя инвентаризацию еще можно через штрих-кодирование автоматизировать, но не всегда).
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #17 - 28. Марта 2012 :: 06:46
Печать  
Dmitry The Wing писал(а) 28. Марта 2012 :: 01:11:
... для больших уже будут проблемы со скоростью обращения, т.к. в 1С не принято делать индексы для табличных частей, за исключением оного по номеру строки.

В реальной таб.части у меня есть строчная колонка TABLEID. Я сразу загружаю ТЧ в индексированную таблицу и по индексу на колонке TABLEID разбираю ТЧ на несколько. ИндексированнаяТаблица очень шустро загружает-выгружает ТЧ документа, проблем в скорости я не заметил. Далее я добавляю динамические свойства, это и есть таб.части. Очень удобно.
Делал тест, создал документ с тремя таб.частями, в каждую програмно добавил по 500 строк(т.е. в реальной ТЧ 1500 строк). Если открывать сей документ используя мой способ и таб.части отображать в табличных полях, открытие очень быстрое. Если отображать такое к-во строк в стандартной таб.части, то открытие документа подтормаживает.


Dmitry The Wing писал(а) 28. Марта 2012 :: 01:11:
Самые простые примеры: переоценка и инвентаризация. Оба изначально заполняются автоматически, но затем правятся руками (хотя инвентаризацию еще можно через штрих-кодирование автоматизировать, но не всегда).

Подобных документов раз-два и обчелся их можно и не трогать. Ну или реализовать через справочник.
Я еще раз говорю я перепробовал ВСЕ описанные выше способы.
И не просто "потестил", а использовал в промышленной системе, но остановился на том методе, который описал.
P.S. Если правду говорить, способ хранения данных в длинной строке я использовал для хранения некритичных данных. На мой взгяд это ОЧЕНЬ плохой способ. Но сие мое личное мнение.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #18 - 29. Марта 2012 :: 11:12
Печать  
Делал в качестве нескольких ТЧ - ТабличноеПоле, строки которого заполнялись из ТаблицаЗначений, ТаблицаЗначений сохранялась в SQL таблицу.
  
Наверх
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #19 - 01. Апреля 2012 :: 07:12
Печать  
Спасибо, есть из чего выбрать.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #20 - 02. Апреля 2012 :: 01:07
Печать  
zk96 писал(а) 28. Марта 2012 :: 06:46:
Я еще раз говорю я перепробовал ВСЕ описанные выше способы.
И не просто "потестил", а использовал в промышленной системе
Я тоже Улыбка
К слову: у меня все данные отображаются в одном ТП в виде дерева: Первый уровень - это тип данных (тип ТЧ), а далее у каждой ТЧ по разному - где-то все на одном уровне, а где-то еще ветвится.
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: несколько табличных частей как в 8
Ответ #21 - 02. Апреля 2012 :: 17:33
Печать  
Dmitry The Wing писал(а) 02. Апреля 2012 :: 01:07:
... у меня все данные отображаются в одном ТП в виде дерева...

Это выглядит красиво. Но если табличные части имеют совершенно разные поля, разные и по смыслу и по  содержанию, то получается не очень хорошо Улыбка .
У меня тоже используюся ТабличноеПоле,  мне не очень нравится ТаблицаЗначений. Но выше мы вроде обсуждали способы хранения данных, а не их отображения.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать