8.х Получить обороты в обработке проведения УТ 10.3

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dem0lisher, 2 июл 2015.

  1. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Никак .... =)
    Проблема в том, в какой момент в регистре заказов будет новая сумма, с учетом вновь проведенной корректировки.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    А что вы тогда хотите ? Если ждете события, которое может и не наступить -Hungry-
  3. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Опять лирика?
    Чтож мне теперь делать ерунду типа отложенного проведения? В регистр записывать изменившиеся заказы, а рег. заданием раз в 5 секунд перезаполнять суммы по заказам из этого регистра?
    Или есть обработчик, который будет после тразакции?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Ну тогда подключайте обработчик оповещения, который будет периодически проверять значения в регистрах и если что - менять их.
    Dem0lisher нравится это.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Это не ерунда, а вполне себе правильное решение вашей проблемы.
    Dem0lisher нравится это.
  6. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Лучше уж получать обороты по тому, что есть в регистре, исключая документ, а затем прибавлять сумму проводимого документа.
    Чем вешать очередные тикалки, тормозящие систему
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Если не произойдет фиксации транзакции при проведении "Корректировка заказа", то чудеса с суммами начнутся....
  8. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Например по какой причине? В подписке проверяем на отказ и на источник.ЗагрузкаДанных = истина
    Если в подписке на проведение не отказ (После основного проведения документа).
    Какая еще причина может помешать зафиксировать транзакцию? Какой-нибудь фатал-эрор-деление на ноль или отключение питания сервера?
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    В любой из регистров, для которых документ является регистратором, не запишутся движения по какой-либо причине....
    Dem0lisher нравится это.
  10. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    А чем спасет в таком случае предложенный вами "вполне себе правильное решение вашей проблемы." с записью в регистр изменений?
    Ведь их тоже надо будет в той же самой подписке записывать в регистр? И они тоже могут быть записаны в тот момент, когда транзакция не прошла?
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Если РС подчинен регистратору, то в него будет попадать данные только при успешном проведении документа.
    Dem0lisher нравится это.
  12. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    хм И верно! Спасибо всем большое!
  13. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Ну уж совсем сумашедшая идея :) из выше предложенных, но не устроивших.
    В подписке на проведение нужно просто подвесить событие (можно на разовое, можно на интервальное, и отменить при первом удачном исполнении).
    Т.е. При проведении срабатывает подписка, которая объявляет новый таймер на "то что нужно сделать". Сама подписка завершается, документ заканчивает проведение, транзакция закрывается. "Город засыпает, просыпается мафия"... И срабатывает объявленный таймер, фактически после проведения. Ну думаю суть понятна. :)
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    это костыльно-ориентированное программирование уже :)
    регламентным заданием выгребать все проведенные документы и делать с ними, что угодно - оптимальное решение.
    Dem0lisher нравится это.
  15. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Да тоже костыли... :) Просто групповые. Я смотрю как то костылей приходится городить много. В 7ке можно было выбрать движения регистров по текущему документу даже до окончания проведения (те что уже надвИгались). Где-то я помнится это использовал...
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Это самые "добрые" костыли из всех :)

    Тут так же можно, просто в конфигурации используется типовой метод процедуры "регистрации" документа в БД: сперва записывается сам документ, потом все его движения попорядку, потом фиксируется транзакция.
    Если в обработке события "ОбработкаПроведения" делать Записать() для каждого измененного набора записей, то будет все ОК, но это нужно переписать пол конфигурации, внимательно следить за тем, какие регистры двигаются, если ничего этого не сделать - количество транзакций увеличится как минимум в 2 раза для одного документа.
  17. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Ну это зависит от количества таких документов. Я полагаю, что корректировка - это такой документ, который делается раз в пятилетку, а потому нет необходимости держать на него постоянный таймер, а иметь лишь один, для одноразового использования. Если ВДРУГ, по большому празднику, доков окажется два, то это не будет иметь большого значения. Но что главное, что не будет висеть постоянный таймер, который нужен лишь иногда, НО сразу после документа.
  18. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ребят, мне кажется вы переусложнили.
    Dem0lisher предлагаю попробовать:
    1) сделать подписку не на событиеПриПроведении документа, а на событие ПриЗаписи регистра накопления (ЗаказыПокупателей).
    2) в этом событии ты же можешь отследить тип регистратора который пишет (нужен же только корректировка долга), и конкретный заказ по которому пишется корректировка. Ну и все. Дальше делай так как делал в первом посте.
    3) только в первом посте в коде у тебя ошибка. В запрос не момент времени передавать надо. Момент времени документа ты и так можешь получить функцией ДокументСсылка.МоментВремени(). В запрос надо передавать границу, причем для твоего случая естественно ВидГранцы.Включая.
    Dem0lisher нравится это.
  19. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    он получит только предыдущую версию движений, либо не получит ничего, т.к. новые данные в регистры еще не записались во время выполнения запроса к регистру.
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Нормально все там будет. Все получит.

    А да, дополнение к моему предыдущему посту: код из поста #1 ведь не запрашивает остатки, поэтому даже границу передавать не надо, просто Документ.МоментВремени().

    Ну и разобраться с тем что событие ПриЗаписи() регистра будет возникать 2 раза: первый раз очистка движений, второй раз запись. Лучше наверно просто 2 раза перезаписывать документ ПланируемоеПоступление и не обращать на это внимания.
    Dem0lisher нравится это.

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