Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

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

Ivan_Ivanov
читатель
офлайн
Дата регистрации: 06.06.2007
Сообщений: 168
Пост №1
 
28.11.2007 01:25

"Всем привет! проблема такая: есть таблица значений, которая содержит список должностей и категорий иесть переменная "Должность", которая содержит определенные должности. Как из таблицы значений получить категорию той должности, которая содержится в переменной "Должность";<br>Заранее спасибо!"

banzay
читатель
офлайн
Дата регистрации: 22.08.2007
Сообщений: 192
Пост №2
 
28.11.2007 08:42

С пом. метода "НайтиЗначение" ищется строка с нужной должностью, а методом "ПолучитьЗначение" по найденному номеру строки получим категорию.

Ivan_Ivanov
читатель
офлайн
Дата регистрации: 06.06.2007
Сообщений: 168
Пост №3
 
28.11.2007 08:54

"Спасибо! Это я уже получила. Теперь мне надо подсчитать численность сотрудников по мужчина и женщинам, так еще и по атегориям, то есть:<br>Женщина рабочий, женщина руководитель, мужчина рабочий и т.п.<br>Я условияе прописываю, а программа все равно считает только в общем по мужчинам и женщинам. Вот код:<br>СпрСотр.ПорядокНаименований();<br> СпрСотр.ВыбратьЭлементы(0);<br> Пока СпрСотр.ПолучитьЭлемент()=1 Цикл<br> Если СпрСотр.ЭтоГруппа()=1 Тогда<br> Продолжить<br> КонецЕсли;<br> Сотрудник = СпрСотр.ТекущийЭлемент();<br> Если Сотрудник.ОсновнойЭлемент=Сотрудник Тогда<br> СписокСотр.ДобавитьЗначение(Сотрудник);<br> КонецЕсли;<br> КонецЦикла; <br> <br> <br> <br><br>      //перебираем сотрудников в списке<br> Для Сч = 1 По СписокСотр.РазмерСписка() Цикл<br> Сотрудник = СписокСотр.ПолучитьЗначение(Сч); <br> <br> Если Найти(Сотрудник.Пол.Наименование,"М") > 0 Тогда <br> Женщина = 0;<br> Мужчина = 1;<br> Иначе <br> Женщина = 1;<br> Мужчина = 0;<br> КонецЕсли;<br> <br> <br> <br>ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,ДатаАктуальности,ДатаАктуальности,"СостояниеФизлица,Должность,ФормаТруда,ГрафикРаботы");<br> ТаблицаРеквизитов.ВставитьКолонку("Кат");<br> КоличествоСтрок = ТаблицаРеквизитов.КоличествоСтрок();<br><br> //перебираем строки в ТаблицеРеквизитов<br> Для Номер = 1 по КоличествоСтрок Цикл <br> ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(Номер);<br> СостояниеФизлица = ТаблицаРеквизитов.СостояниеФизлица;<br> Должность = ТаблицаРеквизитов.Должность; <br> <br> Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл<br> ТаблицаДолжностей.НайтиЗначение(Должность, НомСтроки, НомКолонки);<br> Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтроки, 2); <br> ТаблицаРеквизитов.УстановитьЗначение(Номер, "Кат", Кат); КонецЦикла;<br> <br> <br> //проверка состояния физлица<br> Если СостояниеФизлица = Перечисление.СостояниеФизлица.СотрудникОсновной тогда<br> Категория = ТаблицаРеквизитов.Кат;<br> Если Категория = Перечисление.КатегорииСотрудников.Рабочие тогда<br> <br> <br>        ФормаОплаты = ТаблицаРеквизитов.ФормаТруда;<br> <br> <br> //проверка формы оплаты труда<br>Если ((ФормаОплаты=Перечисление.ФормыТруда.ТабельПодневнОклад) или (ФормаОплаты=Перечисление.ФормыТруда.ТабельПочасОклад) или (ФормаОплаты=Перечисление.ФормыТруда.ТабельПочасТариф)) Тогда // для работающих неполное время при учете времени табелями<br> <br> ГрафикРаботы = ТаблицаРеквизитов.ГрафикРаботы;<br> <br> Если ПустоеЗначение(ГрафикРаботы)=1 Тогда<br> ГрафикРаботы = Константа.ОсновнойГрафик;<br>КонецЕсли;<br> <br>Если ПустоеЗначение(ГрафикРаботы)=1 Тогда<br>Календарь = СоздатьОбъект("Календарь.Пятидневка");<br>Иначе<br>Календарь = ГрафикРаботы.ОсновныеЧасы;<br>КонецЕсли;<br>ЖурналРасчетовЗарплата.ВыбратьЗаписиПоОбъекту(Сотрудник, ДатаАктуальности, ДатаАктуальности);<br> Если (Женщина = 1) и (Мужчина = 0) тогда<br>СписокЖенщинРаб.ДобавитьЗначение(Сотрудник);<br>ИначеЕсли (Женщина = 0) и (Мужчина = 1) тогда<br>СписокМужчинРаб.ДобавитьЗначение(Сотрудник);<br>КонецЕсли;<br>КолЖенщинРаб = СписокЖенщинРаб.РазмерСписка();<br>КолМужчинРаб = СписокМужчинРаб.РазмерСписка();<br> <br>КонецЕсли; //проверка формы оплаты труда<br>КонецЕсли; //проверка состояния физлица <br>КонецЕсли; //проверка категории<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> КонецЦикла; //перебора строк ТаблицыРеквизитов<br> КонецЦикла; //перебора сотрудников"

banzay
читатель
офлайн
Дата регистрации: 22.08.2007
Сообщений: 192
Пост №4
 
28.11.2007 09:23

""Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл"<br>"ТаблицаДолжностей.НайтиЗначение(Должность, НомСтроки, НомКолонки);"<br>Неправильно это, что во второй строке имя переменной куда запоминается номер найденной строки совпадает с именем переменной цикла. Лучше так:<br>Для НомСтроки = 1 по ТаблицаДолжностей.КоличествоСтрок() цикл<br> НомСтр = 0;<br> ТаблицаДолжностей.НайтиЗначение(Должность, НомСтр, НомКолонки);"

Ivan_Ivanov
читатель
офлайн
Дата регистрации: 06.06.2007
Сообщений: 168
Пост №5
 
28.11.2007 09:37

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

banzay
читатель
офлайн
Дата регистрации: 22.08.2007
Сообщений: 192
Пост №6
 
28.11.2007 09:45

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

Ivan_Ivanov
читатель
офлайн
Дата регистрации: 06.06.2007
Сообщений: 168
Пост №7
 
28.11.2007 09:55

" все равно та же ошибка, когда доходит до этой строки:<br>Кат = ТаблицаДолжностей.ПолучитьЗначение(НомСтр, 2); <br>"

banzay
читатель
офлайн
Дата регистрации: 22.08.2007
Сообщений: 192
Пост №8
 
28.11.2007 10:07

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

Ivan_Ivanov
читатель
офлайн
Дата регистрации: 06.06.2007
Сообщений: 168
Пост №9
 
28.11.2007 10:25

так он и пишет, что не удалось найти НомСтр = 0<br>а вот так, как у меня было в первый раз в отладчике все нормально показывал<br>только вот условие не выполнял

banzay
читатель
офлайн
Дата регистрации: 22.08.2007
Сообщений: 192
Пост №10
 
28.11.2007 10:39

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

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация