Имя: Пароль:
1C
1С v8
Рассудите спор о справочниках и регистрах
0 МаксимБел
 
21.09.12
12:03
Смысл в следующем:
В Бухгалтерии 8 договора контрагентов являются справочником. При этом каждый элемент справочника получается абсолютно уникальным (т.е. нигде повторно не используется). Теряется смысл справочника.
Я говорю, что логичнее было бы сделать договора документом, который писал бы движения в регистр сведений, из которого, в последствии, с помощью механизма виртуальных таблиц, можно было бы отбирать данные гораздо быстрее чем из подчиненного справочника.
Мой товарищ-оппонент, в свою очередь, говорит, что отбор из справочника и регистра по скорости ничем отличаться не будет, поскольку виртуальные таблицы это просто индексы и на уровне sql регистры ничем от справочников не отличаются. Так ли это? )
71 МаксимБел
 
21.09.12
13:24
(69) А что можно в него вкладывать?
До сих слышал только о том, что виртуальные таблицы созданы для ускорения определенного рода выборок. Теперь же мне говорят, что использование виртуальных таблиц наоборот, замедляет работу программы.
72 Команданте
 
21.09.12
13:24
ппц, договора
73 DrShad
 
21.09.12
13:26
(71) а как тогда быть с теми ВТ, что создаю я сам в пакетных запросах?
74 lu55
 
21.09.12
13:26
Тема попадет в пятничный офтоп... я собственно опопнент и мои доводы следующие.
С точки зрения БД регистр и справочник имеют по одной физической таблице. регистр имеет уникалный индекс по измерениям. в справочнике индексируется владелец и еще что то, если мы заходим.

Форма и работа с справочником: поле владелец индексируется соответственно выбор происходит бысро. доп поля можно индексировать можно нет.  в случае если не индексируются поля получаем уникальный индекс по владельцу.

если делаем справочник то все вбыроки полей справочника в запросах произвоидтся просто через точку что будет добавлять только одну дополнительную таблицу при переводе запроса на язык sql для выборки параметров договоров.

Если делать регистр и документ:
Во первых по структуре регистра придется добавить измерения контрагент и договор-документ - уже 2 поля индексе для таблицы, вместо одного + может еще что то надо будет добавить.
Если делаем документ и регистр то во первых данные будут дублироваться - заполняем рекизиты документа и проводим все в регистр, что уже как бы говорит о нарушении логики(в противном случае если двигать не все,  то в запросах придется кое где присодинять 2 таблицы - документы и регистры что еще более утормозить работу)
75 Команданте
 
21.09.12
13:27
ТС, зри в корень
справочник договоры в типовой это не аналог юридического договора
это настройка контрагента для накладных, и только
касаемо уникальности, есть предприятия, которые торгуют уникальным товаром
вот недавно только был спор, использовать справочник номенклатура или документ...
76 Команданте
 
21.09.12
13:28
касаемо быстроты, ну это не суть важно
77 МишКа
 
21.09.12
13:33
ТС жжет просто ацки. Складывается впечатление, что он специально прикидывается.
78 Маратыч
 
21.09.12
13:35
(77) Да не, если упростить вопрос до "что быстрее, выборка из РС или из справочника", отбросив муть про документы - в принципе, нормально, бгг :)
79 МишКа
 
21.09.12
13:38
(78) Я и об этом в том числе. Вы с автором вообще ничего про базы данных не слышали? Прямо не верится.
80 tdm
 
21.09.12
13:38
(71) у вас всё перепуталось в голове) - рекомендую проштудировать Проф.разработку, там все по полочкам разложено, имхо на форуме вы ток запутаетесь - либо будете спорить до последнего;
ответ на (0) дан - внимательно перечитайте посты PR из этой ветки)
81 Маратыч
 
21.09.12
13:42
(79) Понеслась... Любители выглядеть гуру многозначительно, с оттенкой снобизма через губу бросают: "Вы ничего в этом не смыслите" - и гордо удаляются, не удосуживаясь даже попытаться аргументировать свое высокомерие.

Проектированием БД я занимался задолго до того, как пришел в 1С. Возможно, некоторые механизмы взаимодействия 1С и СУБД для меня не до конца знакомы, т.к. необходимости вникать не было. Будьте добры, уважаемый мегагуру, объясните несчастным дилетантам-новичкам, почему я неправ, утверждая, что на уровне MS SQL виртуальная таблица СрезПоследних в 1С является всего лишь подзапросом (даже не view-шкой)?
82 Маратыч
 
