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