![]() |
![]() |
![]() |
|
Почему в 1С под SQL используют временные расчеты итогов и последовательности? Ø |
☑ | ||
---|---|---|---|---|
0
egor
27.10.05
✎
18:30
|
ИМХО это порождает много ошибок изза необходимости перепроводить базу, для большой базы перепроводить угрожает большим риском и долго! Ведь запрос SQL может вывести нужные итоги за считанные секунды и по партиям и по себестоимости?
|
|||
1
КонецЦикла
27.10.05
✎
18:32
|
Предложения? Все считать от начала времен?
|
|||
2
egor
27.10.05
✎
18:35
|
да я думаю на SQL сервере это разумнее того что мы видим, такие расчеты как в 1С делают для ОЛАП, для больших хранилищ, а для оперативного учета надо SQL по всей базе, ИМХО.
|
|||
3
egor
27.10.05
✎
18:39
|
Я правда тестов не проводил, но если я неправ поправьте!
|
|||
4
КонецЦикла
27.10.05
✎
18:40
|
Атсыпь? Итоги-то неправильные могут быть и год назад... это смотря когда последовательность нарушена
ЗЫ. Не исключаю, что можно отойти от общепринятых принципов и убрать последовательности и т.п. - все переделать и работать только оперативно |
|||
5
Джинн
27.10.05
✎
18:41
|
А какая связь между временным расчетом и последовательностью с "SQL может вывести нужные итоги за считанные секунды". Чего-то я не догоняю :(
|
|||
6
Dymor
27.10.05
✎
18:49
|
(0) Запрос в SQL который за считанные секунды выдаст любые нужные итоги - в студию :)))
|
|||
7
egor
27.10.05
✎
18:49
|
Я сам непонимаю до конца зачем нужно делать временный расчет, но в партиях я хорошо разобрался и думаю, что себестоимость при списании лучше брать запросом SQL по всем документам с начала работы, или я неправ?
|
|||
8
egor
27.10.05
✎
18:52
|
2 6 Я к сожалению только заинтересовался проблемой, провожу теоретические изыскания.
2 5 Ты можешь сущность временного расчета прояснить подробней? |
|||
9
КонецЦикла
27.10.05
✎
18:52
|
Аттестацию проходил? Дядьку с бородой порадовал?
|
|||
10
Женщина
27.10.05
✎
18:53
|
(6) SELECT * FROM SC186
|
|||
11
КонецЦикла
27.10.05
✎
18:57
|
Женщина, ты за кого?
Мот автору написать свою систему, а мы как дураки будем хранить итоги и смотреть на ТА при проведении? |
|||
12
egor
27.10.05
✎
18:58
|
У меня аттестации в реалити, пробовал исправить последовательности на очень больших базах дистребюторских.
|
|||
13
dralex
27.10.05
✎
18:59
|
(7) Перерасчет итогов делается для повышения производительности. Для повышения этой самой производительности 1С пошла по пути сознательной денормализации БД. Не забывай, что 1С работает не только в режиме SQL, но еще и в DBF режиме,в котором такие "лихие и производительные" запросы не проходят. Для этого, кстати, и придумали дурацкий язык запросов 1С.
>> думаю, что себестоимость при списании лучше брать запросом SQL по всем документам с начала работы, или я неправ В случае с 1С - неправ. Правда, стоит отметить, что использующийся механизм повышения производительности получения остатков и оборотов не единственно возможный и чреват как раз теми нерпиятностями о которых ты пишешь. |
|||
14
dralex
27.10.05
✎
19:01
|
(10) И какие итоги/обороты выводит приведенный тобой запрос (к таблице справочника)?
|
|||
15
Женщина
27.10.05
✎
19:02
|
(11) Вадим, я не очень поняла что вы тут обсуждаете, если чесно. Бошка уже совсем не варит. Попросили запрос SQL. Я написала. Execution time: 0:00:00, 553 rows
|
|||
16
egor
27.10.05
✎
19:08
|
Значит надо использовать 1с++ и прямые запросы? Меня ДБФ проблемы на дистребютогской базе в 3Гб не волнуют!
|
|||
17
egor
27.10.05
✎
19:11
|
2 15 Спасибо за идеальный пример! Я об этом и говорил. А с проведениями документов я дела иметь не хочу, пользователь должен сразу видеть, что нехватает ТМЦ а не после проведения!!!
|
|||
18
dralex
27.10.05
✎
19:13
|
>> Значит надо использовать 1с++ и прямые запросы
*В некоторых случаях* прямые запросы деятвительно значительно повышают производительность системы. Но не являются панацеей. Об альтернативном решении повышения производительности, лишенном недостатков присущих 1С, можно посмотреть напр. здесь: http://www.rsdn.ru/article/db/RDBMS.xml |
|||
19
КонецЦикла
27.10.05
✎
19:13
|
2(17) Видеть когда должен? А если он не один и кто-то раньше кнопку нажал? А если исправили задним числом приход?
При работе не задним числом расчет итогов не нужен вообще... что пугает-то? Можно еще и регистры поубирать и шерстить документы |
|||
20
Женщина
27.10.05
✎
19:13
|
1С++
Текст="select |Номенклатура.descr as Наименование, |$Номенклатура.БазоваяЕдиницаИзмерения as [ЕдиницаИзмерения $Перечисление.ЕдиницыИзмерения], |$Номенклатура.Производитель as [Поставщик $Справочник.Производители] |from $Справочник.Номенклатура as Номенклатура |"; ДБ= СоздатьОбъект("ODBCDatabase"); ДБ.Присоеденить1С(); Запрос=СоздатьОбъект("ODBCRecordset"); Запрос.УстБД(ДБ); Запрос.УстРазмерМножестваСтрок(10); Если Запрос.Открыть(Текст)=0 Тогда ТекОшибка=Запрос.ПолучитьОписаниеОшибки(); Если ПустоеЗначение(ТекОшибка)=0 Тогда Сообщить("Ошибка: "+ТекОшибка,"!!!"); Возврат; КонецЕсли; КонецЕсли; ТЗ=СоздатьОбъект("ТаблицаЗначений"); Запрос.ПолучитьРезультатыВ_ТЗ(ТЗ,1); Запрос.Закрыть(); ДБ=""; ТЗ.ВыбратьСтроку(); --- Время выполнения интересует? |
|||
21
dralex
27.10.05
✎
19:17
|
(19)>> При работе не задним числом расчет итогов не нужен вообще
>> Можно еще и регистры поубирать и шерстить документы Не все так просто, особенно когда нужна аналитика. |
|||
22
КонецЦикла
27.10.05
✎
19:18
|
2(21) "При работе не задним числом расчет итогов не нужен вообще" - согласен?
"Можно еще и регистры поубирать и шерстить документы" - нельзя получить аналитику из документов? Можно жить прекрасно и без регистров... это просто средство такое от головняка |
|||
23
dralex
27.10.05
✎
19:26
|
(22) а). Если речь идет о производительности, то, в общем случае, не согласен.
б). Можно, но не быстро. Ты в ссылочку-то из (18) загляни. Мне было интересно. |
|||
24
Шурик71
27.10.05
✎
19:33
|
(20) Не, матушка, если уж приводить время исполнения - то приведи время формирования (без итогов) отчета ,ну, к примеру, по маржинальной прибыли (по оплате, т.е. оплаченной отгрузке) в разрезе товарных групп (см. Номенклатура) и менеджеров по закупкам (признак партии номенклатуры) с принятием в учетной политике списания по ФИФО и наличии факта возвратов товара.
|
|||
25
rusexport
27.10.05
✎
19:34
|
(0) немного тупиковый вариант, хотя и имеющий право на жизнь. Просто представим, что торгуем одной единицей товара в течении 5 лет по 10000 раз в день, и для того, чтобы получить остаток на сегодня - будем пересчитывать 365*5*10000 строк в таблице, теперь представим, что у нас 10000 товаров - вопщем попка приходит со временем, однако при этом можно применить для хранения итогов не отдельную таблицу, а вьюху, в которой будут остатки на сегодня на начало дня, и использовать ее для "оперативного" проведения, но это головняк большой и та же попка, что и временный расчет, только в профиль, хотя теоретически должно побыстрее работать.
(21) все, что попадает в измерение регистров, на 99% взято из документа или реквизитов его реквизитов, такчто для меня с недавних времен стали не понятны оборотные регистры в склных базах. |
|||
26
Женщина
27.10.05
✎
19:35
|
(24) Это довольно сложный запрос. Проще в хранимую процедурку его, чем мучаться с 1С++. Можно я не буду его писать? :-)
|
|||
27
Шурик71
27.10.05
✎
19:38
|
(25)
>> все, что попадает в измерение регистров, на 99% взято из документа Совершенно не обязательно. Там может быть, к примеру, профит :) Да и по любому, все одно в отчетах быстрее обратиться к готовой сумме за период, чем выбирать ее запросом. |
|||
28
dralex
27.10.05
✎
19:41
|
(27) Вопрос в том, как ее, эту готовую цифру, хранить. Как это делает 1С или...?
|
|||
29
rusexport
27.10.05
✎
19:42
|
(27) профит хранишь в измерении? эт так - подкол. при отгрузке товара довольно сложно определить ее себестоимость, поэтому цифра теоретической маржинальной прибыли как таковая мало кого беспокоит, имхо. А обращаяешься к "готовой сумме за период" чем? при этом не забывай, что на больших и очень больших базах помещение в память лишней таблицы с оборотным регистром не есть гут, опятьже мое имхо.
Джинн, скажи что-нибудь на мой бред, я как никак плод твоих давних-давних консуьтаций. |
|||
30
Шурик71
27.10.05
✎
19:44
|
(26) Можно :)
Но думаю, что при большем документообороте даже при весьма грамотно построенном запросе/ХП вычисление данных циферок сильно проиграет готовым итогам. А на самом деле я привел пример достаточно просто вычисляемой по итогам задачи при соответствующем их строении. Бывают и заметно более сложные задачи. К чему это я? А, к тому, что итоги - рулез :) |
|||
31
dralex
27.10.05
✎
19:44
|
(26)>> Это довольно сложный запрос. Проще в хранимую процедурку его
Вопрос не в том, куда его/их засунуть, и не в том, писать ли его/их сразу на T-SQL или с помощью 1С++, а в том, сколько такой вопрос будет выполняться на довольно приличных объемах информации. |
|||
32
КонецЦикла
27.10.05
✎
19:47
|
2(30) Вот, единомышленник... хорошо, что 1С-совцы их хранят (хотя бы есть альтернатива какая-то)
ЗЫ. Ссылку прочитал поперек, интересно |
|||
33
Шурик71
27.10.05
✎
19:49
|
(28) в оборотных регистрах 1С хранит вполне нормально :)
(29) в каком таком измерении? в ресурсе ясное дело. И себестоимость при отгрузке вполне нормально определяется. Конечно, не совсем моментально (для сильно больших баз есть 1С++ & Co); конечно, с некоторыми допущениями/отклонениями (отфактуровки и т.п). Но 99% точность, думаю, обеспечивается. |
|||
34
Женщина
27.10.05
✎
19:50
|
(30) Вы эта... про итоги в шапке? Наслышана.
|
|||
35
Женщина
27.10.05
✎
19:59
|
(31) Уверяю, что быстрее, чем запрос средствами 1С.
Кроме того, можно будет потом сразу таблицу с сервера пропихнуть в Excel. Уже выигрышь в выгрузке в Excel. |
|||
36
Джинн
27.10.05
✎
20:10
|
Я так понимаю суть предыдущих 34 постов - "С какой стороны разбива...", пардон, "хранить или не хранить промежуточные итоги". А никак не "как считать себестоимость".
Есть сторонники и того, и того. Промежуточные итоги - это даже не изобретение 1С. С информационных системах их успешно использует, например, SCALA. С другой стороны есть системы, их не использующие. По моему скромному мнению промежуточные итоги есть гуд. Основываюсь на матюках товарищей, работающих с системами их не использующими. Которые работают с приличными объемами, ессно. При относительно незначительном увеличении объема данных промежуточные итоги прозволяют получить очень хорошую производительность. И даже если это SQL - в этом случае запрос просто еще быстрее отработает. Частный случай промежуточных итогов - итоги на ТА. Хранение итогов в ГОТОВОМ виде есть очень гуд. Никакой SQL-запрос по всему набору данных с группировкой и суммированием не будет быстрее того же SQL-запроса, выгребающего при помощи условия готовый набор данных. Все остальное обсуждение, IMHO, несколько о других, хоть и лежащих рядом, вопросах. |
|||
37
МуМу
27.10.05
✎
20:16
|
Да мало нынче народ книжек умных читает...
А вообще то я знаю запросы на SQL на некоторых БД которые по 5-часов считаются:) Кроме этого почему то все о блокировках забывают. А партионка здесь вообще не катит. Поиском почитать как на www.sql.ru народ расчитывает по FIFO и т.п. - чисто курсорами. Подобные архитектурные реализации обсуждать без привязки к конкретной БД очень долго можно. Ладно нету времени, мне еще пару отчетов дописать нужно. |
|||
38
Шурик71
27.10.05
✎
20:19
|
(35) Уверяю, что запрос ТЕМИ ЖЕ СРЕДСТВАМИ с использованием итогов будет и проще на порядок и быстрее.
А еще уверяю, что при _правильном_ построении регистров большая часть ГРАМОТНЫХ выборок средствами не так уж катострофически сильно проигрывает прямому обращению к БД. Хотя, конечно, проигрывает. |
|||
39
Шурик71
27.10.05
✎
20:29
|
ГРАМОТНЫХ выборок средствами ---> ГРАМОТНЫХ выборок средствами 1C
|
|||
40
dralex
27.10.05
✎
20:31
|
(37)>> Да мало нынче народ книжек умных читает
Муму, ты хорош, как всегда. Пришел, наговорил... А теперь все остальные стоят во всем этом...:) |
|||
41
МуМу
27.10.05
✎
20:48
|
Да просто дежавю. На www.sql.ru там столько копий поломали уже.
Давайте я лучше сразу сделаю вывод - без привязки к конкретной БД(структура,данные,специфика запросов и т.п.) обсуждать это просто бесмысленно. Для некоторых БД структура хранения данных регистров в 1С(ну DateTimeIDDOC и т.п. не в счет) является оптимальной с точки зрения простота -производительность. Если конечно совсем оптималные алгоритмы рассматривать то тут нужно вводить множество уловно-оперативных данных и условно-архивных. Расчитывать статистику обращений, делить по дискам , по вьюхам и т.п. учитывать блокировочные механизмы и т.д и т.п. |
|||
42
dralex
28.10.05
✎
12:38
|
(41)>> без привязки к конкретной БД... обсуждать это просто бесмысленно
Не могу согласиться. Речь идет о проектном решении. Не побоюсь назвать его одним из высокоуровневых патернов проектирования. И о повторном использовании данного или иных проектных решений. Их преимуществах и недостатках. Во всяком случае я обсуждаю именно это. |
|||
43
МуМу
28.10.05
✎
12:45
|
То 42.Несомненно такие исследования есть , этакие томики где рассматриваются различные БД и различные алгоритмы. В пределах данной ветки с ее ограничениями еще раз повторюсь без привязки к БД бесмысленно. Ну очень много писать пришлось бы,да и никто не стал бы этого делать.
|
|||
44
КонецЦикла
28.10.05
✎
12:48
|
Поэтому давайте без извращений... будем использовать то, что в 1С заложено
Ну не может выгрузка итогов на ТА быть медленнее каких-либо расчетов |
|||
45
Morrison
28.10.05
✎
13:00
|
2(13) вы знаете, даже в sql запрос с использованием хранения промежуточных итогов будет работать быстрее нежели запрос по всей базе с расчетом итогов. к тому же надо еще учитывать производительность самого sql-сервера и размер базы, чтобы такие запросы по базе делать в принципе.
|
|||
46
dralex
28.10.05
✎
13:14
|
(45)>> даже в sql запрос с использованием хранения промежуточных итогов будет работать быстрее нежели запрос по всей базе с расчетом итогов
А где я утверждал обратное? Речь шла о том, что 1С применила решение, в котором в жертву производительности принесена нормализация БД. Это может приводить (и часто приводит) к тому, что если расчитывать итоги по документам или пользоваться сохраненными в специальных таблицах, то получается разный результат. Со всеми вытекающими. Чтобы избежать рассогласования данных приходится пересчитывать итого и вновь их сохранять. Поэтому я и писал, что *мне* такое решение не очень нравится. Кроме того, я говорил, что существуют другие решения, повышающие производительность системы. |
|||
47
МуМу
28.10.05
✎
13:36
|
То 46.
В большинстве случаев в денормализации ничего страшного нет если все остальное ноармально реализовано. В 1С есть явные прорблемы с обработкой трнзакций. В результате целостность данных и соответсвенно соглаованность иногда нарушаются. |
|||
48
dralex
28.10.05
✎
13:41
|
(47)>> В большинстве случаев в денормализации ничего страшного нет если все остальное ноармально реализовано
А это когда точно знаем чем платим и за что. Я много раз слышал о том, что "здесь мы денормализуем, зато производительность у нас возрастет..." *Как правило*, мнение о повышении производительности при денормализации структуры в OLTP-системах *чаще всего* оказывалось мифом. >> В 1С есть явные прорблемы с обработкой трнзакций Ты все время говоришь о низкоуровневых проблемах, а я о высокоровневых решениях:). |
|||
49
Lzntk
28.10.05
✎
14:11
|
(21) Грамотно построенные оборотные регистры позволяют строить отчеты в скл версии 1С ШТАТНЫМИ средствами с колоссальной скоростью!
|
|||
50
dralex
28.10.05
✎
14:23
|
>> Грамотно построенные оборотные регистры
Когда я вижу *так* построенную фразу, то у меня создается впечатление, что автор таких строк остальных держит за безграмотных лохов. |
|||
51
fisher
28.10.05
✎
15:26
|
Ветка ни о чем. Нужны ли промежуточные итоги?
Конечно, нужны (когда дают прирост производительности). В 1С реализованы, в целом, грамотно. Автору сабжа посоветовал бы получше разобраться во внутренних механизмах 1С. А то "смешались в кучу кони, люди". И не считать словосочетание "SQL-запрос" заклинанием абсолютного быстродействия. ЗЫ. Вот что лично меня до сих пор очень сильно раздражает в 1С - так это глупое разделение регистров на оборотные и остатков. Не так уж сложно было бы предусмотреть опциональную настройку типов итогов на уровне ресурса регистра (без итогов, обороты, остатки, и то и другое). Всего-то и было бы не одна таблица итогов на регистр, а две. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |