Имя: Пароль:
1C
1C 7.7
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) феноменальный код )))
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.