Ответить Создать тему

вопрос к спецам 1с , как упорядочить справочник

sterx
post Sep 14 2006, 08:41 
Отправлено #1


Активный

Сообщений: 1 114



есть какой то определенный справочник контрагентов из разных городов.
Хочется их рассортировать по папкам, соответственно по названию города.
Как енто можно сделать?
1с v7.7
бухучет 4.5 по моему.
Пасиб:-)
Profile CardPM
  0/0  
atv_13
post Sep 20 2006, 14:37 
Отправлено #2


Тринадцатый

Сообщений: 6 262
Из: Чебоксары



Нечто вроде этого (под Бюджетную бухию 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
Profile CardPM
  0/0  
atv_13
post Sep 20 2006, 16:25 
Отправлено #3


Тринадцатый

Сообщений: 6 262
Из: Чебоксары



Забыл, для ускорения обработки в последнем куске желательно использовать транзакцию

Исходный код
// теперь меняем родителей
НачатьТранзакцию();
ТабЗамен.ВыбратьСтроки();
пока ТабЗамен.ПолучитьСтроку() = 1 цикл
 если спрОбраб.НайтиПоКоду(ТабЗамен.Код,0) = 1 тогда
  если спрКонтр2.НайтиПоКоду(ТабЗамен.Родит,0) = 1 тогда
   спрОбраб.Родитель = спрКонтр2.ТекущийЭлемент();
   спрОбраб.Записать();
  иначе
   Сообщить("Для " + спрОбраб.Код + " - " + спрОбраб.Наименование + " не найден родитель с кодом " + ТабЗамен.Код,"!");
  конецесли;
 иначе
  Сообщить("Не найден элемент с кодом " + спрОбраб.Код ,"!");
 конецесли;
конеццикла;
ЗафиксироватьТранзакцию();
Profile CardPM
  0/0  

ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей: