При настройке обмена данными между CRM-системой Мегаплан и решениями на платформе 1С предприятия специалисты часто сталкиваются с ситуацией, когда готовая внешняя обработка, предназначенная для конфигурации Бухгалтерия предприятия (БП), переносится в среду Управление торговлей (УТ). Из-за существенных различий в архитектуре этих конфигураций процесс запуска сопровождается многочисленными ошибками в запросах к базе данных.
В этой статье мы подробно разберем, почему возникают ошибки при обращении к таблицам изменений документов и регистров сведений, как адаптировать старый код обработки БП под метаданные УТ 11, а также рассмотрим современную альтернативу в виде официального бесплатного модуля интеграции.
При первой попытке загрузки счетов из Мегаплана в 1С:Управление торговлей вы можете столкнуться со следующей ошибкой выполнения запроса:
{ВнешняяОбработка.СинхронизацияМегаплан.Форма.ЗагрузкаСчетовИзМегаплана.Форма(938)}: Ошибка при вызове метода контекста (Выполнить)
ТЗ = Запрос.Выполнить().Выгрузить();
по причине:
{(10, 2)}: Таблица не найдена "Документ.СчетНаОплатуПокупателю.Изменения"
<<?>>Документ.СчетНаОплатуПокупателю.Изменения КАК СчетНаОплатуПокупателюИзменения
Давайте выясним причину этой ошибки. Конструкция вида Документ.ИмяДокумента.Изменения представляет собой обращение к виртуальной таблице регистрации изменений конкретного объекта в планах обмена. Ошибка возникает по двум ключевым причинам:
Бухгалтерия предприятия основной документ для выставления счетов называется СчетНаОплатуПокупателю. Однако в конфигурации Управление торговлей 11 этот объект переименован разработчиками фирмы «1С» и носит имя СчетНаОплатуКлиенту..Изменения существовала и была доступна в запросе, соответствующий документ должен быть включен в состав используемого плана обмена в качестве объекта авторегистрации.Для исправления этой ошибки выполним следующие шаги в конфигураторе:
ЗагрузкаСчетовИзМегаплана.Документ.СчетНаОплатуПокупателю.Изменения).Документ.СчетНаОплатуКлиенту.Изменения.Пример скорректированного участка кода:
// Было (ориентировано на БП):
ТекстЗапроса =
"ВЫБРАТЬ
| СчетНаОплатуПокупателюИзменения.Ссылка КАК Ссылка
|ИЗ
| Документ.СчетНаОплатуПокупателю.Изменения КАК СчетНаОплатуПокупателюИзменения";
// Стало (адаптировано под УТ 11):
ТекстЗапроса =
"ВЫБРАТЬ
| СчетНаОплатуКлиентуИзменения.Ссылка КАК Ссылка
|ИЗ
| Документ.СчетНаОплатуКлиенту.Изменения КАК СчетНаОплатуКлиентуИзменения";
После успешного исправления ошибки со счетами обработка продолжит выполнение, но прервется на следующем шаге:
{ВнешняяОбработка.СинхронизацияМегаплан.Форма.ЗагрузкаСчетовИзМегаплана.Форма(940)}: Ошибка при вызове метода контекста (Выполнить)
ТЗ = Запрос.Выполнить().Выгрузить();
по причине:
{(27, 2)}: Таблица не найдена "РегистрСведений.СтатусыДокументов.Изменения"
<<?>>РегистрСведений.СтатусыДокументов.Изменения КАК СтатусыДокументовИзменения
Проанализируем архитектуру хранения статусов в различных конфигурациях 1С. В БП используется специализированный независимый регистр сведений СтатусыДокументов для хранения текущих состояний счетов и других первичных документов. В конфигурации УТ 11 архитектура абсолютно иная. Статусы документов (например, счетов на оплату или заказов клиентов) хранятся непосредственно внутри самих документов в виде реквизита Статус (например, перечисление СтатусыСчетовНаОплатуКлиентам со значениями НеСогласован, Согласован, Аннулирован).
Так как регистра сведений СтатусыДокументов в УТ 11 не существует, обращение к его таблице изменений вызывает закономерный сбой. Чтобы решить эту проблему, рассмотрим два варианта обхода:
Если для бизнес-процессов вашей компании не критична мгновенная синхронизация изменения статусов из 1С в Мегаплан, наиболее простым решением будет полное комментирование или удаление этого участка запроса в коде обработки. Изменения по самому документу СчетНаОплатуКлиенту все равно будут регистрироваться и передаваться при обновлении реквизитов.
Если синхронизация статусов необходима, вам потребуется переписать логику формирования пакета обмена. Вместо отслеживания изменений отдельного регистра сведений, необходимо анализировать изменение реквизита Статус непосредственно в измененных документах СчетНаОплатуКлиенту. Ниже приведен пример схемы запроса для получения измененных документов вместе с их текущими статусами:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетИзменения.Ссылка КАК Ссылка,
| СчетИзменения.Ссылка.Статус КАК Статус
|ИЗ
| Документ.СчетНаОплатуКлиенту.Изменения КАК СчетИзменения";
ТЗ = Запрос.Выполнить().Выгрузить();
После получения таблицы изменений вам потребуется сопоставить внутренние статусы 1С УТ 11 со статусами счетов в Мегаплане через модуль сопоставления значений в коде внешней обработки.
Переделка сложной логики планов обмена и структуры запросов вручную требует глубоких знаний архитектуры обеих конфигураций. К счастью, на сегодняшний день разработчиками Мегаплана выпущен официальный специализированный модуль интеграции для 1С:Управление торговлей 11. Использование готового модуля исключает необходимость ручной правки кода.
Рассмотрим ключевые возможности и технические требования официального модуля:
ЗаказКлиента и выгружать обратно информацию по их исполнению.РеализацияТоваровУслуг).Для стабильной работы официального модуля интеграции необходимо соблюдение следующих условий:
Использование официальной сборки обработки существенно экономит время системного администратора и гарантирует корректность выполнения транзакций при обмене данными.