При выполнении транзакции произошла ошибка. Время ожидания истекло

1с 7.7 под Microsoft SQL Server 2000, пользователей около 20, все работают в режиме терминала. В последнее время при проведении документов иногда выводится сообщение об ошибке “При выполнении транзакции произошла ошибка. Время ожидания истекло”. 1с просто подвисает, в чем проблема? Раньше такого не было, а сейчас такое случается регулярно.
Скорее всего, 1С не подвисает, а просто долго проводится документ. Если в это время другой пользователь пытается провести другой документ, система ставит его задачу в очередь, включается таймер. В параметрах (меню Сервис/Параметры, закладка Общие) указано максимально допустимое время ожидания (Время ожидания захвата таблиц Базы Данных (сек.)). По истечении этого времени выдается Ваше сообщение “Время ожидания истекло”.
Для разрешения ситуации есть два пути:
а) увеличить время ожидания, максимум 99 секунд;
б) ускорить проведение документов, оптимизировать алгоритмы – с дальнейшим увеличением размера базы этим все равно придется заниматься.

Комментарии | опубликовано: 25 Февраль 2008, 09:44

Работа с удаленными записями

Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом, размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.
Файл.ПоказыватьУдаленные(1);
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.ЗаписьУдалена()=1 Тогда
............Файл.Восстановить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.PRICE < 1000 Тогда
............Файл.Удалить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл.Сжать(); //удалить записи физически
Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Файл.ОчиститьВсе();
Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа “строковый”, приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».

Комментарии | опубликовано: 23 Февраль 2008, 10:29

Работа со структурой файла DBF

Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
Файл1 = СоздатьОбъект(“XBASE”);
Файл2 = СоздатьОбъект(“XBASE”);
Файл1 = ОткрытьФайл(“file1.dbf”);
Для н = 1 По Файл1.КоличествоПолей() Цикл
........НазвПоля = “”;
........Тип = “”;
........Длина = 0;
........Точность = 0;
........Файл1.ОписаниеПоля(н,назвПоля,Тип,Длина,Точность);
........Файл2.ДобавитьПоле(назвПоля,Тип,Длина,Точность);
КонецЦикла;
Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля(<ИмяПоля>);
УстановитьЗначениеПоля(<ИмяПоля>,<значение>);

Комментарии | опубликовано: 22 Февраль 2008, 09:10


<--- Предыдущая страница Следующая страница --->