21.09.12
13:43
+(81) Наверное, скульный профайлер тоже спроектирован дилетантами, т.к. упорно выдает именно структуру из вложенных запросов при обращении к 1Совской виртуальной таблице.
83 Ненавижу 1С
 
гуру
21.09.12
13:45
виртуальные таблицы надо использовать там где надо, не вижу где здесь их использовать
84 Axel2009
 
21.09.12
13:45
(70)+(82) жду запрос, который получается на стороне SQL Server, при обращении к виртуальной таблице срезпоследних регистра сведений.
85 dmpl
 
21.09.12
13:45
(51) Этот справочник появился когда неким людям надоело сопоставлять физ. лицо и приказ о приеме на работу.
86 Маратыч
 
21.09.12
13:48
(84) Почему это я должен сейчас тратить свое время, запускать скуль и лезть в профайлер, когда Вы мне утверждаете, что я неправ, при том, что первым свои доводы привел именно я? Жду аргументированного опровержения.
87 Reset
 
21.09.12
13:51
(86) Твою фразу из (61) можно без потери смысла (точнее, без приобретения оного) представить как
"который одинаково правильно спроектировал и самолет, и справочник, то самолет будет быстрее за счет использования крыльев"
88 МаксимБел
 
21.09.12
13:51
(79) Про гуру это да... ) Тоже обратил внимание, что любят тут отвечать в стиле "я бог, знал 1С до рождения, а кругом насрано" )
89 Axel2009
 
21.09.12
13:51
(86) да оставайтесь невеждой. мне то что.
90 Ненавижу 1С
 
гуру
21.09.12
13:51
пример

РегистрСведений.КурсыВалют.СрезПоследних(&НаДату, Валюта В (&СписокВалют))

разворачивается в (примерно):

ВЫБРАТЬ
   КурсыВалют.Период,
   КурсыВалют.Валюта,
   КурсыВалют.Курс,
   КурсыВалют.Кратность
ИЗ
   (ВЫБРАТЬ
       КурсыВалют.Валюта КАК Валюта,
       МАКСИМУМ(КурсыВалют.Период) КАК Период
   ИЗ
       РегистрСведений.КурсыВалют КАК КурсыВалют
   ГДЕ
       КурсыВалют.Валюта В(&СписокВалют)
       И КурсыВалют.Период <= &НаДату
   
   СГРУППИРОВАТЬ ПО
       КурсыВалют.Валюта) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
       ПО ВложенныйЗапрос.Валюта = КурсыВалют.Валюта
           И ВложенныйЗапрос.Период = КурсыВалют.Период

сильно не пинайте
91 МишКа
 
21.09.12
13:52
(81) (82) И что? Тебе сказали: там джойн (соединение), джойн тормозит. Ты зачем-то стал спорить. Раз умеешь пользоваться профайлером, так посмотри в него.
Попутно замечу, настоящему проектировщику БД в профайлер смотреть в данном случае без надобности. Он и так догадается, что... там джойн и этот джойн тормозит.
92 Axel2009
 
21.09.12
13:53
(90) хорошо, не буду
93 Маратыч
 
21.09.12
13:54
(90) Это из технологического журнала. Я говорил про SQL.
94 Ненавижу 1С
 
гуру
21.09.12
13:55
(93) я идею рассказал на нативных таблицах, че придираешься?
95 Axel2009
 
21.09.12
13:56
(90) точнее в скуле еще вложенный запрос
ВЫБРАТЬ
   Т1.Период,
   Т1.Валюта,
   Т1.Курс,
   Т1.Кратность
ИЗ (ВЫБРАТЬ
   КурсыВалют.Период,
   КурсыВалют.Валюта,
   КурсыВалют.Курс,
   КурсыВалют.Кратность
ИЗ
   (ВЫБРАТЬ
       КурсыВалют.Валюта КАК Валюта,
       МАКСИМУМ(КурсыВалют.Период) КАК Период
   ИЗ
       РегистрСведений.КурсыВалют КАК КурсыВалют
   ГДЕ
       КурсыВалют.Валюта В(&СписокВалют)
       И КурсыВалют.Период <= &НаДату
   
   СГРУППИРОВАТЬ ПО
       КурсыВалют.Валюта) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
       ПО ВложенныйЗапрос.Валюта = КурсыВалют.Валюта
           И ВложенныйЗапрос.Период = КурсыВалют.Период) КАК Т1
96 PR
 
