Среднесписочная в 1с 8.2. Считаем численность работников: среднюю, списочную. Секреты «1с:зуп»: как рассчитать среднесписочную численность

Среднесписочная в 1с 8.2. Считаем численность работников: среднюю, списочную. Секреты «1с:зуп»: как рассчитать среднесписочную численность

(Эта статья относится к циклу статей 1С с нуля; программирование 1с с нуля; таблица значений 1с)

В прошлой статье я рассказывал о создании таблицы значений 1с и способам обращения к данным, которые в ней содержатся.

Давайте расширим эти знания, для более удобной работы с таблицей значений. Начнем с некоторых полезных свойств таблицы значений.

1. Перебор строк таблицы значений при помощи индексов строк (номеров строк)

Метод ТаблицаЗначений.Количество() - возвращает количество строк в таблице значений.

Напоминаю, что если метод ТаблицаЗначений.Количество() показал, что в таблице 5 строк, то индексы(номера) этих строк такие: 0, 1, 2, 3, 4.

Предположим, что мы имеем таблицу значений 1С с колонкой "ФамилияКлиента"

Если мы желаем перебрать все строки таблицы значений при помощи индекса строк, мы должны использовать заголовок цикла, как в следующем примере. В нем мы выводим на экран содержимое колонки "ФамилияКлиента" для каждой строки, то есть, по-сути, печатаем весь столбец с фамилиями клиентов.
Итак:

Для НомерСтроки = 0 По НашаТаблица.Количество() - 1 Цикл // здесь перебираются строки ТекущаяФамилия = НашаТаблица[НомерСтроки].ФамилияКлиента; // "ФамилияКлиента" - это имя колонки, содержащее фамилию клиента Сообщить(ТекущаяФамилия); КонецЦикла;

Обратите внимание, что счетчик цикла мы наращиваем до значения, равного числу строк таблицы минус один: НашаТаблица.Количество() - 1

Давайте выясним, что означает код: НашаТаблица[НомерСтроки] . Это и есть обращение к конкретной строке таблицы значений по ее индексу (номеру).

В следующем примере я покажу, как НашаТаблица[НомерСтроки] возвращает нам объект, который имеет тип "СтрокаТаблицыЗначений" .
В дополнительную переменную я помещаю результат обращение к строке по номеру: СтрокаТаблицы = НашаТаблица[НомерСтроки]

Далее, получив объект - одну строку таблицы значений в виде переменной СтрокаТаблицы , мы можем работать отдельно с этим объектом-строкой. Пример ниже делает тоже самое, что и пример выше, только в нижнем примере использована "лишняя" переменная СтрокаТаблицы

Для НомерСтроки = 0 По НашаТаблица.Количество() - 1 Цикл // здесь перебираются строки СтрокаТаблицы = НашаТаблица[НомерСтроки].ФамилияКлиента; // получаем текущую строку таблицы значений по ее индексу (номеру) ТекущаяФамилия = СтрокаТаблицы.ФамилияКлиента; // "ФамилияКлиента" - это имя колонки, содержащее фамилию клиента Сообщить(ТекущаяФамилия); КонецЦикла;

Если внутри цикла мы напишем такой код: Сообщить(СтрокаТаблицы) - этот код НЕ выведет на экран данные из текущей строки таблицы значений (например фамилию клиента и прочее).

Все правильно, потому что переменная СтрокаТаблицы представляет собой объект и доступ к данным осуществляется через свойства и методы этого объекта - а если написать Сообщить(СтрокаТаблицы) , то на экран будет выведена информация о типе переменной СтрокаТаблицы : СтрокаТаблицыЗначений.

Например, код СтрокаТаблицы.ФамилияКлиента как раз означает доступ к данным, хранящимся в колонке "ФамилияКлиента" у текущей строки-объекта. Чем мы и воспользовались в примере, чтобы вывести фамилии всех клиентов, хранящиеся в таблице значений. Перебирая все строки и выводя на экран по очереди эти самые фамилии.

2. Перебор строк таблицы значений при помощи цикла перебора коллекции "Для Каждого..."

