Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: зависание 7.7
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
alex040269
Платформа 7.70.027
Конфигурация ТиС, переписанная вдоль и поперек. База большая.
MS SQL Express

При изменении цены товара иногда выдает ошибку.

Цитата
ОткрытьФормуМодально(Элемент,ФормаЗаписи)
{Справочник.Номенклатура.Форма.Модуьб(846)}: SQL State HYT00 Native 0 Message: [Microsoft][ODBC SQL Server Driver]Время ожидания истекло.
.

После этого 1С виснет, процесс не грузит. Завершить сеанс можно только через Диспетчер задач.

Процедура ИзменитьЦену()
    Перем ФормаЗаписи, Элемент, Позиция;
    
    Позиция  = СписокЦен.ТекущаяСтрока();
    Если Позиция > 0 Тогда
        Элемент= СписокЦен.ПолучитьЗначение(Позиция, "Ссылка");
        ФормаЗаписи=глВзятьКонтекст(Контекст);
        ОткрытьФормуМодально(Элемент, ФормаЗаписи); <--- строка 846
    Иначе
        Предупреждение("Не выбрана цена.");
    КонецЕсли;
КонецПроцедуры


Вопроса 2.

1.Может кто-то сталкивался с подобным?
2.Как сэмулировть превышение времени ожидания на тестовой базе MS SQL 2008 R2 Evolution.
ну или MS SQL 2005 Express.(переустановлю)

Спасибо.


logist
В логе SQL что-то есть по этому поводу?
alex040269
не нашел sad.gif
Fynjy
А что в процедуре ПриОткрытии для данной формы?
igmig65
Цитата
<--- строка 846

а что это за хрень????
Ardi
Терминал?
alex040269
Цитата(igmig65 @ 29.06.13, 8:33) необходимо зарегистрироваться для просмотра ссылки
а что это за хрень????

я просто указал, где строка с ошибкой.

Цитата(Fynjy @ 29.06.13, 7:45) необходимо зарегистрироваться для просмотра ссылки
А что в процедуре ПриОткрытии для данной формы?

ошибка возникает после нажатия на кнопку "Записать".

окно закрывается, появляется собщение об ошибке и 1С перестает реагировать.

не всегда так, но приходится снимать процесс 1С в диспетчере задач.
igmig65
Цитата
я просто указал, где строка с ошибкой.

в смысле здесь на форуме? или в коде?
Цитата
ошибка возникает после нажатия на кнопку "Записать".

так тогда нужен код процедуры ПриЗаписи()
Fynjy
Цитата(igmig65 @ 29.06.13, 19:19) необходимо зарегистрироваться для просмотра ссылки
так тогда нужен код процедуры ПриЗаписи()

Фигасе ... Модально в ПриЗаписи ... Убил бы нахрен ...
logist
Цитата(igmig65 @ 29.06.13, 19:19) необходимо зарегистрироваться для просмотра ссылки
в смысле здесь на форуме? или в коде?

igmig65 у человека 900 сообщений, не задавайте глупых вопросов. Всем ясно что это пометка для форума, физически в коде ее нет.
alex040269
Цитата(igmig65 @ 29.06.13, 19:19) необходимо зарегистрироваться для просмотра ссылки
в смысле здесь на форуме? или в коде?

так тогда нужен код процедуры ПриЗаписи()

на форуме, конечно, для лучшего представления картины читающих, помогающих.


ПриЗаписи код скорее всего такой же как в типовой.

Процедура ПриЗаписи()    // Предопределенная процедура
    // в процедуре при записи проверятся заполнение обязательных реквизитов
    Перем Описание;
    Перем ФлагОшибки;
    Перем ВыборкаЦен;
    
    Описание = "Не заполнено поле ";
                    
    // изначально считаем, что не все обязательные поля заполнены
    ФлагОшибки = 0;
    
    // проверка обязательных полей
    Если ПустоеЗначение(Валюта) = 1 Тогда
        Описание = Описание + "'Валюта'";
    ИначеЕсли ПустоеЗначение(КатегорияЦены) = 1 Тогда
        Описание = Описание + "'Тип цены'";
    ИначеЕсли ПустоеЗначение(Единица) = 1 Тогда
        Описание = Описание + "'Единица измерения'";
    Иначе
        // все обязательные поля заполнены
        ФлагОшибки = 1;
    КонецЕсли;
    
    Если ФлагОшибки=0 Тогда
        
        // не заполнено обязательное поле
        Предупреждение(Описание);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
    // проверяем, есть ли уже цена с такой категорией
    ВыборкаЦен = СоздатьОбъект("Справочник.Цены");
    ВыборкаЦен.ИспользоватьВладельца(Владелец);
    ВыборкаЦен.ВыбратьЭлементы();
    Пока ВыборкаЦен.ПолучитьЭлемент()=1 Цикл
        Если КатегорияЦены = ВыборкаЦен.КатегорияЦены Тогда
            Если Выбран()=0 Тогда
                // для новой цена сравниваем только совпадение категории
                ФлагОшибки = 0;
                Прервать;
            Иначе
                // для сохраненного элемента проверить несовпадение категорий
                // недостаточно, т.к. из выборки можно получить редактируемый элемент
                // дублирование категорий может произойти только если совпадают
                // категории у разных элементов
                Если ТекущийЭлемент() <> ВыборкаЦен.ТекущийЭлемент() Тогда
                    ФлагОшибки = 0;
                    Прервать;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Если ФлагОшибки = 0 Тогда
        Если ВыборкаЦен.ПометкаУдаления() = 1 Тогда
            Если Вопрос("У товара уже есть '"+КатегорияЦены+"' цена, помеченная на удаление.
                        |Снять пометку удаления?","Да+Нет")="Да" Тогда
                // запишем выбранные значение в справочник  
                // снимем пометку удаления
                Попытка
                    ВыборкаЦен.СнятьПометкуУдаления();
                Исключение
                    Предупреждение(ОписаниеОшибки());
                    СтатусВозврата(0);
                    Возврат;
                КонецПопытки;
                ДатаДляЗаписи = РабочаяДата();
                ВвестиДату(ДатаДляЗаписи,"Дата периодических реквизитов");
                ВыборкаЦен.Валюта.    Установить(ДатаДляЗаписи,Валюта);
                ВыборкаЦен.Единица.    Установить(ДатаДляЗаписи,Единица);
                ВыборкаЦен.Цена.    Установить(ДатаДляЗаписи,Цена);
                ВыборкаЦен.Наценка     = Наценка;
                ВыборкаЦен.Записать();
                ЗаписатьВКонтекст(ВыборкаЦен.ТекущийЭлемент(),ДатаДляЗаписи);
                // закроем форму
                Форма.Закрыть(0);
            КонецЕсли;
        Иначе    
            Предупреждение("У товара уже есть '"+КатегорияЦены+"' цена");
        КонецЕсли;
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;

    Наименование = КатегорияЦены.Наименование;

    глЗаписьПериодическихРеквизитов(Контекст);
КонецПроцедуры    // ПриЗаписи


igmig65
Цитата
При изменении цены товара иногда выдает ошибку.

Цитата

ОткрытьФормуМодально(Элемент,ФормаЗаписи)
{Справочник.Номенклатура.Форма.Модуьб(846)}: SQL State HYT00 Native 0 Message: [Microsoft][ODBC SQL Server Driver]Время ожидания истекло..

После этого 1С виснет, процесс не грузит. Завершить сеанс можно только через Диспетчер задач.

Получается что ошибка именно в процедуры ИзменитьЦену(), но..
Цитата
ошибка возникает после нажатия на кнопку "Записать".

а в процедуре ПриЗаписи() нет вызова ИзменитьЦену().
Ищите где зависает ч-з отладчик, да и желательно проанализировать, когда именно зависает, а когда нет...
Acid
Поскольку база очень большая, а Цена скорее всего периодическая, то и таблица периодических значений тоже большая. Для SQL в настройках надо увеличить время ожидания. на ИТСе есть пример настройки SQL.
XBrut
в мене по суті все те ж саме, але база дбф.
так взагалі давно зрозумів, що треба залишити лише актуальні ціни....
Домовик
а где вызывается ИзменитьЦену() ? в формуле поля формы?
Fynjy
Цитата(XBrut @ 03.07.13, 7:10) необходимо зарегистрироваться для просмотра ссылки
в мене по суті все те ж саме, але база дбф.
так взагалі давно зрозумів, що треба залишити лише актуальні ціни....

Сделайте копию таблицу в ИБ и затем почистите ее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.