21.09.12
13:56
(61) Вообще-то в РС виртуальные таблицы медленнее обычных.
97 Ненавижу 1С
 
гуру
21.09.12
13:57
(95) ну понятно что это подзапрос (ну или временная таблица)
98 PR
 
21.09.12
13:57
(68) Вообще-то это касается только РС. А разработали их в РС для удобства, а не скорости.
99 Axel2009
 
21.09.12
13:57
(94) а теперь бинго, во что разворачивается периодический РС, подчиненный регистратору?
100 Goggy
 
21.09.12
13:58
(4) Тогда одинеснегам из фирмы 1С оторвать надо было 5 раз(с 9го по 14й релизы) за БП 3.0
101 Ненавижу 1С
 
гуру
21.09.12
13:59
(98) там где нужно юзать срезы, то виртуальная не медленнее обычной, ну если только не по одной валюте, где можно взять ВЫБРАТЬ ПЕРВЫЕ 1
102 Маратыч
 
21.09.12
13:59
(90) Впрочем, да, прошу прощения. Сейчас внимательней глянул - видать, не туда смотрел, все правильно, к результату вложенного запроса джойнится. Вопрос снят.

А тем, кто в первую очередь повел себя как высокомерное гуано - лучи любви и добра.
103 PR
 
21.09.12
14:00
(81) Потому что нет никакой виртуальной таблицы в SQL для виртуальных таблиц РС.
Для других регистров есть, для РС нет.
104 Axel2009
 
21.09.12
14:00
(68) учитывая что РС существует покрывающий индекс на все измерения + период и + регистратор если нужно, получается, что выборка среза последних отработает быстрее чем выборка подобная из справочника.
105 Ненавижу 1С
 
гуру
21.09.12
14:00
(99) мммм, имхо по моменту времени регистратора
хотя хз, если период<>дата регистратора, думать надо
106 Axel2009
 
21.09.12
14:01
(102) нюню. читаем внимательно (64), а потом улыбаемся и машем кто кому хамить начал
107 Ненавижу 1С
 
гуру
21.09.12
14:01
(103) что значит фраза "Для других регистров есть, для РС нет"?
108 Маратыч
 
21.09.12
14:02
(87) ... самолета и автомобиля... - так вернее. В том смысле, что каждый объект для своих целей эффективен.

(106) Не понял юмора. Т.е. просьба объяснений в ответ на "Вам еще читать и читать" - это хамство? Ну вообще...
109 PR
 
21.09.12
14:02
(88) А ты бы хотел по принципу "Ну, для начала начнем с психологической подготовки к тому, что вы нуб и ничего не знаете. Только не волнуйтесь, это не смертельно."? :))
110 Axel2009
 
21.09.12
14:03
(105) там еще добавляется один джоин к себе, чтобы выбрать макс регистратор. и только 3им запросом выбираются ресурсы
111 Axel2009
 
21.09.12
14:05
(108) когда человек с пеной у рта начинает доказывать что он чтото знает, но по факту не знает (ну читай как не до конца знает, либо не туда посмотрел), только и остается посоветовать "читать". потому как когда сам прочитаешь, запомнишь на долго, чем поспоришь и останешься при своем
112 Ненавижу 1С
 
гуру
21.09.12
14:06
(110) не регистратор, а момент времени регистратора, имхо
113 Axel2009
 
21.09.12
14:07
(112) в таблицах нет такого понятия как момент времени, поэтому все банально. 3 соединения. 1 выборка макс периода, 2 выборка макс регистратора, 3 выборка данных
114 Ненавижу 1С
 
гуру
21.09.12
14:08
(113) согласен, момент времени это составное понятие
115 Маратыч
 
21.09.12
14:10
(111) А никто и не собирался с пеной у рта спорить. Почему-то нормальный ответ от Ненавижу 1С не вызвал никакого негатива, но заставил призадуматься и перепроверить свои утверждения.

А снобизм в стиле: "хо-хо, еще один неуч, идите читать" - вызывает раздражение. 1Снику, знаете ли, неплохо бы помимо основных профессиональных навыков уметь еще и с людьми общаться.
116 PR
 
21.09.12
14:20
(103) Для регистров накопления, бухгалтерии и расчета есть. Что непонятно-то?
117 PR
 
21.09.12
14:20
+(116) К (107) ессно.
118 Ненавижу 1С
 
гуру
21.09.12
14:24
(116) все непонятно, в каком смысле есть? с учетом того, что виртуальные таблицы это подзапросы что для РС, что для РН
119 Axel2009
 
