Справочные материалы по 1С
Организация обмена данными в 1С 8.x
Как организовать работу удаленных складов?
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
Если ЭлементДанных.Склад <> Склад Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять;
КонецЕсли;
КонецПроцедуры
Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
Если ПланыОбмена.ИзменениеЗарегистрировано(Ссылка, ЭлементДанных) Тогда
ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет?
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
Если НеВыгружатьОбъекты Тогда
// Проверить "ненужные типы", условие может содержать проверку
// на несколько типов.
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как просмотреть объекты, для которых зарегистрированы изменения?
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
Узел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел);
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения);
Пока Выборка.Следующий() Цикл
Данные = Выборка.Получить();
Сообщить(Данные);
КонецЦикла;
ЗапСообщения.ПрерватьЗапись();
Стр = ЗаписьXML.Закрыть();
Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0?
Процедура Выгрузка(Элемент)
Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(Путь + "выгрузка.xml");
Узел = ПланыОбмена.Поставка.НайтиПоКоду("Маг1");
ЗапСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗапСообщения.НачатьЗапись(ЗаписьXML, Узел);
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, ЗапСообщения.НомерСообщения);
Пока Выборка.Следующий() Цикл
Данные = Выборка.Получить();
Если ТипЗнч(Данные) = Тип("ДокументОбъект.РеализацияТоваров") Тогда
ВыгрузкаРеализации(ЗаписьXML, Данные);
Иначе // все остальные объекты
ЗаписатьXML(ЗаписьXML, Данные);
КонецЕсли;
КонецЦикла;
ЗапСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
КонецПроцедуры
Процедура ВыгрузкаРеализации(ЗаписьXML, Документ)
ЗаписьXML.ЗаписатьНачалоЭлемента("DocumentObject.ПередачаТовара");
ЗаписатьXML(ЗаписьXML, Документ.Ссылка.УникальныйИдентификатор(),
"Ref", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Документ.ПометкаУдаления,
"DeletionMark",НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, Документ.ВалютаДокумента,
"ВалютаДокумента", НазначениеТипаXML.Явное);
// Остальные свойства документа.
// Табличная часть.
ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
Для Каждого ТекСтрока Из Документ.Товары Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Row");
ЗаписатьXML(ЗаписьXML, ТекСтрока.Номенклатура,
"Номенклатура", НазначениеТипаXML.Явное);
ЗаписатьXML(ЗаписьXML, ТекСтрока.Количество,
"Количество", НазначениеТипаXML.Явное);
// Остальные реквизиты табличной части.
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура Загрузка(Элемент)
Путь = "c:\"; //реальный путь к каталогу, в котором создаются файлы
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(Путь + "выгрузка.xml");
ЧтСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтСообщения.НачатьЧтение(ЧтениеXML);
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтСообщения.Отправитель,ЧтСообщения.НомерСообщения);
Пока ВозможностьЧтенияДанных(ЧтениеXML) Цикл
Данные = ПрочитатьДанные(ЧтениеXML);
Если РазрешениеКоллизий(Данные) Тогда
Данные.ОбменДанными.Отправитель = ЧтСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать();
КонецЕсли;
КонецЦикла;
ЧтСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
КонецПроцедуры
Функция ВозможностьЧтенияДанных(ЧтениеXML)
ТипXML = ПолучитьXMLТип(ЧтениеXML);
Если ТипXML = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И
ТипXML.URIПространстваИмен = "" Тогда
Возврат Истина;
КонецЕсли;
Возврат ВозможностьЧтенияXML(ЧтениеXML);
КонецФункции
Функция ПрочитатьДанные(ЧтениеXML)
ТипXML = ПолучитьXMLТип(ЧтениеXML);
Если ТипXML.ИмяТипа = "DocumentObject.ПередачаТовара" И
ТипXML.URIПространстваИмен = "" Тогда
Возврат ЧтениеРеализации(ЧтениеXML);
КонецЕсли;
Возврат ПрочитатьXML(ЧтениеXML);
КонецФункции
Функция ЧтениеРеализации(ЧтениеXML)
ЧтениеXML.Прочитать();
// Работа со ссылкой документа.
ПолученнаяСсылка = ПрочитатьXML(ЧтениеXML);
Док = Документы.ПоступлениеТоваров.ПолучитьСсылку(
Новый УникальныйИдентификатор(ПолученнаяСсылка));
Документ = Док.ПолучитьОбъект();
Если Документ = Неопределено Тогда
Документ = Документы.ПоступлениеТоваров.СоздатьДокумент();
Документ.УстановитьСсылкуНового(Док);
Документ.Дата = ТекущаяДата;
Документ.УстановитьНовыйНомер();
КонецЕсли;
Документ.ПометкаУдаления = ПрочитатьXML(ЧтениеXML);
Документ.ВалютаДокумента = ПрочитатьXML(ЧтениеXML);
// Табличная часть "Товары.
// Построчное чтение.
ЧтениеXML.Прочитать();
Документ.Товары.Очистить();
Пока ЧтениеXML.Имя = "Row" Цикл
// Позиционируемся на узле с номенклатурой.
ЧтениеXML.Прочитать();
НоваяСтрока = Документ.Товары.Добавить();
НоваяСтрока.Номенклатура = ПрочитатьXML(ЧтениеXML);
НоваяСтрока.Количество = ПрочитатьXML(ЧтениеXML);
// Читаем конец узла Row.
ЧтениеXML.Прочитать();
КонецЦикла;
// Читаем конец табличной части.
ЧтениеXML.Прочитать();
// Читаем конец документа.
ЧтениеXML.Прочитать();
Возврат(Документ);
КонецФункции
Функция РазрешениеКоллизий(Данные)
Если ТипЗнч(Данные) = Тип("ДокументОбъект.ПоступлениеТоваров") Тогда
Если Не Данные.ЭтоНовый() Тогда
СсылкаНаУзел = ПланыОбмена.Поставка.НайтиПоКоду("Опт");
Если ПланыОбмена.ИзменениеЗарегистрировано(СсылкаНаУзел, Данные) Тогда
Возврат(Ложь);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат(Истина);
КонецФункции
Как принудительно зарегистрировать изменения объектов?
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, Неопределено);
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел,
Метаданные.Справочники.Номенклатура);
СсылкаНаУзел = ПланыОбмена.НаСклады.НайтиПоКоду("С1");
ДокСсылка = Документы.РеализацияТоваров.НайтиПоНомеру(НомерДок, ДатаПериода);
Если Не ДокСсылка.Пустая() Тогда
ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, ДокСсылка);
КонецЕсли;