Имя: Пароль:
1C
1C 7.7
v7: 1С77 Помогите с циклом (спр.Сотрудники)!!!
0 dft2014
 
22.07.14
18:47
1С77 ЗиК
Помогите с кодом, совсем запуталась в трех соснах (((  Пишу код, который отбирает всех работающих сотрудников и подтягивает их лицевые счета. Причем проходит цикл только один раз и затем выдает ошибку:

Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл    
{\\FS\USER\IT\ВЫГРУЗКА.ERT(293)}: Не выбран элемент!

Вот код, совсем простой, но почему-то причину ошибки понять не могу:

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

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

ИтераторСотр = 1;

спрБанкРеквизиты = СоздатьОбъект("Справочник.БанкиCarc");    

Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл    
    
    Если Сотрудники.ЭтоГруппа() = 1 тогда    
        Продолжить;
    КонецЕсли;
    
    Если Сотрудники.НайтиПоРеквизиту("ОтделениеБанка","9038",1) <> 1 Тогда      
        Продолжить;
    КонецЕсли;
    
    СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир);
    
    Если (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Физическое лицо") ИЛИ
    (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Штатный сотрудник") ИЛИ
    (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Временно не работает") Тогда
        
        
        Если спрБанкРеквизиты.НайтиПоРеквизиту("Сотрудник", Сотрудники.ТекущийЭлемент(), 1) = 0 Тогда
            Сообщить("Не найдены записи в спр.БанковскиеРеквизиты по сотруднику: " + Сотрудники.ТекущийЭлемент());
            БР_Комментарий = "";
            БР_Банк = "";
            БР_Отделение = "";  
        Иначе    
            БР_Комментарий = спрБанкРеквизиты.Комментарий;
            БР_Банк = спрБанкРеквизиты.Банк;
            БР_Отделение = спрБанкРеквизиты.Отделение;
        КонецЕсли;
        
        ИтераторСотр = ИтераторСотр + 1;
        
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,1).Value        = "'"+Сотрудники.Код;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,2).Value        = "'"+Сотрудники.Наименование;  
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,26).Value    = "'"+СостояниеСотрудника;  
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,32).Value    = "'"+БР_Комментарий;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,33).Value    = "'"+БР_Банк;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,34).Value    = "'"+БР_Отделение;
        
    Иначе
        
        Продолжить;
        
    КонецЕсли;
    
КонецЦикла;
1 dft2014
 
22.07.14
18:48
Код некрасиво вставился в (0), вот вторая попытка:

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

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

ИтераторСотр = 1;

спрБанкРеквизиты = СоздатьОбъект("Справочник.БанкиCarc");    

Пока Сотрудники.ПолучитьЭлемент() = 1 Цикл    
    
    Если Сотрудники.ЭтоГруппа() = 1 тогда    
        Продолжить;
    КонецЕсли;
    
    Если Сотрудники.НайтиПоРеквизиту("ОтделениеБанка","9038",1) <> 1 Тогда      
        Продолжить;
    КонецЕсли;
    
    СостояниеСотрудника = Сотрудники.СостояниеФизЛица.Получить(ДатаФормир);
    
    Если (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Физическое лицо") ИЛИ
    (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Штатный сотрудник") ИЛИ
    (СостояниеСотрудника(Сотрудники.ТекущийЭлемент())="Временно не работает") Тогда
        
        Если спрБанкРеквизиты.НайтиПоРеквизиту("Сотрудник", Сотрудники.ТекущийЭлемент(), 1) = 0 Тогда
            Сообщить("Не найдены записи в спр.БанковскиеРеквизиты по сотруднику: " + Сотрудники.ТекущийЭлемент());
            БР_Комментарий = "";
            БР_Банк = "";
            БР_Отделение = "";  
        Иначе    
            БР_Комментарий = спрБанкРеквизиты.Комментарий;
            БР_Банк = спрБанкРеквизиты.Банк;
            БР_Отделение = спрБанкРеквизиты.Отделение;
        КонецЕсли;
        
        ИтераторСотр = ИтераторСотр + 1;
        
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,1).Value        = "'"+Сотрудники.Код;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,2).Value        = "'"+Сотрудники.Наименование;  
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,26).Value    = "'"+СостояниеСотрудника;  
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,32).Value    = "'"+БР_Комментарий;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,33).Value    = "'"+БР_Банк;
        x.WorkSheets(ИмяФайла).Cells(ИтераторСотр,34).Value    = "'"+БР_Отделение;
        
    Иначе
        
        Продолжить;
        
    КонецЕсли;
    
КонецЦикла;
2 Мигало
 
22.07.14
18:52
Сотрудники.НайтиПоРеквизиту - сбивает выборку
3 dft2014
 
22.07.14
18:54
(2) А как тогда? Мне надо отобрать только тех, у которых в спр.Сотрудники, реквизит "ОтделениеБанка"=9038. Это одно из условий.
4 Franchiser
 
гуру
22.07.14
18:56
Выбратьэлементы() нужно ставить непосредственно перед циклом, и найтипореквизиту сбивает выборка нужно инициализировать еще объект например сотрудники2
5 Мигало
 
22.07.14
18:56
Если Сотрудники.ЭтоГруппа() = 1 тогда Продолжить; КонецЕсли;
    
    Если Сотрудники.ОтделениеБанка <> 9038 Тогда Продолжить; КонецЕсли;
6 Franchiser
 
гуру
22.07.14
18:57
Сотрудники2= СоздатьОбъект("Справочник.Сотрудники");
Сотрудники2.найтипореквизиту(...
7 maip1
 
22.07.14
18:59
Если СокрЛП(Сотрудники.ОтделениеБанка) <> "9038" Тогда Продолжить; КонецЕсли;
8 KRV
 
22.07.14
19:07
фотки без купальника в личке нет... непорядок..
9 kobzon
 
22.07.14
19:09
(8) Зато там написано что это мужик))
10 dft2014
 
22.07.14
19:20
(7) Помогло!!!
Всем СПАСИБО!!!
11 lavalit
 
23.07.14
19:04
Если еще актуально, то можно еще запрос сделать с условием "ОтделениеБанка"=9038 (ну и плюс все остальные условия какие надо по ходу), тогда в выборку попадут только нужные сотрудники.... на мой взгляд красивее будет, чем перебирать аж целый справочник. да и побыстрее отработает
12 m-serg74
 
23.07.14
20:01
(11) сотрудники это не номенклатура - много не бывает :)
13 ДенисЧ
 
23.07.14
20:03
(12) Им же всем платить надо....
14 m-serg74
 
23.07.14
20:10
ну продать в принципе тоже мона)))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс