Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 08:58

Выборка сотрудника для занесения в базу

Автор korvindeson, 03 июл 2013, 13:56

0 Пользователей и 1 гость просматривают эту тему.

korvindeson

Добрый день. Переношу список к начислению из экселя в 1с 8.2 ЗУП. Есть проблема с этой частью


Если Справочники.СотрудникиОрганизаций.НайтиПоНаименованию("Иванов Иван Иванович", Истина).ПодразделениеОрганизации <> "Подразделение1" Тогда
//найти следующего Иванова Ивана Ивановича
КонецЕсли;


Проблема получается такая. Есть сотрудники помеченные на удаление или просто перемещённые непонятно куда. А я при переносе из экселя ищу сотрудников как Справочники.СотрудникиОрганизаций.НайтиПоНаименованию, соответственно если первым находится не тот человек, который нужен, в начисления заносится он. Подскажите как написать что-то вроде. Если человек не в том подразделении организации найти следующего.
Главным образом с найти следующего не получается. Не хватает синтаксиса. Не учился 1с-кой пользоваться

MuI_I_Ika

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

Besart

а почему бы не найти таким образом
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("...");
Если Сотрудник.ПодразделениеОрганизации = "НужноеПодразделение" и Сотрудник.ПометкаУдаления = Ложь Тогда
    //...
КонецЕсли;

если я вас правильно понял

korvindeson

Цитата: Besart от 03 июл 2013, 14:28
а почему бы не найти таким образом
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("...");
Если Сотрудник.ПодразделениеОрганизации = "НужноеПодразделение" и Сотрудник.ПометкаУдаления = Ложь Тогда
    //...
КонецЕсли;

если я вас правильно понял
В этом случае если подразделение или отметка не совпадает с условиями сотрудник будет просто игнорироваться. Приведу пример, список сотрудников:
Иванов Иван Иванович - с пометкой удаления
Иванов Иван Иванович - без пометки и нужного подразделения
Получается программа найдёт первого и не будет делать что надо. Можно конечно базу чистить от ненужного хлама. Но так как такие персонажи уже появились, значит будут и в будующем появляться. а постоянно поддерживать базу не комильфо. У меня была подобная беда в другом языке, там я решил так. В цикле находил нужного человека, если не соответствовало, переносил точку отчёта на +1 от найденного. Условия выхода найден нужный персонаж или закончились сотрудники. Таким образом перебераем всех и игнорируется условия только если действительно нету такого сотрудника, что в данном случае невозможно, ибо это дело проверяется, правда вне 1с, но надёжно. А вот в синтаксис 1с-ки не могу вогнать такую конструкцию, ибо знания о языке подобранны методом тыка.
Или может можно сделать что-то в таком духе

ЭлементСправочника = Справочники.СотрудникиОрганизаций;
Для Каждого ТекущаяСтрока Из ЭлементСправочника.НайтиПоНаименованию("Иванов Иван Иванович") Цикл
Сообщить(ТекущаяСтрока.Физлицо);
КонецЦикла;

Конкретно это не работает, но может что-то в таком формате можно сделать

ЦитироватьЗдесь нужно писать запрос и в запросе устанавливать отборы, которые вам нужны.
Звучит классно, можно ссылку на почитать?

Besart

Цитата: korvindeson от 03 июл 2013, 22:25но может что-то в таком формате можно сделать
можно       СтруктураДляОтбора = Новый Структура("Наименование", "Петров");
   ВыборкаСправочника = Справочники.Сотрудники.Выбрать(,,СтруктураДляОтбора);
   Пока ВыборкаСправочника.Следующий() Цикл
   Если ВыборкаСправочника.ПометкаУдаления = Ложь И ВыборкаСправочника.Подразделение = "Подраделение" Тогда
         Сообщить(ВыборкаСправочника);
   КонецЕсли;
       КонецЦикла;



korvindeson

Так действительно получается отсеить народ :lol: Однако только для пометки удаления работает. Проверил на базе. Если запустить код ниже то подразделение организации не отображается (сообщение не выводится вовсе, даже пустое, и так для любого персонажа)

    СтруктураДляОтбора = Новый Структура("Наименование", "Иванов Иван Иванович");
    ВыборкаСправочника = Справочники.СотрудникиОрганизаций.Выбрать(,,СтруктураДляОтбора);
    Пока ВыборкаСправочника.Следующий() Цикл
        Сообщить(ВыборкаСправочника.ПодразделениеОрганизации);
    КонецЦикла;

Добавлено: 04 июл 2013, 14:17


Ещё и до поля сотрудники организаций не могу при такой выборке добраться. Ну, хоть направление понял, буду ковырять
Добавлено: 04 июл 2013, 15:48


Вообщем, получилось. Но как-то криво. Хотя работает и слава богу
Если Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина).ПометкаУдаления = Ложь Тогда
НоваяСтрокаДОП.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
Иначе
СтруктураОтбора = Новый Структура("Наименование", Лист.Cells(i , 1).Value);
Отбор = Справочники.СотрудникиОрганизаций.Выбрать(,,СтруктураОтбора);
Пока Отбор.Следующий() Цикл
Если Отбор.ПометкаУдаления = Ложь Тогда
НоваяСтрокаДОП.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоКоду(Отбор.Код);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск