Перенос операций 7.7 -7.7Долго искал, как переносить операции между базами 7.7.... никто не мог ответить... выкладываю... хоть не мое, но многим может пригодиться... на авторство не претендую. Респект Бояркину и Филатову) | | Автор статьи: MRAK | Редакторы: Последняя редакция №2 от 15.10.08 | История URL: http://kb.mista.ru/article.php?id=714 | |
Ключевые слова: конвертация данных, КД, операция
Долго искал, как переносить операции между базами 7.7.... никто не мог ответить... выкладываю... хоть не мое, но многим может пригодиться...
на авторство не претендую. Респект Бояркину и Филатову)
не буду заниматься плагиатом, просто приведу код...
ПриВыгрузке
//Если Источник.СуществуетОперация() = 1 Тогда
УзелОперации = СоздатьУзел("Операция");
Операция = СоздатьОбъект("Операция");
Операция.НайтиОперацию(Источник);
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Содержание");
УстановитьАтрибут(УзелСвойства, "Тип", "Строка");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Содержание);
ДобавитьПодчиненный(УзелОперации, УзелСвойства);
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "СуммаОперации");
УстановитьАтрибут(УзелСвойства, "Тип", "Число");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.СуммаОперации);
ДобавитьПодчиненный(УзелОперации, УзелСвойства);
Если Операция.ВыбратьПроводки() = 1 Тогда
Пока Операция.ПолучитьПроводку() = 1 Цикл
УзелПроводки = СоздатьУзел("Проводка");
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Сумма");
УстановитьАтрибут(УзелСвойства, "Тип", "Число");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Сумма);
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "ВалСумма");
УстановитьАтрибут(УзелСвойства, "Тип", "Число");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.ВалСумма);
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Количество");
УстановитьАтрибут(УзелСвойства, "Тип", "Число");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.Количество);
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "СодержаниеПроводки");
УстановитьАтрибут(УзелСвойства, "Тип", "Строка");
ЗаписатьЭлемент(УзелСвойства, "Значение", Операция.СодержаниеПроводки);
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
Если ПустоеЗначение(Операция.Валюта) = 0 Тогда
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Валюта");
УстановитьАтрибут(УзелСвойства, "Тип", "СправочникСсылка.Валюты");
УзелСсылки = ВыгрузитьПоПравилу(Операция.Валюта,, ,, "Валюты");
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Иначе
Если ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
КонецЕсли;
КонецЕсли;
Если ПустоеЗначение(Операция.Дебет.Счет) = 0 Тогда
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "СчетДт");
УстановитьАтрибут(УзелСвойства, "Тип", "ПланСчетовСсылка.Управленческий");
УзелСсылки = ВыгрузитьПоПравилу(Операция.Дебет.Счет,, ,, "Управленческий");
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Иначе
Если ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
КонецЕсли;
КонецЕсли;
Если ПустоеЗначение(Операция.Кредит.Счет) = 0 Тогда
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "СчетКт");
УстановитьАтрибут(УзелСвойства, "Тип", "ПланСчетовСсылка.Управленческий");
УзелСсылки = ВыгрузитьПоПравилу(Операция.Кредит.Счет,, ,, "Управленческий");
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Иначе
Если ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелПроводки, УзелСвойства);
КонецЕсли;
КонецЕсли;
Для НомерСубконто = 1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл
ВидСубконто = Операция.Дебет.Счет.ВидСубконто(НомерСубконто);
Субконто = Операция.Дебет.Субконто(НомерСубконто);
Если ПустоеЗначение(Субконто) = 0 Тогда
УзелСубконто = СоздатьУзел("СубконтоДт");
// Ключ
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Ключ");
УстановитьАтрибут(УзелСвойства, "Тип", "ВидСубконто");
УзелСсылки = ВыгрузитьПоПравилу(ВидСубконто,, ,, "ВидСубконто");
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Продолжить;
ИначеЕсли ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелСубконто, УзелСвойства);
// Значение
УзелСвойства = СоздатьУзел("Свойство");
ИмяПКО = "";
НомерПКОЗначение = НайтиПравило(Субконто, ИмяПКО);
УстановитьАтрибут(УзелСвойства, "Имя", "Значение");
УстановитьАтрибут(УзелСвойства, "Тип", мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение(НомерПКОЗначение, "Приемник"));
УзелСсылки = ВыгрузитьПоПравилу(Субконто,, ,, ИмяПКО,, , НомерПКОЗначение);
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Продолжить;
ИначеЕсли ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелСубконто, УзелСвойства);
ДобавитьПодчиненный(УзелПроводки, УзелСубконто);
КонецЕсли;
КонецЦикла;
Для НомерСубконто = 1 По Операция.Кредит.Счет.КоличествоСубконто() Цикл
ВидСубконто = Операция.Кредит.Счет.ВидСубконто(НомерСубконто);
Субконто = Операция.Кредит.Субконто(НомерСубконто);
Если ПустоеЗначение(Субконто) = 0 Тогда
УзелСубконто = СоздатьУзел("СубконтоКт");
// Ключ
УзелСвойства = СоздатьУзел("Свойство");
УстановитьАтрибут(УзелСвойства, "Имя", "Ключ");
УстановитьАтрибут(УзелСвойства, "Тип", "ВидСубконто");
УзелСсылки = ВыгрузитьПоПравилу(ВидСубконто,, ,, "ВидСубконто");
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Продолжить;
ИначеЕсли ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелСубконто, УзелСвойства);
// Значение
УзелСвойства = СоздатьУзел("Свойство");
НомерПКОЗначение = НайтиПравило(Субконто, ИмяПКО);
УстановитьАтрибут(УзелСвойства, "Имя", "Значение");
УстановитьАтрибут(УзелСвойства, "Тип", мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение(НомерПКОЗначение, "Приемник"));
УзелСсылки = ВыгрузитьПоПравилу(Субконто,, ,, ИмяПКО,, , НомерПКОЗначение);
ТипУзлаСсылки = ТипЗначенияСтр(УзелСсылки);
Если УзелСсылки = мПустоеЗначение Тогда
Продолжить;
ИначеЕсли ТипУзлаСсылки = "Строка" Тогда
Если Найти(УзелСсылки, "</Ссылка>") > 0 Тогда
ДобавитьПодчиненный(УзелСвойства, УзелСсылки);
Иначе
ЗаписатьЭлемент(УзелСвойства, "Значение", УзелСсылки);
КонецЕсли;
ИначеЕсли ТипУзлаСсылки = "Число" Тогда
ЗаписатьЭлемент(УзелСвойства, "Нпп", УзелСсылки);
Иначе
ДобавитьПодчиненный(УзелСвойства, УзелСсылки.cloneNode(1));
КонецЕсли;
ДобавитьПодчиненный(УзелСубконто, УзелСвойства);
ДобавитьПодчиненный(УзелПроводки, УзелСубконто);
КонецЕсли;
КонецЦикла;
ДобавитьПодчиненный(УзелОперации , УзелПроводки);
КонецЦикла;
КонецЕсли;
ДобавитьПодчиненный(Приемник , УзелОперации);
//КонецЕсли;
ПослеЗагрузки
Объект.Записать();
Операция = СоздатьОбъект("Операция");
Операция.НайтиОперацию(Объект);
// Удаляем существующие проводки
Пока Операция.ВыбратьПроводки() = 1 Цикл
Операция.ПолучитьПроводку();
Операция.УдалитьПроводку();
КонецЦикла;
//Операция.Записать();
УзелОперации = УзелОбъекта.ВыбратьУзел("Операция");
Свойства = УзелОперации.ВыбратьУзлы("Свойство");
Для Сч = 0 По Свойства.КоличествоУзлов() - 1 Цикл
Реквизит = Свойства.ПолучитьУзел(Сч);
ИдРеквизита = Реквизит.ПолучитьАтрибут("Имя");
ТипОбъектаРеквизита = "";
ВидОбъектаРеквизита = "";
Значение = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
Объект.Операция.УстановитьАтрибут(ИдРеквизита, Значение);
КонецЦикла;
Проводки = УзелОперации.ВыбратьУзлы("Проводка");
Для Сч = 0 По Проводки.КоличествоУзлов() - 1 Цикл
УзелПроводки = Проводки.ПолучитьУзел(Сч);
Операция.НоваяПроводка();
Свойства = УзелПроводки.ВыбратьУзлы("Свойство");
Для Сч1 = 0 По Свойства.КоличествоУзлов() - 1 Цикл
Реквизит = Свойства.ПолучитьУзел(Сч1);
ИдРеквизита = Реквизит.ПолучитьАтрибут("Имя");
ТипОбъектаРеквизита = "";
ВидОбъектаРеквизита = "";
Значение = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
Если ИдРеквизита = "СчетДт" Тогда
Операция.Дебет.Счет = Значение;
ИначеЕсли ИдРеквизита = "СчетКт" Тогда
Операция.Кредит.Счет = Значение;
Иначе
Операция.УстановитьАтрибут(ИдРеквизита, Значение);
КонецЕсли;
КонецЦикла;
УзлыСубконто = УзелПроводки.ВыбратьУзлы("СубконтоДт");
Для Сч1 = 0 По УзлыСубконто.КоличествоУзлов() - 1 Цикл
УзелСубконто = УзлыСубконто.ПолучитьУзел(Сч1);
Свойства = УзелСубконто.ВыбратьУзлы("Свойство");
ВидСубконто = "";
Субконто = "";
Для Сч2 = 0 По Свойства.КоличествоУзлов() - 1 Цикл
Реквизит = Свойства.ПолучитьУзел(Сч2);
ИдРеквизита = Реквизит.ПолучитьАтрибут("Имя");
ТипОбъектаРеквизита = "";
ВидОбъектаРеквизита = "";
Если ИдРеквизита = "Ключ" Тогда
ВидСубконто = ВидыСубконто.ЗначениеПоИдентификатору(СокрЛП(Реквизит.ВыбратьУзел("*").Значение));
//ВидСубконто = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
КонецЕсли;
Если ИдРеквизита = "Значение" Тогда
Субконто = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
КонецЕсли;
КонецЦикла;
Если (ПустоеЗначение(ВидСубконто) = 0) и (ПустоеЗначение(Субконто) = 0) Тогда
Нет = 1;
Для НомерСубконто = 1 По Операция.Дебет.Счет.КоличествоСубконто() Цикл
Если ВидСубконто = Операция.Дебет.Счет.ВидСубконто(НомерСубконто) Тогда
Нет = 0;
Прервать;
КонецЕсли;
КонецЦикла;
Если Нет = 0 Тогда
Операция.Дебет.Субконто(ВидСубконто,Субконто);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УзлыСубконто = УзелПроводки.ВыбратьУзлы("СубконтоКт");
Для Сч1 = 0 По УзлыСубконто.КоличествоУзлов() - 1 Цикл
УзелСубконто = УзлыСубконто.ПолучитьУзел(Сч1);
Свойства = УзелСубконто.ВыбратьУзлы("Свойство");
ВидСубконто = "";
Субконто = "";
Для Сч2 = 0 По Свойства.КоличествоУзлов() - 1 Цикл
Реквизит = Свойства.ПолучитьУзел(Сч2);
ИдРеквизита = Реквизит.ПолучитьАтрибут("Имя");
ТипОбъектаРеквизита = "";
ВидОбъектаРеквизита = "";
Если ИдРеквизита = "Ключ" Тогда
ВидСубконто = ВидыСубконто.ЗначениеПоИдентификатору(СокрЛП(Реквизит.ВыбратьУзел("*").Значение));
//ВидСубконто = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
КонецЕсли;
Если ИдРеквизита = "Значение" Тогда
Субконто = УстановитьРеквизитV8(Реквизит, ТипОбъектаРеквизита, ВидОбъектаРеквизита, ИдРеквизита);
КонецЕсли;
КонецЦикла;
Если (ПустоеЗначение(ВидСубконто) = 0) и (ПустоеЗначение(Субконто) = 0) Тогда
Нет = 1;
Для НомерСубконто = 1 По Операция.Кредит.Счет.КоличествоСубконто() Цикл
Если ВидСубконто = Операция.Кредит.Счет.ВидСубконто(НомерСубконто) Тогда
Нет = 0;
Прервать;
КонецЕсли;
КонецЦикла;
Если Нет = 0 Тогда
Операция.Кредит.Субконто(ВидСубконто,Субконто);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//Операция.ЗаписатьПроводки();
Операция.Записать();
Отказ = 1;
И вот оно счастье.... не надо юзать OLE-загрузку.... или через текстовик... все стандартизировано....
Все просто... |