Загрузку данных из программы торговли Трейд Хаус (ТХ) в программу 1С: Бухгалтерия. При загрузке использовать условия, изложенные ниже.
1. По учетной политике все покупка сырья на производства оформляется поступлением и списанием сырья в производство
2. Соответствие данных по справочникам 1с и ТХ указывается в РС "Соответствие внешних объектов объектам базы"
3. При выборе соответствия договора 1с и ТХ, в РС "Соответствие внешних объектов объектам базы", указывается договор для определенного контрагента, определенного объекта (магазина), или группы объектов
4. Вид номенклатуры определять по полю комментарий
ТОВАР – не заполнено или кроме «продукция»
ПРОДУКЦИЯ - заполнено «продукция»
5. Перед созданием документа в 1С проверять на уже созданный.
Для работы обработок необходимо:
-выгрузить данные из Трейд Хауса в формате *.xml
-создать РегистрСведений "СоответствиеВнешнихОбъектовОбъектамБазы",
-после первой выгрузки настроить соответствия объектов ТрейдХауса,
-магазин---это склад розничного типа,
-объекты, где производится продукция (цех) ---это склад оптового типа,
-для настройки соответсвия Контрагентов и Договоров ---обработка "Синхронизация контрагентов и договоров"
-при загрузке данных заполнить настройки в обработке в соотвествии с рисунком
Загрузка производится по блок-схемам, представленным в рисунках
РегистрСведений "СоответствиеВнешнихОбъектовОбъектамБазы" - тип каждого измерения/ресурса:
-ВнешнийОбъект----------------------ЛюбаяСсылка, Булево, Строка, Дата, Число
-ТипДанныхОбъектаБазы-----------Строка
-ОбъектБазы----------------------------ЛюбаяСсылка, Булево, Строка, Дата, Число
-Синхронизирован --------------------Булево
-АнализДоговоров---------------------Булево (когда договор не один для всех магазинов или комиссионного договора)
Создать общийМодуль МАВСинхронизацияОбъектов, где прописаны функции для обработки. Его модуль:
Функция ПолучитьСоответствующийОбъектИБ(ЗначениеИсточника, ТипОбъектаИБ) Экспорт
//стрОтбор = Новый Структура("ВнешнийОбъект,ТипДанныхОбъектаБазы,Синхронизирован");
стрОтбор = Новый Структура("ВнешнийОбъект,ТипДанныхОбъектаБазы");
стрОтбор.ВнешнийОбъект = ЗначениеИсточника;
стрОтбор.ТипДанныхОбъектаБазы = ТипОбъектаИБ;
//стрОтбор.Синхронизирован = Ложь;
Ответ = РегистрыСведений.МАВСоответствиеВнешнихОбъектовОбъектамБазы.Получить(стрОтбор);
Ответ.Вставить("ОбъектНайден", ?(Ответ.ОбъектБазы=Неопределено,Ложь,Истина));
Возврат Ответ;
КонецФункции // ПолучитьСоответствующийОбъект()()
// <Описание функции>
//
// Параметры
// <Параметр1> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
// <Параметр2> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
//
// Возвращаемое значение:
// <Тип.Вид> - <описание возвращаемого значения>
//
Функция СоздатьНовыйОбъектБазы(ЗначениеИсточника, ТипОбъектаИБ)
Ответ = Неопределено;
Если СтрЧислоВхождений(ТипОбъектаИБ, "Справочник") Тогда
ГруппаХраненияНовых = Неопределено;
НовыйОбъект = Новый(ТипОбъектаИБ);
Ответ = НовыйОбъект.СоздатьЭлемент();
Ответ.Наименование = "#TRADE_HOUSE Код: " + ЗначениеИсточника + " (" + СокрЛП(Ответ.Метаданные().Представление()) + ")";
Ответ.ОбменДанными.Загрузка = Истина;
Ответ.УстановитьНовыйКод();
//ЕСЛИ СПРАВОЧНИК ИЕРАРХИЧЕСКИЙ, ТО ИЩЕМ ИЛИ СОЗДАЕМ ГРУППУ ДЛЯ ХРАНЕНИЯ НОВЫХ ОБЪЕКТОВ ПОДЛЕЖАЩИХ СИНХРОНИЗАЦИИ
Если Ответ.Метаданные().Иерархический Тогда
ГруппаХраненияНовых = НовыйОбъект.НайтиПоНаименованию("НОВЫЕ ОБЪЕКТЫ (ОБМЕН)");
Если ГруппаХраненияНовых = НовыйОбъект.ПустаяСсылка() Тогда
Если СокрЛП(Ответ.Метаданные().ВидИерархии) = "ИерархияГруппИЭлементов" Тогда
ГруппаХраненияНовых = НовыйОбъект.СоздатьГруппу();
ГруппаХраненияНовых.Наименование = "НОВЫЕ ОБЪЕКТЫ (ОБМЕН)";
ГруппаХраненияНовых.ОбменДанными.Загрузка = Истина;
ГруппаХраненияНовых.УстановитьНовыйКод();
ИначеЕсли СокрЛП(Ответ.Метаданные().ВидИерархии) = "ИерархияЭлементов" Тогда
ГруппаХраненияНовых = НовыйОбъект.СоздатьЭлемент();
ГруппаХраненияНовых.Наименование = "НОВЫЕ ОБЪЕКТЫ (ОБМЕН)";
ГруппаХраненияНовых.ОбменДанными.Загрузка = Истина;
ГруппаХраненияНовых.УстановитьНовыйКод();
КонецЕсли;
ГруппаХраненияНовых.Записать();
КонецЕсли;
Ответ.Родитель = ГруппаХраненияНовых.Ссылка;
КонецЕсли;
Ответ.Записать();
Ответ = Ответ.Ссылка;
ИначеЕсли СтрЧислоВхождений(ТипОбъектаИБ, "Перечисление") Тогда
НовыйОбъект = Новый(ТипОбъектаИБ);
//ДЛЯ ПЕРЕЧИСЛЕНИЙ ПОКА ВОЗВРАЩАЕМ ПЕРВОЕ ЗНАЧЕНИЕ
//В ДАЛЬНЕЙШЕМ МОЖНО ПРЕДУСМОТРЕТЬ ПАРАМЕТР ВЫЗОВА,
//КОТОРЫЙ БЫ ОПИСЫВАЛ ЗНАЧЕНИЕ ПЕРЕЧИСЛЕНИЯ КОТОРОЕ ХОТЕЛИ БЫ ПОЛУЧИТЬ
Ответ = НовыйОбъект[0];
Иначе
Возврат Ответ;
КонецЕсли;
//ЗАПИСЫВАЕМ В РЕГИСТР СИНХРОНИЗАЦИИ ЗДЕСЬ??
НаборЗаписейСинхронизации = РегистрыСведений.МАВСоответствиеВнешнихОбъектовОбъектамБазы.СоздатьНаборЗаписей();
ЗаписьСинхронизации = НаборЗаписейСинхронизации.Добавить();
//!!!!!!ДЛЯ ЭКОНОМИИ ПАМЯТИ МОЖНО ПОПРОБОВАТЬ РАСКОММЕНТИРОВАТЬ!!!!!!!!!!!!!!!
//Если ТипЗнч(ЗначениеИсточника) = Тип("Строка") Тогда
// КС = Новый КвалификаторыСтроки(СтрДлина(ЗначениеИсточника));
// Массив = Новый Массив;
// Массив.Добавить(Тип("Строка"));
// ОписаниеСтроки = Новый ОписаниеТипов(Массив, , КС);
// ЗаписьСинхронизации.ВнешнийОбъект = ЗначениеИсточника;
// ОписаниеСтроки.ПривестиЗначение(ЗаписьСинхронизации.ВнешнийОбъект);
// //ЗаписьСинхронизации.ВнешнийОбъект = Новый ОписаниеТипов(Массив, , КС);
//КонецЕсли;
ЗаписьСинхронизации.ВнешнийОбъект = ЗначениеИсточника;
ЗаписьСинхронизации.ТипДанныхОбъектаБазы = ТипОбъектаИБ;
ЗаписьСинхронизации.ОбъектБазы = НовыйОбъект.ПустаяСсылка();
ЗаписьСинхронизации.ОбъектБазы = Ответ;
ЗаписьСинхронизации.Синхронизирован = Ложь;
НаборЗаписейСинхронизации.Записать(Ложь);
Возврат Ответ;
КонецФункции // ()
// <Описание функции>
//
// Параметры
// <Параметр1> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
// <Параметр2> - <Тип.Вид> - <описание параметра>
// <продолжение описания параметра>
//
// Возвращаемое значение:
// <Тип.Вид> - <описание возвращаемого значения>
//
Функция СинхронизироватьОбъекты(ЗначениеИсточника, ТипОбъектаИБ) Экспорт
Ответ = ПолучитьСоответствующийОбъектИБ(ЗначениеИсточника, ТипОбъектаИБ);
Если НЕ Ответ.ОбъектНайден Тогда
Ответ.ОбъектБазы = СоздатьНовыйОбъектБазы(ЗначениеИсточника, ТипОбъектаИБ);
Если НЕ Ответ.ОбъектБазы = Неопределено Тогда
Ответ.ОбъектНайден = Истина;
КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции // ()