Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 05:34

Обмен данными

Автор shutani, 18 апр 2015, 19:28

0 Пользователей и 1 гость просматривают эту тему.

shutani

Доброе утро/день/вечер. Создала две конфигурации - центральная база и для мобильного устройства. Необходимо выполнить обмен (из центральной в мобильную) справочников, документов и регистров. Функции для справочников и документов есть (представлен на листинге). Как организовать процедуру загрузки для регистра сведений (измерения - товар, ресурсы - цена)?
Функция ВыполнитьОбменДанными(ТипОбмена = 1) Экспорт
Сообщить("Начало обмена " +ТекущаяДата());
ТипОбмена1 = ТипОбмена;
Соединение = WSСсылки.obmendan.СоздатьWSПрокси("obmendan", "obmendan","obmendanSoap");
Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить("ВыполнитьОбмен");
СтрокаДанных = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить("Данные").Тип,СформироватьДанныеДляСервера());
ТипОбмена = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить("ТипОбмена").Тип,Сериализовать(ТипОбмена));

Если ТипОбмена1 = 1 Тогда
Ответ  = Десериализовать(Соединение.ВыполнитьОбмен(СтрокаДанных,ТипОбмена));
Для каждого Дан Из Ответ Цикл
Если Дан.Ключ = Тип("СправочникСсылка.Номенклатура") Тогда
ЗагрузитьСправочникНоменклатура(Дан.Значение);
Конецесли;
КонецЦикла;

Для каждого Дан Из Ответ Цикл
Если  Дан.Ключ = Тип("СправочникСсылка.Контрагенты") Тогда
ЗагрузитьСправочникКонтрагенты(Дан.Значение);
КонецЕсли;
КонецЦикла;

Для каждого Дан Из Ответ Цикл
Если Дан.Ключ = Тип("СправочникСсылка.МагазиныКонтрагента") Тогда
ЗагрузитьСправочникМагазиныКонтрагента(Дан.Значение);
КонецЕсли;
КонецЦикла;

Для каждого Дан Из Ответ Цикл
Если Дан.Ключ = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
ЗагрузитьДокументЗаказПокупателя(Дан.Значение);
КонецЕсли;
КонецЦикла;

ИначеЕсли ТипОбмена1 = 2 Тогда
Соединение.ВыполнитьОбмен(СтрокаДанных,ТипОбмена);
КонецЕсли;

Сообщить("Конец обмена "+ ТекущаяДата());

КонецФункции // ВыполнитьОбменДанными()


&НаСервере
Процедура ЗагрузитьСправочникНоменклатура(ТЗ)

Для каждого Спр Из ТЗ Цикл

Если ЗначениеЗаполнено(Спр.Ссылка.код) Тогда
СпрНовый = Спр.Ссылка.ПолучитьОбъект();
Иначе
Если Спр.ЭтоГруппа Тогда
СпрНовый = Справочники.Номенклатура.СоздатьГруппу();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
иначе
СпрНовый = Справочники.Номенклатура.СоздатьЭлемент();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
КонецЕсли;
КонецЕсли;

СпрНовый.Наименование = Спр.Наименование;
СпрНовый.Код = Спр.код;
СпрНовый.Родитель = Спр.Родитель;
СпрНовый.Записать();

КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЗагрузитьСправочникКонтрагенты(ТЗ)

Для каждого Спр Из ТЗ Цикл
Если ЗначениеЗаполнено(Спр.Ссылка.код) Тогда
СпрНовый = Спр.Ссылка.ПолучитьОбъект();
Иначе
Если Спр.ЭтоГруппа Тогда
СпрНовый = Справочники.Контрагенты.СоздатьГруппу();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
           иначе
СпрНовый = Справочники.Контрагенты.СоздатьЭлемент();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
          КонецЕсли;
КонецЕсли;

Если Не Спр.ЭтоГруппа Тогда
СпрНовый.ИНН_КПП = Спр.ИНН_КПП;
КонецЕсли;
СпрНовый.Наименование = Спр.Наименование;
СпрНовый.Родитель = Спр.Родитель;
СпрНовый.Код = Спр.код;

СпрНовый.Записать();
КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЗагрузитьСправочникМагазиныКонтрагента(ТЗ)

Для каждого Спр Из ТЗ Цикл

Если ЗначениеЗаполнено(Спр.Ссылка.код) Тогда
СпрНовый = Спр.Ссылка.ПолучитьОбъект();
Иначе
Если Спр.ЭтоГруппа Тогда
СпрНовый = Справочники.МагазиныКонтрагента.СоздатьГруппу();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
        иначе
СпрНовый = Справочники.МагазиныКонтрагента.СоздатьЭлемент();
СпрНовый.УстановитьСсылкуНового(Спр.Ссылка);
КонецЕсли;
// ЗаполнитьЗначенияСвойств(СпрНовый,Спр);
Если Не СпрНовый.ЭтоГруппа() Тогда
СпрНовый.Адрес = Спр.Адрес;
КонецЕсли;
СпрНовый.Наименование = Спр.Наименование;
СпрНовый.Родитель = Спр.Родитель;
СпрНовый.Владелец = Спр.Владелец;
СпрНовый.Код = Спр.код;
КонецЕсли;
Попытка
СпрНовый.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДокументЗаказПокупателя(Массив)

Для каждого Док Из Массив Цикл

Если ЗначениеЗаполнено(Док.Реквизиты.Ссылка.Номер) Тогда
НовыйДок = Док.Реквизиты.Ссылка.ПолучитьОбъект();
Иначе
НовыйДок = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйДок.УстановитьСсылкуНового(Док.Реквизиты.Ссылка);
КонецЕсли;
ЗаполнитьЗначенияСвойств(НовыйДок,Док.Реквизиты);
        НовыйДок.Товары.Загрузить(Док.Товары);
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;

КонецПроцедуры

&НаСервере
Функция СформироватьДанныеДляСервера()

Соответствие = Новый Соответствие;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПокупателя.Ссылка,
| ЗаказПокупателя.ПометкаУдаления,
| ЗаказПокупателя.Номер,
| ЗаказПокупателя.Дата,
| ЗаказПокупателя.Проведен,
| ЗаказПокупателя.Контрагент,
| ЗаказПокупателя.Магазин
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя";

Док = Запрос.Выполнить().Выгрузить();
Массив = Новый Массив;

Для каждого Строка Из Док Цикл
Структура = Новый Структура( );
СтруктураРек = Новый Структура();

Для каждого колонки Из Док.Колонки Цикл
СтруктураРек.Вставить(колонки.Имя, Строка[Колонки.Имя]);
КонецЦикла;

Структура.Вставить("Реквизиты",СтруктураРек);
Структура.Вставить("Товары",Строка.Ссылка.Товары.Выгрузить());
Массив.Добавить(Структура);
КонецЦикла;

Соответствие.Вставить(ТипЗнч(Документы.ЗаказПокупателя.ПустаяСсылка()),Массив);
Возврат Сериализовать(Соответствие);

КонецФункции // СформироватьДанныеДляСервера()

fipolaz

shutani, полагаете что ветка Конфигурирование, программирование в "1С - Предприятие 7.7" для вашего вопроса - это удачный выбор?

shutani

Простите, не усмотрела)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск