Сортировка справочника договора по папкам

1. Kalugin_AA 109 03.07.08 07:25 Сейчас в теме
Есть справочник договора, за 4 года в нем набралось их куча. Удалять нельзя, говорят все нужны. Договора заводились через …. В общем заводились не корректно на мой взгляд т.к. в справочнике все что заполнено это валюта договора и название типа «с\ф № 122 от 01.01.05г.», «с\ф № 122 от 01.01.03г.», «с\ф № 122 от 01.01.01г.» и т.д. Задача состоит в следующем в каждом Контрагенте нужно создать папки для договоров 2008, 2007,2006, 2005 и Прочие. Эта часть у меня получилась легко. Запутался в том что бы текущие договора раскидать по папкам которые уже созданы. Вот что написано:

Процедура Раскидать()

СпрКонтрик = СоздатьОбъект("Справочник.Контрагенты");
СпрДоговора = СоздатьОбъект("Справочник.Договоры");
СпрДоговораГр = СоздатьОбъект("Справочник.Договоры");

СпрКонтрик.ВыбратьЭлементы();

Пока СпрКонтрик.ПолучитьЭлемент() = 1 Цикл

Если СпрКонтрик.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;

СпрДоговора.ВыбратьЭлементы();
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());

Пока СпрДоговора.ПолучитьЭлемент() = 1 Цикл

Если СпрДоговора.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;

стр = СокрЛП(СпрДоговора.ТекущийЭлемент());
стр = ?(ДатаГод(Сред(Стр,Найти(стр, " от ")+4)) = 0, 1111,ДатаГод(Сред(Стр,Найти(стр, " от ")+4))); // тут я из имени договора определяю к какому году относится данный договор, т.е. 1111 это код папки прочее, 2008 соответственно для папки договоров 2008
СпрДоговораГр.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
СпрДоговораГр.НайтиПоКоду(стр,1);

СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
Сообщить(СпрКонтрик); // вот эта чтука тоже не прокатывает так же как и просто к родителю присвоить значение.


КонецЦикла;


КонецЦикла;

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

Может я где то тут ошибся, или это проще делается? Не охота в ручную по папка распихивать 
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kitt 323 03.07.08 07:34 Сейчас в теме
по моему проще уже не куда:)
так и как результат то? работает?
3. poppy 03.07.08 08:53 Сейчас в теме
Правильнее написась так:
Код
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр.ТекущийЭлемент());
Показать полностью


или

Код
СпрДоговора.Родитель = СпрДоговораГр.ТекущийЭлемент();
Показать полностью


4. maloi_a 03.07.08 11:16 Сейчас в теме
Надо:
1.два оператора:
СпрДоговора.ВыбратьЭлементы();
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
поменять местами.
2. СпрДоговораГр.НайтиПоКоду(стр,1);

СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
заменить на
Если СпрДоговораГр.НайтиПоНаименованию(стр,1)=1 Тогда
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
КонецЕсли;
3. К СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
добавить
СпрДоговора.Записать();

Короче, работает следующий код (проверял):

Код
Процедура Раскидать()

СпрКонтрик = СоздатьОбъект("Справочник.Контрагенты"); 
СпрДоговора = СоздатьОбъект("Справочник.Договоры"); 
СпрДоговораГр = СоздатьОбъект("Справочник.Договоры"); 

СпрКонтрик.ВыбратьЭлементы(); 

Пока СпрКонтрик.ПолучитьЭлемент() = 1 Цикл 

Если СпрКонтрик.ЭтоГруппа() = 1 Тогда 
Продолжить; 
КонецЕсли; 

СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент()); 
СпрДоговора.ВыбратьЭлементы(); 

Пока СпрДоговора.ПолучитьЭлемент() = 1 Цикл 

Если СпрДоговора.ЭтоГруппа() = 1 Тогда 
Продолжить; 
КонецЕсли; 

стр = СокрЛП(СпрДоговора.ТекущийЭлемент()); 
стр = ?(ДатаГод(Сред(Стр,Найти(стр, " от ")+4)) = 0, "Прочие",ДатаГод(Сред(Стр,Найти(стр, " от ")+4))); // тут я из имени договора определяю к какому году относится данный договор, т.е. 1111 это код папки прочее, 2008 соответственно для папки договоров 2008 
СпрДоговораГр.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент()); 
Если СпрДоговораГр.НайтиПоНаименованию(стр,1)=0 Тогда
    СпрДоговораГр.НоваяГруппа();
    СпрДоговораГр.Наименование=стр;
    СпрДоговораГр.Записать();
   Сообщить("ЗапРод");
КонецЕсли;   

СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр); 
Сообщить("Зап");
СпрДоговора.Записать();
Сообщить(СпрКонтрик); // вот эта штука прекрасно прокатывает так же как и просто к родителю присвоить значение. 


КонецЦикла; 


КонецЦикла; 

КонецПроцедуры 
Показать полностью

Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот