|
v7: При формировании отчёта: OUT OF MEMORY | ☑ | ||
---|---|---|---|---|
0
little_s
31.08.11
✎
17:30
|
на серевре стоит 64-битная винда.
стоит 2005 скуль. 1с.7.7 при формировании одного из очень больших отчетов при приближеннии к 1,5 ГБ отъедаемой памяти выскакиет сообщение OUT OF MEMORY. я так понимаю, что просто 32-битный процесс ограничен таким объемом памяти и если он выходит за эти границы - ошибка. можно ли как-то это победить? может можно увеличить объем отъедаемой памяти? подскажите плиз куда копать. |
|||
1
Goggy
31.08.11
✎
17:31
|
перейти на 8?
|
|||
2
Ёпрст
31.08.11
✎
17:31
|
переписать отчет не предлагать ?
|
|||
3
Господин ПЖ
31.08.11
✎
17:31
|
попробовать занять 1 Гб у системы...
переписать отчет выбирай |
|||
4
andrewks
31.08.11
✎
17:31
|
оптимизировать отчёт не предлагать?
или вывести его за меньший период |
|||
5
smaharbA
31.08.11
✎
17:32
|
может не нужен такой отчет ?
|
|||
6
little_s
31.08.11
✎
17:33
|
(1) это с НГ планируем.. пока надо протянуть на 7.7
|
|||
7
Leksus
31.08.11
✎
17:34
|
(0) запустите на 64-ьитном клиенте
|
|||
8
andrewks
31.08.11
✎
17:34
|
(1) чтобы там кривой отчёт упал ещё быстрее?
|
|||
9
little_s
31.08.11
✎
17:34
|
(3) "попробовать занять 1Гб у системы" - мжно попподробнее??
|
|||
10
andrewks
31.08.11
✎
17:34
|
(7) що?
|
|||
11
FN
31.08.11
✎
17:35
|
переписать отчет
|
|||
12
little_s
31.08.11
✎
17:35
|
(8) просто отчет по многим периодам по всем 60 000 товарам. по 5 разным периодом, где 2 полугодия, 3 месяца, 2 месяца, 1 месяц.
при формирвоании формируется общий файл бвф. разбивать на несколько неудобно. т.к. потом дополнительно придется это склеивать. |
|||
13
little_s
31.08.11
✎
17:36
|
(7) это как?
|
|||
14
Господин ПЖ
31.08.11
✎
17:36
|
/3GB
|
|||
15
Ёпрст
31.08.11
✎
17:36
|
(12) переписывай отчет.
|
|||
16
little_s
31.08.11
✎
17:36
|
(4) выводить за меньший период - не вариант
|
|||
17
little_s
31.08.11
✎
17:37
|
(14) до 3ГБ не дотягиваем.. даже при наличии свободной памяти мансимум 1,7 ГБ и вылетает.
|
|||
18
little_s
31.08.11
✎
17:37
|
(15)ммм.. и я так предполагаю сразу на прямые запросы лучше?
|
|||
19
andrewks
31.08.11
✎
17:38
|
(14) дык отжирает-то не скуль, а 1с вроде
|
|||
20
Ёпрст
31.08.11
✎
17:38
|
(18) лучше да, а так, нам отсюда не видно текст запроса.
|
|||
21
little_s
31.08.11
✎
17:38
|
(19) да.. именно 1С
|
|||
22
Господин ПЖ
31.08.11
✎
17:39
|
(19) причем тут скуль...
|
|||
23
Господин ПЖ
31.08.11
✎
17:39
|
скуль ограничить можно по памяти
|
|||
24
victuan1
31.08.11
✎
17:39
|
(12) Промежуточные переменные обнуляй после их использования в ходе формирования отчета. Максимально типизируй типы в таблицах значений.
|
|||
25
smaharbA
31.08.11
✎
17:41
|
(14) тут это не поможет
|
|||
26
Господин ПЖ
31.08.11
✎
17:41
|
(17) у тебя /3GB включено или нет? если нет - куда тянуться собрался? 2 Гб на процесс и все...
|
|||
27
andrewks
31.08.11
✎
17:42
|
(22) тогда при чём тут /3GB ?
|
|||
28
Господин ПЖ
31.08.11
✎
17:43
|
видяха кстати поди втроенная? она тоже память некисло жрет...
|
|||
29
Leksus
31.08.11
✎
17:46
|
(13) 32-битные приложения в 64-битной среде могут использовать больше памяти чем в 32-битной
Конкретнее: подсистема WoW64 позволяет 32-битным приложениям использовать до 4Гб памяти правда незнаю, работает ли это с 1С 7.7 |
|||
30
andrewks
31.08.11
✎
17:48
|
(29) ты (0) читал вообще?
|
|||
31
Leksus
31.08.11
✎
17:49
|
(30) читал
там ничего не сказано про клиент |
|||
32
andrewks
31.08.11
✎
17:51
|
(31) а, ты вон про чё. но там и не сказано, что 1с запускается на клиентском хосте
(0) как работаете с 1с? запускаете с клиентских машин, или на сервере в терминальнике сидите вместе со скулем? |
|||
33
little_s
31.08.11
✎
17:55
|
(32)все работают в терминале
|
|||
34
little_s
31.08.11
✎
17:56
|
(29) так вот про это и вопрос. нашла в нете , что вроде как можно увеличить объем потребляемой памяти, но не уверена что для 1С подходит
|
|||
35
Leksus
31.08.11
✎
17:58
|
(34)
Подсистема WoW64 не поддерживает следующие программы: программы, скомпилированные для 16-разрядных операционных систем; программы режима ядра, скомпилированные для 32-разрядных операционных систем. http://www.realcoding.net/articles/urok-02-podderzhka-32-bitnykh-prilozhenii-v-64-bitnoi-srede-windows.html |
|||
36
little_s
31.08.11
✎
17:58
|
(+29) кто-нить использовал эти утилиты?
|
|||
37
Ёпрст
31.08.11
✎
18:03
|
(36) нету таких.
|
|||
38
little_s
31.08.11
✎
18:04
|
Преимущество 64-битной среды для 32-битных программИз-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки, простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).
это не работает с 1С? |
|||
39
Ёпрст
31.08.11
✎
18:04
|
(38) нет.
|
|||
40
little_s
31.08.11
✎
18:05
|
(39) ясно .. тогда только переписывать отчет
|
|||
41
Дык ё
31.08.11
✎
18:05
|
(38) это работает. возьми утилиту editbin.exe (идет в составе ms visual studio) и установи в 1cv7s.exe флаг largeaddressaware - получишь 4 гигабайта на x64
|
|||
42
little_s
31.08.11
✎
18:06
|
(41) вот про неё и разговор...
т.е. она реально работает? ок |
|||
43
Ёпрст
31.08.11
✎
18:06
|
(41) есть готовый exe-ник попробовать ?
|
|||
44
Дык ё
31.08.11
✎
18:07
|
+(41) но ты поступишь мудро, если перепишешь свой отчет по-человечески :-)
|
|||
45
Дык ё
31.08.11
✎
18:08
|
(43) у тебя нет визуал студии? О_о
|
|||
46
andrewks
31.08.11
✎
18:08
|
(35) ты щас вообще о чём?
|
|||
47
andrewks
31.08.11
✎
18:09
|
(41) ты сам пробовал? где гарантия, что предприятие будет функционировать корректно?
|
|||
48
Дык ё
31.08.11
✎
18:11
|
(47) да, я пробовал. а гарантию может дать только госстрах :-)
|
|||
49
andrewks
31.08.11
✎
18:11
|
(48) юзал на рабочей базе? какой период?
|
|||
50
andrewks
31.08.11
✎
18:39
|
editbin.exe бесплатно можно взять в составе MASM
|
|||
51
andrewks
31.08.11
✎
18:39
|
||||
52
Ёпрст
31.08.11
✎
23:10
|
(45) есть, но только в другом месте.
ладно,слеплю сам, потестю. |
|||
53
little_s
01.09.11
✎
12:09
|
вобщем.отчитываюсь.. сделала вчера:
Установить Microsoft Visual Studio Start-Run-cmd call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat" editbin /LARGEADDRESSAWARE c:\1cv7s.exe всё началоо работать.... процесс отъел 2.1 ГБ и 1С не вылетела. данные сформировались корректные |
|||
54
little_s
01.09.11
✎
12:10
|
только блин стала формироваться она почему-то в 2 раза почти медленнее.
но может потому что писался паралленльно лог в sql. сейчас запущу для теста без записи лога. |
|||
55
Ёпрст
01.09.11
✎
12:16
|
тоже попробовал, до 3.5 гигов на проц держит, дальше лень смотреть было - прибил процесс.
|
|||
56
Ёпрст
01.09.11
✎
12:17
|
+55 но всё равно, это решение через 1 место.
Переписывай отчет. |
|||
57
little_s
01.09.11
✎
12:45
|
(56) отчет тоже оптимизировала.
самое больное место по памяти , если в таблицах значений есть ссылки... убрадла хранение ссылок, уже намного лучше |
|||
58
Ёпрст
01.09.11
✎
12:48
|
(57) в ТЗ ссылки, это как ?
Мот ты путаешь с Таблицей ? |
|||
59
Ёпрст
01.09.11
✎
12:50
|
+58 ежели всё же Таблица у тебя, то:
1.убери автовысоту со всех строк 2.выкини все расшифровки ячеек 3.замени все объединенные ячейки на галку - по выделенным столбцам 4.выкини все картинки. |
|||
60
little_s
01.09.11
✎
13:00
|
(58)ТЗ.НоваяКолонка("Товар","Справочник.Товары");
вот так |
|||
61
Господин ПЖ
01.09.11
✎
13:02
|
ну дык чего - тормозит или нет?
|
|||
62
Ёпрст
01.09.11
✎
13:03
|
(60) мот ты всё покажешь ?
|
|||
63
little_s
01.09.11
✎
13:04
|
(61) отчет крутится около 3 часов.. как скрутится отпишусь
|
|||
64
little_s
01.09.11
✎
13:05
|
(62) стыдновато :)))
отчет писался давным-давно другими программерами.. а тут сейчас начнут проходиться по личностям сразу же :) |
|||
65
little_s
01.09.11
✎
13:07
|
(+64) а заняться оптимизацией некогда..т.к. готовимся к переходу на 8.2.
но если желаете могу выложить :) если не будете очень лажать мою личность, т.к. писала не Я. |
|||
66
Ёпрст
01.09.11
✎
13:07
|
(63) 3 часа ?!
тебе коленку еще не пристрелили за это ?! |
|||
67
Ёпрст
01.09.11
✎
13:07
|
(65) выкладывай.
|
|||
68
little_s
01.09.11
✎
13:09
|
(66) поэтому его вынесла в автоматическое формирование ночью.. утром пришли.. а данные уже готовы все
|
|||
69
little_s
01.09.11
✎
13:10
|
//*******************************************
Перем ДатаОтчета; //Перем ТекстЗапроса[7]; Перем ТекстЗапроса; Перем ВыбКлиент; Перем ТЗХр[7]; Перем Таб; Перем МинКол; Перем КолПродК[7]; Перем File_dbf; Перем UseDim[7]; Перем ТоварВ; Перем НачОстТов[7]; Перем ПроКол[7]; Перем КолПро[7]; Перем КолПроИ[7]; Перем ПроКолИ[7]; Перем Запрос, Запрос1; Перем ЗапросДи[7]; Перем Склад[7]; Перем ЗапросОстП[7]; Перем Start_Date[7]; Перем End_Date[7]; Перем N_Per; Перем ДефКол[7]; Перем ДефКолИ[7]; Перем ДефКоВ[7]; Перем ДефКоВИ[7]; Перем ОстСк1; Перем ОстСк1И; Перем ОстСкВ; Перем ОстСкВИ; Перем Заказ; Перем ЗаказР; Перем ЗаказИ; Перем ЗаказИР; Перем Инвойс; Перем ИнвойсИ; Перем ЗакКл; Перем ЗакКлИ; Перем Склад_1; Перем СписКлн; Перем СписСкл; Перем ПризнПродажи,ПризнПрихода, ПризнПрихода1, ПризнПрихода2; Процедура ВыбрФайл1(ИмяФайла1) Перем Каталог; ИмяФайла1="Base.dbf"; Если ФС.ВыбратьФайл(0, ИмяФайла1, ПутьВыгрузки, "Выберите файл", "Файл данных (*.dbf) |*.dbf|Все файлы (*.*) |*.*")=1 Тогда ФайлВыгрузки1=ПутьВыгрузки+ИмяФайла1; КонецЕсли; КонецПроцедуры Процедура ПриВыбореСклада() Если (НазваниеНабораПрав()="НОПР") Тогда Если ВыбСклад.Номер=1 Тогда ВыбСклад=Константа.СкладОтгрузкиЗаказногоТовара; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура Crea_file(File_dbf) File_dbf.AddField("KodArticle",2,24,0); //Код товара File_dbf.AddField("Article",2,100,0); //Наименование File_dbf.AddField("PIN",2,20,0); //ПИН File_dbf.AddField("Postavchik",2,30,0); //Поставщик File_dbf.AddField("Analog",2,15,0); //Аналог File_dbf.AddField("sort",1,2,0); //Схема доставки File_dbf.AddField("MinKolAvto",2,15,0); //Минимальное количество в заказе File_dbf.AddField("ZakazPrim",2,15,0); //Примечания по Заказу File_dbf.AddField("Komplekt",1,15,0); //Комплект на автомобиль File_dbf.AddField("Prim",2,15,0); //Примечание File_dbf.AddField("Ves",2,15,0); //Примечание File_dbf.AddField("Limit",2,25,0); //Лимиты File_dbf.AddField("StartQ1",1,19,0); //Остаток на начало периода File_dbf.AddField("StartQ2",1,19,0); File_dbf.AddField("StartQ3",1,19,0); File_dbf.AddField("StartQ4",1,19,0); File_dbf.AddField("StartQ5",1,19,0); File_dbf.AddField("ProKol1",1,19,0); //Продажи File_dbf.AddField("ProKol2",1,19,0); File_dbf.AddField("ProKol3",1,19,0); File_dbf.AddField("ProKol4",1,19,0); File_dbf.AddField("ProKol5",1,19,0); File_dbf.AddField("KolPro1",1,19,0); //Количество продаж File_dbf.AddField("KolPro2",1,19,0); File_dbf.AddField("KolPro3",1,19,0); File_dbf.AddField("KolPro4",1,19,0); File_dbf.AddField("KolPro5",1,19,0); File_dbf.AddField("DefKoV1",1,19,0); //Кол-во человек, спросивших деталь File_dbf.AddField("DefKol1",1,19,0); //Запрашиваемое количество File_dbf.AddField("DefKoV2",1,19,0); File_dbf.AddField("DefKol2",1,19,0); File_dbf.AddField("DefKoV3",1,19,0); File_dbf.AddField("DefKol3",1,19,0); File_dbf.AddField("DefKoV4",1,19,0); File_dbf.AddField("DefKol4",1,19,0); File_dbf.AddField("DefKoV5",1,19,0); File_dbf.AddField("DefKol5",1,19,0); File_dbf.AddField("OstSkl",1,19,0); //Остаток на основных складах File_dbf.AddField("OstSklVse",1,19,0); //Остаток на всех складах File_dbf.AddField("Zakaz",1,19,0); //Остаток заказа File_dbf.AddField("Invois",1,19,0); //Остаток инвойсов File_dbf.AddField("ZakazKl",1,19,0); //Остаток заказов клиентов Если Выб_Розн=1 Тогда File_dbf.AddField("CenaR",1,19,2); //Цена розницы КонецЕсли; Если Выб_М_опт=1 Тогда File_dbf.AddField("CenaM",1,19,2); //Цена М опт КонецЕсли; Если Выб_Опт=1 Тогда File_dbf.AddField("Cena",1,19,2); //Цена опт КонецЕсли; Если Выб_Цена_1=1 Тогда File_dbf.AddField("Cena1",1,19,2); //Цена 1 КонецЕсли; Если Выб_Цена_2=1 Тогда File_dbf.AddField("Cena2",1,19,2); //Цена 2 КонецЕсли; Если Выб_Цена_3=1 Тогда File_dbf.AddField("Cena3",1,19,2); //Цена 3 КонецЕсли; Если Выб_Цена_4=1 Тогда File_dbf.AddField("Cena4",1,19,2); //Цена 4 КонецЕсли; Если Выб_Миним=1 Тогда File_dbf.AddField("CenaMin",1,19,2); //Цена Мин КонецЕсли; File_dbf.AddField("CenaZak",1,19,2); //Цена закупки File_dbf.AddField("Valuta",2,19,0); //Валюта закупки File_dbf.AddField("ProgSS",1,19,2); // Прогнозная себестоимость в деньгах File_dbf.AddField("Xodovaia",2,3,0); //Ходовая File_dbf.AddField("Rasprodaza",1,2,0); //Распродажа File_dbf.AddField("Gr",2,24,0); //родитель родитель File_dbf.AddField("GrGr",2,24,0); //род род род File_dbf.AddField("GrGrGr",2,24,0); //род File_dbf.AddField("Original",2,100,0); //род File_dbf.CreateFile(ФайлВыгрузки1); КонецПроцедуры Процедура Crea_file1(File_dbf) File_dbf.AddField("KodArticle",2,24,0); //Код товара File_dbf.AddField("Article",2,100,0); //Наименование File_dbf.AddField("PIN",2,20,0); //ПИН File_dbf.AddField("Postavchik",2,30,0); //Поставщик File_dbf.AddField("Analog",2,15,0); //Аналог File_dbf.AddField("sort",1,2,0); //Схема доставки File_dbf.AddField("MinKolAvto",2,15,0); //Минимальное количество в заказе File_dbf.AddField("ZakazPrim",2,15,0); //Примечания по Заказу File_dbf.AddField("Komplekt",1,15,0); //Комплект на автомобиль File_dbf.AddField("Prim",2,15,0); //Примечание File_dbf.AddField("Ves",2,15,0); //Примечание File_dbf.AddField("Limit",2,25,0); //Лимиты File_dbf.AddField("StartQ1",1,19,0); //Остаток на начало периода File_dbf.AddField("StartQ2",1,19,0); File_dbf.AddField("StartQ3",1,19,0); File_dbf.AddField("StartQ4",1,19,0); File_dbf.AddField("StartQ5",1,19,0); File_dbf.AddField("ProKol1",1,19,0); //Продажи File_dbf.AddField("ProKol2",1,19,0); File_dbf.AddField("ProKol3",1,19,0); File_dbf.AddField("ProKol4",1,19,0); File_dbf.AddField("ProKol5",1,19,0); File_dbf.AddField("KolPro1",1,19,0); //Количество продаж File_dbf.AddField("KolPro2",1,19,0); File_dbf.AddField("KolPro3",1,19,0); File_dbf.AddField("KolPro4",1,19,0); File_dbf.AddField("KolPro5",1,19,0); File_dbf.AddField("DefKoV1",1,19,0); //Кол-во человек, спросивших деталь File_dbf.AddField("DefKol1",1,19,0); //Запрашиваемое количество File_dbf.AddField("DefKoV2",1,19,0); File_dbf.AddField("DefKol2",1,19,0); File_dbf.AddField("DefKoV3",1,19,0); File_dbf.AddField("DefKol3",1,19,0); File_dbf.AddField("DefKoV4",1,19,0); File_dbf.AddField("DefKol4",1,19,0); File_dbf.AddField("DefKoV5",1,19,0); File_dbf.AddField("DefKol5",1,19,0); File_dbf.AddField("OstSkl",1,19,0); //Остаток на основных складах File_dbf.AddField("OstSklVse",1,19,0); //Остаток на всех складах File_dbf.AddField("Zakaz",1,19,0); //Остаток заказа File_dbf.AddField("Invois",1,19,0); //Остаток инвойсов File_dbf.AddField("ZakazKl",1,19,0); //Остаток заказов клиентов Если Выб_Розн=1 Тогда File_dbf.AddField("CenaR",1,19,2); //Цена розницы КонецЕсли; Если Выб_М_опт=1 Тогда File_dbf.AddField("CenaM",1,19,2); //Цена М опт КонецЕсли; Если Выб_Опт=1 Тогда File_dbf.AddField("Cena",1,19,2); //Цена опт КонецЕсли; Если Выб_Цена_1=1 Тогда File_dbf.AddField("Cena1",1,19,2); //Цена 1 КонецЕсли; Если Выб_Цена_2=1 Тогда File_dbf.AddField("Cena2",1,19,2); //Цена 2 КонецЕсли; Если Выб_Цена_3=1 Тогда File_dbf.AddField("Cena3",1,19,2); //Цена 3 КонецЕсли; Если Выб_Цена_4=1 Тогда File_dbf.AddField("Cena4",1,19,2); //Цена 4 КонецЕсли; Если Выб_Миним=1 Тогда File_dbf.AddField("CenaMin",1,19,2); //Цена Мин КонецЕсли; File_dbf.AddField("CenaZak",1,19,2); //Цена закупки File_dbf.AddField("Valuta",2,19,0); //Валюта закупки File_dbf.AddField("Xodovaia",2,3,0); //Ходовая File_dbf.AddField("Rasprodaza",1,2,0); //Распродажа File_dbf.AddField("DataWiev",1,2,0); //ДатаОтчета File_dbf.AddField("Gr",2,24,0); //родитель родитель File_dbf.AddField("GrGr",2,24,0); //род род род File_dbf.AddField("GrGrGr",2,24,0); //род File_dbf.AddField("Original",2,100,0); //род File_dbf.CreateFile(ФайлВыгрузки1); КонецПроцедуры Процедура Клик2() Если Use2=1 Тогда Форма.ДатаНач2.Видимость(1); Форма.ДатаКон2.Видимость(1); Else Форма.ДатаНач2.Видимость(0); Форма.ДатаКон2.Видимость(0); Use3=0; Форма.ДатаНач3.Видимость(0); Форма.ДатаКон3.Видимость(0); Use4=0; Форма.ДатаНач4.Видимость(0); Форма.ДатаКон4.Видимость(0); КонецЕсли КонецПроцедуры Процедура Клик3() Если Use3=1 Тогда Форма.ДатаНач3.Видимость(1); Форма.ДатаКон3.Видимость(1); Use2=1; Клик2(); Else Форма.ДатаНач3.Видимость(0); Форма.ДатаКон3.Видимость(0); Use4=0; Форма.ДатаНач4.Видимость(0); Форма.ДатаКон4.Видимость(0); КонецЕсли КонецПроцедуры Процедура Клик4() Если Use4=1 Тогда Форма.ДатаНач4.Видимость(1); Форма.ДатаКон4.Видимость(1); Use3=1; Клик3(); Else Форма.ДатаНач4.Видимость(0); Форма.ДатаКон4.Видимость(0); КонецЕсли КонецПроцедуры Процедура Клик5() Если Use5=1 Тогда Форма.ДатаНач5.Видимость(1); Форма.ДатаКон5.Видимость(1); Use4=1; Клик4(); Else Форма.ДатаНач5.Видимость(0); Форма.ДатаКон5.Видимость(0); КонецЕсли КонецПроцедуры // Процедура СформироватьСтрокуТаб(Выв_Строка) Лимиты=СоздатьОбъект("Справочник.БухЛимиты"); // Формируем шапку таблицы Таб.ВывестиСекцию(Выв_Строка+"|Верт_товар"); Тов=ЗапросОстП[1].Товар; Если дбф=1 Тогда File_dbf.Add(); File_dbf.KodArticle=Тов.Код; File_dbf.Article=Тов.Наименование; File_dbf.PIN=Тов.PIN; Если Выв_Строка="Группа" Тогда Иначе File_dbf.Postavchik=Тов.Поставщик.Наименование; File_dbf.Analog=Тов.Аналог; Лимиты.ИспользоватьВладельца(Тов); Лимиты.ВыбратьЭлементы(); Пока Лимиты.ПолучитьЭлемент()=1 Цикл File_dbf.sort=Лимиты.Схема; КонецЦикла; File_dbf.MinKolAvto=Тов.МинКолЗак; File_dbf.ZakazPrim=Тов.Заказ.Наименование; File_dbf.Komplekt=Тов.Комплект; File_dbf.Ves=Тов.Вес; File_dbf.Prim=Тов.КодТНВЭД.ТамПошлина; File_dbf.Xodovaia=Строка(Тов.Категория); File_dbf.Rasprodaza=Тов.Распродажа; File_dbf.Limit=Строка(МинКол); File_dbf.Gr=Тов.Родитель.Родитель.Код; File_dbf.GrGr=Тов.Родитель.Родитель.Родитель.Код; File_dbf.GrGrGr=Тов.Родитель.Код; Попытка File_dbf.DataWiev=ДатаКон1; Исключение КонецПопытки; КонецЕсли; КонецЕсли; Для ncl=1 По N_Per Цикл Если ncl=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Продажи"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.StartQ1=НачОстТов[ncl]; //Начальный остаток File_dbf.ProKol1=Прокол[ncl]; //Продажи КонецЕсли; КонецЕсли; Else Таб.ПрисоединитьСекцию(Выв_Строка+"|ПродажиП"); Если дбф=1 Тогда Если ncl=2 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.StartQ2=НачОстТов[ncl]; //Начальный остаток File_dbf.ProKol2=Прокол[ncl]; КонецЕсли; ИначеЕсли ncl=3 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.StartQ3=НачОстТов[ncl]; //Начальный остаток File_dbf.ProKol3=Прокол[ncl]; КонецЕсли; ИначеЕсли ncl=4 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.StartQ4=НачОстТов[ncl]; //Начальный остаток File_dbf.ProKol4=Прокол[ncl]; КонецЕсли; ИначеЕсли ncl=5 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.StartQ5=НачОстТов[ncl]; //Начальный остаток File_dbf.ProKol5=Прокол[ncl]; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Для ncl=1 По N_Per Цикл Если ncl=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|КолПрод"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.KolPro1=КолПро[ncl]; //Количество продаж КонецЕсли; КонецЕсли; Else Таб.ПрисоединитьСекцию(Выв_Строка+"|КолПродП"); Если дбф=1 Тогда Если ncl=2 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.KolPro2=КолПро[ncl]; КонецЕсли; ИначеЕсли ncl=3 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.KolPro3=КолПро[ncl]; КонецЕсли; ИначеЕсли ncl=4 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.KolPro4=КолПро[ncl]; КонецЕсли; ИначеЕсли ncl=5 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.KolPro5=КолПро[ncl]; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Для ncl=1 По N_Per Цикл Если ncl=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Дефицит"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.DefKoV1=ДефКоВ[ncl]; //Кол-во человек, спросивших деталь File_dbf.DefKol1=ДефКол[ncl] ; //Запрашиваемое количество КонецЕсли; КонецЕсли; Else Таб.ПрисоединитьСекцию(Выв_Строка+"|ДефицитП"); Если дбф=1 Тогда Если ncl=2 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.DefKoV2=ДефКоВ[ncl]; File_dbf.DefKol2=ДефКол[ncl] ; КонецЕсли; ИначеЕсли ncl=3 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.DefKoV3=ДефКоВ[ncl]; File_dbf.DefKol3=ДефКол[ncl] ; КонецЕсли; ИначеЕсли ncl=4 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.DefKoV4=ДефКоВ[ncl]; File_dbf.DefKol4=ДефКол[ncl] ; КонецЕсли; ИначеЕсли ncl=5 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.DefKoV5=ДефКоВ[ncl]; File_dbf.DefKol5=ДефКол[ncl] ; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если (НазваниеНабораПрав()="НОПР") Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Остаток"); Иначе Таб.ПрисоединитьСекцию(Выв_Строка+"|Остаток"); Таб.ПрисоединитьСекцию(Выв_Строка+"|Заказ"); КонецЕсли; Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.OstSkl=ОстСк1 ; //Остаток на складе File_dbf.OstSklVse=ОстСкВ ; //Остаток на складе КонецЕсли; File_dbf.ZakazKl=ЗакКл ; //Заказы клиентов КонецЕсли; // Надо вставить колонки цен каталога Если Выб_Розн=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_Розн"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.CenaR = глОпределениеЦены(Контекст,Тов, глПТРЦР,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_М_опт=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_МОпт"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.CenaM=глОпределениеЦены(Контекст,Тов,глПТРЦМО,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Опт=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_Опт"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.Cena = глОпределениеЦены(Контекст,Тов,глПТРЦО,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Цена_1=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_1"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.Cena1= глОпределениеЦены(Контекст,Тов,Перечисление.ТипыРасхЦен.Цена1,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Цена_2=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_2"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.Cena2 = глОпределениеЦены(Контекст,Тов,Перечисление.ТипыРасхЦен.Цена2,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Цена_3=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_3"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.Cena3 = глОпределениеЦены(Контекст,Тов,Перечисление.ТипыРасхЦен.Цена3,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Цена_4=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_4"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.Cena4 = глОпределениеЦены(Контекст,Тов,Перечисление.ТипыРасхЦен.Цена4,0); КонецЕсли; КонецЕсли; КонецЕсли; Если Выб_Миним=1 Тогда Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_М"); Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.CenaMin = глОпределениеЦены(Контекст,Тов,Перечисление.ТипыРасхЦен.Цена_М,0); КонецЕсли; КонецЕсли; КонецЕсли; Если _ЦенаПост = 1 Тогда Если Выв_Строка="Группа" Тогда Иначе СпрПост = СоздатьОбъект("Справочник.ЦеныПоставщиков"); СпрПост.ИспользоватьВладельца(Тов); СпрПост.ПорядокРеквизита("Поставщик"); СпрПост.ИспользоватьДату(ПолучитьДатуТА() ); СпрПост.ВыбратьЭлементы(); ЦП = ""; ПослПост = ПолучитьПустоеЗначение("Справочник.Клиенты"); Пока СпрПост.ПолучитьЭлемент() = 1 Цикл Если ПослПост <> СпрПост.Поставщик Тогда Если СокрЛП(ЦП) = "" Тогда Иначе ЦП = ЦП + ";"; КонецЕсли; ЦП = Цп +СокрЛП(СпрПост.Поставщик) + ":" + Строка(СпрПост.Количество) + "-" + Строка(СпрПост.ЦенаЗаказа); ПослПост = СпрПост.Поставщик; Иначе ЦП = ЦП + "," + Строка(СпрПост.Количество) + "-" + Строка(СпрПост.ЦенаЗаказа); КонецЕсли; КонецЦикла; КонецЕсли; Таб.ПрисоединитьСекцию(Выв_Строка+"|Цена_Пост"); КонецЕсли; Если дбф=1 Тогда Если Выв_Строка="Группа" Тогда Иначе File_dbf.CenaZak=Тов.Прих_Цена; File_dbf.Valuta=Тов.ВалютаЗакуп.Сокр_назв; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура Сформировать(ncl) ТекстЗапроса="Период с {Start_Date[ncl]}"; Если End_Date[N_Per]>=ПолучитьДатуТА() Тогда End_Date[N_Per]=ПолучитьДатуТА(); ТекстЗапроса= ТекстЗапроса+";"; Иначе ТекстЗапроса= ТекстЗапроса+" по {End_Date[ncl]};"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" //"//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Товар = Справочник.Товары.ТекущийЭлемент, | Регистр.ОстаткиТоваров.Товар, | Регистр.Дефицит.Товар, | Регистр.Заказы.Товар, | Регистр.ЗаказыПлановые.Товар, | Регистр.ЗаказыВПути.Товар; |Поставщик = Справочник.Товары.Поставщик, | Регистр.ОстаткиТоваров.Товар.Поставщик, | Регистр.Дефицит.Товар.Поставщик, | Регистр.Заказы.Товар.Поставщик, | Регистр.ЗаказыПлановые.Товар.Поставщик, | Регистр.ЗаказыВПути.Товар.Поставщик; |Клиент = Регистр.ОстаткиТоваров.ТекущийДокумент.РасходнаяКредит.Клиент, | Регистр.ОстаткиТоваров.ТекущийДокумент.ПриходнаяКредит.Клиент, | Регистр.Дефицит.Клиент; |РежимПродажи = Регистр.ОстаткиТоваров.ТекущийДокумент.РасходнаяКредит.Вариант; |Склад = Регистр.ОстаткиТоваров.Склад.Номер; |Склад1 = Регистр.ОстаткиТоваров.Склад.NewCity; |П_СтатусД = Регистр.ОстаткиТоваров.ТекущийДокумент.РасходнаяКредит.ПризнакНакладной; |П_СтатусД1 = Регистр.ОстаткиТоваров.ТекущийДокумент.ПриходнаяКредит.ПризнакНакладной; |ОстКол = Регистр.ОстаткиТоваров.ОстатокТовара; |ДефВопр = Регистр.Дефицит.Вопрос; |ДефКолич = Регистр.Дефицит.Количество; |Заказы = Регистр.Заказы.Количество; |ЗаказыГод = Регистр.ЗаказыПлановые.Количество; |Инвойсы = Регистр.ЗаказыВПути.Количество; |Функция НачКолТ = НачОст(ОстКол); |Функция ТПродажа = Расход(ОстКол) когда((П_СтатусД=Перечисление.ПризнРасхНакл.Продажа) и (РежимПродажи<>ПризнакПродажи)); |Функция ТВозврат = Приход(ОстКол) когда(П_СтатусД1=ПризнПрихода); |Функция ТВозврат1 = Приход(ОстКол) когда(П_СтатусД1=ПризнПрихода1); |Функция ТВозврат2 = Приход(ОстКол) когда(П_СтатусД1=ПризнПрихода2); |Функция КонКолТ = КонОст(ОстКол); |Функция Кол_воП=Счётчик() когда((П_СтатусД=Перечисление.ПризнРасхНакл.Продажа) и (РежимПродажи<>ПризнакПродажи)); |Функция Кол_воВ=Счётчик() когда((П_СтатусД1=ПризнПрихода) или (П_СтатусД1=ПризнПрихода1) или (П_СтатусД1=ПризнПрихода2)); |Функция КоВ=Сумма(ДефВопр); |Функция КоЛ=Сумма(ДефКолич); |Функция КолЗаказов = КонОст(Заказы); |Функция КолЗаказовГод = КонОст(ЗаказыГод); |Функция КолИнвойсов = КонОст(Инвойсы); |Группировка Товар упорядочить по Товар.Наименование все; |Условие((Склад1=1)); |Условие((Товар в ВыбТовар)); |Условие((Поставщик в ВыбПоставщик)); |"//}}ЗАПРОС ; Если _ВсюРозницу=1 Тогда ТекстЗапроса=ТекстЗапроса+"Условие (Склад>1);"; КонецЕсли; Если розП=1 Тогда ТекстЗапроса=ТекстЗапроса+"Условие (Клиент в СписКлн);"; ТекстЗапроса=ТекстЗапроса+"Условие (РежимПродажи=глРозница);"; //ТекстЗапроса=ТекстЗапроса+"Условие (Клиент.РежимПродажи=глРозница);"; КонецЕсли; КонецПроцедуры Процедура ОбороткаЗаПериоды() Если дбф=1 Тогда Если ПустаяСтрока(ФайлВыгрузки1)=1 Тогда Предупреждение("Не указан файл"); Возврат; КонецЕсли; File_dbf=СоздатьОбъект("Xbase"); Crea_file(File_dbf); File_dbf.AutoSave(1); КонецЕсли; // Определяем кол-во перидов и заполняем массив интервалов N_Per=5; Если Use5=0 Тогда N_Per=4 КонецЕсли; Если Use4=0 Тогда N_Per=3 КонецЕсли; Если Use3=0 Тогда N_Per=2 КонецЕсли; Если Use2=0 Тогда N_Per=1 КонецЕсли; Если ПустоеЗначение(ВыбСклад)=1 Тогда СписКлн=СоздатьОбъект("СписокЗначений"); Скл=СоздатьОбъект("Справочник.Склады"); Скл.ВыбратьЭлементы(); Пока Скл.ПолучитьЭлемент()=1 Цикл Если ПустоеЗначение(Скл.КлиентРасх)=0 Тогда // ПустоеЗначение(Скл.Клиент) СписКлн.ДобавитьЗначение(Скл.Клиент); КонецЕсли; КонецЦикла; Иначе СписКлн=ВыбСклад.Клиент; КонецЕсли; СпрВидРасх=СоздатьОбъект("Справочник.ВидыРасходов"); Если СпрВидРасх.НайтиПоНаименованию("1402 Содержание легкового транспорта",0)>0 Тогда ВыбВидРасходов=СпрВидРасх.ТекущийЭлемент(); Иначе ВыбВидРасходов=""; КонецЕсли; Если СпрВидРасх.НайтиПоНаименованию("1403 Содержание грузового транспорта",0)>0 Тогда ВыбВидРасходов1=СпрВидРасх.ТекущийЭлемент(); Иначе ВыбВидРасходов1=""; КонецЕсли; Склад_1=глЦентрСкл; Для ncl=1 По N_Per Цикл Если ncl=1 Тогда Start_date[ncl]=ДатаНач1; End_Date[ncl]=ДатаКон1; КонецЕсли; Если ncl=2 Тогда Start_date[ncl]=ДатаНач2; End_Date[ncl]=ДатаКон2; КонецЕсли; Если ncl=3 Тогда Start_date[ncl]=ДатаНач3; End_Date[ncl]=ДатаКон3; КонецЕсли; Если ncl=4 Тогда Start_date[ncl]=ДатаНач4; End_Date[ncl]=ДатаКон4; КонецЕсли; Если ncl=5 Тогда Start_date[ncl]=ДатаНач5; End_Date[ncl]=ДатаКон5; КонецЕсли; КонецЦикла; ОстСк1=0;ОстСк1И=0; ОстСкВ=0;ОстСкВИ=0; Заказ=0;ЗаказИ=0;ЗаказИР=0; Инвойс=0;ИнвойсИ=0; ЗакКл=0;ЗакКлИ=0; ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("KodArticle","Строка"); ТЗ.НоваяКолонка("Article","Строка"); ТЗ.НоваяКолонка("PIN","Стрка"); ТЗ.НоваяКолонка("Postavchik","Строка"); ТЗ.НоваяКолонка("Analog","Строка"); ТЗ.НоваяКолонка("sort","Число",2); ТЗ.НоваяКолонка("MinKolAvto","Число"); ТЗ.НоваяКолонка("ZakazPrim","Строка"); ТЗ.НоваяКолонка("Komplekt","Число"); ТЗ.НоваяКолонка("Prim","Строка"); ТЗ.НоваяКолонка("Ves","Число"); ТЗ.НоваяКолонка("Xodovaia"); ТЗ.НоваяКолонка("Limit","Число"); ТЗ.НоваяКолонка("Rasprodaza"); //Распродажа ТЗ.НоваяКолонка("ProgSS","Число"); ТЗ.НоваяКолонка("StartQ1","Число",19); ТЗ.НоваяКолонка("StartQ2","Число",19); ТЗ.НоваяКолонка("StartQ3","Число",19); ТЗ.НоваяКолонка("StartQ4","Число",19); ТЗ.НоваяКолонка("StartQ5","Число",19); ТЗ.НоваяКолонка("ProKol1","Число",19); ТЗ.НоваяКолонка("ProKol2","Число",19); ТЗ.НоваяКолонка("ProKol3","Число",19); ТЗ.НоваяКолонка("ProKol4","Число",19); ТЗ.НоваяКолонка("ProKol5","Число",19); ТЗ.НоваяКолонка("KolPro1","Число",19); ТЗ.НоваяКолонка("KolPro2","Число",19); ТЗ.НоваяКолонка("KolPro3","Число",19); ТЗ.НоваяКолонка("KolPro4","Число",19); ТЗ.НоваяКолонка("KolPro5","Число",19); ТЗ.НоваяКолонка("DefKoV1","Число",19); ТЗ.НоваяКолонка("DefKoV2","Число",19); ТЗ.НоваяКолонка("DefKoV3","Число",19); ТЗ.НоваяКолонка("DefKoV4","Число",19); ТЗ.НоваяКолонка("DefKoV5","Число",19); ТЗ.НоваяКолонка("DefKol1","Число",19); ТЗ.НоваяКолонка("DefKol2","Число",19); ТЗ.НоваяКолонка("DefKol3","Число",19); ТЗ.НоваяКолонка("DefKol4","Число",19); ТЗ.НоваяКолонка("DefKol5","Число",19); ТЗ.НоваяКолонка("OstSkl","Число",19); ТЗ.НоваяКолонка("OstSklVse","Число",19); ТЗ.НоваяКолонка("Zakaz","Число",19); ТЗ.НоваяКолонка("Invois","Число",19); ТЗ.НоваяКолонка("GR","Строка"); ТЗ.НоваяКолонка("GRGR","Строка"); ТЗ.НоваяКолонка("GRGRGR","Строка"); ТЗ.НоваяКолонка("Original","Строка"); ТЗ.НоваяКолонка("ЭтоГруппа","Число"); ТЗ.НоваяКолонка("ЦенаОпт","Число"); ТЗ.НоваяКолонка("ЦенаМОпт","Число"); Тз.НоваяКолонка("ПрихЦена","Число"); ТЗ.НоваяКолонка("ВалютаЗакупки","Строка"); Таб=СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Титры|ВертТовар"); Таб.ПрисоединитьСекцию("Титры|Продажи1"); Таб.ПрисоединитьСекцию("Титры|Дефицит1"); Если Use2=1 Тогда Таб.ПрисоединитьСекцию("Титры|Продажи2"); Таб.ПрисоединитьСекцию("Титры|Дефицит2"); КонецЕсли; Если Use3=1 Тогда Таб.ПрисоединитьСекцию("Титры|Продажи3"); Таб.ПрисоединитьСекцию("Титры|Дефицит3"); КонецЕсли; Если Use4=1 Тогда Таб.ПрисоединитьСекцию("Титры|Продажи4"); Таб.ПрисоединитьСекцию("Титры|Дефицит4"); КонецЕсли; Если Use5=1 Тогда Таб.ПрисоединитьСекцию("Титры|Продажи5"); Таб.ПрисоединитьСекцию("Титры|Дефицит5"); КонецЕсли; Таб.ПрисоединитьСекцию("Титры|Заказы"); //СформироватьСтрокуТаб("Титры"); Лимиты=СоздатьОбъект("Справочник.БухЛимиты"); Спр=СоздатьОбъект("Справочник.Лимит"); ncl=1; Запрос=СоздатьОбъект("Запрос"); ТекстЗапроса= "//{{ЗАПРОС(Сформировать1) |Обрабатывать НеПомеченныеНаУдаление; |Период с ДатаНач1 по ДатаКон1; |Товар & |
|||
70
Ёпрст
01.09.11
✎
13:15
|
(69) где остальной кусок ?
|
|||
71
Ёпрст
01.09.11
✎
13:24
|
(69) где остальной кусок кода ?
кинь лучше как внешний файлик. |
|||
72
ЧеловекДуши
01.09.11
✎
13:28
|
Попробуй оптимизировать отчет.
Даже на 64-битной винде, 1С использует только 2 гига :) |
|||
73
little_s
01.09.11
✎
17:06
|
(+71) завтра кину внешний.. сейчас уже не на работе.
(72) протестировано.. использует больше.. уменя 2.1Гб использовала. |
|||
74
little_s
01.09.11
✎
17:07
|
(71) а куда скинуть?
|
|||
75
Ёпрст
01.09.11
✎
17:12
|
(74) на любую файлопомойку.
Я на сколько понял, у тебя запрос в цикле по периодам + заполнение где-то /зачем-то невъебенистической ТЗ, которая и жрёт всю память, хотя попутно в дбф файлик всё пишется. Для начала, выкини ТЗ из кода совсем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |