![]() |
|
v7: Ускорение обработки БИ | ☑ | ||
---|---|---|---|---|
0
never_sleep
17.04.14
✎
00:41
|
Ситуация следующая:
В марте забили кучу непроведенных доков (ПланыМеню) с 17го по 31е число. На каждый день - 140 МестХранения, на каждое МестоХранения в среднем по 10 документов. Т.е. в на начало апреля имели за март (в данный момент уже меньше) 140*10*(31-17) = 19 600 ПлановМеню. С апреля в срочном порядке стали эти документы править и проводить. Для наших нужд в мохнатом году (я в этой конторе еще не работал) сторонний прогер существенно допилил ПланМеню. В данный момент работа в базе крайне затруднена. Проведение документов происходит крайне медленно. Как мне показалось, самым трудоемким участком из данного допила является кусок, где вычисляются бухгалтерские итоги: //Создадим таблицу для контроля остатков по списанным товарам на счете 41.2 ТабОстПоСкладу = СоздатьОбъект("ТаблицаЗначений"); ТабОстПоСкладу.НоваяКолонка("Товар"); ТабОстПоСкладу.НоваяКолонка("Сумма"); ТабОстПоСкладу.НоваяКолонка("Количество"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, МестоХранения, 2); Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1); Ит.ВыполнитьЗапрос(, ДатаДок, "41.2",,, 1,, ); ИТ.ВыбратьСубконто(ВидыСубконто.Номенклатура); Пока ИТ.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл ТабОстПоСкладу.НоваяСтрока(); ТабОстПоСкладу.Товар = Ит.Субконто(ВидыСубконто.Номенклатура); ТабОстПоСкладу.Сумма = ИТ.СКД(); ТабОстПоСкладу.Количество = ИТ.СКД("К"); КонецЦикла; Первым делом я вернул актуальность БИ со второго на первый квартал. Это вроде бы ускорило работу, но далеко не так как хотелось бы. Дальше, покопавшись в коде, я исключил лишние подобные куски. Вроде тоже плюс, но тормоза до сих пор жуткие. Система заметно повисает когда рассчитывает БИ. Заметно значительное торможение, когда в строке статуса выводится "расчет бухгалтерских итогов ....". Ремарка относительно проведения данных документов. Около 10 операторов разделили эти 140 учреждений меж собой. Т.е. на каждого по 14. И каждый оператор выбивает документы в очередности не по дате, а по учреждению. Т.е. берет учреждение1 и начинает последовательно проводить по нему доки с 17.03 по 31.03. Потом тоже самое с другим учреждением. Т.о. на данный момент с 17 по 31 у меня куча как проведенных так и непроведенных документов. Итак, у меня несколько вопросов. 1. Не могу понять почему, когда я провожу документ за 25.03, в строке статуса пишется "расчет бухгалтерских итогов с 17.03 по 31.03"? я ведь явно указываю, что мне нужны итоги по "ДатаДок": "Ит.ВыполнитьЗапрос(, ДатаДок, "41.2",,, 1,, )". Зачем их считать на 31.03? Встречал даже Строку вида "расчет бухгалтерских итогов с 01.04 по 25.03". Это вообще как понимать? 2. Есть ли возможность в моем случае как-то ускорить работу? Я крайне слаб в понимании механизма расчета БИ в 1С. Поэтому у меня тлеет надежда, что есть возможность существенно ускорить данный процесс. Ваш совет или подсказка, крайне важны для меня!!! |
|||
1
Холст
17.04.14
✎
01:07
|
Упрощайте учет !!! 19600 ПлановМеню помешали повару уносить домой сумку с едой ?
|
|||
2
Холст
17.04.14
✎
01:09
|
хотя у вас похоже не 140столов, а 140 клиентов
|
|||
3
never_sleep
17.04.14
✎
01:15
|
(1) Особенность организации питания. 140 клиентов. У каждого клиента до 10 видов питания, на каждый вид питания свой ПланМеню. По другому никак. К тому же я спрашиваю решение, которое не потребует кардинального изменения схемы работы. На это в данный момент нет ни времени, ни сил. Возможно, впоследствии что-то и будет сделано. Но в данном случае у меня есть 2 конкретных вопроса, которые я описал выше.
|
|||
4
Холст
17.04.14
✎
01:16
|
можно заменить расчет остатков на момент документа на расчет остатков на конец текущего месяца - это будет быстрее
при некоторых допущениях такая методика не повлечет ошибки |
|||
5
Холст
17.04.14
✎
01:17
|
допущения - проводить документ после которого не должно быть проведенных (по подобию последовательности в регистрах)
|
|||
6
never_sleep
17.04.14
✎
01:20
|
(5) Рассматривал такой вариант. Но к сожалению он был отвергнут руководством. Сейчас необходимо как можно скорее сдавать данные по учреждениям в вышестоящие инстанции. Поэтому руководство говорит, что нужно хотя бы по одному учреждению сдавать. Но сдавать. А не обрабатывать все доки за 17, 18 и т.д. И потом скопом.
|
|||
7
Холст
17.04.14
✎
01:20
|
а если массовое проведение то остатки на начало загнать в общую ТЗ и потом после каждого проведения корректировать эту ТЗ и по ней делать суждения хватает ли остатков очередному доку
|
|||
8
Холст
17.04.14
✎
01:23
|
(6) если документы и отпуск товара УЖЕ свершились - отказаться от контроля остатков вообще, себестоимость вычислить по средней месячной а не скользящей на момент документа
|
|||
9
Холст
17.04.14
✎
01:28
|
а загрузку от организаций не помешало бы электронную сделать , хотя б стандартную эксельку все клиенты (или кто там определяет меню и потребленный ассортимент) по артикулам забили а то наняли 14операторов блин
|
|||
10
never_sleep
17.04.14
✎
01:34
|
(8) К сожалению, по вопросу формирования себестоимости, я могу мало что сказать, ибо пока только пытался ускорить то, что есть. Но могу с уверенностью сказать, что в определении себестоимости загнаны в жесткие рамки определенными организациями. И однозначно не сможем брать её усредненной за месяц или как-то по иному чем сейчас. Но вопрос все же уточню.. как бухгалтер выспится и придет на работу )).
|
|||
11
never_sleep
17.04.14
✎
01:37
|
(9) На самом деле я слукавил, это не совсем операторы, а бухгалтеры-калькуляторы, на которых лежит прямая обязанность по созданию ПлановМеню для учреждений на каждый день. Так что смысла в загрузке нет.
|
|||
12
Попытка1С
17.04.14
✎
01:47
|
Формат базы какой?
|
|||
13
never_sleep
17.04.14
✎
01:48
|
(12) самый продвинутый - дбф )
|
|||
14
Холст
17.04.14
✎
01:50
|
(11) несоответствие: бухи если делают на кажд день то должны были делать ежедневно это БЕЗ заднего числа и тогда бы подошел способ (4)
(10) отказ от средней скользящей обоснован особенно если нет закупок в теч месяца по сильно отличающимся ценам по хорошему решение проблемы - в хорошем методисте по учету, ну а чисто технически - стандартный набор когда не требуется думать: монопольный режим, база в ram диске, патч dbeng32.dll для кеширования записи на уровне винды, больше гигагерц проца и тп |
|||
15
Холст
17.04.14
✎
01:52
|
||||
16
Попытка1С
17.04.14
✎
01:55
|
(13) Терминал?
То что в (0) таблицу можно получить одним прямым запросом, я думаю будет несколько быстрее. |
|||
17
Попытка1С
17.04.14
✎
01:56
|
А в видах субконто стоит отбор?
|
|||
18
never_sleep
17.04.14
✎
02:01
|
(14) Согласен с Вами. Но март у нас был пилотным периодом. Поэтому все вот так - через заднюю дверь. Я думаю, что апрель мы будем забивать/проводить уже по дням. Но острый вопрос стоит по марту. Сроки по отчетам все прошли, руководство мечет.
Технически: Перевел эту базу на новый сервант. 2 - 5620, 12Гб оперы (правда 7ке все равно), отдельный 15К рэйд 10 под базу. Повышения производительности почти не заметил. По повожу "база в ram диске, патч dbeng32.dll для кеширования записи на уровне винды" спасибо за наводку! |
|||
19
never_sleep
17.04.14
✎
02:02
|
(16) Да терминал.
"То что в (0) таблицу можно получить одним прямым запросом, я думаю будет несколько быстрее." Простите, но я слегка нуб и не совсем вас понял (( |
|||
20
Попытка1С
17.04.14
✎
02:05
|
Так если терминал то какое отношение ссылки из (15) имеет к сабжу, если там решается проблема работы по сети с нескольких компов.
|
|||
21
Попытка1С
17.04.14
✎
02:07
|
(19) Через 1sqlite.dll на классе ПрямойЗапрос, можно писать прямые запросы для дбф.
|
|||
22
never_sleep
17.04.14
✎
02:08
|
да (15) для меня не актуален, согласен.
|
|||
23
Попытка1С
17.04.14
✎
02:10
|
Причем я полагаю что дальше идет какой то поиск товара из документа с тем что есть в остатках? Соответственно можно этот кусок переписать на прямой запрос который будет получать только остатки по тем товарам которые есть в документе.
|
|||
24
never_sleep
17.04.14
✎
02:17
|
(17) Мне кажется я вас неправильно тут понял, но все же..
Внутри каждого дока берем его реквизит "МестоХранения" и передаем ищем итоги только по данному МестуХранения. "Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, МестоХранения, 2);" в разрезе Номенклатуры. Номенклатура есть ингридиенты для всех планов меню на "Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);" |
|||
25
never_sleep
17.04.14
✎
02:20
|
(23) Там писанины чужой не комментированной ни разу строк на 400. ((
|
|||
26
Попытка1С
17.04.14
✎
02:22
|
(24) Ну так а зачем нам все остатки по данному складу, если нас видимо должны интересовать только остатки по номенклатуре которая есть в документе.
По поводу отбора, в конфигураторе в свойствах субконто места хранения стоит отбор? (25) Ну надо хотя бы с чего-то начинать. |
|||
27
Холст
17.04.14
✎
02:38
|
в коде из (0) попробуй заменить
Ит.ВыполнитьЗапрос(, ДатаДок, "41.2",,, 1,, ); на Ит.ВыполнитьЗапрос(ДатаДок, ДатаДок, "41.2",,, 1,, ); |
|||
28
Попытка1С
17.04.14
✎
02:39
|
(27) Так будет еще хуже.. При пустой НачДата он обороты не считает.
|
|||
29
never_sleep
17.04.14
✎
02:41
|
(26) Дело вот в чем. Особенность нашей работы, не подлежащая изменению.
Калькулятор забивает на определенную дату и МестоХранения последовательно каждый ПланМеню. Скажем, в первом ПланеМеню была "каша гречневая" с выходом "150 грамм" на 40 человек. А во втором ПланеМеню была "Каша гречневая" но с выходом "200 грамм" на 20 человек. Но случается так, что на первый ПланМеню гречки хватило, а на второй только на половину питающихся. Все равно забиваем и проводим. Есть еще один волшебный самопальный документ, написанный тем же давнишним программистом. Называется он "УсредняемСебестоимость". Когда все ПланыМеню по данному МестуХранения на данную дату набиты, заводится один документ УС, который, скажем нашу гречку раскидывает равными долями между всеми планами меню, чтобы никого не обидеть. Перепроводит все ПМ за данные дату*МестоХранения и каким-то своим способом пересчитывает себестоимость блюд. Там тоже своего рода (черный ящик/вещь в себе) кода эдак на 300 )) Вот такой вот коммунизм. Детали я могу напутать, так как не до конца разобрался. |
|||
30
never_sleep
17.04.14
✎
02:42
|
(27) (28) Так было изначально. Но без "ДатаДок,ДатаДок" работает вроде быстрее.
|
|||
31
Попытка1С
17.04.14
✎
02:45
|
"Но случается так, что на первый ПланМеню гречки хватило, а на второй только на половину питающихся. Все равно забиваем и проводим. "
Это тоже все понятно, а потом под красноту левые приходы лепим, и бабло обналичиваем. Ладно это все понятно. Вопрос в том что зачем каждый раз все остатки получать. Я пока только об этом говорю. |
|||
32
Попытка1С
17.04.14
✎
02:46
|
Вообщем думай автор, поле для дум у тебя есть, а я спать пожалуй.
|
|||
33
never_sleep
17.04.14
✎
02:48
|
(32) Огромное спасибо за помощь!!! А я уже наверное не успею поспать. Через полтора часа светает. А я еще домой не уходил )
|
|||
34
never_sleep
17.04.14
✎
02:55
|
(31) "Это тоже все понятно, а потом под красноту левые приходы лепим, и бабло обналичиваем. Ладно это все понятно."
Я крайне туговат во всех этих схемах. Наверное, хорошо жить не буду ) Если у Вас будет позже время, более подробно не объясните, как все происходит? Мне для самообразования. |
|||
35
never_sleep
17.04.14
✎
03:10
|
(26) отбор по "Номенклатуре" стоит, а по "МестоХранения" нет. Стоит поставить?
|
|||
36
Злопчинский
17.04.14
✎
03:11
|
зачем рассчитывать обороты в БИ, если используется только сальдо?
|
|||
37
Злопчинский
17.04.14
✎
03:14
|
(18) то что "руководство мечет" - это личные проблемы руководства. если хотели (а они ХОТЕЛИ? или на авось надеялись?) чтобы все работало нормально - они думали это САМО ОБРАЗУЕТСЯ? даром? безвозмездно? без ресурсов и прочих затрат - в т.ч. человеческих, квалификационных, технических? вежливо и аккуратно поясните руководству что сейчас. когда ИТ-технологии - во многом тсановятся системообразующими частями компаний - думать надо раньше и сильнее!! это вам не уборщицу нанять!! хорошую уборщицу - кстати тоже непрсото!
|
|||
38
Злопчинский
17.04.14
✎
03:16
|
(28) не знал, учтем!
|
|||
39
never_sleep
17.04.14
✎
03:24
|
(36) А разве есть возможность получить только остатки?
<ТипИтогов> - число - тип отбираемых итогов. Может принимать следующие значения: 1 - остатки и обороты по счету в целом; 2 - обороты между счетами; 3 - первое и второе вместе. По умолчанию: 1. или Выбирать не через "ВыполнитьЗапрос"? |
|||
40
never_sleep
17.04.14
✎
03:25
|
(37) История достойная отдельного топика...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |