09.10.2006, 18:08
общий
это ответ
Здравствуйте, white!
Если конфигурацию нельзя изменить, то всегда можно запустить внешний отчет/обработку, и это для Вас спасение. По внешнему отчету всегда можно пройтись отладчиком, вылизать его до идеального состояния. Как правило, внешние отчеты работают также хорошо и быстро, как и внутренние, с одним лишь отличием: после внесения изменений не нужно выгонять всех пользователей с базы.
Теперь об обслуживании. НЕ нужно еженощно делать проверку. Проверку следует выполнять только в следующих случаях: 1.Появления Бэд-блоков, 2.Обнаружения, что планка памяти битая 3. Зависания компьютера во время транзакции (т.е. при проведении, записи, удалении).
НЕ нужно без случаев, описанных выше, делать пересчет итогов и служебных данных.
Если база ДБФ, то она сама, когда ей будет нужно, спросит переиндексацию. Если база СКЛ, то переиндексацию делать нужно только в случаях, описанных выше а также в случае аварийного завершения программы при открытом окне нового документа либо журнала.
Игры с ТА ни к чему хорошему не приводят. Переносить ТА в случае бухгалтеров следует не на начало месяца, а на первый измененный документ (после предыдущего перепроведения). Нет никакой уверенности что при переносе ТА на начало седьмого месяца в шестом месяце не было никаких изменений.
Программные перепроведения чрезвычайно нужны, без них 1С показывает искаженную себестоимость и прибыль.
Реализовать программно нужно так: посмотреть в конфигураторе, какие последовательности у Вас есть, если их нет, то потребовать, чтобы разработчики их сделали. Пример моей обработки по перепроведению в приложении (это внешний отчет, через ОЛЕ тоже можно сделать что-либо подобное, но про преимущества внешних отчетов читай выше). Обратите внимание, что я не трогаю ТА, т.к. это ни к чему.
Приложение:
В данном примере восстанавливаются обе последовательности. Эффект будет только от одновременного восстановления всех последовательностей.Процедура ПерепровестиВсеДокументы() Док=СоздатьОбъект("Документ"); Док.ВыбратьДокументы(Мин(Последовательность.ОсновнаяПоследовательность.ПолучитьДату(),Последовательность.НалоговыйКредит.ПолучитьДату())); Пока Док.ПолучитьДокумент()=1 Цикл Перепроводить=0; Если (Последовательность.НалоговыйКредит.ПринадлежитПоследовательности(Док.ТекущийДокумент())=1) Тогда Если (Последовательность.НалоговыйКредит.Сравнить(Док.ТекущийДокумент())=-1) Тогда Перепроводить=1; КонецЕсли; КонецЕсли; Если (Последовательность.ОсновнаяПоследовательность.ПринадлежитПоследовательности(Док.ТекущийДокумент())=1) Тогда Если (Последовательность.ОсновнаяПоследовательность.Сравнить(Док.ТекущийДокумент())=-1) Тогда Перепроводить=1; КонецЕсли; КонецЕсли; Если Док.Проведен()=0 Тогда Перепроводить=0; КонецЕсли; Если Перепроводить=0 Тогда Продолжить; КонецЕсли; Сообщить("Перепровожу "+Док); Если Док.Провести()=1 Тогда Иначе Сообщить("Не могу провести документ"+Док+" "+ТекущееВремя()); Возврат; КонецЕсли; Если (Последовательность.НалоговыйКредит.Сравнить(Док.ТекущийДокумент())<>0)И(Последовательность.НалоговыйКредит.ПринадлежитПоследовательности(Док.ТекущийДокумент())=1) Тогда Сообщить("После проведения документа граница последовательности НалоговыйКредит не сдвинулась. Дальше переповодить нет смысла."); Возврат; КонецЕсли; Если (Последовательность.ОсновнаяПоследовательность.Сравнить(Док.ТекущийДокумент())<>0)И(Последовательность.ОсновнаяПоследовательность.ПринадлежитПоследовательности(Док.ТекущийДокумент())=1) Тогда Сообщить("После проведения документа граница последовательности ОсновнаяПоследовательность не сдвинулась. Дальше переповодить нет смысла."); Возврат; КонецЕсли; КонецЦикла; Предупреждение("Обработка закончена.");КонецПроцедуры