Очередное восстановление последовательности документов
База данных - Инструменты администратора БД
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Из основных фич:
1) Возможность тайм-аута между проведениями документов. Нужна при запуске в рабочее время.
2) Возможность прекращения обработки в заданное время. Например, после окончания рабочего дня запустили, и что бы она часиков в 8 прекратила базу насиловать :-)
3) Изменение времени документов с возможность выбора вида в начало дня в заданном интервале.
4) Возможность выборочного протоколирования результатов файл.
5) Возможность перепроведения всех документов, а не только из последовательности.
6) Для SQL-баз, работающих под SQL-2000 и наличии ВК 1С++, можно использовать метод ReconnectNative(), что существенно ускоряет обработку. Огромное спасибо Артуру (artbear) за 1С++ (Удалено в версии 1.5)
7) Возможность автоматической обработки. Например, в Глобальном модуле:
Процедура ПриНачалеРаботыСистемы()
Если ИмяПользователя()="SYSTEM" Тогда
ОткрытьФормуМодально("Обработка.repair",1);
КонецЕсли;
КонецПроцедуры
И обработка сама выставляет параметры (см. процедуру ПриОткрытии)
История версий
1.1 от 13.01.2009
Добавлено: проверка на существование документов, входящих в Последовательности, с автоматическим отсеиванием "пустых" последовательностей. Спасибо Notka за найденную проблему.
1.2 от 28.01.2009
Исправлено: ошибка расчета общего времени проведения, если обработка работала больше 2 календарных суток. Спасибо Poppy за найденную проблему.
1.3 от 30.01.2009
Добавлено: возможность выбора нескольких видов документов, предварительно помещаемых в начало дня.
1.4 от 09.06.2009
Добавлено: возможность сортировки видов документов по видам, предварительно помещаемых в начало дня.
1.5 от 18.09.2009
Добавлено: возможность выборочного протоколирования результатов файл.
Добавлено: возможность перепроведения всех документов, а не только из последовательности.
Удалено (!): использование метода ReconnectNative()
1.6 от 22.10.2009
Исправлено: обработка ситуации для режима "Перепроводить ВСЕ документы" в случае, когда граница последовательности стоит не на документе.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Инструменты администратора БД Системный администратор 1С:Предприятие 7.7 1C77 Абонемент ($m)
Обновлённый распаковщик дистрибутивов 1С 7.7. Утилита находит многотомные архивы InstallShield 3.x в папках DISK1…DISKn или внутри ZIP, показывает список файлов, проверяет распаковку и извлекает конфигурацию без запуска старого установщика.
1 стартмани
02.10.2026 406 0 twilight5023 0
Инструменты администратора БД Разработчик 1С:Предприятие 7.7 1C77 Россия Абонемент ($m)
Блокировка открытия формы обработки одним пользователем.
1 стартмани
24.05.2023 3489 igor7777 1
Инструменты администратора БД Системный администратор Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Простецкий скрипт переименования файлов в папке в нижний регистр, будет полезен программистам и системным администраторам имеющим навыки програмирования в 1С. Можно легко настроить под себя, спасает мне периодически час времени, может, кому еще будет полезен.
1 стартмани
18.02.2022 5990 0 igor7777 6
Инструменты администратора БД Разработчик Пользователь Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)
Боремся с бардаком. Работы в прошлых датах запрещены. Непроведенные документы (по разным причинам) - автоматом переносятся в начало текущего дня при запуске любого первого сеанса 1С в текущем дне. Задержка старта 1С - практически незначима. Не требует настройки, не требует допрограммирования (исключая один оператор вставки в процедуру старта системы). Можно обработку выполнять вручную с любой периодичностью.
2 стартмани
25.05.2020 7702 2 CheBurator 3
Журнал регистрации Инструменты администратора БД Системный администратор Разработчик 1С:Предприятие 7.7 1C77 Бесплатно (free)
Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.
22.01.2019 14783 phsin 20
Инструменты администратора БД Системный администратор Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Скрипт позволяет выполнить объединение конфигураций и реструктуризацию из командной строки. Объединение выполняется штатными средствами конфигуратора 1С 7.7, взаимодействие с которым происходит путем посылки нажатий клавиш. Пригодится, если есть необходимость обновить или постоянно обновлять множество ИБ.
1 стартмани
22.04.2017 17557 4 devlabnn 2
Инструменты администратора БД Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Украина Бухгалтерский учет Абонемент ($m)
Перепроведение по счету для конфигурации Бухгалтерский учет для Украины, 1С: Предприятие 7.7
1 стартмани
23.09.2016 5420 1 Genyak 1
Инструменты администратора БД Системный администратор 1С:Предприятие 7.7 1C77 Абонемент ($m)
Периодически сталкивался со следующими проблемами при печати в 1С: 7.7 работающей под терминалом: 1) После замены принтера на клиентской машине 1С пытается печатать на старый принтер. 2) Отсутствует предварительный просмотр при печати. 3) Не работает печать без предварительного просмотра (пакетная печать документов). 4) В некоторых формах печатает, в некоторых нет.
1 стартмани
09.06.2016 31046 21 tux 3
> Последовательности есть в конфигурации? Хоть одна?
Зачем это спрашивать у пользователя? Может проверить программно?
Кстати, ошибка будет другая:
Имя=Посл.ПолучитьЗначение(Посл.ТекущаяСтрока());
{С:\REPAIR.ERT(236)}: Индекс не входит в границы списка значений.
Что=Последовательность.ПолучитьАтрибут(Имя);
{С:\REPAIR.ERT(237)}: Неверное имя атрибута
> А граница у нее есть? Выставлена документом? Этот документ не удалили?
Для чего нужна эта обработка? Заявлено, чтобы ответы были "ДА" независимо от начальных условий. После работы обработки, но не до начала... ;)
Нужно было провести примерно 20 документов по 3'000-8'000 строк.
Первый провелся за 15 минут, 10 за 3 часа, 15 не провелся вообще (оборвали)
Началось в пятницу вечером, не закончилось в понедельниу утром.
Цифры примерные, просто для оценки количественной характеристики.
Ситуация - работают 5-10 менеджеров, а нужно срочно восстанавливать последовательность (бухи требуют).
Если не делать паузы - ожидание захвата таблиц.
1. а если попробовать ромиксовый патч 100% загрузки проца?
2. делать 10 сек паузу там, где модно обойтись вообще без пауз - бяка, подход "в лоб"...
;-) Интересный разговор получился у вас.
Паузы между транзакциям не имеют никакого отношения к "ромиксовый патч 100% загрузки проца". А обмен мнениями по поводу терминального режима какое имеет отношение к паузам между транзакциями и "100% загрузки процессора"?
Пауза между транзакциями позволяет другой задаче вклиниться в сплошной поток транзакций, а разработка Романа позволяет не загружать систему уже в процессе выполнения транзакции опросом блокировок в ожидающей задаче. Т.е. надо делать и паузы между транзакциями, и использовать разработку Романа. И не только в терминальном режиме, а и в обычном сетевом режиме.
Насколько я помню, основной выигрыш патч Ромикса дает именно в терминальном варианте. Поэтому в сетевом режиме он не так актуален. Какая разница, будет ли процессор загружен на 100% на клиентской машине, если все равно пользователю сначала нужно провести документ.
А вообще, я согласен - паузы нужны в "дневном режиме".
Поэтому они и есть :-)
;-) Совсем меня запутали.
Да, больший "выигрыш патч Ромикса дает" в терминальном режиме чем в сетевом. Хотя загрузка сети на 100% при опросе блокировок тоже не положительно влияет на производительность системы. Да и не совсем безразлично "будет ли процессор загружен на 100% на клиентской машине". Например на клиентской машине выполняется задача с "пакетным" проведением документов, а пользователь работает в текстовом редакторе. Вроде в последних версиях Windows-а уже можно запускать две задачи...
"Обычные" пользователи не запускают такие обработки, они накладные колбасят.
Их запускают Администраторы БД, а сами идут пить пиво :-)
Поэтому многозадачность Windows в данном случае не востребованна.
(43) У меня тоже много фич есть, но я удовольствие растягиваю :-)
- решение по восстановлению последовательности с паузами в рабочем режиме вроде есть на дисках ИТС (давно туда не заглядывал)
- (47) зарубите на! всякие манипуляции с задним числом в обычном режиме работы, приучите юзверя СРАЗУ РАБОТАТЬ КАЧЕСТВЕННО, а не по типу "нахренячу по-быстрому, а завтра поправлю если что..." - сразу будет БОООЛЬШОЕ облегчение...
- у мну регламентом восстанавливалась ГП штатным образом с отправкой сообщения смской мне на мобилу,Э а так как взад лазил только я и 1 доверенный более-менее грамотный человек - восстановление ГП в 90% случаев проходило без проблем.. если утром на мобиле смски нет - лез по терминалу и смотрел текстовый протокол.: протокл лучше напрямую каптчить из табло сообщенйи и больше ничем не заморачиваться - используя 1Spy.dll
> потому что в Торговле 7.7 такого документа НЕТ
Не следует путать платформу и конфигурацию :-)
Вот, например, Комплекс: ПриходнаяНакладная, Т_ПриходнаяНакладная
например так
вид документа |обработка(путь)|Модально|
"Реализация" | каталогобработок\ОбработкаИзмененияКомментария.ert |1|
усомнился...
сделал копию базы, хотел устроить "соревнования" при прочих равных - некогда...
А пока не утруждал себя точной записью результатов, извините.
На вскидку получилось так:
по данным обработки среднее время проведения под 20 секунд...
это ~3 дока в минуту...
штатная нt считает среднее время, но по 7-10 обычных доков в минуту делает...
(инвентаризационные итп большие доки не берем)
Идеи reconnect, с таймером - понравились,
проводить последовательность онлайн, в рабочее время...
(в штатную засуну?)
делал через "Предупреждение" - да, глючит, тут много вокруг этого понаписано по объект таймер итп...
1) сообщения о проведенных доках можно было бы выводить пакетами по сколько-нибудь штук,либо вовсе не выводить
2) Если бы время шло все-таки в секундах.миллисекундах
3) если бы была возможность вызывать обработку снаружи, тогда, например,
добавим в глобальный модуль
Функция RunAny(Параметр,ИмяФайла) Экспорт
ОткрытьФорму("Отчет#", Параметр, ИмяФайла);
Return 1;
КонецФункции
И вызываем из штатного шедулера vbs скрипт
set v7 = CreateObject("V77.Application")
result = v7.Initialize(v7.RMTrade, "/DПутб\ /NСпецЮзер /PЕгоПароль","NO_SPLASH_SHOW")
if result then
LogFile.WriteLine " Ok connected "+FormatDateTime(Time)
V7.EvalExpr("RunAny(""СтрокаПараметра"",""\\ПутьКОбработке\repair.ert"")")
......
1.5 от 18.09.2009
Добавлено: возможность выборочного протоколирования результатов файл.
Добавлено: возможность перепроведения всех документов, а не только из последовательности.
Удалено (!): использование метода ReconnectNative()
Описание: специальный метод для решения проблемы с MSSQL 2000 (Bug #: 472280) Выполняет отключение и подключение родного соединения программы с сервером. При этом не должно быть открытых форм списков, форм объектов, прочих объектов языка на основе курсора, подготовленных или перебираемых объектов ODBCRecordset (через родное соединение, разумеется). Не допускается вызывать этот метод в транзакции явной или неявной.
Насколько я помню, когда затачивал под ReconnectNative() пришлось отказаться от объявления Перем ДокиДляПроведения в модуле процедуры.
Сравните, как это делается в 4 версии. Там док для проведения каждый раз создается независимо из последовательности.
Но если очень надо, могу попробовать побороть.
Кстати, а почему бы Вам не поставить более свежий скуль?
Тем более я как поборол эту бяку (открытые курсоры)... писал все в список значений (Это для того чтобы в одном месте была процедура) сохранял в Значениевстроку а после выполнения метода восстанавливал.
А если требовалось в обработке то просто это значениеВСтроку и после метода реконнект(). А по поводу скуля поновее есть ли пример (версия с какими патчами) корректно работает? Чем черт не шутит вдруг правда встанет (уже год переписываю все на прямые запросы и иные ускорители исправил кучу косяков, может помогло). а так респект за обработку очень нужная вещь. Если найду гдето был запрос на версию sql с чем работаем и активация реконнект по этому методу сильно облегчит жизнь..
А зачем список значений? Хватило бы и переменной модуля обработки, в которой содержится ЗначениеВСтрокуВнутр последнего документа.
Кстати, через список значений у меня тоже есть в Функция ПНвНачало().
Это была отдельная грустная история.
В этой разработке объединенены несколько. И раньше была отдельная обработка, которая Приходные накладные перебрасывала в начало дня.
Как потом оказалось, она была коряво написана, хотя и работала. И даже на вид казалось правильной.
Док=СоздатьОбъект("Документ.Приходная");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
// Тут было изменение времени документа
КонецЦикла;И работала она довольно шустро. А когда по инициативе руководства был осуществленный внезапный неподготовленный переход на скуль, то оказалось, что время ее работы выросло в десятки! раз.
Кстати, этот "левый" переход сделал его приходящий корефан, который считал и, наверно, до сих пор себя считает крутым программистом :-)
Дошло даже до того что в первый рабочий день только один человек мог зайти в базу.
На мой вопрос:
- А вы проверяли?
Был дан ответ:
- Да
- А на скольки компьютерах 1С запускали?
- На одном
- А почему только на одном?!
.... ответа не последовало.... кажется. Давно это было...
Вот так и получилось, что все преимущества файловой версии потерялись, а недостатки скульной приобрелись.
А насчет файловой версии есть плюсы есть минусы... Мне как-то скуль больше ипанирует в плане функционала а файловая в том что без использования реконнект проводит шустрее...
Ну а по поводу перевода на скуль. профи знает что делается это не за раз. А порой приходится и переписывать много.
В том-то и дело :-)
Эксперименты надо проводить не на "живой" базе и не на живых людях.
Представьте каково мне было, когдя я прихожу на работу, а менеджеры практически рыдают - cрочная отргузка, а таблицы залочены.
А этот "Кулибин" с сисадмином (тоже приходящим) где-то на другом конце города....
И главная проблема всех что ПОЧТИ НИКТО не пишет документации (Особенно я максимум видео стправку накатаю как и что и куда.) А после моих автоматизаций все работает если не менять ничего ибо каменты к коду пишу только к передаваемым параметрам и основным функциям и прцедурам. которые хоть и универсальны но не терпят ошибок при обращении с ними. И как-то приспичило привлечь франчей... Так те обплевали мои некоторые наработки "типа не стандартно 1С" переписали через 2 недели все просто порвало.. и доказать что это их вина было очень тяжело... нет документациии, описание изменений и тд... И они сертифицированные специ а я? Самоучка с опытом в 10 лет и ни одной притензии от клиентов. все как часы + 24 часа поддержка.
P.S. Тема уж больно знакомая. Недавно фирма педдержки (софт- железо) сервак уронили бездействием а потом прислали спецов которые русского языка не понимают и слова домен и рейд их в панику вгоняют... похерили инфу и еще счет выставили.. вот как после этого к таким относится?
А создавать что-то, хоть и ввиде программ или сервисов- это хоть что-то... Я уважаю людей которые работают на созидание... А не тупо купи-продай это же система пожирающая сама себя... Мне обидно за будующее, точнее за его отсутствие... Просто сегодня все хотят отчетов а когда задал вопрос о том что надо ручками поработать" вбить данные правильные по своим клиентам" попытались свалить на меня со словами "ты же можешь"... Блин я могу и стрелять и пилить и петь, но это для души а остальное надо как-то оценивать а не требовать.
1. сделать два списка: в одном будут документы поступления, в другом документы списания.
2.Делаем выборку по всем документам в базе за указанный период
3.Перебираем документы, и на даты, где есть документы, смотрим, есть ли документы поступления, на конкретную дату, которые стоят позже, чем первый документ списания, то помещаем их в отдельный список переносимых документов на начало дня.
На мой взгляд, процесс проведения документов, особенно если они большие, гораздо длительней, чем проверки описанные мной.
А про списки почему 15? Не важно сколько там будет видов документов, чаще всего требуется именно, чтобы поступление шло раньше списания и мы можем все документы разделить на два списка.
1) Ситуация, когда нет документов списания на порядок реже, чем наоборот.
2) Обычно менеджеры когда начинают списывать товар? в 9 утра. Склады могут и в 8. Для этого и служит параметр на форме "Не обрабатывать начиная с времени, ЧЧ:ММ".
И как универсальная обработка может знать, какой документ списывает товар?
Как по Вашему, док "Наряд-Заказ Гидравлика" списывает или приходует? Или и то, и то? ;-)
За целый год собрались одним махом все сделать?
Впервые эта оббработка работала в фарм.фирме с документами по 3-8 тыс. строк. Как приходными, так и расходными.
Перенос за один день шел порядка 10-15 минут. Если базу держать в актуальном состоянии, то будет попроще.
Кстати, общий совет... На надо переносить сразу за весь период, лучше частями, по месяцу или кварталу. И просматривайте логи.
Была ошибка у меня:
Версия обработки 1.6 от 22.10.2009:
ТекстПротокол.ДобавитьСтроку("Последовательность : "+Последовательность.ОсновнаяПоследовательность.Получить());
{C:\REPAIR16.ERT(49)}: Поле агрегатного объекта не обнаружено (ОсновнаяПоследовательность)
Оказалось, что у меня в конфе последовательность называется "Производство", а не "ОсновнаяПоследовательность"
Заменил в модуле везде, где встречается одно на другое, и ура-заработало!
Altair777, спасибо за хорошую обработку!
Небольшая ошибка:
Когда ставишь галочку "По дату", там подсказка всплывает "по дату включительно", но на самом деле отрабатывает НЕ включительно. Т.е. ни одного документа из указанной даты не перепроводиться. Думаю, не страшно - нужно просто на день больше выставлять.
1. Указывать произвольный параметр проведения, например мне удобно делать так:
Результат = ДокиДляПроведения.Провести( , "ГрупповаяОбработка");При этом в документах я обрабатываю этот параметр аналогично типовому методу ГрупповаяОбработка(), чего всем советую.
Т.к. я не понял как можно получить ситуацию чтобы ГрупповаяОбработка() = 1 при немонопольном проведении и не штатным проведением, то я придумал себе костыль, если есть вариант другой я бы рад его узнать
2. Указывать кроме даты проводимого документа еще и его время - мелачь а все таки забадывает смотреть на документ, а потом вверх на ГП и сопоставлять ( лень:) ) Я имею ввиду на форме, но и в окно сообщений тоже стоило-бы, хотя я его отключаю для ускорения
3. По умолчанию не стоит устанавливать механизм вывода проводимых документов в окно сообщений, т.к. это занимает лишнее время, и ИМХО не имеет смысла т.к. при выводе ошибке и так напишется документ, а лишней инфы не нужно
4. Выводить на форму при проведении среднее время проведения документа, для оценки
5. Не изучал сильно код, но удобно было бы вывести прдположительное время которое нужно потратить на проведениее оставшихся документов, и выводить его вместе с датой и временем когда закончится проведение, немного сложновато но реально
Пауза реализована неправильно, на форме написано в сек, а судя по коду:
Пока 1000*(_GetPerformanceCounter()-НачалоОтсчета)<ТаймАут Цикл
в миллионных долях секунды. Для того, чтобы было в секундах, строчка должна быть такой:
Пока (_GetPerformanceCounter()-НачалоОтсчета)/1000 < ТаймАут ЦиклИ еще, невозможно принудительно остановить обработку в течение паузы.
> в миллионных долях секунды
не в миллионных, а в тысячных
Синтаксис:
_GetPerformanceCounter()
Назначение:
Возвращает число миллисекунд (1000-чных долей секунды) прошедших с момента включения компьютера.
Замечание:
Разница между значениями двух замеров позволяет определить количество миллисекунд прошедших между замерами.
и кажется мне что, все-таки, надо умножать
P.S. я теперь полностью переключился на 8-ку и никак не доберусь до тестовой 7-ой базы
эх.... времени не хватает
Всё правильно, сама функция _GetPerformanceCounter() возвращает в тысячных долях секунды, а вы еще умножаете на 1000, получаются миллионные доли.
Нужно наоборот, делить на 1000, чтобы получить секунды.
Например, с момента включения компьютера прошло 30 секунд, функция вернет 30'000. Прошло 5 сек, функция вернет 35'000.
По вашему условию: 1000*(35'000 - 30'000) < 5 == 5'000'000 < 5 // будет истинным 1 мс
По моему условию: (35'000 - 30'000)/1000 < 5 == 5 < 5 // будет истинным в течение 5 сек
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 18677
Создание 25.12.08 17:24
Обновление 08.02.12 01:05
Просмотры 29138
Загрузки 1278
Рейтинг
91
Комментарии 116
Код открыт Не указано
Рубрики Инструменты администратора БД
Кому
Системный администратор
,
Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа Оперативный учет 7.7
Конфигурация 1C77
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)