При работе с электронным документооборотом (ЭДО) в программе «1С:Управление торговлей 11» (а также в смежных конфигурациях «1С:ERP» и «1С:Комплексная автоматизация») пользователи часто сталкиваются с неприятной особенностью. При создании документа Приобретение товаров и услуг напрямую из ЭДО на основании входящего УПД реквизит Соглашение автоматически не заполняется. Если же выбрать соглашение вручную, система предлагает перезаполнить цены. При согласии цены сбрасываются в ноль, а при отказе — цены остаются, но колонка Вид цены в табличной части оказывается пустой, из-за чего автоматическая регистрация новых цен поставщика становится невозможной.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутреннее поведение системы и рассмотрим четыре эффективных способа решения — от простых настроек без программирования до небольших доработок системы.
Для начала выясним причину такого поведения конфигурации. Регистрация цен поставщиков в системе 1С происходит в момент проведения документа Приобретение товаров и услуг (при условии, что включена соответствующая опция). Запись данных производится в регистр сведений Цены номенклатуры поставщиков. Этот регистр имеет ключевое измерение — Вид цены поставщика.
Когда документ создается автоматически на основании входящего пакета ЭДО, программа переносит текстовые и числовые данные из файла (номенклатуру, количество, цену, сумму). Но она не всегда может сопоставить соглашение об условиях закупок, поскольку у одного контрагента в базе может быть создано несколько действующих соглашений или договоров.
Когда вы открываете созданный документ и вручную выбираете Соглашение, платформа 1С отрабатывает стандартный алгоритм изменения реквизита и выдает диалоговое окно с вопросом: «Перезаполнить цены по соглашению?». Здесь у пользователя есть два пути, и оба ведут к трудностям:
Вид цены в табличной части Товары.Следствие: Так как колонка Вид цены пуста, проведение документа с установленным флагом Регистрировать цены поставщика автоматически не дает никакого результата. Программа просто «не понимает», по какому именно виду цен (например, «Оптовая закупка» или «Базовый прайс-лист контрагента») нужно сделать запись в регистр сведений.
Рассмотрим подробнее, как решить эту проблему различными способами.
---
Если документов немного и вам нужно оперативно провести документ с сохранением цен из ЭДО и успешной регистрацией цен в базе, воспользуйтесь штатным механизмом группового изменения строк.
Разберем этот процесс по шагам:
Приобретение товаров и услуг.Соглашение выберите нужное соглашение с поставщиком вручную.Товары.Дополнительно и убедитесь, что установлен флаг Регистрировать цены поставщика автоматически.---
Чтобы полностью исключить ручной выбор соглашения и появление раздражающих диалоговых окон, мы можем настроить систему так, чтобы соглашение и договор подставлялись автоматически сразу в момент генерации документа из ЭДО. В этом случае цены из файла сопоставятся с нужным видом цены автоматически.
Проанализируем необходимые настройки:
Закупки — НСИ закупок — Соглашения с поставщиками. Найдите соглашение с вашим контрагентом.Действует. Если у вас в базе несколько действующих соглашений на одного и того же контрагента, система 1С при загрузке ЭДО физически не сможет определить, какое из них применить, и оставит поле пустым.ЭДО — Настройки отправки (или воспользуйтесь разделом Администрирование — Обмен электронными документами — Настройки ЭДО).При соблюдении этих условий входящий документ ЭДО сразу сформируется с заполненным соглашением, корректным видом цен и сохранит все цены поставщика, указанные в электронном УПД.
---
Для того чтобы первый и второй способы работали корректно, само соглашение об условиях закупок должно быть правильно настроено в системе. Проверим параметры соглашения:
УТ 11) найдите флаг «Регистрировать цены поставщика автоматически» и установите его. При включении этого флага в соглашении, он будет автоматически наследоваться всеми новыми документами Приобретение товаров и услуг, созданными по данному соглашению.---
Если вы хотите полностью автоматизировать процесс и избавить пользователей от рутинных действий по ручному заполнению колонок, наилучшим решением будет использование механизма расширений конфигурации. Это безопасный способ доработки, который не снимает базу с поддержки и сохраняет возможность типового обновления.
Рассмотрим пример программной логики, которую можно реализовать в расширении. Нам необходимо перехватить процедуру изменения соглашения в форме документа Приобретение товаров и услуг. Если пользователь выбирает соглашение и отказывается от пересчета цен, мы должны программно заполнить колонку Вид цены во всех строках табличной части дефолтным значением из выбранного соглашения.
Примерный фрагмент кода для реализации в расширении формы документа:
&После("СоглашениеПриИзмененииНаКлиенте")
Процедура Расш_СоглашениеПриИзмененииНаКлиенте(Элемент)
// Получаем объект документа на сервере для обхода строк
ОбъектДокумента = РеквизитФормыВЗначение("Объект");
// Проверяем, заполнено ли соглашение и есть ли в нем вид цены
Если ЗначениеЗаполнено(ОбъектДокумента.Соглашение) Тогда
ВидЦеныИзСоглашения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектДокумента.Соглашение, "ВидЦеныПоставщика");
Если ЗначениеЗаполнено(ВидЦеныИзСоглашения) Тогда
// Проходим по строкам и заполняем незаполненные виды цен, сохраняя текущие цены
Для Каждого СтрокаТЧ Из ОбъектДокумента.Товары Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ.ВидЦены) Тогда
СтрокаТЧ.ВидЦены = ВидЦеныИзСоглашения;
КонецЕсли;
КонецЦикла;
// Копируем измененные данные обратно в реквизит формы
ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Данная доработка работает незаметно для конечного пользователя: при выборе соглашения и нажатии кнопки «Не перезаполнять» программа сохранит все импортированные из ЭДО цены, но при этом автоматически пропишет правильный вид цен в табличную часть. Документ проведется без ошибок, а новые цены успешно зарегистрируются в системе.