Пока не резал, но однозначно + видно большая была проделана работа
Не хватает подробного описания по шагам.
Хотя из интерфейса все понятно, но может не всем ;)
Резали базу ТиС?
Переделать запросы и выборки на прямые запросы было бы быстрее
(1) базу резал два-три раза, можно сказать, определенный уровень отладки пройден. Прямыми запросами будет быстрее, но не на порядок, - в целом алгоритм стандартной свертки "тяжеловат" (идея была основной ход алгоритма сохранить). Долю времени по запросам можно посмотреть в листинге выполнения.
Подробное описание будет позднее. Хотя, оно больше касается "деталей" типа (5).
Это, похоже, системное сообщение, инициируется методом УдалитьОбъекты(), если база распределенная....
А вопрос выдается в периферийной или в центральной ИБ? Галка "Отключить контроль прав" не помогает?
В принципе, можно обойти, используя в случае УРИБ не УдалитьОбъекты(<УдаляемыеОбъекты>,1), а НайтиСсылки(<УдаляемыеОбъекты>,<ТаблицаСсылок>) и удаляя каждый объект из <УдаляемыеОбъекты> c пом. метода Удалить(1) и обрабатывая <ТаблицаСсылок> . Будет долго.
Спасибо за заочный плюс.
Периодика "сворачивается" вариантно:
Вар. 1. последнее значение на дату свертки.
Вар. 2. запись в дате свертки суммы периодич. значений по дату свертки (для числовых "накопительных" реквизитов)
Вар. 3. Вариант 2 только для значений, прописанных документами.
Указывается на второй закладке для каждого периодического реквизита, по умолчанию вариант 1.
+(4) Периодика и ссылки сохраняются в подкаталог ИБ "SVERTKA" Т.е. предварительно их можно сохранить в копии, потом просто перекинуть папку в основную базу, обработка файлы найдет.
Свертка для компоненты "Торговля и склад" (обычная, не комплексная)
(10) незначащие - значит лишние.
как пример история периодического значения может иметь такой вид:
01.10.2007 - 123.00
05.10.2007 - 123.00
06.10.2007 - 125.00
периодическое значение 123 на дату 05.10.2007 - лишнее...
Имхо, по периодике ничего лишнего: п. 4 - сохранение периодики на дату свертки; п. 11 - удаление прошлых (читай - по дату свертки) периодических значений; п 12 - восстановление периодики в дате свертки.
Ну, так-то можно, да и не сложно это. Наверно, стоит вынести обработку периодики в отдельную программу, добавить твоё предложение. Тогда ее будет можно использовать с нестандартными свертками, где обработки периодики нет.
изменения от 30.10.2007
Исправлена ошибка: в сворачиваемом периоде не распроводились документы "ВводОстатков..." сформированные предыдущими "свертками" (наличие в реквизите "Комментарий" словосочетания "СверткаБазы"). Строки кода 3114-3116 закомментированы. Сорри, проверял на "девственной", ни разу не свернутой базе.
Сунулся с этой сверткой в сильно-переработанную ТиС 8.7. Исправлял, исправлял мелочи типа глНазваниеДокументаВЖурнале и т.д. И в итоге заткнулся на Перечислениях и совершенно другом составе реквизитов ДокументовВводаОстатков. Пришлось бросить.
А вообще очень понравилась Ваша Свертка, хоть и не пригодилась.
(17) Эта обработка под 9.2, Под 8.7 нужно использовать универсальные или дорабатывать текущую. В описании неявно указано:
"Отличия от штатной свертки ТиС v9:"
(17) Под 8.7 дорабатываться, скорее всего не будет. Имхо, если переделывать, смотреть на сколько отличаются между собой штатные 8.7 и 9.2 . В этой версии планируется добавить восстановление ГП.
(22) и (23) За что боролся ( см. http://infostart.ru/profile/8196/blogs/298/ ), на то и напоролся :)
Почему не смог создаться документ. Предполагаю, что в остатках присутствуют записи с пустыми измерениями (которые как раз и служат реквизитами-ключами при создании нового документа) Видимо, пустые ключи совпали с пустыми измерениями первой записи, - условие на создание нового документа было пропущено.
Обновил, добавил в условие создания нового документа проверку первой записи таблицы.
Тезка, сообщи о результатах, - по алгоритму данной свертки, созданный документ с пустыми реквизитами обязательного заполнения д.б. помечен как BAD и не проводиться.
(24) Я понял. Идея хорошая, тем более, реализуется не сложно.
(25) Фиксить насыщенный диалог, чтобы он остался удобным и красивым, - долго, сделаю позднее с добавлением возможности восстановления ГП. Пока для себя перемести на первой закладке галки с рамками вниз, а кнопки с обновляемым текстом - наверх.
Пока все работает ;)
Премного благодарен за оперативность.
Куда перечислять благодарности?
...
Еще бы хотелось синхронизации по Вводам.
Например поменяли что-то в архивной базе (оч. редко но бывает). Теперь формируем новые вводы на конец в архивной БД, а вот в новой хотелось бы не только создание новых доков, но и проверка отличий от текущих вводов. Надеюсь объяснил понятно %)
(28) спасибо.
(29) По поводу синхронизации, - оперировать документами "ВводОстатков..." скорее всего не стоит, - большой объем поиска, сравнения и перепроведения. В общем, вижу такой способ:
Для базы А(до свертки) хранить таблицы значений с запросами по регистрам на конец даты свертки.
При синхронизации:
1. В базе А выполняем запросы по регистрам повторно, выгружаем в таблицы значений.
2. Восстанавливаем сохраненные таблицы, находим разницу с п.1.
3. По оле соединяемся с базой Б,
4. В базе Б по оле удаляем прежние "корректурные" Вводы остатков
5. По таблицам-"разницам" создаем новые "корректурные" вводы остатков и проводим их.
Второй вариант - синхрить каждый измененный документ отдельно, - в таком случае
оперируем разницей между движениями регистров до и после изменений, п. 4 пропускаем, синхронизацию проводим сразу.
Однако, думаю не все так просто, - отрицательную разницу свертка обрабатывает иначе, да и объекты, удаленные в базе Б могут "всплыть", придется всю цепочку по ним передавать... - писать вторую выгрузку загрузку... Если делать, то совсем просто: нет объекта - нет синхронизации.
(31)часть регистров закрываю "срезами регистра" (спецдоки) со встроенной возможностью выгрузки загрузки итогов. Это оч. удобно. Конечно так делать стоит только по регистрам, у кот. нет в измерениях типа документ.
Делаю синхронизацию по ОЛЕ, проверяю по ключевым полям, если документ изменен перегружаю его полностью в новую базу
(32)нет
Попробую объяснить поподробнее.
После свертки получаются 2 базы:
А(до свертки), Б(после свертки)
Вдруг понадобилось в базе А исправить один из документов (крайняя мера, но бывает и такое)
После изменений в базе А формируем новые вводы.
так вот чтобы в базу Б не переносить все вводы, а переносить только те кот. поменялись.
Т.е. у нас получается архив с возможностью синхронизации с текущей базой (Правда там возможны проблемы со ссылками, но они решается замыканием на документ ввода)
Структуру регистров и документы переноса еще не анализировал.
Необходимо будет сформировать БИ на начало, ну и все таки перепровести
остальные документы, чтобы сформировалисть проводки.
Доброе время суток ! Помогите, пожалуйста - Торговля и склад для Украины 7.70.008
При запуске Вашей обработки такие сообщения :
глПриИзмененииФирмы<<?>>(Док2);
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(541)}: Процедура не обнаружена (глПриИзмененииФирмы)
ГлПриИзмененииФирмы<<?>>(ДокОст);
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(834)}: Процедура не обнаружена (ГлПриИзмененииФирмы)
Сообщить("Распроведен " + глПредставлениеДокумента<<?>>(Док.ТекущийДокумент()));
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3697)}: Функция не обнаружена (глПредставлениеДокумента)
Сообщить("Распроведен " + глПредставлениеДокумента(Док.ТекущийДокумент()<<?>>));
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3697)}: Неопознанный оператор
ЗаписатьЛог("Распроведен " + глПредставлениеДокумента<<?>>(Док.ТекущийДокумент()));
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3699)}: Функция не обнаружена (глПредставлениеДокумента)
ЗаписатьЛог("Распроведен " + глПредставлениеДокумента(Док.ТекущийДокумент()<<?>>));
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3699)}: Неопознанный оператор
ЗаписатьЛог("Распроведен " + глПредставлениеДокумента(Док.ТекущийДокумент()))<<?>>;
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3699)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
ЗаписатьЛог("Распроведен " + глПредставлениеДокумента(Док.ТекущийДокумент()))<<?>>;
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3699)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецЕсли;
{C:\TMP\TEST\EXTFORMS\SVERTKA.ERT(3700)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
Я _полный_ дилетант. Очень нужно обрезать базы, ситуация крайне запущена :(
4 года это все живет. Штатные средства никуда не годятся.
Доброе.
Эта свертка для Российской ТиС v9.хх, для другой версии может не работать,
перенос отсутствующих функций из глобального модуля в обработку может не спасти.
(43) Выложил обновление. В качестве платы за оперативность оставляю тестирование на Вас, rustork (там не страшно, всего 3 добавленных строки). :)
Указанная ошибка могла возникнуть при установленном фильтре по фирмам.
Успехов.
Все отлично работает.Спасибо разработчику, просто выручили. Стандартная обработка "работала" 9 суток без перерыва на базе в 1.5ГБ, пришлось все равно прервать. На той же самой базе на все операции, включая проверку неуникальности документов ушло около пяти часов.
16 : 00 : 05 : 56 : / : ТА назад...
16 : 00 : 00 : 00 : 80 / 21 333 : Свертка и удаление документов за Февраль 2003 г.
16 : 00 : 00 : 01 : 402 / 36 054 : Свертка и удаление документов за Март 2003 г.
16 : 00 : 00 : 01 : 561 / 61 089 : Свертка и удаление документов за Апрель 2003 г.
16 : 00 : 00 : 01 : 772 / 64 603 : Свертка и удаление документов за Май 2003 г.
16 : 00 : 00 : 00 : 525 / 78 947 : Свертка и удаление документов за Июнь 2003 г.
16 : 00 : 00 : 01 : 828 / 59 640 : Свертка и удаление документов за Июль 2003 г.
16 : 00 : 00 : 01 : 1 069 / 57 525 : Свертка и удаление документов за Август 2003 г.
16 : 00 : 00 : 01 : 1 354 / 66 864 : Свертка и удаление документов за Сентябрь 2003 г.
16 : 00 : 00 : 01 : 1 285 / 68 839 : Свертка и удаление документов за Октябрь 2003 г.
16 : 00 : 00 : 01 : 1 225 / 69 602 : Свертка и удаление документов за Ноябрь 2003 г.
16 : 00 : 00 : 04 : 1 887 / 27 348 : Свертка и удаление документов за Декабрь 2003 г.
ЗафиксироватьТранзакцию();
{C:\DOCUMENTS AND SETTINGS\SYCHEV\РАБОЧИЙ СТОЛ\SVERTKA\SVERTKA_1340\SVERTKA.ERT(395)}: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию
У меня такая же фигня (50) при установке транзакции (по этапам) винда говорит, что недостаточно виртуальной памяти,
пробовал несколько раз, всегда одно и тоже,
База 5гигов, не сворачивалась с 2003 г. (на 2007 подает), комп двух ядерный, оперативы 2гига, свободного места на винте 80 гигов.
(55) Попробуй установить транзакцию через каждые полминуты, 8-й пункт выполнить отдельно, если все равно останавливается - запускай его повторно, пока не дойдет до конца, затем продолжить оставшиеся пункты.
Скл базу можно без транзакции запустить.
Что еще можно придумать? Чаще, чем полминуты фиксировать транзакцию, ну, например, добавить условие на количество обрабатываемых объектов (300, например):
В строке 394 модуля формы изменить условие
Код
Если (_getperformancecounter() - Тран_ПослВремя > 30000) Или (ТекУровень = 2) Тогда
Показать полностью
на
Код
Если (_getperformancecounter() - Тран_ПослВремя > 30000) Или (ТекУровень = 2)
Код посмотрю.
Однако, транзакция "срывается" если в ней сработало Исключение в конструкции "Попытка...", о чем в листинге сообщается, - советую просмотреть его еще раз и за больший промежуток времени (хотя бы полминуты)
архив вроде бы не полный (скачал пару раз) только одна обработка разворачивается,
а так у меня уже второй день запущена свертка(основная) без транзакции ,
пока нормально вроде, как закончит напишу
Ну я основной сверткой без использования транзакций пробовал, двое суток работало по 8-му пункту,
нормально отработало (файловый вариант), спасибо за обработку.
Баловался с выгрузками - загрузками документов ввода из одной базы в другую и свертками.
Можно сделать выгрузку-загрузку вводов в файлы (тем более уже почти все готово) по аналогии с Periodic.ert (только по тем регистрам, где нет документов, хотя можно и по всем, но мороки больше с переносом связанных доков)
Смысл я уже объяснял раньше.
Например у меня есть след. базы: 2006, 2007, 2008 годов
Нехорошие люди поменяли остатки в 2006 году, теперь их нужно перенести 2006->2007->2008
Конечно можно через OLE или еще как, но удобнее иметь все в одной обертке свертки ;)
Т.е. делаем "псевдо" свертку в 2006 году, только с формированием доков Ввода на конец года. Переносим их в 2007, проводим вводы, перепроводим "нужные доки" (отдельная обработка сравнивает, что менялось) в 2007 и по аналогии с 2006 делаем в 2007.
Думаю, можно проще... Есть "Сравнение регистров", - в 2006 запустить сохранение, в 2007 - сравнение, и там же "разницу" подать в свертку как "штатную ТЗ полученную из запросов по регистрам", по ним создать Вводы остатков - корректуры. Но, блин, подводных камней не избежать... К старой базе отношение м.б. менее серьезное, чем к рабочей, и переносить из нее "косяки"... Как быть с удаленными ссылками в более свежей базе? Делать загрузку объектов? ;)
Точно, добавить кнопку "Исправить Регистры", найти доки ввода и править их ..., притом старые док можно скопировать непроведенными и добавить в подчинение текущим (для истории)
С другой стороны по ОЛЕ получается лучше, тем что если чего нет в приемнике, то оно перенесется ...
упс... у меня проблемы граждане…
не пинайте сильно, т.к. сворачиваю базу первый раз…
проблема в следующем:
- есть база с 2003 года, в период с 2003 по 2008 документов 83102
- сворачиваю выше выложенной обработкой на дату 31.12.08
- после сверстки остаются шапки документов в кол-ве 38296 (2003-2008 года)
удалить их не возможно, так как они находятся в подчинении документов созданных сверсткой…
как их удалить? Может я что то не так делаю?
(67) скорее всего эти документы используются в вводе остатков по долгам покупателей/поставщиков - используются в качестве кредитных документов, по которым зафиксирован долг (вообще-то такое большое колво "остатков" долгов по кредитным докам вызывает вопросы); можно сделать следующее: универсальной обработкой очистить реквизит "кредитный документ" в доках ввода остатков долгов по взаиморасчетам покупателей/поставщиков и перепровести эти доки ввода остатков - тогда в качестве кредитных доков возникновения долга в регистрах будут зафиксированы доки ввода остатков (потом можно чохом пометить на удаление старые оставшиеся доки и удалить их штатно).
тьфу, (68) относится к результатам штатной свертки... но, надеюсь, идея понятна, в нештатной свертке можно сделать аналогично - на место упомянутых кредитных доков прописать ссылку на сам документ ввода остатков.
(69) спасибо, смысл понятен, нужно в документах ввода остатков реквизит "кредитный документ" очистить, удалить шапки и перепровести все доки…
А не подскажете, какой обработкой можно очистить реквизит по всем документам ввода?
(68) А как же ссылки в конфе на реквизиты заменяемого документа, - в документе "ВводОстатков..." таких одноименных может не оказаться.
Мыслю, что лучше проанализировать ТЧ Ввода остатков, по-сворачивать ее по ограниченному набору измерений, - глядишь и выяснится, что в итоге по некоторым контрагентам взаиморасчеты = 0. Вот по этим контрагентам удалить строки из ввода остатков совсем. Как "По-сворачивать"? Можно с пом. "Сравнение регистров", сравнивая остатки в той же базе на ту же дату, но с разным составом измерений регистров.
(72) не втыкнул про что речь... при вводе остатков по взаиморасчетам никаких ссылок на РЕКВИЗИТЫ (заменяемых) документов - нет, так что спокойно можно занулить реквизит кредитный документ (или прописать в него ссылку на документ ввода остатков)
Конечно, прикрутить эту феньку (68) к свертке легче, чем прописывать "родные" документы в регистры. Или же просто изменить модуль проведения Ввода остатков, заменить
.... .КредДокумент = ТекущийДокумент();
(67) По сокращению кол-ва неудаленных документов: отключи два регистра при свертке КнигаПродаж и КнигаПокупок (однако, если они не используются) или удали уже готовые документы ввода остатков по ним.
Если подойти к вопросу глобально - очистка и замена КредДокумента - это та же свертка (по набору измерений регистров) внутри свертки. Нужна такая вешь?
1. Если не используются регистры "КнигаПродаж" и КнигаПокупок" - отключи их.
2. Если есть закрытые фирмы - отключи их.
3. Покопать ошибки и перекосы в остатках Взаиморасчетов по документам
Если свертка уже сделана, - удалять соответствующие этим регистрам и фирмам Вводы остатков.
Добрый день!!!
У меня на уже один раз свернутой 1с ТиС при попытке открытия выдает
Если Док.ФлагСвертки = 1 Тогда
{D:\1C_UMKA\1С\SVERTKA\SVERTKA_1340\SVERTKA.ERT(1676)}: Поле агрегатного объекта не обнаружено (ФлагСвертки)
Что можно сделать подскажите?
Могу сразу сказать, запускал на базе предыдущей свертке, работает всё отлично и великолепно. База 3.6 Гб свернулась за 55 минут убрав при этом информацию за три года!!!!
Сама ошибка означает, что в базе есть непомеченный на удаление документ, с именем начинающимся на "ВводОстатков..." у которого нет реквизита шапки "ФлагСвертки". И расположен он, судя по тому, что раньше свертка запускалась без ошибок, позднее предыдущей даты свертки. Скорее всего, какой-нить новый, добавленный вид документа "ВводОстатков", только без этого реквизита.
Что делать?
Совет для пользователя - найти его в полном журнале по отбору по виду документа, и если он(и) не проведен (ы) - пометить на удаление. Или ждать обновление.
нет одно и тоже. Просто была база, сказали свернуть использовал стандартную встроенную свертку. Прошло время сказали что еще нуно один год свернуть. Стандартная проработала второй раз более 4 дней срок не приемлимый. Нашел ссылку на вашу, начал пробовать а она выдет при открытии
Если Док.ФлагСвертки = 1 Тогда
{D:\1C_UMKA\1С\SVERTKA\SVERTKA_1340\SVERTKA.ERT(1676)}: Поле агрегатного объекта не обнаружено (ФлагСвертки) ......
(86) Обновил файлы. Добавил проверку на наличие реквизита "ФлагСвертки" в документах "ВводОстатков". Документы с отсутствущим реквизитом в дате свертки включаются обработкой в общий список документов ввода остатков, даже если они были созданы другим способом.
Обработка - замечательная. Базу свернул быстро. Но столкнулся с непонятным явлением(в природе которого сейчас разбираюсь): Сворачивал базу ТиС 9.2 на 31.12.2008. Пропали из базы несколько документов в периоде с января 2009 по февраль 2009. Пропали несколько заявок покупателя и счетов-фактур. В остальном - обработка отработала на 5+
Доброго всем времени суток. Хотел узнать как сделать чтоб данная обработка не брала во внимание склады и номенклатуру помеченную на удаление и не вормировала по ним остатки. Заранее благодарен...