7.7 Восстановление последовательности(пример кода)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем X-Man, 22 окт 2013.

  1. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Здравствуйте. Возможно, у кого-нибудь найдется пример хорошей обработки для восстановления последовательности, желательно с обработкой ошибок проведения(при возникновении ошибки последовательность устанавливается на следующий документ). Никогда с этим не работал, буду заранее благодарен откликнувшимся.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Внешняя обработка работает намного медленнее встроенного механизма. При этом в базе больше вряд ли кто сможет работать - транзакции замучают. Вам собственно зачем, робот хотите запускать?
  3. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Встроенный механизм восстанавливает последовательность со сдвигом точки актуальности итогов+останавливается на первом документе, в котором возникли ошибки при проведении. Мне же надо, чтобы несмотря на успешность/неуспешность проведения последовательность все равно восстанавливалась(проверять, почему не провелось, никто не будет, т.к. слишком большой объем документов). Обработку планируется запускать в отдельном узле распределенной ИБ, где никто работать не будет. Все это нужно для получения актуальных цифр по себестоимости.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Думаю вы кардинально заблуждаетесь.... НЕЛЬЗЯ пропускать документы с ошибкой. Конечно ошибка м.б. не критичной. Типа перемещаем из кассы больше денег чем там есть (ну удалили/изменили документ кассы) Ну а если у вас не хватает по остаткам? У вас сразу плывет себестоимость и пока не выровняете остатки на нужную дату - ничего не получится.
  5. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Кто их будет выравнивать? Я? :) Я же говорю, слишком большой объем, и если в одном-двух документах будут ошибки-никто не заметит. Естественно, я за то, чтобы все было правильно и красиво, но не все от меня зависит. Мне вообще предлагали "как-то извратиться", чтобы просчитать себестоимость вручную(типа в ТЗ, ничего не перепроводя), я сказал-идите лесом, отчеты я тоже в уме потом строить буду? :)
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Насчет отчетов - вы абсолютно правы. Насчет проведения - НЕТ. Вы даже не представляете НАСКОЛЬКО это все серьезно.
    Вот вам кусок кода робота по восстановлению последовательности. Думаю разберетесь.

    Код:
     Док = СоздатьОбъект("Документ");
    Док.ВыбратьПоПоследовательности(ПозицияНач, ПозицияКон, ИмяПосл);
    Пока Док.ПолучитьДокумент() = 1 Цикл
    // непроведенные документы не принадлежат посл-тям
    Если Док.Проведен() = 0 Тогда
    Продолжить;
    КонецЕсли;
    // запретить регистрацию изменений документа при его проведении
    Док.РегистрацияИзменений(0);
    // собственно проведение документа. так как документы проводятся
    // последовательно то граница посл-ти будет перенесена на данный
    // документ
    Если Док.Провести()=0 Тогда
    ЕстьОшибки=1;
    Тхт.ДобавитьСтроку("ОБНАРУЖЕНА ОШИБКА. Документ не провелся! "+Док);   
    Прервать; //вот тут можете продолжить
    Иначе
    Тхт.ДобавитьСтроку(""+Док);
    КонецЕсли;
    
    Если ПораОстановиться()=1 Тогда
    Прервать;
    КонецЕсли;
    ВсегоДок=ВсегоДок+1;
    
    КонецЦикла; 
    
  7. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Угодник, спасибо. Может что-то посоветуешь для решения моей задачи? Хотят получить реальные данные, но перепровести все в рабочей базе не представляется возможным из-за большого объема документов. Вот я и решил делать перепроведение в отдельной базе. Только теперь не могу определиться: вторую базу настроить как "только получатель" или пусть результаты перепроведения переливаются в рабочую базу? Это же должно быть намного быстрее, чем просто перепроведение в рабочей? Насколько я понял, при обмене переносятся только движения, самого перепроведения как такового не происходит?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Забыл еще кусок
    Код:
    Нашли=0;
    Для А=1 По Метаданные.Последовательность() Цикл
    Посл = Метаданные.Последовательность(А).Идентификатор;
    Если Найти(Посл,"ОсновнаяПоследовательность")<>0 Тогда
    Нашли=1;
    ОсПос=Последовательность.ПолучитьАтрибут(Посл);
    ДокОсПос=ОсПос.ПолучитьДокумент();
    Инф=?(ДокОсПос.Выбран()=1,""+ДокОсПос," не определён.");
    ИмяПосл=Посл;
    КонецЕсли; 
    КонецЦикла;
    
    Если Нашли=0 Тогда
    Предупреждение("Основная последовательность не найдена. Работа невозможна",15);
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    
    //окончание восстановления
    ПозицияКон = СформироватьПозициюДокумента(ТекущаяДата()+1);
    // получить наименьшую границу посл-ти
    ПозицияГП = ОсПос.ПолучитьПозицию();
    
    // документ находящийся на границе посл-ти перепроводить не надо
    // поэтому получаем следущую позицию
    ПозицияНач = СформироватьПозициюДокумента(ПозицияГП, 1);
    
    В моем случае робот запускается ночью по расписанию. Заканчивает работу тоже по расписанию.
    Утром ответственный смотрит логи работы. Поправляет что нужно. Таким образом рано или поздно последовательность догонит ТА.
    Не знаю какой у вас документооборот, но у клиента порядка 3500 документов ежедневно. Все итоги актуальны. Чего и вам желаю.
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да не за что.

    Про рыбку и прорубь пословицу напомнить? Все РЕАЛЬНО и БЕЗ ВАРИАНТОВ

    Это ничего не даст


    Без разницы. Объем-то одинаковый


    Заблуждаетесь. Переносятся как раз тупо ОБЪЕКТЫ по которым было движение..
  10. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Почему перепроведение в отдельной базе ничего не даст, не совсем понял?
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Потому что переносятся ОБЪЕКТЫ а не движения по ним. УРБД фиксирует ТОЛЬКО факт движения (обратите внимание в моей обработке я это выключаю) для того чтобы знать что этот объект предназначен для обмена.
  12. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    А движения каким образом формируются? Происходит перепроведение после загрузки или как?
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да
    Можно либо разрешить, либо запретить миграцию движений регистров. В одну сторону не получится. В любом случае происходит движение регистров в центральном узле. Вы представляете какая каша получится?
  14. TopicStarter Overlay
    X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Ну не знаю. В нашей базе расходные документы загружаются в десятки раз быстрее, чем проводятся.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну так вы не путайте божий дар с яичницей))))) Загрузить одно (просто переписать объект), а провести - совсем другое.
    Со всей ответственность вам скажу: из вашей затеи с УРБД ничего не выйдет. Ну невозможно на тракторе выиграть гонки формула-1. Не предназначен он для этого.

Поделиться этой страницей