|
v7: 1С зависает при проведении документа | ☑ | ||
---|---|---|---|---|
0
Melcor
29.03.16
✎
11:30
|
Доброго дня. Есть 1С 7.7 ТиС 948. Проблема в том, что если нажать провести в документе поступления, то 1С зависает, снизу пишет обработка строк запроса и уходит в кому, тестирование и исправление не проходит, ждал неделю, так и не ожило, выгрузка-загрузка данных тоже не помогла. Причем зависает не на всех документах, а где много строк, относительно конечно много, например 60
|
|||
1
zak555
29.03.16
✎
11:32
|
внешние компоненты есть ?
|
|||
2
Mikeware
29.03.16
✎
11:33
|
а что говорит по этому поводу старый мудрый еврей Дебаггер?
|
|||
3
Масянька
29.03.16
✎
11:33
|
(0) Открой модуль проведения поступления и посмотри.
|
|||
4
Melcor
29.03.16
✎
11:38
|
Ёк макарёк! Какой-то чудак обозвал поступление розница в Поступление ТМЦ, а в рознице нафигачил мутного кода
|
|||
5
Mikeware
29.03.16
✎
11:39
|
"это просто праздник какой-то"©
|
|||
6
Melcor
29.03.16
✎
11:58
|
Перед проведением есть процедура и в ней вот такой модуль, и почему-то зависает когда запрос пытается выполнить, базе крантец?
СЗНоменклатуры = СоздатьОбъект("СписокЗначений"); ВыгрузитьТабличнуюЧасть(СЗНоменклатуры, "Номенклатура"); сообщить("Проведение 1"); Запрос = СоздатьОбъект("Запрос"); ДатаЗапроса = Мин(ДатаДок, ПолучитьДатуТА()); ТекстЗапроса = " |Период с ДатаЗапроса по ДатаЗапроса; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |РегФирма = Регистр.ОстаткиТМЦ.Фирма; |РегСклад = Регистр.ОстаткиТМЦ.Склад; |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод; |Количество = Регистр.ОстаткиТМЦ.Количество; |Условие (Номенклатура в СЗНоменклатуры); |Условие (РегСклад = Склад); |Условие (РегФирма = Фирма); |Функция ОстКоличество = КонОст(Количество); |Группировка Номенклатура; |Группировка ЦенаПрод; |"; ТаблицаДокумента = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТаблицаДокумента, "Номенклатура, РозничнаяЦена, Коэффициент"); сообщить("Проведение 2"); Запрос.Выполнить(ТекстЗапроса); |
|||
7
Melcor
29.03.16
✎
12:00
|
Может попробовать удалить все файлы регистров и перепровести?
|
|||
8
Злопчинский
29.03.16
✎
12:00
|
В типовой ТиС в проведениях нет запросов.
вывод - кривые руки и отсутсвие извилин ;-) |
|||
9
Mikeware
29.03.16
✎
12:01
|
(8) т.е. типичный "закон соотношения радиусов"
|
|||
10
Злопчинский
29.03.16
✎
12:03
|
(7) сделай как в типовой обычно делается - тупую выгрузку итогов регистра с наложением фильтров и временным расчетом
|
|||
11
Масянька
29.03.16
✎
12:03
|
(4) Коленку или сразу в голову? :)
|
|||
12
Melcor
29.03.16
✎
12:03
|
Самый большой файл RG328 весит 200 метров
(8) база переписанная, при нажатии на ОК или Провести, попадает сначала в свою процедуру, а оттуда уже в выполняется Записать и Провести |
|||
13
Злопчинский
29.03.16
✎
12:03
|
и нахуа остатки получать в поступлении? - вы там что - сразу переоценку делаете при наличии остатков?
|
|||
14
Масянька
29.03.16
✎
12:04
|
(12) Переписывай проведение и перепроводи. Про копию не забудь.
|
|||
15
Злопчинский
29.03.16
✎
12:04
|
(12) Партии. Регистры - незакрыты. Увеличение времени исполнения запросов и выгрузки итогов, увеличение - ощутимое при открытии месяца.
|
|||
16
Melcor
29.03.16
✎
12:04
|
Вот процедура полностью при нажатии на ОК
Процедура ПроверкаОстатков(Режим) Если Константа.ПереоцениватьОстатки = 0 Тогда Если Режим = "ОК" Тогда СтрокаДействийФормы = "#Записать Провести? Закрыть"; Иначе СтрокаДействийФормы = "#Записать Провести"; КонецЕсли; Возврат; КонецЕсли; СЗНоменклатуры = СоздатьОбъект("СписокЗначений"); ВыгрузитьТабличнуюЧасть(СЗНоменклатуры, "Номенклатура"); сообщить("Проведение 1"); Запрос = СоздатьОбъект("Запрос"); ДатаЗапроса = Мин(ДатаДок, ПолучитьДатуТА()); ТекстЗапроса = " |Период с ДатаЗапроса по ДатаЗапроса; |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |РегФирма = Регистр.ОстаткиТМЦ.Фирма; |РегСклад = Регистр.ОстаткиТМЦ.Склад; |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод; |Количество = Регистр.ОстаткиТМЦ.Количество; |Условие (Номенклатура в СЗНоменклатуры); |Условие (РегСклад = Склад); |Условие (РегФирма = Фирма); |Функция ОстКоличество = КонОст(Количество); |Группировка Номенклатура; |Группировка ЦенаПрод; |"; ТаблицаДокумента = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТаблицаДокумента, "Номенклатура, РозничнаяЦена, Коэффициент"); сообщить("Проведение 2"); Запрос.Выполнить(ТекстЗапроса); сообщить("Проведение 3"); ТЗПереоценка = СоздатьОбъект("ТаблицаЗначений"); ТЗПереоценка.НоваяКолонка("Номенклатура", "Справочник.Номенклатура"); ТЗПереоценка.НоваяКолонка("Количество", "Число",,,,10); ТЗПереоценка.НоваяКолонка("ЦенаСтарая", "Число",,,"Цена (стар.)",10); ТЗПереоценка.НоваяКолонка("ЦенаНовая", "Число",,,"Цена (нов.)",10); // В случае дублей строк будет предложено переоцениваем по первой цене Пока Запрос.Группировка("Номенклатура") = 1 Цикл Пока Запрос.Группировка("ЦенаПрод") = 1 Цикл // Отрицательные количества переоценивать не будем Если Запрос.ОстКоличество <= 0 Тогда Продолжить; КонецЕсли; НомСтроки = 0; ТаблицаДокумента.НайтиЗначение(Запрос.Номенклатура, НомСтроки, "Номенклатура"); ТаблицаДокумента.ПолучитьСтрокуПоНомеру(НомСтроки); НоваяЦена = Окр(ТаблицаДокумента.РозничнаяЦена/ТаблицаДокумента.Коэффициент, 2); Если НоваяЦена <> Запрос.ЦенаПрод Тогда ТЗПереоценка.НоваяСтрока(); ТЗПереоценка.Номенклатура = Запрос.Номенклатура; ТЗПереоценка.Количество = Запрос.ОстКоличество; ТЗПереоценка.ЦенаСтарая = Запрос.ЦенаПрод; ТЗПереоценка.ЦенаНовая = НоваяЦена; КонецЕсли; КонецЦикла; КонецЦикла; СЗПарам = СоздатьОбъект("СписокЗначений"); СЗПарам.Установить("Заголовок", "Переоценка остатков"); СЗПарам.Установить("ТекстВопроса", "На складе обнаружены остатки ТМЦ по розничной цене, отличной от розничной цены, назначаемой в документе поступления. Переоценить?"); СЗПарам.Установить("ТаблЗначений", ТЗПереоценка); Если ТЗПереоценка.КоличествоСтрок() = 0 Тогда Если Режим = "ОК" Тогда СтрокаДействийФормы = "#Записать Провести? Закрыть"; Иначе СтрокаДействийФормы = "#Записать Провести"; КонецЕсли; Возврат; КонецЕсли; НачатьТранзакцию(); ДействияПриЗаписи(); Записать(); ЗафиксироватьТранзакцию(); Провести(); ОткрытьФормуМодально("Обработка.ВопросСТаблицейЗначений", СЗПарам, 1); Если СЗПарам = "Да" Тогда Док = СоздатьОбъект("Документ.ПереоценкаРозница"); Док.Новый(); Док.Фирма = Фирма; Док.Склад = Склад; Док.Проект = Проект; Док.Валюта = глРубли; Док.Курс = 1; Док.Кратность = 1; Док.Комментарий = "Переоценка в связи с поступлением нового товара"; Док.ЗагрузитьТабличнуюЧасть(ТЗПереоценка); Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку() = 1 Цикл Док.Единица = Док.Номенклатура.БазоваяЕдиница; Док.Коэффициент = 1; КонецЦикла; Док.Записать(); Док.Провести(); ОткрытьФорму(Док.ТекущийДокумент()); Если Режим = "ОК" Тогда СтрокаДействийФормы = "#Закрыть"; КонецЕсли; ИначеЕсли СЗПарам = "Нет" Тогда Если Режим = "ОК" Тогда СтрокаДействийФормы = "#Закрыть"; КонецЕсли; КонецЕсли; КонецПроцедуры // ПроверкаОстатков() |
|||
17
Melcor
29.03.16
✎
12:05
|
(13) ага
|
|||
18
Масянька
29.03.16
✎
12:05
|
(16) На фига остатки при поступлении?
Ты, кстати, владельца базы спрашивал? |
|||
19
Melcor
29.03.16
✎
12:06
|
(18) Да только щя наткнулся на эту процедуру, до этого сразу запустил тестир и исправ, которая так и непрошла
|
|||
20
Mikeware
29.03.16
✎
12:07
|
(19) а зачем?
|
|||
21
Melcor
29.03.16
✎
12:08
|
(20) Зачем тестирование?
|
|||
22
Злопчинский
29.03.16
✎
12:09
|
(19) "до этого сразу запустил тестир и исправ,"
- долго итоги пересчитывает из-за незакрытых регистров. оставь на сутки - дождешься... |
|||
23
MishaD
29.03.16
✎
12:09
|
(20) мать моя женщина, глянул краем глаза, похоже при приходе товара по новым ценам это счастье переоценивает на них текущий товар на остатках.
|
|||
24
Melcor
29.03.16
✎
12:09
|
(22) таки не дождался, таки удаление файлов регистров и перепроведение всей базы поможет, как считаете?
|
|||
25
Melcor
29.03.16
✎
12:10
|
(23) Агась)
|
|||
26
Mikeware
29.03.16
✎
12:10
|
(21) естественно...
у тебя это способ диагностики? или универссальное лекарство от всех болезней? |
|||
27
Melcor
29.03.16
✎
12:11
|
(26) На здоровой базе спокойнее искать проблему
|
|||
28
Melcor
29.03.16
✎
12:12
|
(26) В половине случаев проблемы исчезали, особенно у тех кто переиндексировть базы не любит
|
|||
29
Melcor
29.03.16
✎
13:53
|
Удаление файлов регистров и перепроведение не помогло (
|
|||
30
Melcor
29.03.16
✎
13:53
|
Друзья, посоветуйте что можно сделать
|
|||
31
Mikeware
29.03.16
✎
13:54
|
(30) позвать программиста....
|
|||
32
Melcor
29.03.16
✎
13:55
|
(31) Но явно не тебя, ни одного совета, зачем в тему заходишь? с чатиком перепутал?
|
|||
33
Mikeware
29.03.16
✎
14:13
|
(32) так тебе эти советы не помогут. Был бы на твоем месте программист - ему б посоветовал...
|
|||
34
Злопчинский
29.03.16
✎
14:44
|
проверять на циклические ссылки, например...
|
|||
35
Phanatom
29.03.16
✎
15:08
|
(8) ТС не правильно вам сказал. Данная функция в модуле формы и вызывается она при нажатии на кнопку "ОК" или "Провести". Сама функция идет в стандартной конфе и срабатывает при выставленной галке в настройках "Переоценивать остатки".
но суть тормозов от этого не меняется. |
|||
36
Phanatom
29.03.16
✎
15:12
|
(30) а если убрать в настройках галку "Переоценивать остатки"(есть такая константа) - тормоза пропадут? Что у вас в программе с границей последовательности?
|
|||
37
Phanatom
29.03.16
✎
15:17
|
хотя если все перепровели, то должна быть на последний документ.
|
|||
38
Melcor
29.03.16
✎
15:58
|
(37) 1С подвисает когда пытаешься выполнить запрос к регистру ОстаткиТМЦ
|
|||
39
Mikeware
29.03.16
✎
16:02
|
(38) ну сделай не запросом.
|
|||
40
HawkEye
29.03.16
✎
18:18
|
(16) феноменальный код )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |