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