Введение
Всем привет! Давайте поговорим о таком объекте конфигурации - как "План обмена".
В этой статье я хочу поделиться своим опытом по работе с этим объектом, расскажу, с какими обменами я сталкивался за свою практику - начнем с самых простых вещей - автоматической регистрации в плане обмена, а закончить постараюсь применением интересных возможностей 1С для регистраций объектов к обмену.
Здесь я не буду рассматривать такие вещи, как конвертация данных, перенос объектов из одной конфигурации в другую. Начнем с того, как нам вообще зарегистрировать объекты к обмену, опишем и обсудим способы.
В статье ориентируюсь на популярную конфигурации УНФ (Управление нашей фирмой 1.6) и немножечко затронем обычные формы конфигурации УПП (Управление производственным предприятием 1.3).
В обоих случаях я буду использовать платформу 1с предприятия 8.3.15.1700.
Итак, давайте начнем:
Автоматическая регистрация
Как я написал выше - предлагаю начать с самого простого - это создание самого плана обмена и добавление в него объектов конфигурации к обмену. Для этого, заходим в конфигуратор, находим в "общих" - "планы обмена".
Создаем новый план обмена. Пусть будет называться "Товары и услуги" (ТоварыИУслуги). Нажимаем кнопочку "Состав" в нем - и добавляем единственный объект - справочник "Номенклатура". Галочка "Авторегистрация" включена.
Собственно, практически все. Все записи справочника "Номенклатура" в конфигурации будут регистрироваться в объекте конфигурации "План обмена" в созданном узле.
Использовать предопределенный узел (с точкой) нельзя, но присвойте ему уникальный код. Поэтому, давайте создадим узел (добавим ему код) в этом плане обмена и проверим, как проходит регистрация и что там регистрируется.
Чтобы посмотреть, что регистрируется в узле, например, в УНФ есть такая обработка "Регистрация изменений для обмена данными" (вообще любой типовой конфигурации существует такая обработка). В ней нужно выбрать узел плана обмена (у нас это будет созданный ранее узел плана обмена (не предопределенный)).
Рис.1. Узлы плана обмена "Товары и услуги".
Так, выбрали узел и смотрим, на какие объекты он "настроен". В нашем случае - это только "Номенклатура". У нас видно, что к обмену зарегистрировано более 1100 объектов. Нажав на объект "Номенклатура" - можно посмотреть справа какие объекты зарегистрированы к обмену (это касается УНФ). Картина такая:
Рис.2. Обработка регистрации/отмены регистрации изменений для узла обмена (УНФ 1.6).
Так же можно добавить объекты к обмену или удалить из обмена - это кнопки "Зарегистрировать" и "Отменить регистрацию" соответственно.
В конфигурациях на обычных формах данная обработка выглядит по-другому. На мой взгляд, "классическая" обработка более удобна (привычна). Привожу ее вид для конфигурации УПП 1.3.
Рис.3. Регистрация изменений для обмена данными для УПП 1.3 (УТ 10.3).
На этом закончим раздел "Автоматическая регистрация". Здесь нет никаких сложностей. "Запись" в узел идет автоматом. Теперь, рассмотрим более сложный способ регистрации объектов конфигурации - "по подписке".
Регистрация через подписку. Запрет авторегистрации
Теперь давайте рассмотрим такой пример. Нам нужно регистрировать товары в одном узле, а услуги в другом. Разберем этот пример.
Первое, что мы сделаем, добавляем в конфигурацию новый объект - план обмена "ВыгрузкаНоменклатуры". В состав плана обмена добавляем справочник "Номенклатура", запрещаем авторегистрацию - как на рисунке:
Рис.4. Запрет авторегистрации в новом плане обмена.
Запускам предприятие, выбираем созданный план обмена и создаем там 2 узла "ВыгУслуг" и "ВыгТоваров" как на рисунке:
Рис.5. Создание узлов в плане обмена.
В узел "ВыгТоваров" (002) будем выгружать номенклатуру с типом "Запас", а в "ВыгУслуг" (001) - выгружаем услуги. Для этого создаем подписку на событие "РегистрацияСправочникаВУзле" с типом "ПриЗаписи" и прописываем на нее такую процедуру:
Процедура ПриЗаписиСправочника(Источник, Отказ) Экспорт
Если Источник.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга Тогда
УзелОбмена = ПланыОбмена.ВыгрузкаНоменклатуры.НайтиПоКоду("001"); // узел услуг
Если Источник.ПометкаУдаления Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена,Источник);
Иначе
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена,Источник);
КонецЕсли;
ИначеЕсли Источник.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас Тогда
УзелОбмена = ПланыОбмена.ВыгрузкаНоменклатуры.НайтиПоКоду("002"); // узел запасов
Если Источник.ПометкаУдаления Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена,Источник);
Иначе
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена,Источник);
КонецЕсли;
Иначе
КонецЕсли;
КонецПроцедуры
Теперь, проверим как работает. Заходим в справочник "номенклатуру", выбираем с типом "запас" и записываем. Смотрим, что и где зарегистрировалось в узлах обмена:
Рис.6. Регистрация товаров в "ВыгТоваров".
Если записываем номенклатуру с типом "услуга", находим ее в узле "ВыгУслуг".
Рис.7. Регистрация услуг в узле "ВыгУслуг".
Операция "Пометить на удаление" отменяет регистрацию объекта в узле. Все работает - запасы падают в запасы, а услуги - в услуги. Так же можно добавлять объекты в узел плана обмена по любому условию.
Обмен через регистр сведений
Так же в этой статье я предложу еще такой вариант решения - регистрация документов к обмену через регистр сведений. По своему опыту - рассмотрим на примере конфигурации УНФ 1.6 (хотя, это в свое время хорошо использовалось в УПП).
Первое, что мы должны сделать - в конфигурации создать дополнительный регистр сведений "ДокументыДляВыгрузкиВБухгалтерскуюПрограмму" - пусть называется так. В нем создадим 3 измерения: Организация (тип Организация), ТипДокумента (тип Строка(200)) и ДокументСсылка (тип ДокументСсылка).
На рисунке это выглядит вот так:
Рис.8. Структура регистра сведений "ДокументыДляВыгрузкиВБухгалтерскуюПрограмму".
Теперь, нам нужно "отправлять документы" в этот регистр, если документ изменен. Для этого я опять воспользуюсь классным механизмом "Подписок на события".
Вернее, я создам одну подписку на событие "ДобавлениеВРегистр" по всем документам (ДокументСсылка) на действие "ПриЗаписи". Ознакомится с материалом по подпискам на события можно здесь, а готовый пример системы подписок можно скачать здесь. В коде я не буду "обходить" ситуацию, где у документа отсутствует реквизит "Организация".
Итак, подписка создана. Процедура подписки указана. Она достаточна простая. Привожу ее:
Процедура ПриЗаписиДокументаВРегистр(Источник, Отказ) Экспорт
Статус = ОпределитьСтатусДокумента(Источник);
Если Источник.ПометкаУдаления Тогда
Если Статус Тогда
МенеджерРегистра = РегистрыСведений.ДокументыДляВыгрузкиВБухгалтерскуюПрограмму;
НаборЗаписейРегистра = МенеджерРегистра.СоздатьНаборЗаписей();
НаборЗаписейРегистра.Отбор.ДокументСсылка.Установить(Источник.Ссылка);
НаборЗаписейРегистра.Очистить();
НаборЗаписейРегистра.Записать();
КонецЕсли;
Иначе
Если НЕ Статус Тогда
МенеджерЗаписи = РегистрыСведений.ДокументыДляВыгрузкиВБухгалтерскуюПрограмму.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Активность = Истина;
МенеджерЗаписи.ДокументСсылка = Источник.Ссылка;
МенеджерЗаписи.Организация = Источник.Организация;
МенеджерЗаписи.ТипДокумента = Строка(ТипЗнч(Источник.Ссылка));
МенеджерЗаписи.Записать(Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Теперь, напишу пояснения. Первым шагом мы определяем есть ли уже документ-источник в нашем регистре сведений при помощи простой функции ОпределитьСтатусДокумента():
Функция ОпределитьСтатусДокумента(ДокументОбъект) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РегистрСостояний.ДокументСсылка КАК Ссылка
|ИЗ
| РегистрСведений.ДокументыДляВыгрузкиВБухгалтерскуюПрограмму КАК РегистрСостояний
|ГДЕ
| РегистрСостояний.ДокументСсылка = &Документ";
Запрос.Параметры.Вставить("Документ",ДокументОбъект.ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Затем, определяем - имеет ли пометку удаления наш "Источник" и, в зависимости от этого, - либо создаем запись в регистре для него, либо удаляем документ из регистра (посмотрите как можно работать с МенеджеромЗаписи еще).
Рабочий заполняемый регистр выглядит вот так (все работает - документы добавляются/удаляются из этого регистра):
Рис.9. Содержимое регистра сведений для выгрузки в бухгалтерскую программу.
Схема достаточна простая и реализуется, как мы все видим, одним регистром, одной подпиской и двумя функциями. Кстати, нужно указать, что созданные функции я поместил в отдельном общем модуле ФункционалВнешнийМенеджерСервер, в котором установлены галки "Сервер", "Вызов сервера", "Привилегированный".
К сожалению, на текущий момент, в расширение этот функционал не перенести - ввиду отсутствия поддержки механизма "Подписок на события" в расширениях. Но, в будущих релизах платформы разработчики обещают добавить подписки.
Заключение и выводы
В этой статье я привел три основных "базовых" наиболее частых метода регистрации объектов конфигурации к обмену, которые встречались по собственному опыту работы. На каждый метод я постарался привести максимально понятный пример и дать пояснение по работе метода.
Собственно, вот они:
1.Автоматическая регистрация объектов к обмену (самая простая, подойдет для новичков или для создания "быстрых регистраций к обмену").
2."Ручная" регистрация объектов к обмену через план обмена (чуть сложнее, подойдет для механизмов "с условием" на уровне отправки в узел плана обмена).
3.Регистрация объектов к обмену через регистр сведений (вот этот метод я бы выбрал, если бы не хотел "ломать" то, что создано до меня, аккуратно внедрил собственную систему регистрации документов к обмену на основе регистра, здесь и фильтр по обмену прикрутить очень просто).
Еще один важный момент - не забывайте про права пользователей и роли доступа, когда вы будете создать новый план обмена или регистр с подпиской...
Если вам понравилась эта статья и ее изложение, если вы захотите ее поддержать - буду только рад этому. В свою очередь, я буду рад подготовить более интересные темы из своего опыта - "написание правил для конвертации данных" или "получение данных в документ из внешних хранилищ информации (напрямую с сайта или фтп)".
Спасибо, что дочитали статью до конца. Всем привет.
Предыдущие материалы
Так же, прошу посмотреть мои предыдущие статьи:
Работа с механизмом отладки 1С. Базовые настройки
Методика независимой системы "Подписки на события"
Подсистема "Подписки на события" (продолжение)
Лайфхак работы с СКД. Собираем отчет