Очистка таблицы ссылок документов 1с 7 зависает
Большие документы (1000-2000 строк) долго проводятся и записываются (около 2-3ёх минут). После выгрузки и загрузки проблема исчезает, т.е. запись производится в пределах 20 сек. через 2 недели проблема повторяется, и опять, помогает выгрузка и загрузка.
Кто может помочь в решении этой проблемы? Есть ли возможность настроить план обслуживания в sql дабы имитировать выгрузку/загрузку. Сейчас в плане стоит: ежедневная "реорганизация индекса" и 2 раза в месяц "перестроение индекса".
Все советы по решении данной проблемы готов выслушать. =)
Долгая запись в файл
auto it = Expr.begin(), it_end = Expr.end(); for (; it != it_end; ++it) fprintf(fout, "%u.
Запись документа.
Всем привет. Такое дело. Создаётся обработка которое делает нужные ей вещи.А точнее формирует.
Текст документа. Запись на сервер
Привет всем. Есть вопрос для матерых программистов. Необходимо сохранять файлы с удаленного.
Запись табличного документа в *.xls
Добрый день. Выгружаю некую ТЗ вот так &НаСервере Процедура СохранитьТаблицуВЭксель(ИмяФайла).
Поскольку заставить скуль так себя вести сложновато, то любопытно, что там перепилено в конфе. Для начала тестирование, лучше по пунктам с исправлением и последующей проверкой на исчезновение проблемы. Я не верю, что это индексы, но убедиться не мешает.
Поля фиксированной длины? Доки расчета ЗП по пять раз пишут промежуточные данные расчета в регистры расчета, поэтому для появления мусора в базе - раздолье ()
это вопросы не мне, а программисту, которого уже не найти =)
Конфигурация типовая. УПП 1.3 (используется только ЗУП)
Теперь это вопросы к Вам, предется выснить что там было изменено, на это и будут основные подозрения.
Чтобы выяснить изменения можно сравнить рабочую конфигурацию с типовой.
увы, это к Вам теперь вопросы. проведите сравнение с конфигурацией поставщика, если разрешено редактирование.
Конфигуратор. Конфигурация.Поддержка.настройка поддержки. Если нет кнопки Включить возможность редактирования, тогда Конфигурация.Сравнить конфигурации. Выбрать Основная и Поставщика
Теперь это вопросы к Вам, предется выснить что там было изменено, на это и будут основные подозрения.
Узнал. Изменений не было в платформе. Если программист что то допиливал, то это просто отчёты.
Под заточенный, я имел ввиду УПП, но выполняется функция ЗУП. всё.
Просто интересует Сам факт того, что спустя недели 2-3. в 1С что то засерается и помогает только выгрузка-загрузка. Что может засраться и есть ли какие нибудь функции в SQL чтобы настроить план обслуживания.
P.S. можно конечно настроить батник. на автоматическую выгрузку/загрузку, раз в 2-3 недели. но это решение будет последним)
тут два варианта.
1. в отладчике включить хронометраж, узнать, на каком этапе тормозит.
2. Пожаловаться в техподдержку.
ЗУП написан избыточно, ни для кого не секрет. Скажем так: используется 20% полей, которые в структуре БД. Пустые поля потенциально делают засирку, но не факт. Ощущение, что при перезаписи в регистры скуль не удаляет предыдущие записи, а только метит.
Тестирование и исправление информационной базы
/IBCheckAndRepair выполнить тестирование и исправление информационной базы.
• -ReIndex реиндексация таблиц;
• -LogIntegrity проверка логической целостности или
-LogAndRefsIntegrity проверка логической и ссылочной целостности;
• -RecalcTotals пересчет итогов;
• -IBCompression сжатие таблиц;
• -Rebuild реструктуризация таблиц информационной базы;
• -TestOnly только тестирование при наличии ссылок на несуществующие объекты:
-BadRefCreate создавать объекты или
-BadRefClear очищать объекты или
-BadRefNone не изменять при частичной потере объектов:
-BadDataCreate создавать объекты или
-BadDataDelete удалять объекты;
• UseStartPoint использовать сохраненную точку возврата для продолжения тестирования с того места, на котором оно было прервано в предыдущем сеансе;
• TimeLimit:hhh:mm ограничение максимального времени сеанса тестирования: hhh — количество часов (0..999); mm — количество минут (0..59).
Добавлено через 2 минуты
по-моему, выгрузка-загрузка делает пункт сжатие (скуль держит пробелы только для строк фикс.длины), но это просто догадка
Дано: sql server 2005 на отдельном компе. Там базы 1с 7.7.
Каталоги баз - на другом сервере, он же контроллер домена.
ПОльзователи подключаются по сети, часть - через терминальные серверы.
Время от времени бывают проблемы с отключением от баз (например, проблемы с сетью, пару раз в последнее время зависали серваки, и пользователи, ессно, отваливаются).
В настоящее время, в одной из баз (самописная на основе базы бухгалтерии) время от времени выдается скульная ошибка duplicate key.
Скрин мне скинули - погуглил, нашел документ со скрина, отменил проведение, провел - все в порядке, никаких глюков.
Странно, решил на всякий случай сделать ТиИ на копии (средствами скуля сделал выгрузку, загрузил в копию, тоже скульную).
При ТиИ (логической целостности) база зависает (Утилита ConfStat показывает, что зависает на проверка справочника сотрудников (100 элементов обработала- и все)).
Выгрузка/загрузка не помогает.
Решил попробовать в DBF версии, свернул частично (база слишком большая, без свертки не загрузится в DBF).
Проблема аналогичная, зависание при ТиИ при проверке логической целостности.
Ждал отвисания около недели, а может и больше, база в фоне висела, я время от времени поглядывал просто на нее. ConfStat так ничего нового не показал.
Если ТиИ делать в режиме просто тестирования, обе базы, и скульная и дбф-ная, выдают кучу ошибок:
Проверка содержания справочников. Сотрудники. Элемент 234. Реквизит Подразделение. Значение на 03.05.02. Неразрешенная ссылка. Тип - Справочник Подразделения
Проверка содержания справочников. Сотрудники. Элемент 252. Реквизит Подразделение. Значение на 01.04.02. Неразрешенная ссылка. Тип - Справочник Подразделения
Проверка содержания справочников. Сотрудники. Элемент 4141. Реквизит Подразделение. Значение на 01.04.02. Неразрешенная ссылка. Тип - Справочник Подразделения
.
(самое интересно, что в справочнике сотрудников всего 430 строк, откуда там элемент 4141 может появиться? Я же правильно понимаю, что 4141 - это номер строки в файле справочника сотрудников?)..
.
Проверка содержания справочников. КомплектацияМ. Элемент 1. Изменено подчинение
Проверка содержания справочников. КомплектацияМ. Элемент 1. Изменено подчинение
Проверка содержания справочников. КомплектацияМ. Элемент 1. Изменено подчинение
.
(Справочник КомплектацияМ подчинен справочнику Материалы, нумерация в пределах подчинения)
.
Проверка содержимого документов. ТребованиеНакладнаяПроизводство. Номер ТМ011461. Реквизит Продукты в строке 44. Неразрешенная ссылка. Тип - Справочник Продукты
Проверка содержимого документов. ТребованиеНакладнаяПроизводство. Номер ТМ011462. Реквизит Продукты в строке 44. Неразрешенная ссылка. Тип - Справочник Продукты
.
Проверка типовых операций. Изменен шаблон типовой операции Акт о продаже и отпуске столовая
Проверка типовых операций. Изменен шаблон типовой операции Аренда ПТЦ
Проверка типовых операций. Изменен шаблон типовой операции Взаимозачеты ПТЦ
Проверка типовых операций. Изменен шаблон типовой операции Инкассация и касса 91 магазин
.
Все строки приводить не стал, они однотипные.
Что с этим делать?
Попробовал вручную почистить ссылки у сотрудников (нашел, в каком ДБФ-файле хранятся сотрудники, нашел нужную строку по номеру, посмотрел код элемента, нашел в режиме предприятия нужный элемент, почистил всю историю (реквизит Подразделение - периодический) у них. Но мало того, что некоторые номера строк слишком длинные, так удаление истории ничем не помогло, последующее ТиИ выдало такую же ошибку. (Или надо было сделать перед ТиИ логической целостности - упаковку базы?)
Когда один пользователь проводит документ, а другой - тоже пытается проводить документ, то этот второй пользователь загружает сервер непрерывным опросом блокировки. Проблема характерна для 1С:Предприятие 7.7 (DBF и SQL) и файл-серверной версии 8.0. Подробнее:
Книга знаний: Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки
Потеря производительности при подключении второго пользователя
При подключении второго (и последующего) пользователя к сетевой (не SQL!) базе 1С резко возрастает "торможение" 1С:Предприятие 7.7 при работе по сети. Причем, при отключении второго пользователя торможение сохраняется, до перезагрузки сервера.
- Установить сеть NetWare (где кэш работает нормально)
- Установить программу SuperCache (для некоторых конфигураций обещается ускорение в несколько десятков раз)
- Использовать жесткий диск со встроенным кэш-буфером и повышенной пропускной способностью (обычно – относительно дорогие модели SCSI)
Разрастается журнал транзакций SQL
Долго стартует 1С
Проблема может быть связана с включенным антивирусом Касперского, который (в старых версиях) стремится проверить файл конфигурации (MD) 1С:Предприятие 7.7, причем, делает это несколько минут. Имеет смысл отключить проверку антивирусом файлов с расширениями MD, DD, DDS, DBF, CDX, LST, TMP.
Отключить сохранение времени последнего доступа к файлам
Кеширование при записи
В проводнике выбрать диск -> Properties -> Hardware -> Properties ->Policies установить галку Enable write caching on the disk
Только если есть UPS!
Временная папка пользователя на локальном диске
Промежуточные результаты запросов 1С сохраняет в виде файлов DBF во временной папке пользователя (которая указана в настройках пользователя в Конфигураторе 1С).
Достаточно указать c:\temp или аналогичную папку, а не папку на сетевом ресурсе, чтобы промежуточные результаты сохранялись и использовались быстрее.
Отключение QoS
Сетевая карта Realtek
Оптимизация распределения памяти Windows
Дополнительные действия в XP
Удаление 1cv7.cfg
При разрастании этого файла до нескольких мегабайт наблюдается торможение при работе пользователей в 1С.
Что в файл 1Cv7.CFG в 7.7 записывается?
Использование терминального режима
Если узкое место системы - сеть, то использование терминального режима - на машине пользователей стоят только терминальные клиенты, вся работа происходит на сервере. Ходят слухи, что для имеет смысл делать терминалку только для файлового варианта DBF, не SQL.
(Замечание от romix'a: Не рекомендуют смешивать на одном физическом сервере SQL и терминал. Если же сервера разные, то очень даже можно. Единственная проблема - 100% загрузка процессора при ожидании блокировки - успешно решается патчем [2] и, возможно, будет исправлена в релизах 1С 7.7 выше 25-го.)
Аналогично, если требуется запустить серьезную обработку (перепроведение, переиндексация), лучше это делать на сервере - будет работать быстрее.
Использование компоненты TURBOBL
Снижение транзакционной нагрузки
Некоторым образом можно снизить транзакционную нагрузку, если рассчитывать все движения документа и сохранять их в списке значений (каждому элементу соответствует таблица значений с движениями) в момент, когда пользователь нажимает кнопку ОК или Провести в форме. А при проведении документа брать движения из этой таблицы и записывать их в базу. Можно предусмотреть такую фичу и в программном проведении документа, не только в интерактивном.
Достоинства: снижается длина транзакции.
Недостатки: на время расчета не блокируется база, что может повлечь за собой неточности в движениях, например спишется один и тот же резерв.
Отключение FlushFileBuffers для DBF-варианта
ildus
14 - 18.11.06 - 14:52
(13) самый простой способ включить кэширование записи для всех файлов- отключить вызов FlushFileBuffers(hFile). для этого для платформы 7.70.025 надо пропатчить файлик dbeng32.dll: ищем последовательность "50 FF 15 40 C0 11 1F", заменяем на "B8 FF FF FF FF 90 90". Теперь 1С не будет делать принудительный сброс файловых буферов на диск при каждой записи, т.е. запись на диск будет кэшироваться и сброс файловых буферов будет делаться средствами самой ОС (для NTFS каждые несколько секунд). Значительно уменьшается фрагментация файлов на диске и отпадает необходимость помещать временные файлы на RAM-диск. Этот метод дает очень хорошие результаты для локального и терминального режимов. Использовать это для сетевого режима не рекомендую, т.к. не тестил и вероятно может привести к повреждению базы.
более продвинутый способ - выборочное кэширование файлов. для этого делается перехват вызова FlushFileBuffers() с помощью ВК или подменой dll и проверяется хэндл файла- если например это временный файл или *.CDX базы, то файл кэшируется, если *.DBF базы, то происходит вызов FlushFileBuffers().
Данная методика проверена на тестовой базе, размер которой за месячный период составил 67 Мб. Эта часть той базы, о которой ведется речь в статье. Остатки переносились на середину месяца. К сожалению проверить на большой базе пока не удалось поскольку ранее переданная статья содержала ошибки, и поэтому первая попытка оказалась неудачной. Будем пробовать еще раз. Теперь осталось выяснить только то сколько времени займет данный процесс.
З.Ы. При проверке не пользовался обработкой clear.ert - все делал ручками. Так что смотрите внимательно!
Сворачивание периода известно в 1С:Кругах под разными названиями какой из них вам ближе решайте сами. Мне известны следующие:
И так далее. Смысл термина в следующем. В течение длительного периода работы информационная база (любая, будь-то бухгалтерия, торговля или смешанная - з/п и компоненту расчет не рассматриваем) имеет тенденцию увеличиваться в размере по вполне понятным причинам. Думаю их вам обЪяснять не надо. Заметим только, что скорость роста для разных баз различается и зависит от обЪема документов вносимых в базу в единицу времени (например, за день), а также от количества и размера аналитических таблиц (так назовем регистры, бухгалтерские итоги вместе с планом счетов). Чем меньше единица учета (в количественном выражении) и чем больше обороты фирмы, тем больше количество вносимых документов, чем сложнее отчеты получаемые в системе, чем больше их количество, тем больше размер аналитических таблиц.
При проектировании информационной системы ее подразделяют на две составляющие: транзакционную и аналитическую. Первый тип систем предназначен для ввода большого обЪема информации в реальном режиме времени, второй тип предназначен для проведения анализа данных полученных в транзакционных системах. Какая же связь такого разделения с темой статьи? Самая непосредственная - процедура свертки периода, является частью процесса по переводу данных из транзакционной системы в аналитическую. Дело в том, что обычно в транзакционных системах обЪем информации хранится за небольшой текущий период (например, месяц - все зависит от интенсивности ввода). Чем больше размер информационной базы, тем менее комфортной становится работа в такой системе - замедляется ввод документов, формирование отчетов также замедляется. В случае с 1С особенно это заметно в DBF формате, меньше в SQL, но все равно и здесь имеется некоторое замедление. Рост базы также приводит к ее более частому "падению", опять же это больше характерно для DBF формата. Поэтому периодически данные из транзакционной системы необходимо передавать в аналитическую систему, удаляя при этом лишние данные. Сегодня у всех на слуху технологии OLAP - как раз-то они и предназначены для создания таких (аналитических) систем. В том числе данные технологии активно применяются в связке с 1С. Но статья не об этом.
Итак, после того как данные будут переданы в аналитическую систему, нам необходимо удалить их из нашей транзакционной системы. Что ж, неплохо было бы если фирма 1С предоставила такой инструмент в составе своей системы. Но! Как всегда НО. Имеющиеся средства не подходят для обработки больших баз. Подчеркиваю БОЛЬШИХ. Большой я считаю базу размером не менее 500 Мб (вместе с индексами), даже ближе (и больше) к 1 Гб. Но именно для таких баз обычно необходима процедура свертки периода. Почему же не подходят стандартные средства? Уточнюсь, что под ними я понимаю обработку wrap.ert, которая позволяет произвести "свертку" бухгалтерских итогов (для оперативного учета, таковой нет). Итак:
1. Если перенос остатков осуществляется не на последнюю рабочую дату (то есть дата, после, которой нет проводок), то при переносе остатков задним числом производится пересчет остатков.2. Отмена проведения / пометка на удаление документов также приводит к пересчету остатков.
3. Удаление документов по одному, с внесением изменений в индексы очень медленно. Даже применение транзакций спасает слабо.
Возможно это не все причины, но перечисленные выше - основные. Таким образом необходимо избавиться от недостатков, которые несет за собой применение стандартных методов. Хочу добавить, что все это не теория (то есть пп. 1-3) - у наших клиентов имеется база размер, которой уже близок к 2 Гб, попытки использования стандартных методов не увенчались успехом (не дождались завершения обработки, попытка запуска ее на домашнем компьютере привела к его зависанию). Пришлось искать обходные методы в результате чего и появилась данная методика.
База формата DBF. Дата (А), на которую необходимо перенести бухгалтерские остатки, а также удалить все лишние документы до данной даты. Конец текущего расчетного периода (Б).
1С:Предприятие 7.7, доработанная обработка переноса остатков 1C wrap.ert, любое приложение для выполнение SQL запросов для DBF баз (MS Query, DB Explorer из поставки Delphi). В качестве приложения для выполнения SQL запросов можно использовать ВК ToySQL (или Rainbow, ODBCSQL или технологию ADO), просто подключаясь к обрабатываемой базе из другой базы (см. ссылку на обработку в конце статьи).
0. Делаем копию базы.
1. Переносим остатки. Обычным образом создаем ручные операции, но дату операции устанавливаем не А, а Б + 1, при этом пометку на удалению документов не производим. Таким образом мы избавляемся от ненужного пересчета. На дату Б + 1 не должно быть ни документов, ни операций. Здесь в принципе можно использовать любую дату из будущего периода. Точнее чтобы не было пересчета, то дата должна находится за пределами текущего расчетного периода.
2. Удаляем все индексные файлы, а также файлы бухгалтерских итогов: 1SACCSEL.DBF, 1SBKTTL.DBF, 1SBKTTLC.DBF, 1SSBSEL.DBF. Начиная с данного этапа прекращаем пользоваться стандартными методами
3. Выполняем следующие запросы:
1) Делаем пометку на удаление документов.
Update 1sjourn set ismark='*', closed=4 where date ' 0 ' and date ' ' Вообще полезно удалить периодические реквизиты независимо от того записываются они из документов или нет. Это можно сделать так:delete from 1sconst where objid <> ' 0 ' and date
Моя задача очистки строк из табличной части документа, но
1) Если я открываю форму документа, жму на команду и жму провести, то вылазит ошибка "Данные были изменены или удалены другим пользователем"
2) Меня интересует как создать эффект удаления строк на лету (как при использовании фильтров). А в моем случае форму надо сначала закрыть, потом открыть и смотреть результат. Это неудобно
В табличном документе таблица не умещается по ширине
Добрый день, делаю внешнюю печатную форму, как мне сделать, если таблица не помещается в ширину.
1с 8.3 Программное определение координат области в табличном документе
Всем привет! Возможно ли программно определить координаты левого верхнего угла области.
Как сделать чтобы в табличном документе список разбивался при выводе на Подразделения?
Здравствуйте форумчане! У меня есть справочники: Должности, Подразделения и Сотрудники; без.
Похоже Это не то.
За небольшим листингом должно быть читаемо, что строка удаляется если в колонке цена стоит значение 0 . Мне не нужно убирать все строки.
И проблема не в том, что строки не удаляются, а в пунктах 1 и 2
Диагноз: при удалении сбивается индех и итератор лепит мимо.
Лекарство: (два варианта)
1. Идти с конца
2. выгрузить в массив ссылки на строки (напр., НайтиСтроки()) и по нему цикл
то это ничего не меняет.
Добавлено через 9 минут
Написал так
Жму на команду, потом на команду провести и вылазит ошибка (о том, что данные изменены другим пользователем, та что в начале теме описана). Так что здесь имеет место быть что-то другое
может dt скинуть?
harmless, я верю, что у вас работает и вижу, что так как делаю я делать ошибочно, потому что как делаю я работает на соплях.
harmless, у меня из команды идет обращение к модулю объекта. Это по заданию так надо. Оттуда вызывается экспортная процедура, которая должна очистить ненужные строки, заданные заданием.
Добавлено через 14 минут
Если я пытаюсь использовать вышеприведенный листинг, то это выглядит как
и во время выполнения мне сообщается Поле объекта не обнаружено (ТабличнаяЧасть1)
Добавлено через 4 минуты
Моя первая проблема в
ОбъектДок.Записать()
Добавлено через 1 час 30 минут
С проходом к началу тоже ничего не выходит у меня
У каждого экземпляра объекта в 1С есть версия! Эта версия считывается при открытии формы, когда ты вызываешь программный метод с сервера Объект.Записать() то запускаешь в БД транзакцию записи объекта что приводит к смене его версии! Форма при записи пытается получить открытую ей версию и не находит ее, тем самым сообщает вам что запись была кем то изменена! То ВАМ в серверном вызове.
Что бы этого избежать, вы из формы должны перечитать объект, или не записывать его и обновлять данные формы.
Добавлено через 54 секунды
Давай dt, посмотрю что не так.
Добавлено через 5 минут
То есть ВАМИ в серверном вызове.
Добавлено через 2 минуты
На самом деле ваша реализация в корне не верна!
Получение объекта из ссылки для вызова метода сильно нагружает систему, инициализирует модуль объекта и полностью погружает объект в оперативную память!
Лучше для таких ситуаций использовать модуль менеджера
Читайте также: