Как изменить движения регистра «Расчёты с покупателями» в УНФ через расширение?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как изменить движения регистра «Расчёты с покупателями» в УНФ через расширение?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38988
      Фото аватараOdineski
      Участник

        у меня Управление нашей фирмой, редакция 3.0 (3.0.12.253)
        мне нужно в документе Корректировка реализаций перезаписать движения по регистру «Расчеты с покупателями» так, как нужно мне

      • #38989
        bot_avaOdin — Одинэсник
        Участник

          В УНФ 3.0.12.253 это можно сделать через расширение конфигурации, не изменяя типовую конфигурацию.

          Правильная схема такая:

          1. Типовая процедура ОбработкаПроведения сначала выполняется.
          2. Типовые движения регистра РасчетыСПокупателями очищаются.
          3. В регистр добавляются ваши движения.
          4. При записи документа платформа записывает уже измененный набор движений.

          Используйте аннотацию &ИзменениеИКонтроль, потому что здесь нужно выполнить код после типового проведения.

          ## 1. Создайте расширение

          В конфигураторе:

          Например, назовите расширение:

          Добавьте в расширение документ:

          Откройте его:

          Если регистра РасчетыСПокупателями не видно в объектном модуле расширения, добавьте его в состав движений документа через расширение.

          Обычно это делается так:

          У регистра должна быть включена возможность использования документом как регистратора.

          —

          ## 2. Базовый шаблон кода

          В модуле объекта документа КорректировкаРеализаций расширения напишите:

          Ключевая строка:

          Она удаляет из набора движений движения, которые сформировала типовая процедура.

          После этого вы добавляете свои записи:

          Но конкретные имена полей нужно проверить именно в вашей базе. В регистре могут использоваться, например:

          — Контрагент;
          — Партнер;
          — Договор;
          — Организация;
          — РасчетныйДокумент;
          — Сумма;
          — Валюта;
          — Курс;
          — Кратность;
          — Сделка;
          — ЗаказКлиента;
          — ВидДвижения.

          Нельзя заранее гарантировать точные имена измерений и ресурсов без просмотра структуры регистра в вашей конфигурации.

          —

          # 3. Как посмотреть правильные имена полей

          В конфигураторе откройте:

          Посмотрите вкладки:

          Например, если структура регистра выглядит так:

          то движение нужно создавать так:

          Если регистр остаточный, у него дополнительно будет поле:

          или:

          Если регистр оборотный, свойства ВидДвижения у него не будет.

          —

          # 4. Пример с одной собственной записью

          Допустим, вы хотите полностью удалить типовые движения и создать одну запись по текущему документу.

          Пример:

          Если документ не имеет реквизита Договор, а договор находится в табличной части или в другом реквизите, этот код нужно изменить.

          —

          # 5. Пример с движением по строкам документа

          Если в КорректировкаРеализаций есть табличная часть, например Товары, и по каждой строке нужно сформировать свое движение:

          Но Номенклатура обычно не является измерением регистра расчетов с покупателями. Поэтому добавлять это поле можно только если оно действительно есть в регистре.

          Чаще расчетный регистр заполняется не по каждой номенклатуре, а по документу расчетов, партнеру, договору и сумме.

          —

          # 6. Как определить, приход или расход нужно ставить

          Если РасчетыСПокупателями является регистром остатков, у него есть поле ВидДвижения.

          Для увеличения задолженности покупателя обычно используется один вид движения, для уменьшения задолженности, другой.

          В типовом коде документа нужно посмотреть, что делает сама конфигурация.

          Откройте движения документа:

          1. Откройте документ Корректировка реализации.
          2. Нажмите:

          3. Выберите регистр Расчеты с покупателями.
          4. Посмотрите типовые строки.
          5. Сравните:
          — вид движения;
          — сумму;
          — контрагента;
          — договор;
          — документ расчетов;
          — организацию;
          — валюту;
          — дату.

          Можно также временно включить регистрацию движений и посмотреть результат после проведения.

          Пример движения с видом движения:

          Важный момент: нельзя автоматически считать, что для уменьшения задолженности всегда нужно указывать Расход. Это зависит от назначения конкретного регистра и логики УНФ. Сначала нужно посмотреть типовую запись в движениях.

          —

          # 7. Более надежный способ: скопировать типовое движение и изменить только нужные поля

          Если типовая конфигурация заполняет много обязательных реквизитов, безопаснее не создавать движение полностью вручную, а:

          1. Выполнить типовое проведение.
          2. Получить типовую запись.
          3. Изменить нужные значения.
          4. Оставить остальные заполненные поля.

          Например, если после типового проведения в регистре всегда создается одна строка:

          Такой вариант удобен, если нужно изменить только сумму, дату или документ расчетов.

          Но если типовая процедура создает несколько движений, нужно понимать, какую именно строку вы изменяете.

          —

          # 8. Если нужно удалить типовые движения и создать несколько своих

          Если регистр остаточный и нужно сделать расходное движение:

          Если приходное:

          —

          # 9. Почему не нужно использовать Записать() вручную

          В обработке проведения не нужно писать:

          Движения документа записываются платформой автоматически после выполнения ОбработкаПроведения.

          Правильно:

          Неправильно:

          Ручная запись внутри проведения может привести к проблемам с транзакцией и повторной записью регистра.

          —

          # 10. Если после ПродолжитьВызов движения нельзя изменить

          Возможны две причины.

          ## Причина 1. Регистр не включен в движения документа

          Проверьте, что в расширении у документа есть регистр:

          и там указан:

          Если регистра нет, платформа может выдать ошибку при обращении к:

          или движение не будет записываться.

          ## Причина 2. Документ не является регистратором регистра

          Откройте регистр накопления и проверьте, входит ли документ КорректировкаРеализаций в список регистраторов.

          Если документ не является регистратором, штатным способом через Движения записать этот регистр нельзя. Тогда нужно либо:

          — добавить документ в регистраторы регистра в расширении, если конфигурация это позволяет;
          — использовать предусмотренный типовой механизм корректировки;
          — изменять движения регистра через специальный документ Корректировка регистров, если он предусмотрен в УНФ;
          — не записывать регистр напрямую в произвольной серверной процедуре.

          Для регистра расчетов это особенно важно, поскольку в типовых конфигурациях взаиморасчеты могут пересчитываться специальными обработками.

          —

          # 11. Практический вариант для начала

          Сначала поставьте такой диагностический код:

          Проведите документ и посмотрите количество движений.

          Если количество больше нуля, можно временно посмотреть значения конкретного движения:

          Поля в этом диагностическом примере должны существовать в вашем регистре. Если какого-то поля нет, строку с ним нужно удалить или заменить на фактическое имя.

          После проверки замените код на рабочий:

          Перед использованием на рабочей базе сделайте резервную копию и проверьте результат в копии базы на нескольких вариантах документа:

          — корректировка увеличивает сумму;
          — корректировка уменьшает сумму;
          — документ полностью сторнируется;
          — документ проводится повторно;
          — документ сначала распроводится, затем проводится снова;
          — меняются контрагент, договор или документ расчетов.

          Самое важное в вашем случае: сначала выполнить ПродолжитьВызов, затем очистить Движения.РасчетыСПокупателями, после этого добавить свои записи с полным набором измерений и ресурсов регистра.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С