Нечто вроде этого (под Бюджетную бухию 6.04):
Исходный код
// таблица папок
ТабДоп = СоздатьОбъект("ТаблицаЗначений");
ТабДоп.НоваяКолонка("Назв","Строка");
ТабДоп.НоваяКолонка("Код","Строка");
// таблица объектов к
ТабЗамен = СоздатьОбъект("ТаблицаЗначений");
ТабЗамен.НоваяКолонка("Код","Строка");
ТабЗамен.НоваяКолонка("Родит","Строка");
// запоминаем имеющиеся группы
спрОбраб = СоздатьОбъект(НазвСправ);
Если спрОбраб.ВыбратьЭлементы() = 1 тогда
пока спрОбраб.ПолучитьЭлемент() = 1 цикл
если (спрОбраб.ЭтоГруппа() = 1) и (спрОбраб.ПометкаУдаления() = 0) тогда
// это группа - возможно добавляем в известные
стрПоиска = спрОбраб.Наименование;
если ТабДоп.НайтиЗначение(стрПоиска,,"Назв") = 0 тогда
// не найдено - добавляем
ТабДоп.НоваяСтрока();
ТабДоп.Назв = стрПоиска;
ТабДоп.Код = спрОбраб.Код;
иначе
Сообщить("Повторяющееся значение - " + стрПоиска,"!!!");
Возврат;
конецесли;
конецесли;
конеццикла;
конецесли;
// ТабДоп.Сортировать("Назв");
// находим необходимое к переносу
спрКонтр2 = СоздатьОбъект(НазвСправ);
Если спрОбраб.ВыбратьЭлементы() = 1 тогда
пока спрОбраб.ПолучитьЭлемент() = 1 цикл
если спрОбраб.ЭтоГруппа() = 0 тогда
стрПоиска = спрОбраб.ИНН;
стрПоиска = Лев(стрПоиска,4);
если СтрДлина(СокрЛП(стрПоиска)) = 0 тогда
Сообщить("Ошибка в " + спрОбраб.Код + " - " + спрОбраб.Наименование,"!");
иначе
номСтроки = 0;
если ТабДоп.НайтиЗначение(стрПоиска,номСтроки,"Назв") = 1 тогда
стрПоиска = ТабДоп.ПолучитьЗначение(номСтроки,"Код");
//если спрКонтр2.НайтиПоКоду(стрПоиска,0) = 0 тогда
// Сообщить("Для " + спрОбраб.Код + " - " + спрОбраб.Наименование + " не найдено " + ТабДоп.Код + " - " + ТабДоп.Назв,"!!!");
// Возврат;
//конецесли;
иначе
// не найдено - создаем
спрКонтр2.НоваяГруппа();
спрКонтр2.Наименование = стрПоиска;
спрКонтр2.Записать();
// а теперь добавляем
ТабДоп.НоваяСтрока();
ТабДоп.Назв = стрПоиска;
ТабДоп.Код = спрКонтр2.Код;
//ТабДоп.Сортировать("Назв");
стрПоиска = спрКонтр2.Код;
конецесли;
// если нужен перенос в папку - запоминаем
если спрОбраб.Родитель.Код <> стрПоиска тогда //спрКонтр2.ТекущийЭлемент() тогда
ТабЗамен.НоваяСтрока();
ТабЗамен.Код = спрОбраб.Код;
ТабЗамен.Родит = стрПоиска; //спрКонтр2.Код;
конецесли;
конецесли;
конецесли;
конеццикла;
конецесли;
// ТабЗамен.Сортировать("Код");
// теперь меняем родителей
ТабЗамен.ВыбратьСтроки();
пока ТабЗамен.ПолучитьСтроку() = 1 цикл
если спрОбраб.НайтиПоКоду(ТабЗамен.Код,0) = 1 тогда
если спрКонтр2.НайтиПоКоду(ТабЗамен.Родит,0) = 1 тогда
спрОбраб.Родитель = спрКонтр2.ТекущийЭлемент();
спрОбраб.Записать();
иначе
Сообщить("Для " + спрОбраб.Код + " - " + спрОбраб.Наименование + " не найден родитель с кодом " + ТабЗамен.Код,"!");
конецесли;
иначе
Сообщить("Не найден элемент с кодом " + спрОбраб.Код ,"!");
конецесли;
конеццикла;
В данном примере раскидывает по коду ИФНС из ИНН
стрПоиска = спрОбраб.ИНН;
стрПоиска = Лев(стрПоиска,4);Да еще, сильно не пинать :) - не спецСообщение отредактировал atv_13 - Sep 20 2006, 15:07