|
Печать документа с большим количеством строк | ☑ | ||
---|---|---|---|---|
0
Маркусс
19.11.13
✎
12:11
|
Добрый день.
В УТ 10.3 В инвентаризации вывожу печатную форму "инв-19". По факту в документе 900 строк. Повисает на моменте перебора строки. Уменьшаю количество до 300-печатается нормально. Как разрулить? Спасибо. |
|||
1
ДенисЧ
19.11.13
✎
12:11
|
Искать, почему повисает.
|
|||
2
User_Agronom
19.11.13
✎
12:18
|
Точно подвисает? Может долго какую-то таблицу формирует?
|
|||
3
Маркусс
19.11.13
✎
12:29
|
(2)Запросом выгребается номер дата склад организация и табличная часть целиком.
Потом из результата запроса из табличной части циклом перебираются строки вот таким макаром: Пока ВыборкаСтрокТовары.Следующий() Цикл после этой строки и повисает намертво. минут 10 висело точно. Док из 300 строк формируется секунды за 2 |
|||
4
User_Agronom
19.11.13
✎
12:31
|
(3) Но потом отвисло?
Замер производительности не предлагать? |
|||
5
Маркусс
19.11.13
✎
12:32
|
(4) не отвисло
|
|||
6
Маркусс
19.11.13
✎
12:32
|
(4) или таки упорно ждать? что-то мне подсказывает, что смысла в этом особого нет
|
|||
7
Рэйв
19.11.13
✎
12:33
|
Попробуй транзакцию по 300 строк сделать
|
|||
8
User_Agronom
19.11.13
✎
12:34
|
Поставь в цикл
Сообщить("какая-то фигня"+Выборка.ЛюбоеПоле) Увидишь идёт цикл или нет |
|||
9
Маркусс
19.11.13
✎
12:34
|
кстате база SQL. мож там чего?
|
|||
10
Маркусс
19.11.13
✎
12:36
|
(8) да не идёт цикл. повисает тут же.
в доке на 300 строк всё как полагается, а тут виснет и всё. виснет, имею ввиду, и в конфигураторе тоже. |
|||
11
User_Agronom
19.11.13
✎
12:36
|
нужно видеть код. Если у тебя цикл в цикле, то с увеличением в 3 раза общее время может увеличиться в 27 раз.
А если три вложенности циклов? Возводи 27 в третью степень сам)) |
|||
12
anaed
19.11.13
✎
12:38
|
А может одной из строк тч приплохело? Стоит засечь на какой спотыкается строке.
|
|||
13
Маркусс
19.11.13
✎
12:38
|
Вот запрос
Запрос.Текст = "ВЫБРАТЬ | Номер КАК НомерДокумента, | Дата КАК ДатаДокумента, | Дата КАК ДатаНачалаИнвентаризации, | Организация КАК Руководители, | Организация, | Склад.Представление КАК ПредставлениеСклада, | Товары.( | НомерСтроки КАК Номер, | Номенклатура, | Номенклатура.НаименованиеПолное КАК ТоварНаименование, | Номенклатура." + ТоварКод + " КАК ТоварКод, | ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование, | ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ, | Количество КАК ФактКоличество, | КоличествоУчет КАК БухКоличество, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице | ИНАЧЕ Цена * &Курс / &Кратность | КОНЕЦ КАК Цена, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице | ИНАЧЕ Сумма * &Курс / &Кратность | КОНЕЦ КАК ФактСумма, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице | ИНАЧЕ СуммаУчет * &Курс / &Кратность | КОНЕЦ КАК БухСумма, | ХарактеристикаНоменклатуры КАК Характеристика, | СерияНоменклатуры КАК Серия | ) |ИЗ | Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе | |ГДЕ | ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент |УПОРЯДОЧИТЬ ПО | Товары.НомерСтроки"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); ВыборкаСтрокТовары = Шапка.Товары.Выбрать(); |
|||
14
Маркусс
19.11.13
✎
12:39
|
Вот чего после
Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); ВыборкаСтрокТовары = Шапка.Товары.Выбрать(); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19"; Макет = ПолучитьОбщийМакет("ИНВ19"); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Заполнить(Шапка); СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента); ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации); ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО; ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента; ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации; ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект); Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Руководители, Шапка.ДатаДокумента,); Руководитель = Руководители.Руководитель; Бухгалтер = Руководители.ГлавныйБухгалтер; ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); Ном = 0; НомерСтраницы = 2; ИтогоРезультатИзлишекКолво = 0; ИтогоРезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = 0; ИтогоРезультатНедостачаСумма = 0; // Выводим заголовок таблицы ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1"); ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.Вывести(ЗаголовокТаблицы); КоличествоСтрок = ВыборкаСтрокТовары.Количество(); // Выводим многострочную часть докмента ВыборкаСтрокТовары = Шапка.Товары.Выбрать(); // Создаем массив для проверки вывода МассивВыводимыхОбластей = Новый Массив; // Выводим многострочную часть докмента ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы1"); ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоТаблицы1"); ОбластьПодвала = Макет.ПолучитьОбласть("Подвал"); Пока ВыборкаСтрокТовары.Следующий() Цикл ///////////////////////////тут виснет Если ВыборкаСтрокТовары.Номенклатура = Неопределено Тогда Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли; |
|||
15
Маркусс
19.11.13
✎
12:41
|
(12)удалял первые строки-ничего не поменялось
|
|||
16
User_Agronom
19.11.13
✎
12:43
|
Попробуй так. И скажи на каком й зависло.
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал"); й= 1; Пока ВыборкаСтрокТовары.Следующий() Цикл Сообщить("счетчик "+й); й=й+1; ///////////////////////////тут виснет |
|||
17
anaed
19.11.13
✎
12:47
|
(15) может до конеццикла по выборке покажешь?
Вместо (16) проще уж сообщать ВыборкаСтрокаТовары.Номер + ВыборкаСтрокаТовары.Номенклатура |
|||
18
Маркусс
19.11.13
✎
12:47
|
(16) на первом й
|
|||
19
Tarnum
19.11.13
✎
12:48
|
Попробуй выгрузить строки в Таблицу значений, а уже её потом перебирать
|
|||
20
User_Agronom
19.11.13
✎
12:49
|
(18) Комп слабоват? Таблица большая.
|
|||
21
Маркусс
19.11.13
✎
12:50
|
Пока ВыборкаСтрокТовары.Следующий() Цикл
Если ВыборкаСтрокТовары.Номенклатура = Неопределено Тогда Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) или ВыборкаСтрокТовары.Номенклатура = Неопределено Тогда Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли; МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьМакета); МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице); Если Ном = КоличествоСтрок Тогда МассивВыводимыхОбластей.Добавить(ОбластьПодвала); КонецЕсли; Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ТабДокумент.Вывести(ОбластьИтоговПоСтранице); НомерСтраницы = НомерСтраницы + 1; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.Вывести(ЗаголовокТаблицы); КонецЕсли; ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары); Разница = 0; РазницаСумм = 0; Разница = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество; РазницаСумм = ВыборкаСтрокТовары.ФактСумма - ВыборкаСтрокТовары.БухСумма; Если Разница = 0 Тогда Продолжить; КонецЕсли; Если Разница < 0 И РазницаСумм < 0 Тогда ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница; ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм; ОбластьМакета.Параметры.РезультатИзлишекКолво = 0; ОбластьМакета.Параметры.РезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница); ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм); ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + 0; ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + 0; ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница; ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм; ОбластьМакета.Параметры.РезультатИзлишекКолво = 0; ОбластьМакета.Параметры.РезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница); ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм; ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + 0; ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + 0; Иначе ОбластьМакета.Параметры.РезультатНедостачаКолво = 0; ОбластьМакета.Параметры.РезультатНедостачаСумма = 0; ОбластьМакета.Параметры.РезультатИзлишекКолво = Разница; ОбластьМакета.Параметры.РезультатИзлишекСумма = РазницаСумм; ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + 0; ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + 0; ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + Разница; ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + РазницаСумм; КонецЕсли; ТабДокумент.Вывести(ОбластьМакета); Ном = Ном + 1; КонецЦикла; |
|||
22
Маркусс
19.11.13
✎
12:50
|
(19) типовую обработку переписывать?
|
|||
23
User_Agronom
19.11.13
✎
12:53
|
(21) Клиент, как я понял толстый. Характеристики железа скинь.
|
|||
24
Маркусс
19.11.13
✎
12:54
|
(23)я на сервере уже запустил. ждёмс)) коре и5 16 гб оперативы, правда она скулём вся забита
|
|||
25
Маркусс
19.11.13
✎
13:02
|
7 минут прошло. на сервере картина та же.
|
|||
26
Tarnum
19.11.13
✎
13:03
|
(22) Раз у тебя такие документы не маленькие, попробуй и узнаешь
|
|||
27
Маркусс
19.11.13
✎
13:10
|
Настройки скуля может какие покрутить?
Помогите, други. |
|||
28
mzelensky
19.11.13
✎
13:14
|
(0) попробуй не печатать это документ, а просто получить данные этим запросом в Консоле запросов. Аналогичная ситуация будет или нет?!
Честно говоря запрос мне не очень нравится. |
|||
29
Маркусс
19.11.13
✎
13:24
|
(28) в консоли всё замечательно
|
|||
30
Маркусс
19.11.13
✎
13:45
|
Сделал тупо перебор тч документа.
заработало. |
|||
31
mzelensky
19.11.13
✎
13:46
|
(29) Значит дело не в выборке. Косяк какой-то в твоей обработке и запрос тут не причем, как и развер таблицы.
|
|||
32
mzelensky
19.11.13
✎
13:48
|
(30) Вообще делать подобные выборки не очень правильно:
| Товары.( | НомерСтроки КАК Номер, | Номенклатура, | Номенклатура.НаименованиеПолное КАК ТоварНаименование, | Номенклатура." + ТоварКод + " КАК ТоварКод, | ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование, | ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ, | Количество КАК ФактКоличество, | КоличествоУчет КАК БухКоличество, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице | ИНАЧЕ Цена * &Курс / &Кратность | КОНЕЦ КАК Цена, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице | ИНАЧЕ Сумма * &Курс / &Кратность | КОНЕЦ КАК ФактСумма, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице | ИНАЧЕ СуммаУчет * &Курс / &Кратность | КОНЕЦ КАК БухСумма, | ХарактеристикаНоменклатуры КАК Характеристика, | СерияНоменклатуры КАК Серия | ) Может все-таки перепишешь на обычное левое соединение Таблицы шапки с таблицей товаров? |
|||
33
Маркусс
19.11.13
✎
13:56
|
(32) это типовая обработка.
бухам щас позарез надо. склепал по бырому. заморачиваться ради печати 1 документа в месяц неохота. других задач море. |
|||
34
Маркусс
19.11.13
✎
14:03
|
(34) видимо прогеры из 1ц тем же руководствовались)
|
|||
35
mzelensky
19.11.13
✎
14:03
|
(33) Есть золотое правило: нашел ошибку - устрани ее, т.к. если она появилась единожды, то обязательно вылезет и в будущем (и не факт, что в тот момент ты будешь менее занят).
|
|||
36
vhl
19.11.13
✎
14:16
|
В (4) верный ответ.
|
|||
37
mzelensky
19.11.13
✎
15:05
|
(36) "Замер производительности не предлагать?" - это верный ответ? Вообще-то это не ответ, а наметка в какую сторону капать. Даи какой замер производительности, если он у него тупо зависает на первой же строке
"Пока ВыборкаСтрокТовары.Следующий() Цикл" ??? Что тебе даст замер??? |
|||
38
Маркусс
19.11.13
✎
15:52
|
да ладна спорить)
надо по уму запрос написать с отбрасыванием не выводящихся в печатную форму строк, коих абсолютное большинство, и будет всё замечательно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |