ТаблицаЗначений

Новая тема
Показывать по 10 20 40 сообщений
"Всем привет! проблема такая: есть таблица значений, которая содержит список должностей и категорий иесть переменная "Должность", которая содержит определенные должности. Как из таблицы значений получить категорию той должности, которая содержится в переменной "Должность";
Заранее спасибо!"
С пом. метода "НайтиЗначение" ищется строка с нужной должностью, а методом "ПолучитьЗначение" по найденному номеру строки получим категорию.
"Спасибо! Это я уже получила. Теперь мне надо подсчитать численность сотрудников по мужчина и женщинам, так еще и по атегориям, то есть:
Женщина рабочий, женщина руководитель, мужчина рабочий и т.п.
Я условияе прописываю, а программа все равно считает только в общем по мужчинам и женщинам. Вот код:
СпрСотр.ПорядокНаименований();
СпрСотр.ВыбратьЭлементы(0);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
Если СпрСотр.ЭтоГруппа()=1 Тогда
Продолжить
КонецЕсли;
Сотрудник = СпрСотр.ТекущийЭлемент();
Если Сотрудник.ОсновнойЭлемент=Сотрудник Тогда
СписокСотр.ДобавитьЗначение(Сотрудник);
КонецЕсли;
КонецЦикла;  




     //перебираем сотрудников в списке
Для Сч = 1 По СписокСотр.РазмерСписка() Цикл
Сотрудник = СписокСотр.ПолучитьЗначение(Сч);

Если Найти(Сотрудник.Пол.Наименование,"М") > 0 Тогда
Женщина = 0;
Мужчина = 1;
Иначе
Женщина = 1;
Мужчина = 0;
КонецЕсли;



ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,ДатаАктуальности,ДатаАктуальности,"СостояниеФизлица,Должность,ФормаТруда,ГрафикРаботы");
   ТаблицаРеквизитов.ВставитьКолонку("Кат");
КоличествоСтрок = ТаблицаРеквизитов.КоличествоСтрок();

//перебираем строки в ТаблицеРеквизитов
Для Номер = 1 по КоличествоСтрок Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(Номер);
СостояниеФизлица = ТаблицаРеквизитов.СостояниеФизлица;
Должность = ТаблицаРеквизитов.Должность;  

Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл
ТаблицаДолжностей.НайтиЗначение(Должность, НомСтроки, НомКолонки);
Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтроки, 2);
ТаблицаРеквизитов.УстановитьЗначение(Номер, "Кат", Кат); КонецЦикла;


//проверка состояния физлица
Если СостояниеФизлица  = Перечисление.СостояниеФизлица.СотрудникОсновной тогда
    Категория = ТаблицаРеквизитов.Кат;
Если Категория = Перечисление.КатегорииСотрудников.Рабочие тогда


      ФормаОплаты  = ТаблицаРеквизитов.ФормаТруда;


//проверка формы оплаты труда
Если ((ФормаОплаты=Перечисление.ФормыТруда.ТабельПодневнОклад) или (ФормаОплаты=Перечисление.ФормыТруда.ТабельПочасОклад) или (ФормаОплаты=Перечисление.ФормыТруда.ТабельПочасТариф)) Тогда  // для работающих неполное время при учете времени табелями

ГрафикРаботы = ТаблицаРеквизитов.ГрафикРаботы;

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда
ГрафикРаботы = Константа.ОсновнойГрафик;
КонецЕсли;

Если ПустоеЗначение(ГрафикРаботы)=1 Тогда
Календарь = СоздатьОбъект("Календарь.Пятидневка");
Иначе
Календарь = ГрафикРаботы.ОсновныеЧасы;
КонецЕсли;
ЖурналРасчетовЗарплата.ВыбратьЗаписиПоОбъекту(Сотрудник, ДатаАктуальности, ДатаАктуальности);
Если (Женщина = 1) и (Мужчина = 0) тогда
СписокЖенщинРаб.ДобавитьЗначение(Сотрудник);
ИначеЕсли (Женщина = 0) и (Мужчина = 1) тогда
СписокМужчинРаб.ДобавитьЗначение(Сотрудник);
КонецЕсли;
КолЖенщинРаб = СписокЖенщинРаб.РазмерСписка();
КолМужчинРаб = СписокМужчинРаб.РазмерСписка();

КонецЕсли; //проверка формы оплаты труда
КонецЕсли; //проверка состояния физлица
КонецЕсли; //проверка категории










КонецЦикла; //перебора строк ТаблицыРеквизитов
КонецЦикла; //перебора сотрудников"
""Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл"
"ТаблицаДолжностей.НайтиЗначение(Должность, НомСтроки, НомКолонки);"
Неправильно это, что во второй строке имя переменной куда запоминается номер найденной строки совпадает с именем переменной цикла. Лучше так:
Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл
  НомСтр = 0;
  ТаблицаДолжностей.НайтиЗначение(Должность, НомСтр, НомКолонки);"
" тогда получается так:
Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл
НомСтр = 0;
ТаблицаДолжностей.НайтиЗначение(Должность, НомСтр, НомКолонки);
Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтр, 2);
ТаблицаРеквизитов.УстановитьЗначение(Номер, "Кат", Кат); // = ТаблицаДолжностей.ПолучитьЗначение(НомСтроки, 2);
КонецЦикла;

но программа выдает ошибку, что номер за пределами значения"
"А если так:
Для Номер = 1 по КоличествоСтрок Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(Номер);
СостояниеФизлица = ТаблицаРеквизитов.СостояниеФизлица;
Должность = ТаблицаРеквизитов.Должность;  
       НомСтр = 0;
НомКолонки = 0;
ТаблицаДолжностей.НайтиЗначение(Должность, НомСтр, НомКолонки);
Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтр, 2);
ТаблицаРеквизитов.Кат = Кат;

Лишний цикл."
" все равно та же ошибка, когда доходит до этой строки:
Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтр, 2);
"
"Значит, скорее всего не находит значение в ТаблицаДолжностей и НомСтр = 0.
Возможно типы значений "Должность" в ТаблицаРеквизитов и ТаблицаДолжностей разные.
Попробуй:
               НомСтр = 0;
НомКолонки = 0;
Если ТаблицаДолжностей.НайтиЗначение(Должность, НомСтр, НомКолонки)=1 Тогда
Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтр, 2);
ТаблицаРеквизитов.Кат = Кат;
Иначе
Сообщить("Найти не удалось. НомСтр="+НомСтр);
КонецЕсли;

А вообще отладчиком быстрее.
"
так он и пишет, что не удалось найти НомСтр = 0
а вот так, как у меня было в первый раз в отладчике все нормально показывал
только вот условие не выполнял
Это было неправильно. Значение переменной-счетчика цикла передавалось методу НайтиЗначение. А как сказано в Писании (ЖКК):
<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке.
Проверь, совпадают ли типы значений в таблицах.
Что пишешь? Отчет, обработку?
Читают тему
(гостей: 1)

Быстрый переход