После построения простой схемы обмена всегда встает вопрос относительно того, как регистрировать изменения в базе для обмена (в стандартном варианте для этого есть планы обмена, где определен состав объектов и способ их регистрации), в нашем варианте тоже возможна привязка к плану обмена и обработка позволяет это сделать. Также возможно создать свой план обмена и задействовать его, вот некий пример: http://www.kb.mista.ru/article.php?id=356 . Но я, не претендуя на уникальность, предлагаю свой вариант, идея которого, возможно, кому-либо и пригодится.
Итак…
Изменения будут регистрироваться в регистре сведений:
Также потребуется перечисление для установки текущих статусов документов:
Напишем несколько функций в общем модуле (можно использовать имеющейся либо создать свой для этой цели). Там разместим помимо регламентных процедур загрузки и выгрузки описанных в предыдущей статье следующие функции:
//проверка статуса документа для принятия решения о обмену
Функция ПолучитьСтатусДокумента (Документ) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтатусыДокументовДляВыгрузки.Статус
|ИЗ
| РегистрСведений.СтатусыДокументовДляВыгрузки КАК СтатусыДокументовДляВыгрузки
|ГДЕ
| СтатусыДокументовДляВыгрузки.Документ = &Документ";
Запрос.УстановитьПараметр("Документ",Документ);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Null;
Иначе
Возврат РезультатЗапроса.Выгрузить()[0].Статус;
КонецЕсли;
КонецФункции
//установка нового статуса документа в системе обена
Процедура УстановитьСтатусДокумента (Документ, Статус) Экспорт
Если Не ЗначениеЗаполнено(Документ) ИЛИ Не ЗначениеЗаполнено(Статус) Тогда
Возврат;
КонецЕсли;
МенеджерЗначенияСвойствОбъектов = РегистрыСведений.СтатусыДокументовДляВыгрузки.СоздатьМенеджерЗаписи();
МенеджерЗначенияСвойствОбъектов.Документ = Документ;
МенеджерЗначенияСвойствОбъектов.Прочитать();
МенеджерЗначенияСвойствОбъектов.Документ = Документ;
МенеджерЗначенияСвойствОбъектов.Статус = Статус;
МенеджерЗначенияСвойствОбъектов.Записать();
КонецПроцедуры
//удаление документа из системы обмена
Процедура УдалитьСтатусДокумента (Документ) Экспорт
Если Не ЗначениеЗаполнено(Документ) Тогда
Возврат;
КонецЕсли;
МенеджерЗначенияСвойствОбъектов = РегистрыСведений.СтатусыДокументовДляВыгрузки.СоздатьМенеджерЗаписи();
МенеджерЗначенияСвойствОбъектов.Документ = Документ;
МенеджерЗначенияСвойствОбъектов.Прочитать();
Если МенеджерЗначенияСвойствОбъектов.Выбран() Тогда
МенеджерЗначенияСвойствОбъектов.Удалить();
КонецЕсли;
КонецПроцедуры
Теперь в актуальном для нас обработчике события отслеживаемого типа документа поместим логическую конструкцию для регистрации события записи… проведения и т п. в зависимости от ваших потребностей (например):
Если Ссылка.Дата > '20110525' Тогда
Если Ссылка.СкладОтправитель = Справочники.Склады.НайтиПоКоду("……")
ИЛИ Ссылка.СкладПолучатель = Справочники.Склады.НайтиПоКоду("…..") ТОГДА
Обмен.УстановитьСтатусДокумента (Ссылка, Перечисления.СтатусДокументов.НеВыгружено);
КонецЕсли
КонецЕсли;
Процедура выгрузки несколько изменится, поскольку вместо одного документа мы теперь используем массив ссылок на документы (вот так теперь выглядит окончание):
Начитали список нужных нам документов:
Структура = Новый СписокЗначений;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| СтатусыДокументовДляВыгрузки.Документ,
| СтатусыДокументовДляВыгрузки.Статус
|ИЗ
| РегистрСведений.СтатусыДокументовДляВыгрузки КАК СтатусыДокументовДляВыгрузки
|ГДЕ
| СтатусыДокументовДляВыгрузки.Статус = &Статус";
Запрос.УстановитьПараметр("Статус", Перечисления.СтатусДокументов.НеВыгружено);
Структура = Запрос.Выполнить().Выгрузить();
ОтборДляПеремещения(ВременнаяТаблицаПравил, Структура);
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Обработка.АрхивироватьФайл = Истина;
Если Структура.Количество() > 0 ТОГДА
Обработка.ВыполнитьВыгрузку();
А после выгрузки соответственно меняем статус документов.
Для Каждого Док Из Структура Цикл
УстановитьСтатусДокумента (Док.документ, Перечисления.СтатусДокументов.Выгружено);
КонецЦикла;
КонецЕсли;
Теперь создаем регламентные задания и подключаем их к нашим процедурам загрузки и выгрузки
Настраиваем расписание и можно на этом пока остановиться…
Поле для вариаций довольно широкое поэтому пробуйте… Удачи.