Имя: Пароль:
1C
1C 7.7
v7: Обработки, чтобы оклад не менялся для уволенных программистов
0 anna2212
 
16.04.20
02:34
Подскажите,пожалуйста, что надо изменить в данном способе реализации этой обработки, чтобы оклад не менялся для уволенных программистов?
Процедура Выполнить2()
    Должн = СоздатьОбъект("Справочник.Должности");
    Должн.НайтиПоНаименованию("Программист");
    Сотрудник = СоздатьОбъект("Справочник.Сотрудники");
    Сотрудник.ВыбратьЭлементыПоРеквизиту("Должность", Должн, 0, 0);
    Пока Сотрудник.ПолучитьЭлемент() = 1 Цикл
        Сотрудник.Оклад = Число(200000);
        Сотрудник.Записать();
        Сообщить("Заменен оклад для сотрудника:  " + СокрЛП(Сотрудник.Наименование));
    КонецЦикла;
КонецПроцедуры

Для однозначности ответа рекомендуется привести измененный программный код, в котором игнорируются уволенные сотрудники.
1 victuan1
 
16.04.20
05:02
Какая конфигурация 1С? Какой релиз?
2 big
 
16.04.20
05:20
Если Должн.НайтиПоНаименованию("Программист") = 0 Тогда
    Сообщить("Не нашли должность Программист");
    Возврат;
КонецЕсли;

....
....
....

Если Сотрудник.ВыбратьЭлементыПоРеквизиту("Должность", Должн, 0, 0) = 0 Тогда
   Сообщить("Не нашли сотрудников с такой должностью");
   Возврат;
КонецЕсли;

Пока Сотрудник.ПолучитьЭлемент() = 1 Цикл
   Если Сотрудник.Уволен = 1 Тогда     // я тут просто не знаю какой там признак, что он уволен
       Продолжить;
   КонецЕсли;
...
...
КонецЦикла;
3 SleepyHead
 
гуру
16.04.20
05:27
(0) Зовите ваших уволенных программистов обратно )
4 anna2212
 
16.04.20
05:54
Версия конфигурации 7.7
5 anna2212
 
16.04.20
05:55
Спасибо большое за помощь, попробую сдать. Преподаватель дал задание такое, попробую сдать)
6 Sserj
 
16.04.20
06:53
update $Справочник.Сотрудники set $Справочник.Сотрудники.Оклад = 200000
where
  $Справочник.Сотрудники.Должность = (select top 1 д.id from $Справочник.Должности as д where left(д.descr, 11) = 'Программист')
  and ismark = 0
7 MWWRuza
 
гуру
16.04.20
08:40
Блин, это всего-лишь задание...
А я то уже подумал, что начали программистов увольнять, и они к пасхе яйца закладывают...
Только, по вопросу, сразу возникло стойкое ощущение - "а может не зря увольняют - ???" :-)))
8 Злопчинский
 
16.04.20
09:28
(0)
п.2 - взять первый и второй кусок кода если не найдена должность и нет программистов среди сотрудников
Сотрудник.ВыбратьЭлементыПоРеквизиту("Должность", Должн, 0, 0) - не надо так делать, Должн - это (упрощенно) не найденная тобой должность, а нечто другое
Сотрудник.ВыбратьЭлементыПоРеквизиту("Должность", Должн.ТекущийЭлемент(), 0, 0)
Сотрудник.Оклад = 200000; //справа от знака = итак уже число записано
первым оператором внутри цикла д.б.
Если Сотрудник.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли;
9 Андрей_Андреич
 
naïve
16.04.20
09:31
(7) Зато оклад всем к 200 подравняли, чтобы не так обидно
10 Kigo_Kigo
 
16.04.20
09:32
(8) Это всего лишь задание для теста

  Если Сотрудник.Уволен = 1 Тогда  

       Продолжить;
   КонецЕсли;
этого достаточно
11 Хряк
 
16.04.20
10:24
и скорее всего реквизит оклад периодический
12 Kigo_Kigo
 
16.04.20
10:27
(11) Если бы он был переодический, то требования у ТС не было бы
13 MWWRuza
 
гуру
16.04.20
20:24
(10) Если Сотрудник.Уволен = 1 Тогда

Ну, из ТЗ мы не знаем, какие реквизиты и т.п. есть в исходной конфе...
Я бы предположил, что должно быть так:
Если Сотрудник.Статус = Перечисление.Уволен Тогда

Но, оклад 200 000 мне нравится :-)))
14 vladko
 
17.04.20
09:24
> Если Сотрудник.Статус = Перечисление.Уволен Тогда
точнее
Если Сотрудник.Статус = Перечисление.СтатусыСотрудников.Уволен Тогда
15 Kigo_Kigo
 
17.04.20
09:53
(13) (14)
Мам, а нафига нам все эти приблуды в московском зоопарке?(с) Детеныш верблюда :)))
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn