Как настроить обмен ценами со скидками из 1С:Управление торговлей 10.3 в 1С:Бухгалтерию предприятия 1.6?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

При обмене данными между различными конфигурациями 1С пользователи часто сталкиваются с необходимостью синхронизировать цены товаров, особенно если в одной из систем применяются скидки. В данной статье мы подробно рассмотрим, как решить распространенную проблему, когда при выгрузке документа "Заказ покупателя" из 1С:Управление торговлей 10.3 в "Счет на оплату покупателю" 1С:Бухгалтерии предприятия 1.6 не передаются цены с учетом автоматических скидок.

Разберем ситуацию, когда цена в выгружаемом документе берется как базовая, без учета всех примененных в "Управлении торговлей" скидок, и выясним, где находится код, отвечающий за формирование цены при обмене, чтобы мы могли его скорректировать.

Суть проблемы: почему скидки не передаются?

Документ "Заказ покупателя" в 1С:Управление торговлей 10.3 обладает сложной логикой ценообразования. В нем могут быть настроены различные виды цен, а также автоматические скидки, которые применяются к строкам табличной части при определенных условиях (например, при достижении объема покупки, для конкретных контрагентов или в определенный период). Эти скидки изменяют итоговую сумму по строке, но не всегда напрямую отражаются в реквизите "Цена" как таковом, а скорее влияют на расчет итоговой "Суммы" за вычетом скидки.

При стандартном обмене между УТ 10.3 и Бухгалтерией 1.6, когда "Заказ покупателя" преобразуется в "Счет на оплату покупателю", правила конвертации данных часто используют простую формулу для определения цены за единицу товара в табличной части "Товары" документа-приемника:

Цена = Сумма / Количество;

Проблема возникает, когда реквизит Сумма, используемый в этой формуле на стороне источника (УТ 10.3), содержит базовую сумму до применения скидок, или же при обмене берется другой реквизит, не учитывающий итоговые значения. В результате, в "Счет на оплату покупателю" попадает цена, которая не отражает фактически предоставленную скидку.

Где искать код формирования цены при обмене?

Ключевым инструментом для настройки и модификации правил обмена между конфигурациями 1С является отдельная конфигурация **"Конвертация данных 2.0"**. Именно там сосредоточена вся логика преобразования объектов из одной системы в другую, включая формирование цен.

Мы будем работать с правилами конвертации, которые описывают, как документ "Заказ покупателя" (источник) преобразуется в документ "Счет на оплату покупателю" (приемник). Нас интересует конкретный программный код, который получает цену товара и передает её в документ-приемник. Этот код, как правило, находится в обработчиках событий правил конвертации свойств (ПКС) для реквизитов табличной части "Товары".

В "Конвертации данных" структура правил обычно выглядит следующим образом:

  1. Правило конвертации объектов (ПКО): Определяет, как один тип объекта (например, документ "Заказ покупателя") преобразуется в другой тип объекта (например, документ "Счет на оплату покупателю").
  2. Правила конвертации табличных частей: Внутри ПКО документа могут быть правила для табличных частей (например, "Товары"), описывающие преобразование строк этих частей.
  3. Правила конвертации свойств (ПКС): Для каждого реквизита табличной части (например, "Цена", "Количество", "Сумма") создается ПКС, которое определяет, как значение этого реквизита будет получено из источника и установлено в приемник. Именно здесь мы и будем искать и корректировать код.

