Имя: Пароль:
1C
1С v8
Перенос элемента справочника в другую группу
0 9451523
 
13.03.18
09:28
Привет Всем
Есть справочник Сотрудники в которой создали несколько основных групп с именем подразделений, в каждой группе созданы еще группы с названиями отделов подразделений, мне нужно массово разнести всех сотрудников по группам отделов подразделений, сотрудников больше тысячи, в ручную их по одному переносить в группу довольно муторно, решил накидать обработку, вот код:

Функция ВыборОтдела(ВыбСотрудник)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РаботникиОрганизаций.Сотрудник,
        |    РаботникиОрганизаций.ПодразделениеОрганизации
        |ИЗ
        |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        |ГДЕ
        |    РаботникиОрганизаций.ПодразделениеОрганизации = &Отдел";

    Запрос.УстановитьПараметр("Отдел", Отдел);

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();
       Пока Выборка.Следующий() Цикл
        Если СокрЛП(Выборка.Сотрудник) = СокрЛП(ВыбСотрудник) Тогда
            Возврат Выборка.ПодразделениеОрганизации;
        КонецЕсли;    
    КонецЦикла;
    
КонецФункции

Процедура ПереносВГруппу(Данные)
     Спр = Справочники.Сотрудники.Выбрать();
     СпрОтдел = Справочники.Сотрудники;
     ГруппаОтдела = Справочники.Сотрудники.НайтиПоНаименованию(Отдел);
     Пока Спр.Следующий() Цикл
     ИмяОтдела = ВыборОтдела(Спр.Наименование);
     Если ЗначениеЗаполнено(ИмяОтдела) И ЗначениеЗаполнено(Спр.Наименование) Тогда
         Объект = ГруппаОтдела.ПолучитьОбъект();
         Объект.Родитель = ЭтотОбъект.Отдел;
          Объект.Записать();
    
     КонецЕсли;
     КонецЦикла;     

КонецПроцедуры
ввиду отсутствия опыта не смог сообразить что правильно прописать в цикле Пока Спр.Следующий(), код не срабатывает , тупо создает новую группу с именем отдела, подскажите если не трудно
С Уважением Дамир
1 Cyberhawk
 
13.03.18
09:32
А ты там кем?
2 9451523
 
13.03.18
09:36
Сисадмин начал осваивать 1с
3 hhhh
 
13.03.18
09:55
(2) ИмяОтдела = ВыборОтдела(Спр.Наименование);

ты находишь

а потом ИмяОтдела ты нигде не используешь, зачем тогда находил его?
4 9451523
 
13.03.18
10:01
имяОтдела использовал для сравнения так как подоразделения мне приходится вытаскивать через запрос
5 9451523
 
13.03.18
10:04
в справочнике Сотрудники нету реквизита Подразделение, он только на форме в виде элемента формы, я могу достать значение подразделения только через регистры сведений ПодразделениеОрганизации
6 catena
 
13.03.18
10:47
Выборка = Результат.Выбрать();
       Пока Выборка.Следующий() Цикл
        Если СокрЛП(Выборка.Сотрудник) = СокрЛП(ВыбСотрудник) Тогда
            Возврат Выборка.ПодразделениеОрганизации;
        КонецЕсли;    
    КонецЦикла;


Вот ты же догадался уже, что в запросе можно делать отбор по параметрам. Так зачем же вот это???
7 catena
 
13.03.18
10:49
>>код не срабатывает , тупо создает новую группу с именем отдела

Это не правда, в приведенном коде нет создания объекта.
8 catena
 
13.03.18
10:52
И что такое Отдел и почему он используется то как строка, то как ссылка-родитель?
9 Остап Сулейманович
 
13.03.18
10:56
(0) Не нужно оно ни тебе, ни кому бы-то еще. Динамический список можно группировать/отбирать по любому полю. Хочешь - по полю "подразделение", хочешь - по возрасту ...
Озаботься группировкой. И не нужно будет таскать сотрудников из группы в группу в случае увольнения или перемещения.
10 Cyberhawk
 
13.03.18
11:00
Сколько сисадмину платят за решение вопроса?
11 9451523
 
13.03.18
11:13
ни хрена не платят
12 9451523
 
13.03.18
11:14
форма обычная не управляемая, где там группировать в динамическом списке?
13 hhhh
 
13.03.18
11:15
(12) если у вас зуп, то там уже всё сделано. Слева дерево подразделений, справа список сотрудников
14 9451523
 
13.03.18
11:21
нет, список подразделений создан там же в Сотрудниках то есть где поле Наименование созданые группы подразделений, если конечно вручную мышкой перетянуть всех сотрудников по одному каждого в свой отдел то слева откроется дерево со списком
15 catena
 
13.03.18
11:26
(14) Вы же понимаете, что вам еще придется прописывать пересортировку сотрудников при кадровых перемещениях?
16 Вася Теркин
 
13.03.18
11:26
(7) Скорее всего он просто не весь код показал....
(0) Функция ВыборОтдела(ВыбСотрудник) - шедевр. переменная Отдел не определена, хотя это и не удивительно. Ведь именно её и надо найти в функции...
17 Вася Теркин
 
13.03.18
11:27
(8) переменная не определена и можно использовать как хочешь.
18 Вася Теркин
 
13.03.18
11:30
(15) перепрописывать будет следующий сисадмин.
(0) Не делай так. Заболей пока постановщика не уволят.