21.09.12
14:26
(118) итоги хранятся для РН
120 Ненавижу 1С
 
гуру
21.09.12
14:28
(119) итоги <> вирт. таблицы, одних итогов недостаточно для построения вирт. таблицы
121 Axel2009
 
21.09.12
14:31
(120) ну для ВЫБРАТЬ * ИЗ РН.Остатки() достаточно =)
122 Маратыч
 
21.09.12
14:37
(116) Разве в MS SQL вообще существует понятие "виртуальная таблица"? Или под в данном случае подразумеваются представления и/или курсоры?
123 PR
 
21.09.12
14:38
(118) Да ты че, правда что ли? :)))
124 PR
 
21.09.12
14:39
(122) Не существует. В MS SQL это просто обычная таблица. Которая "случайным" образом хранит агрегаты основной таблицы :))
125 Beduin
 
21.09.12
14:43
(124) Не хранится она. Формируется каждый раз новая при обращении.
126 Ненавижу 1С
 
гуру
21.09.12
14:46
(123)(124) очередной опус?
127 PR
 
21.09.12
15:00
(125) За счет чего тогда скорость выше, за счет исключительно индексов?
128 Ненавижу 1С
 
гуру
21.09.12
15:04
(127) за счет итогов, но они берутся только на базовые периоды, остальное дополняется движениями
129 Axel2009
 
21.09.12
15:07
(128) придумал, оборотный регистр =)
130 Ненавижу 1С
 
гуру
21.09.12
15:08
(129) ага, но обороты за 40 дней смотрим
131 PR
 
21.09.12
15:08
(128) А расхождения между реальной и виртуальной таблицами видимо происходят из-за того, что SQL хреновенько отрабатывает, так?
И пересчет итогов нужен, чтобы не скучно жить было, да?
132 PR
 
21.09.12
15:08
(128) Да я как бы в курсе. А остатки на базовые периоды где хранятся? Считаются на лету?
133 Ненавижу 1С
 
гуру
21.09.12
15:09
(131) к чему эти вопросы ты задаешь?
скажи лучше как по-твоему хранятся итоги по остаточному регистру
134 Ненавижу 1С
 
гуру
21.09.12
15:09
(132) на базовые хранятся в таблице итогов, но таблица итогов<>виртуальная таблица
135 McNamara
 
21.09.12
15:09
(0) в 1с есть такие понятия объектный тип данных и необъектный. Объектные типы это документы, справочники, у них есть ссылка, по которой они идентифицируются. Необъектные типы это регистры, то есть просто таблицы, в полях которых могут быть данные разного типа, в том числе и объектные. Исходя их этого договоры- это скорее объектная сущность, чем таблица, поэтому 1сники сделали его в виде справочника.
136 Маратыч
 
21.09.12
15:10
(132) Так таблицы итогов - не виртуальные таблицы, а очень даже реальные.
137 Axel2009
 
21.09.12
15:10
(131) SQL отрабатывает нормально. за все время расхождения встречал пару раз. херовенько отрабатывает файловая версия, так как не транзакционноустойчива.
а пересчет итогов нужен для успокоения души. в SQL он не нужен.
138 PR
 
21.09.12
15:11
(133) Ну, вообще-то остатки на каждый месяц хранятся в рассчитанных агрегатах, а на дату считаются как агрегаты + или - движения за период в течение месяца.
139 PR
 
21.09.12
15:12
(134) Зато виртуальная таблица вполне себе использует таблицу итогов, ага?
140 PR
 
21.09.12
15:13
(136) Блин, читаем (124).
141 Ненавижу 1С
 
гуру
21.09.12
15:13
(138) в таблице итогов хранятся остатки, верно, но таблицу итогов нельзя называть виртуально таблицей Остатки, например ))
142 Ненавижу 1С
 
гуру
21.09.12
15:13
(139) во-первых не всегда, во-вторых даже если использует, то я не говорю же обратного, именно для того она и создана
143 PR
 
21.09.12
15:14
(137) >>за все время расхождения встречал пару раз.
Количество раз не важно. Важно, что это принципиально возможно.
>>а пересчет итогов нужен для успокоения души. в SQL он не нужен.
LOL
144 Маратыч
 
21.09.12
15:14
(140) А в (103) тогда что написано? :) Ну да, для РС нет таблиц с промежуточными данными, но при чем тут виртуальные-то?
145 Axel2009
 
21.09.12
15:14
люблю такие споры, где каждый хочет доказать что именно его словами формулировка правильная =)
146 PR
 
21.09.12
15:14
(141) И че? Я такое говорил?
147 Ненавижу 1С
 
гуру
21.09.12
15:15
(146) нет, ты говорил (103)
148 Axel2009
 
21.09.12
15:15
(143) если данные пишутся напрямую, в обход 1с.
149 PR
 
21.09.12
15:15
(142) Во-первых, когда не использует, то это частный случай. Во-вторых, достаточно во-первых :))
150 МаксимБел
 
21.09.12
15:17
(109) Н-да... Воистину неизлечимый случай нарцисизма.
151 PR
 
21.09.12
15:18
(144) В (103) написано, что в базе SQL нет вообще никакой таблицы для РС, кроме основной. Тут как раз виртуальная таблица — это результат манипуляций с основной таблицей, присоединенной к себе же.
Вот тут могу ошибаться, может и есть физические таблицы, но вроде нет.
Факт остается фактом, виртуальные таблицы РС работают не быстрее основной.
152 Ненавижу 1С
 
гуру
21.09.12
15:18
по-поводу РС - нет там вспомогательных таблиц ибо не нужны - максимум периода по индексированным полям берется мгновенно, суммирование в РН требует сканирования, потому и вспомогательная таблица итогов

З.Ы. хотя нет, я знаю как могла быть устроена вспомогательная таблица для РС
153 Ненавижу 1С
 
гуру
21.09.12
15:19
(151) просто ты некорректно выразился, остановимся на этом
154 PR
 
21.09.12
15:19
(148) Вообще-то SQL не знает ровным счетом ничего о связи основной таблицы и вспомогательных.
Их взаимосвязь управляется 1С'ом.
155 PR
 
21.09.12
15:20
(150) Оставь свое бесценное мнение при себе, ага? :))
156 PR
 
21.09.12
15:20
(152) Так я про то же и говорю. Потому и не сделали.
157 PR
 
21.09.12
15:20
(153) As you wish :))
158 Smallrat
 
21.09.12
15:21
(0) Я ничего не понял: начали за смысл, а продолжили про скорость и виртуальные таблицы.

По смыслу: договорные условия в регистре это логично. Я так делал в одной самописке - заключается договор, заводится документ, который вносит запись в периодический РС. Потом все допсоглашения вводятся на основании этого договора. Актуальные условия на дату получаются срезом последних.
159 PR
 
21.09.12
15:24
(158) Так ты про совершенно другое. На условия вряд ли понадобится делать ссылку.
160 МаксимБел
 
21.09.12
15:24
(158) Ага. Это я и имел ввиду.
161 PR
 
21.09.12
15:25
(160) Ага. Ровно это в (0) и написано, точно :)) Буква в букву :))
162 МаксимБел
 
21.09.12
15:27
(161) Я не мог этого написать, потому, что не имел опыта работы с подобной реализацией договоров. Поэтому я лишь написал, что мне кажется более логичным реализовывать договора через справочник.
163 МаксимБел
 
21.09.12
15:28
(162) Тьфу ты. Через документ.
164 Smallrat
 
21.09.12
15:32
(159) ну да - это зависит от задачи: нужно вести учет в разрезе договоров - тогда справочник, если договора это набор условий тогда регистр. Если и то и другое - надо думать )
165 Axel2009
 
21.09.12
15:37
(154) я про случаи когда итоги расходились с движениями
166 Ненавижу 1С
 
гуру
21.09.12
15:41
(154) но в одной транзакции
167 МишКа
 
21.09.12
15:58
(162) Это не более логично и не менее. Справочник - таблица и документ - таблица. У справочника есть ссылка (уникальный ключ) и у документа тоже. В своей конфигурации делай, как хочешь.
168 6tuf
 
21.09.12
17:18
(162) да это нормальный вариант, ибо везде где участвует дата логичней использовать документы с движениями. справочник должен показывать сущность, но никак не процессы которые с ней происходят
169 lu55
 
22.09.12
00:15
Ну с цчетом уточнений в исходном споре, хотя как я понял 99 процентов форума поняла ТС так же как ия.всетаки считаю даже если в постановки задачи будет сказано что данные договора меняются то логично всеравно введения справочника догворов, а не документа как Договора, и регистров в которые двигаются из формы договора руками или "Заключение договора", "Изменение условий договора" и т.п.
170 lu55
 
22.09.12
00:17
имел ввиду или документами "Заключение договора", "Изменение условий договора" и т.п.