Для перебора строк таблицы значений 1С мы можем воспользоваться другим вариантом цикла. Это специальный цикл для перебора элементов объектов-коллекций. Таблица значений 1с представляет из себя так называемую коллекцию . В данном случае - коллекцию строк.

А любую коллекцию в 1С можно перебрать при помощи цикла:

Для Каждого Из Цикл....... действие внутри цикла КонецЦикла

Выведем все фамилии клиентов из всех строк таблицы, при помощи перебора коллекции строк таблицы значений:

Для Каждого СтрокаТаблицы Из НашаТаблица Цикл Сообщить(СтрокаТаблицы.ФамилияКлиента); КонецЦикла

При переборе коллекции нам не понадобился счетчик номеров строк (индексов). Специальная форма цикла помогла обойтись без счетчика. В произвольную переменную СтрокаТаблицы при каждом проходе цикла автоматически присваивается объект-строка таблицы значений.

Таким образом в СтрокаТаблицы по мере выполнения цикла, подряд попадают все строки нашей таблицы значений. А мы только и делаем, что у каждой переданной нам строки выводим на экран содержимое колонки "ФамилияКлиента" с помощью конструкции Сообщить(СтрокаТаблицы.ФамилияКлиента);

3.А сейчас: повторение материала.

Итак, таблица значений 1С является коллекцией строк . Кто-то коллекционировал строки, складывал их в кучу, и получилась целая такая коллекция строк - которую назвали - таблицей значений.

Только это коллекция не просто обычных текстовых строк. Это коллекция объектов типа СтрокаТаблицыЗначений . И этот отдельный объект-строка хранит в себе данные для каждой колонки в текущей строке. Он хранит фамилию клиента, рост клиента или что-то там еще, что было нужно.

Получить доступ к строке таблицы значений можно по ее индексу, который начинается с нуля. При помощи кода МояЧетвертаяСтрока = МояТаблица - мы получаем четвертую строку таблицы значений, так как нумерация строк начинается с нуля: 0, 1, 2, 3.

Число строк мы определяем методом МояТаблица.Количество() . Скобки в конце не забываем, так как мы вызываем метод без параметров.

Запомним, что перебрать все строки таблицы значений можно при помощи цикла, в котором мы перебираем индексы строк (от нуля до (Количества строк минус один)), а можно при помощи цикла перебора коллекций.

Последнее: При переборе коллекции, как получить номер строки таблицы значений?
Получить номер текущей строки можно вызовом метода Индекс() для таблицы значений, в который мы передаем объект-строку.

Пример ниже выведет на экран номера всех строк в таблице значений 1С:

Для Каждого СтрокаТаблицы Из НашаТаблица Цикл Сообщить(НашаТаблица.Индекс(СтрокаТаблицы)); КонецЦикла

Продолжение материалов будет в следующих статьях.....

Дегтярев Роман.

Как научиться программировать в 1С с нуля?

Как работать программистом 1С и получать до 150 000 рублей в месяц?

ЗАПИШИСЬ НА БЕСПЛАТНЫЙ

2-НЕДЕЛЬНЫЙ КУРС

"ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ"

Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.

Для участия нужен только компьютер и интернет

Бесплатный доступ на курс:

Sp-force-hide { display: none;}.sp-form { display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border-radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;}.sp-form input { display: inline-block; opacity: 1; visibility: visible;}.sp-form .sp-form-fields-wrapper { margin: 0 auto; width: 260px;}.sp-form .sp-form-control { background: #ffffff; border-color: #cccccc; border-style: solid; border-width: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; height: 35px; width: 100%;}.sp-form .sp-field label { color: #444444; font-size: 13px; font-style: normal; font-weight: bold;}.sp-form .sp-button { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; background-color: #f4394c; color: #ffffff; width: 100%; font-weight: 700; font-style: normal; font-family: Arial, "Helvetica Neue", sans-serif; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; background: linear-gradient(to top, #e30d22 , #f77380);}.sp-form .sp-button-container { text-align: center; width: auto;}



© 2024 yanaorgo.ru - Сайт о массаже. В здоровом теле, здоровый дух