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