Пошаговая инструкция по корректировке правил обмена для передачи цен со скидками

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

  1. Откройте конфигурацию "Конвертация данных 2.0".

    Запустите Конвертацию данных и убедитесь, что у вас есть доступ к правилам обмена между УТ 10.3 и БП 1.6. Если правила отсутствуют, вам потребуется их загрузить или создать.

  2. Загрузите актуальные правила обмена.

    В "Конвертации данных" откройте файл правил обмена (обычно это XML-файл), который используется для синхронизации между вашими УТ 10.3 и БП 1.6.

  3. Найдите правило конвертации объекта (ПКО) для "Заказ покупателя".

    На вкладке "Правила конвертации объектов" найдите ПКО, где в качестве "Источника" указан документ "Заказ покупателя" (Документ.ЗаказПокупателя), а в качестве "Приемника" – "Счет на оплату покупателю" (Документ.СчетНаОплатуПокупателю).

  4. Перейдите к правилу конвертации табличной части "Товары".

    Дважды кликните по найденному ПКО. В открывшемся окне ПКО перейдите на вкладку "Табличные части". Здесь вы увидите список табличных частей документа-источника и соответствующих им табличных частей документа-приемника. Найдите правило для табличной части "Товары" (Товары).

  5. Найдите правило конвертации свойства (ПКС) для реквизита "Цена".

    Дважды кликните по правилу табличной части "Товары". В новом окне вы увидите список правил конвертации свойств (ПКС) для реквизитов этой табличной части. Нас интересует реквизит, отвечающий за цену в документе-приемнике. Это может быть Цена, ЦенаЗаЕдиницу или аналогичный реквизит.

    Мы должны проанализировать, как формируется значение для этого ПКС. Возможно, цена формируется не напрямую, а является результатом деления суммы на количество. В этом случае нас будут интересовать ПКС для реквизитов Сумма и Количество.

  6. Откройте обработчик события "Перед выгрузкой" или "После загрузки".

    В рамках ПКС для Цена (или Сумма/Количество, если цена вычисляется позже) найдите обработчики событий. Чаще всего логика формирования цены для выгрузки находится в событии **"Перед выгрузкой"** для свойства "Цена" в ПКС, либо в обработчике "После загрузки" для строки табличной части документа-приемника, если цена рассчитывается уже в Бухгалтерии.

    Предположим, мы нашли ПКС для реквизита "Цена" и открыли его обработчик "Перед выгрузкой". Здесь вы увидите программный код, который определяет значение реквизита Значение, которое затем будет передано в документ-приемник. В большинстве стандартных случаев код будет выглядеть примерно так:

    
    // Пример кода для обработчика "Перед выгрузкой" в правилах конвертации
    // "Источник" - это текущая строка табличной части "Товары" из Заказа покупателя
    
    Если НЕ Источник.Количество = 0 Тогда
        Значение = Источник.Сумма / Источник.Количество;
    Иначе
        Значение = 0;
    КонецЕсли;
    

    Иногда, чтобы увидеть всю логику формирования табличной части, можно нажать F2 на ПКС для табличной части "Товары". Внизу появится область, где может быть обход по строкам и установка значений.

  7. Проанализируйте и скорректируйте код.

    Критически важно: В "Управлении торговлей 10.3" после расчета и применения автоматических скидок, итоговая сумма по строке табличной части "Товары" (уже со скидкой) сохраняется в реквизите Сумма этой строки. Таким образом, если в обработчике "Перед выгрузкой" используется код, аналогичный приведенному выше:

    Значение = Источник.Сумма / Источник.Количество;

    то Источник.Сумма уже должен содержать итоговое значение с учетом всех рассчитанных в "Управлении торговлей" автоматических скидок. Соответственно, получаемая Значение (цена за единицу) будет корректно отражать стоимость товара после применения скидки.

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

    • Скидки не были рассчитаны: Убедитесь, что в документе "Заказ покупателя" в УТ 10.3 скидки были фактически рассчитаны (например, нажатием соответствующей кнопки или при проведении документа). Если документ не был проведен или скидки не были интерактивно применены, поле Сумма может содержать базовое значение.
    • Используется другой реквизит: Возможно, правила обмена ошибочно берут значение не из Источник.Сумма, а из какого-то другого реквизита строки, который хранит базовую сумму без скидок (например, Источник.СуммаБезСкидки, если такой реквизит существует). В этом случае необходимо изменить ссылку на правильный реквизит.

    Если код уже использует Источник.Сумма, но скидки все равно не передаются, то проблема, скорее всего, не в самом коде деления, а в том, что Источник.Сумма на момент выгрузки еще не содержит скидок. Убедитесь, что логика расчета скидок в УТ 10.3 выполняется до того, как данные попадают в выгрузку. Часто за расчет скидок отвечают общие модули, такие как ОбработкаТабличныхЧастей и его процедуры, например РассчитатьСуммуТабЧасти.

    Если требуется модификация: В редких случаях может потребоваться добавить дополнительную логику в обработчик, чтобы явным образом получить сумму со скидкой, если она хранится в другом месте или требует пересчета. Однако, для стандартной конфигурации УТ 10.3 и БП 1.6 использование Источник.Сумма обычно достаточно, при условии, что скидки были рассчитаны.

  8. Сохраните измененные правила обмена.

    После внесения всех необходимых корректировок, сохраните измененные правила обмена в файл XML.

  9. Загрузите обновленные правила в конфигурации обмена.

    В конфигурациях УТ 10.3 и БП 1.6 (в обработках обмена) загрузите новые правила. Это обеспечит использование обновленной логики при следующих сеансах обмена данными.

  10. Протестируйте обмен.

    Создайте новый "Заказ покупателя" в УТ 10.3, убедитесь, что скидки рассчитаны и применены. Выгрузите данные в БП 1.6 и проверьте "Счет на оплату покупателю". Цена в нем должна теперь корректно отражать скидки.

Альтернативный подход: написание собственного обмена

В своем сообщении автор также упомянул возможность написания собственного обмена, в котором выгружались бы только номенклатура, контрагент, количество и суммы. Этот подход является более трудоемким и требует глубоких знаний платформы 1С и структуры данных обеих конфигураций. Он подразумевает создание полностью новой обработки выгрузки/загрузки, где вы самостоятельно реализуете всю логику получения данных из источника, их преобразования и записи в приемник.

Хотя такой подход дает максимальную гибкость, мы не рекомендуем его для решения подобных задач, если существует возможность доработать стандартные правила обмена. Модификация существующих правил в "Конвертации данных" обычно быстрее, проще в поддержке и менее подвержена ошибкам, чем разработка с нуля.

Дополнительные аспекты и нюансы, которые стоит учесть

Таким образом, основное решение проблемы с некорректной передачей цен со скидками кроется в детальном анализе и при необходимости корректировке стандартных правил обмена в конфигурации "Конвертация данных 2.0". Убедившись, что в обработчике "Перед выгрузкой" для реквизита "Цена" (или при расчете из "Суммы" и "Количества") используется именно итоговая сумма строки документа-источника, уже включающая все скидки, мы сможем добиться корректной передачи цен в "Бухгалтерию предприятия".

← На главную