Есть справочник договора, за 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);
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
Сообщить(СпрКонтрик); // вот эта чтука тоже не прокатывает так же как и просто к родителю присвоить значение.
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Может я где то тут ошибся, или это проще делается? Не охота в ручную по папка распихивать
Процедура Раскидать()
СпрКонтрик = СоздатьОбъект("Справочник.Контрагенты");
СпрДоговора = СоздатьОбъект("Справочник.Договоры");
СпрДоговораГр = СоздатьОбъект("Справочник.Договоры");
СпрКонтрик.ВыбратьЭлементы();
Пока СпрКонтрик.ПолучитьЭлемент() = 1 Цикл
Если СпрКонтрик.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
СпрДоговора.ВыбратьЭлементы();
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
Пока СпрДоговора.ПолучитьЭлемент() = 1 Цикл
Если СпрДоговора.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
стр = СокрЛП(СпрДоговора.ТекущийЭлемент());
стр = ?(ДатаГод(Сред(Стр,Найти(стр, " от ")+4)) = 0, 1111,ДатаГод(Сред(Стр,Найти(стр, " от ")+4))); // тут я из имени договора определяю к какому году относится данный договор, т.е. 1111 это код папки прочее, 2008 соответственно для папки договоров 2008
СпрДоговораГр.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
СпрДоговораГр.НайтиПоКоду(стр,1);
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
Сообщить(СпрКонтрик); // вот эта чтука тоже не прокатывает так же как и просто к родителю присвоить значение.
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Может я где то тут ошибся, или это проще делается? Не охота в ручную по папка распихивать
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Надо:
1.два оператора:
СпрДоговора.ВыбратьЭлементы();
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
поменять местами.
2. СпрДоговораГр.НайтиПоКоду(стр,1);
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
заменить на
Если СпрДоговораГр.НайтиПоНаименованию(стр,1)=1 Тогда
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
КонецЕсли;
3. К СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
добавить
СпрДоговора.Записать();
Короче, работает следующий код (проверял):
1.два оператора:
СпрДоговора.ВыбратьЭлементы();
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
поменять местами.
2. СпрДоговораГр.НайтиПоКоду(стр,1);
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
заменить на
Если СпрДоговораГр.НайтиПоНаименованию(стр,1)=1 Тогда
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
КонецЕсли;
3. К СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
добавить
СпрДоговора.Записать();
Короче, работает следующий код (проверял):
Код |
---|
Процедура Раскидать()
СпрКонтрик = СоздатьОбъект("Справочник.Контрагенты");
СпрДоговора = СоздатьОбъект("Справочник.Договоры");
СпрДоговораГр = СоздатьОбъект("Справочник.Договоры");
СпрКонтрик.ВыбратьЭлементы();
Пока СпрКонтрик.ПолучитьЭлемент() = 1 Цикл
Если СпрКонтрик.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
СпрДоговора.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
СпрДоговора.ВыбратьЭлементы();
Пока СпрДоговора.ПолучитьЭлемент() = 1 Цикл
Если СпрДоговора.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
стр = СокрЛП(СпрДоговора.ТекущийЭлемент());
стр = ?(ДатаГод(Сред(Стр,Найти(стр, " от ")+4)) = 0, "Прочие",ДатаГод(Сред(Стр,Найти(стр, " от ")+4))); // тут я из имени договора определяю к какому году относится данный договор, т.е. 1111 это код папки прочее, 2008 соответственно для папки договоров 2008
СпрДоговораГр.ИспользоватьВладельца(СпрКонтрик.ТекущийЭлемент());
Если СпрДоговораГр.НайтиПоНаименованию(стр,1)=0 Тогда
СпрДоговораГр.НоваяГруппа();
СпрДоговораГр.Наименование=стр;
СпрДоговораГр.Записать();
Сообщить("ЗапРод");
КонецЕсли;
СпрДоговора.УстановитьАтрибут("Родитель",СпрДоговораГр);
Сообщить("Зап");
СпрДоговора.Записать();
Сообщить(СпрКонтрик); // вот эта штука прекрасно прокатывает так же как и просто к родителю присвоить значение.
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Показать полностью |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот