Конвертация данных 2.1 Из регистра в справочник

В ЗУП в справочнике ФизЛиц нет поля даты регистрации по месту жительства. Это поле засунуто в регистр сведений ПаспортныеДанныеФизЛиц

Для того, чтобы вытащить сведения о дата регистрации нужно в ПКО ДатаРегистрации в обработчике "Перед выгрузкой" сделать запрос к регистру сведений ПаспортныеДанныеФизЛиц

Источник пустой, т.к. в ЗУП в справочнике нет такого поля. Нюанс в том, что
1. в запросе Источник- это элемент справочника ЗУП ФизЛица.
2. Данные в Дату Регистрации передаются через переменную Значение.

Теперь адреса в ЗУП они хранятся в регистре КонтактнаяИнформация, а в БП в табличной части элемента справочника.
Добавляем через синхронизацию свойств табличную часть КонтактнаяИнформация. Источник оставляем пустым. На папке КонтактнаяИнформация выставляем флажок Получить из входящих данных.

Переходим на вкладку "Правило выгрузки данных" , открываем правило ФизическиеЛица

В обработчике "Перед обработкой" способ выгрузки выбираем Произвольный запрос. И пишем запрос.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Объект КАК ФизическоеЛицо,
| КонтактнаяИнформация.Тип КАК Тип,
| КонтактнаяИнформация.Вид КАК Вид,
| КонтактнаяИнформация.Представление КАК Представление
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
| ПО КонтактнаяИнформация.Объект = ФизическиеЛица.Ссылка
|ГДЕ
| КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид В (&СписокВидов)";

СписокВидов = Новый СписокЗначений;
СписокВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресФизЛица);//проживание
СписокВидов.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресФизЛица);//прописка

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

ФизЛица = РезультатЗапроса.Скопировать();
ФизЛица.Свернуть("ФизическоеЛицо");
Для Каждого СтрФз Из ФизЛица Цикл

Отбор = Новый Структура;
Отбор.Вставить("ФизическоеЛицо",СтрФз.ФизическоеЛицо);

НайденныеСтроки= РезультатЗапроса.НайтиСтроки(Отбор);
Выборка=Новый ТаблицаЗначений;
Выборка.Колонки.Добавить("Тип");
Выборка.Колонки.Добавить("Вид");
Выборка.Колонки.Добавить("Представление");

Для Каждого СтрРез Из НайденныеСтроки Цикл

НоваяСтрока= Выборка.Добавить();
НоваяСтрока.Тип=СтрРез.Тип;
НоваяСтрока.Вид=СтрРез.Вид;
НоваяСтрока.Представление=СтрРез.Представление;

КонецЦикла;
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("КонтактнаяИнформация", Выборка);
ВыгрузитьПоПравилу(СтрФз.ФизическоеЛицо, , ИсходящиеДанные, , "ФизическиеЛица");

КонецЦикла;

Заполняем структуру ИсходящиеДанные, где "КонтактнаяИнформация" это название табличной части приемника, т.е. справочника физлица в БП
И выгружаем по правилу.

В обработчике "Перед выгрузкой" пишем, что к группам наша выгрузка не относится.

Еще в ПКО ФизическиеЛица напишем, что уволенных и удаленных выгружать не будем.

Ну и в правиле справочника ВидыКонтактнойИнформации нужно синхронизировать пару свойств.

ПУТЕВОЙ ЛИСТ. ПОДГОТОВКА

ПУТЕВОЙ ЛИСТ. ПОДГОТОВКА
Приступим к созданию основного документа нашей конфигурации – путевому листу.
Прежде создадим еще один справочник. Он будет называться КарточкиЗаправки.
Чтобы держать хоть под каким-то контролем качество топлива мы принудим водителей заправляться только на
брендовых заправках одного крупного производителя. Один из путей решения – выдать карточки заправки, по
которым можно заправляться только на определенных заправках. Номера этих карт мы и будем хранить в справочнике КарточкиЗаправки.
Итак, создаем простой справочник. Заносить номера карт поручим бухгалтерии,
т.е. этот справочник включим в подсистему бухгалтерия (pic 9.1)

8gl7g9001
Перейдем в 1С и заполним это справочник. (pic 9.2)

8gl7g9002
Создадим еще один объект конфигурации Перечисление Продолжительность смены.
У нас водители будут работать фиксированное время 4, 8 или 12 часов, в зависимости от загруженности маршрута. (pic 9.3)

8gl7g9003
Все. Теперь создаем документ Путевой лист.
В дереве конфигурации находим ветвь документы, через контекстное меню нажимаем добавить.
В поле имя пишем ПутевойЛист, в поле представление списка пишем Путевые листы, на вкладке
Подсистемы включаем документ в подсистему Диспетчерская .
И сразу изменим командный интерфейс. Для этого раскрываем ветку общие, на ветке
Подсистемы через контекстное меню выбираем Все подсистемы, щелкаем на диспетчерская и ставим флажок напротив
Путевые листы и Путевой лист: создать. (pic 9.4)

8gl7g9004
Возвращаемся в документ и добавляем реквизиты

        

  • Автомобиль – тип СправочникСсылка.Автомобили, проверка заполнения- выдавать ошибку
  •     

  • ДеньНочь – тип булево, синоним Смена. Этот реквизит понадобиться в дальнейшем, когда
    нужно будет рассчитать зарплату, т.к. за ночные рейсы оплата выше, чем за дневные. Значение заполнения Ложь,
    т.е. по умолчанию смену будем считать ночной.
  •    

  • Водитель – тип СправочникСсылка.Сотрудники проверка заполнения- выдавать ошибку
  •     

  • Топливо –тип ПеречислениеСсылка.Топливо проверка заполнения- выдавать ошибку 
  •   

  •  КонечныйОдометр – тип Число 10.0  
  •     

  • РасходТоплива – тип Число 10.2 
  •     

  • ПродолжительностьСмены - ПеречислениеСсылка.ПродолжительностьСмены

Перейдем на закладку Формы и создадим форму документа.
Зайдем в конструктор форм и добавим два реквизита формы тип Число 10.0 – НачальныйОдометр и Пробег. (pic 9.5)

8gl7g9005
Перенесем эти реквизиты формы влево в элементы форм  и снимем флажок доступность у обоих.
Теперь наведем небольшой дизайн на форму. Создадим 3 обычных группы с группировкой горизонтальная.
Первую группу назовем ДатаНомер и перенесем в нее элементы формы Номер и Дата, расположим эту группу в самом верху.
Под ней расположим элементы Автомобиль и Водитель, не будем их включать ни в какие группы
Вторую группу назовем Смены, включим в нее элементы ДеньНочь – и заодно напишем синоним этого реквизита Дневная смена,
ПродолжительностьСмены, Топливо
Третья группа будет называться Километраж и в нее войдут: НачальныйОдометр, Пробег,
КонечныйОдометр и РасходТоплива.
Этой группе укажем заголовок Километраж и отображение Рамка группы, и первых двух групп отображение установим в нет.(pic 9.6)

8gl7g9006
Если все сделаете правильно, то должно получиться похожее на это pic 9.7

8gl7g9007
Теперь, когда мы разобрались с шапкой, введем табличную форму Стажеры.
Табличной частью мы будем пользоваться в виду того, что стажеров в принципе может быть одновременно несколько,
заранее никогда нельзя угадать сколько именно.
На закладке данные внизу через контекстное меню добавляем табличную форму Стажеры и в неё реквизит Стажер
тип СправочникСсылка.Сотрудники.
Еще нам понадобится табличная часть где будет фиксироваться все заправки, сделанные в течении рейса.
Добавляем табличную часть ЗаправкаТоплива и в неё реквизиты

  • КарточкаЗаправки тип СправочникСсылка.КарточкиЗаправки
  • Заправка тип Число 10.3
  • ЦенаЗаправки тип Число 10.2
  • СтоимостьЗаправки тип Число 10.2

(pic 9.8)

8gl7g9008
И последнее, для отображения наших табличных частей сделаем на форме закладки.
Для этого в конструкторе формы добавляем группу Страницы, в нее группу Страница ,
назовем ее Заправка и перенесем в нее табличную часть ЗаправкаТоплива.
Добавим в группу Страницы еще одну группу Страница, назавем её ИнформацияОСтажерах и добавим в неё табличную часть Стажеры.(pic 9.9)

8gl7g9009
Перейдем в 1С. В подсистеме Диспетчерская нажмем создать Путевой лист.
У вас должно получиться приблизительно как на (pic 9.10)

8gl7g9010
В следующем уроке будем наполнять документ смыслом.

ПОНЯТИЕ О ЗАПРОСЕ

ПОНЯТИЕ О ЗАПРОСЕ - 1c-esse

Каждый автомобиль однозначно идентифицируется VIN кодом, используем это для того,
чтобы случайно не завести один и тот же автомобиль дважды.
Добавим в справочник Автомобили новый реквизит VIN тип Строка 20 (pic 8.1)

8gl7g8001
Создадим форму элемента и форму списка. (если вы не знаете как это сделать смотрите предыдущие главы)
Установим свойство Проверка заполнения в Выдавать ошибку(pic 8.2)

8gl7g8002
Зайдем в окно редактирование формы элемента, вызовем свойство формы и сформируем заготовку процедуры ПередЗаписьюНаСервере (pic 8.3)

8gl7g8003
В этой процедуре мы будем проверять VIN на уникальность.
Внутри заготовки процедуры нажимаем правую кнопку мыши, выбираем пункт Конструктор запроса с обработкой результата (pic 8.4)

8gl7g8004
Соглашаемся с предложением системы (pic 8.5)

8gl7g8005
В открывшемся конструкторе запроса выбираем Обход результата. (pic 8.6)

8gl7g8006
Заходим на вкладку Таблицы и поля и там выбираем таблицу Автомобили (pic 8.7)

8gl7g8007
Из таблицы Автомобили выбираем поле VIN (pic 8.8)

8gl7g8008
Переходим на вкладку Условия, перетаскиваем мышкой вправо поля Ссылка, затем VIN, в выражении Автомобили.Ссылка =Ссылка, выбираем <> (pic 8.9)

8gl7g8009
Конструктор сформировал нам запрос с обходом результатов. (pic 8.10)

8gl7g8010
Сам запрос довольно простой.
Мы выбираем все VIN коды, которые равны некому введенному VIN коду в текущем элементе справочника.
Чтобы запрос не затрагивал текущий элемент справочника мы поставили условие Автомобили.Ссылка <>&Ссылка.
Такой значок в запросе & означает, что в момент выполнения в запрос будут подставлены внешние данные,
которые мы передадим через конструкцию Запрос.УстановитьПараметр.
Поправим слегка текст запроса. Во-первых, доступ к реквизитам формы элемента возможен только через элемент Объект,
поэтому вместо VIN напишем Объект.VIN, вместо Ссылка – Объект.Ссылка.
Во-вторых, нам нет нужды обходить результаты запроса.
Если в запросе будет хотя бы одно значение – это ошибка, VIN существует и записать автомобиль с таким VIN нельзя.
Что бы проверить есть ли в запросе результаты мы используем метод Пустой()
В результате наш запрос будет выглядеть так: (pic 8.11)

8gl7g8011
Если VIN существует, мы сообщим об этом пользователю и не станем записывать элемент.
Кроме VIN неплохо бы еще знать государственный регистрационный номер автомобиля.
С учетом того, что рег. Номер может меняться за время эксплуатации автомобиля, поэтому определим его  переодическим.
Перодические значения мы храним в переодическом регистре сведений.
Создадим новый регистр сведений с именем РегистрационныйНомер, перодический в пределах дня.(pic 8.12)

8gl7g8012
Добавим измерение Автомобиль тип СправочникСсылка.Автомобили и ресурс ГосНомер с типом строка длиной 10 символов. (pic 8.13)

8gl7g8013
Вернемся в окно редактирования формы элемента и добавим два реквизита ГосНомер тип строка длиной 10 символов и ДатаГосномера тип Дата (pic 8.14)

8gl7g8014
В левом окне добавим группу- Страницы, группу -Страница, группу –Обычная группа со свойством выравнивание по горизонтали (pic 8.15)

8gl7g8015
Перетащим мышкой влево в группу 3 реквизиты ГосНомер и ДатаГосНомера (pic 8.16)

8gl7g8016
Теперь нам нужно создать механизм чтения и записи регистра сведений РегистрационныйНомер.
В самом начале мы создали общий модуль под названием ЧтениеРегистраСведений.
Напишем в нем процедуру и функцию для работы с регистром сведений РегистрационныйНомер.
Процедура записи в регистр сведений РегистрационныйНомер будет аналогична процедуре ЗаписатьЗначениеДолжности (pic 8.17)

8gl7g8017
А вот функцию чтения из регистра сведений РегистрационныйНомер  мы напишем с использованием запроса.
Создадим пустую функцию
<strong> Функция ПрочитатьЗначениеГосНомера(Авто,Дт)    Экспорт   </strong>
<strong> КонецФункции </strong>
Установим курсор внутри функции и через контекстное меню вызовем Конструктор запроса с обработкой результата.
На вкладке Таблицы и поля выберем таблицу РегистрационныйНомер и из нее поле ГосНомер (pic 8.18 )

8gl7g8018
На вкладке Условия выберем РегистрационныйНомер.Период<=период и РегистрационныйНомер.Автомобиль.Ссылка=Ссылка (pic 8.19)

8gl7g8019
Нажмите ОК.  После
<strong>Пока ВыборкаДетальныеЗаписи.Следующий() Цикл</strong>
Добавте
<strong>Возврат ВыборкаДетальныеЗаписи.ГосНомер;</strong>
У вас должно получиться так: (pic 8.20)

8gl7g8020
В этом запросе мы выбираем из регистра сведений РегистрационныйНомер государственный номер автомобиля на определенную дату.
Кстати, если бы нам понадобилось выбрать номер на текущую дату можно было использовать таблицу РегистрационныйНомер.СрезПоследних и не морочиться с датой. (pic 8.21)

8gl7g8021
Заходим в конструктор формы элемента, в контекстном меню выбираем свойство формы и в
создаем заготовки для событий <strong>ПриОткрытии</strong> и <strong>ПриЗаписиНаСервере<strong/>.
Заполняем эти процедуры по аналогии со справочником Сотрудники (pic 8.22)

8gl7g8022
Еще одну процедуру нам нужно сделать при изменении актуальной даты.
В реквизите формы ДатаГосНомера заходим в контекстное меню и создаем заготовку события ОбработкаВыбора (pic 8.23)

8gl7g8023
В модуле заполняем процедуру ДатаГосНомераОбработкаВыбора по аналогии со справочником Сотрудники. (pic 8.24)

8gl7g8024
Заходим в 1С (F5).
Зайдем в подсистему Механик, откроем справочник Автомобили и в нем CITROEN JUMPER, попробуем записать этот элемент.
Система должна выдать ошибку о пустом VIN, если конечно, вы установили свойство в конфигураторе для реквизита VIN-выдавать ошибку. (pic 8.25)

8gl7g8025
Введем VIN 1234567890 (pic 8.26)

8gl7g8026
Откроем второй элемент справочника CITROEN C4 и введем тот же VIN 1234567890, будет выдано сообщение, что такой VIN уже зарегистрирован. (pic 8.27)

8gl7g8027
Введем другой VIN   и гос номер.(pic 8.28)
8gl7g8028 Откроем список справочника автомобили (pic 8.29)

8gl7g8029
Для удобства выбора здесь явно не хватает гос. Номера.
Попробуем добавить его.
Заходим в конфигуратор, в окно редактирования формы списка.
Мы видим, что данные для отображения в форме берутся из  динамического списка (pic 8.30)

8gl7g8030
Раскроем этот список и обнаружим, что никакого реквизита типа гос номера в нем нет. (pic 8.31)

8gl7g8031
Добавим поле РегистрационныйНомер.
Для этого через контекстное меню зайдем в свойства динамического списка и поставим галочку напротив пункта Произвольный запрос  (pic 8.32)

8gl7g8032
Нажмем Настройка списка Открыть. Перед нами откроется текст запроса. (pic 8.33)

8gl7g8033
Изменим этот запрос так, чтобы в него включался реквизит рег.номер.
Нажмем Конструктор запроса.
Как может быть вы помните регистрационный номер у нас храниться в переодическом регистре сведений РегистрационныйНомер.
Текущее значение номера храниться в виртуальной таблице РегистрационныйНомерСрезПоследних, добавим ее в Таблицы и выберем из нее поле ГосНомер. (pic 8.34)

8gl7g8034
Зайдем на закладку Объединения/Псевдонимы и переименуем ГосНомер в Государственный Номер (pic 8.35)

8gl7g8035
Зайдем на закладку Связи и установим флажок Все напротив поля СправочникАвтомобили,
тем самым установив ЛЕВОЕ СОЕДИНЕНИЕ,  это означает, что в запрос войдут все записи таблицы
СправочникАвтомобили и выбранные записи по условию из таблицы РегистрационныйНомерСрезПоследних  (pic 8.36)

8gl7g8036
Нажимаем ОК.
У нас должен получиться следующий запрос (pic 8.37)

8gl7g8037
В окне конструктора формы раскрываем правый список, находим там поле ГосударственныйНомер и перетаскиваем его влево. (pic 8.38)

8gl7g8038
Открываем 1С, и смотрим как выглядит наш список. (pic 8.39)

8gl7g8039

ПЛАН ВИДОВ ХАРАКТЕРИСТИК

ПЛАН ВИДОВ ХАРАКТЕРИСТИК

Оставим пока в покое справочник сотрудники и создадим новый справочник Автомобили.
Допустим, мы хотим знать какое дополнительное оборудование имеется на наших машинах.
Т.к. видов всяческого доп.оборудования тьма-тьмущая, заранее мы не можем определить что именно нам нужно,
а тем более что нужно пользователю. В этом случае самым правильным будет дать возможность пользователю самому
определять какие виды доп.оборудования он будет хранить.  Для того, чтобы описать структуру хранения подобной информации
в 1с имеется объект План видов характеристик (ПВХ).
Создадим такой план. Назовем его  ПрочиеСвойства Авто.
Ищем в дереве Планы видов характеристик и через контекстное меню добавляем новую. (pic 7.1)

8gl7g7001

Для того, чтобы мы могли хранить всякую чепуху об конкретных значениях доп.оборудовании автомобиля
(например для вида  доп.оборудования Навигатор в справочник мы можем добавлять конкретную марку этого навигатора),
создадим новый справочник ПрочиеСвойства и в качестве владельца этого справочника укажем ПВХ ПрочиеСвойстваАвто. (pic 7.2)

8gl7g7002
Вернемся в ПВХ ПрочиеСвойстваАвто в типе значения характеристик установим составной тип (Pic 7.3)

8gl7g7003
В дополнительном значении характеристик укажем справочник ПрочиеСвойства. (Pic 7.4)

8gl7g7004

Нам осталось создать хранилище для нашего доп.оборудования, где мы могли бы хранить ссылку на объект нашего авто
его доп.оборудование и конкретные марки этого оборудования.
Для этих целей подходит Регистр сведений. Создадим его.
Назовем ЗначенияПрочихСвойств . В представлении списка напишем Опции, в расширенном представлении списка: Список опций. (pic 7.5)

8gl7g7005
Зайдем на вкладку данные и добавим измерения
ОбъектСвойств тип СправочникСсылка.Автомобили и
АвтоСвойства тип ПланВидовХарактеристик.ПрочиеСвойстваАвто, синоним зададим Опция (pic 7.6)

8gl7g7006
Добавим ресурс Значение тип Характеристика.ПрочиеСвойстваАвто
Свойство Связи параметров выбора установим в Отбор.Владелец(АвтоСвойства) – это нужно для отбора только тех значений,
которые подчинены выбранной опции. Например если вы выбираете Магнитола,
то в качестве значений будут открываться только марки магнитол,  а виды цветов кузова будут  не видны.
Свойства связать по типу установим в АвтоСвойства. (Pic 7.7)

8gl7g7007
Откроем Справочник Автомобили на закладке Подсистемы установим видимость для подсистем Диспетчерская и Механик (pic 7.8)

8gl7g7008
Зайдем в 1С (F5), не обращая внимания на ругательства системы о невключении объектов в подсистемы.
Щелкнем по вкладке подсистемы Механик, войдём в справочник Автомобили и добавим две машины.(pic 7.9)

8gl7g7009
Откроем элемент справочника CITROEN C4. Слева, в панели навигации вы должны увидеть Опции,(pic 7.10)

8gl7g7010
нажмем на них, пока список опций пуст. Добавим пару опций. (pic 7.11)

8gl7g7011
В доп.оборудование Магнитола, добавим пару моделей магнитол.(pic 7.12)

8gl7g7012
В доп.оборудование цвет добавим белый и красный (pic 7.13)

8gl7g7013
Теперь можно выбрать опции для каждого автомобиля.(pic 7.14)

8gl7g7014
Можно немного улучшить интерфейс программы. Как видно из (pic 7.14)
отбор установлен по автомобилю CITROEN C4 и поле Объект свойств, в принципе,  лишнее.
Так же при добавлении и просмотре свойств Объект свойств можно не показывать. (pic 7.15)

8gl7g7015
Давайте уберем их. В конфигураторе выберем регистр сведений ЗначениеПрочихСвойств.
Зайдем на вкладку Формы и создадим две формы ФормаСписка и ФормаЗаписи.
Откроем ФормуСписка (pic 7.16)

8gl7g7016
Через контекстное меню зайдем в свойства формы.
Напротив события ПриСозданииНаСервере щелкнем на значок лупы. (pic 7.17)

8gl7g7017
В заготовке процедуры напишем (pic 7.18)

8gl7g7018
Код означает, что если установлен отбор по ОбъектСвойств, отображать этот объект не нужно.
Откроем ФормуЗаписи , повторим все действия и в Процедуру ПриСозданииНаСервере напишем (pic 7.19)

8gl7g7019
Нажмем F5.  Теперь поле ОбъектСвойств не видно, стало более читабельно.(pic 7.20)

8gl7g7020
Не забудьте установить флажок Ведущее у свойства измерения ОбъектСвойств.
Это позволит в том числе создать автоматически глобальную параметризированную команду.
Что в свою очередь позволит увидеть в элементе справочника ссылку на опции.
(pic 7.21)

8gl7g7021

ПЕРЕЧИСЛЕНИЯ

Учебник 1С ПЕРЕЧИСЛЕНИЯ

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

Из названия ясно, что перечисление это некий конечный список значений.
Найдем в дереве ветвь Перечисления, через контекстное меню добавим новое, назовем его Пол.(pic 6.1)

8gl7g6001
В свойствах на закладке данные добавим два значения Мужской , синоним Муж. и Женский, синоним  Жен (pic 6.2)

8gl7g6002
Зайдем в справочник сотрудники и на закладке данные добавим реквизит Пол тип ПеречислениСсылка.
Пол и в табличную часть дети реквизит ПолРебенка, тип тот же.(pic 6.3)

8gl7g6003
У обоих реквизитов поставим свойство проверки заполнения – выдавать ошибку.(pic 6.4)

8gl7g6004
Зайдем в окно редактирования формы элемента, добавим еще одну группу с выравниванием горизонтальная.
Мы уже делали в 5 главе. (pic 6.5)

8gl7g6005
У нас нарисовалась папка Группа2, перетащим в нее реквизит наименование.
Раскроем справа ветвь Объект, найдем реквизит Пол и перетащим его мышкой в папку Группа2 (pic 6.6)

8gl7g6006
Справа раскроем ветку Дети и перетащим реквизит ПолРебенка влево в ветку с тем же названием Дети. (Pic 6.7)

8gl7g6007
В результате форма должна принять вид как на (pic 6.8)

8gl7g6008
Зайдем в 1С (F5)
В справочнике сотрудники установим значение пола сотрудника и его детей (pic 6.9)

8gl7g6009

РЕГИСТРЫ СВЕДЕНИЙ

Учебник 1С РЕГИСТРЫ СВЕДЕНИЙ

Кроме фамилии имени и отчества нам желательно знать еще некоторые сведения о сотруднике, например, его должность.
Штатное расписание компании мы будем хранить в отдельном справочнике, назовем его Должности. Заведем его.
Процедура добавления должна быть вам знакома из прошлой главы , повторятся не буду. (pic 5.1)

8gl7g5001
Для подсистемы Бухгалтерия включим видимость команды Должности:создать (pic 5.2)

8gl7g5002
Каждому сотруднику теперь нужно назначить должность.
Можно создать отдельный реквизит в справочнике сотрудники с типом ссылки на справочник Должности.
Но не исключено, что кто-то из сотрудников окажется карьеристом и будет расти по карьерной лестнице.
Или водитель вначале будет стажером, потом перейдет в статус водителя-экспедитора.
При расчете зарплаты это обстоятельство нужно учитывать.
Так или иначе нам необходимо где-то хранить изменения в статусе сотрудника.
Для этой цели идеально подходит такой объект 1С, который называется периодическим регистром сведений.   Создадим его.
Находим в дереве ветвь Регистры сведений. Через контекстное меню добавляем новый регистр, называем его Должности,  периодичность – в пределах дня, режим записи – независимый.
Независимый означает, что мы его можем редактировать вручную.(pic 5.3)

8gl7g5003
Заходим на вкладку Подсистемы, устанавливаем видимость для подсистемы Бухгалтерия.
Заходим на вкладку Данные и добавляем измерение Сотрудники тип СправочникСотрудники.
Ссылка (pic 5.4) Именно по этому измерению система будет определять какому сотруднику какая должность соответствует.

8gl7g5004
Добавляем ресурс должность, в нем будем хранить должность сотрудника на определенную дату.(pic 5.4a)

8gl7g5004a
Должно получиться так (pic 5.5)
Отредактируем справочник сотрудники.
Зайдем в свойства справочника на вкладку формы.
Вызовем конструктор формы элемента, щелкнув напротив соответствующей записи на значок лупы.
Появится конструктор формы, нажмем готово. (pic 5.7)

8gl7g5006
Появится окно разделенное на три части.
В правом верхнем окне добавим два реквизита ДатаДолжности (pic 5.8а) с заголовком Актуальная дата
Обратите внимание, что Тип должен быть "Дата" и состав даты "Дата"

8gl7g5007
И ДолжностьСотрудника (pic 5.8)

8gl7g5008
Захватим мышкой и последовательно перетащим влево.
Внизу можно видеть, что добавленные реквизиты появились в форме элемента.
Давайте немного поправим размещение. Сейчас у нас наши реквизиты размещены друг под другом.
Лучше разместить их в одну линию.
Для этого нажмем на кнопку добавить (зеленый кружок с плюсом) и выберем Группа-обычная группа (pic 5.9)

8gl7g5009
В свойствах группы укажем группировка Горизонтальная (pic 5.10)

8gl7g5010
И мышкой перетащим наши вновь созданные реквизиты в новую группу (pic 5.11)

8gl7g5011
Теперь наши реквизиты выстроились в линию (pic 5.12)

8gl7g5012
Т.к. должность сотрудника храниться в регистре сведений, нам необходимо ее оттуда извлечь.
Регистр сведений Должности периодический, т.е. значение его зависит от даты на которую мы хотим его прочитать.
Дату мы будем брать из реквизита ДатаДолжности, которая при открытии справочника будет устанавливаться в текущую дату.
Внизу редактирования формы есть закладка, которая называется Модуль. (pic 5.13)

8gl7g5013
Перейдем на нее. Пока здесь нет ничего. Вернемся на вкладку Форма.
В верхнем окне станем на Форма и вызовем через контекстное меню палитру свойств. (pic 5.14)

8gl7g5014
Внизу в группе События напротив события ПриОткрытии щелкнув на значок лупы, мы окажемся в модуле формы и там будет сформирована заготовка процедуры ПриОткрытии.
Все, что мы напишем в этой процедуре будет выполнено при открытии формы. (pic 5.15)

8gl7g5015
Т.е мы написали, что при открытии формы ДатаДолжности при открытии формы устанавливается в текущую дату.
Если вы помните, ранее мы создали периодический регистр сведений, где договорились хранить должности сотрудника.
Чтобы выковырять из регистра сведений необходимую должность нужно знать первое, чью должность мы хотим получить и второе, на какую дату мы хотим увидеть её.
Для этого мы используем метод  регистра сведений ПолучитьПоследнее(КонецПериода, Отбор), где КонецПериода
Определяет момент времени, по который необходимо получить значения ресурсов.
Может задаваться значениями типа Дата, МоментВремени или Граница.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
Отбор
Тип: Структура. Структура, содержащая отбор по измерениям регистра.
Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: Структура. Возвращает структуру, содержащую значения ресурсов.
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.
Итак, чтобы сделать отбор нам необходимо создать структуру с ключем «Сотрудник» и значением: справочник.Сотрудники (строго говоря ссылки на элемент справочника сотрудники)
Т.к. читать из регистра сведений нам придется часто, разумнее поместить процедуру чтения в общий модуль из которого наша процедура будет видна для всех.
Назовем этот общий модуль ЧтениеРегистраСведений.
Для этого в контекстном меню на ветке общие модули нажимаем добавить и вводим в палитре свойств его название. (pic 5.16)

8gl7g5016
Обратите внимание, галочка в свойстве Глобальный должна быть снята, а в свойствах Сервер и Вызов сервера – установлена. (pic 5.17)

8gl7g5017
Пишем функцию чтения должности из регистра сведений и указываем, что она должна выполняться на сервере.(pic 5.18)

8gl7g5018
Теперь вернемся в модуль формы элемента справочника сотрудники и допишем процедуру ПриОткрытии (pic 5.19)

8gl7g5019
Здесь, чтобы присвоить реквизиту ДолжностьСотрудника значение должности мы обращаемся по имени к общему модулю ЧтениеРегистраСведений и через точку к функции этого модуля ПрочитатьЗначениеДолжности.
В качестве ссылки на элемент справочника  сотрудники передаем Объект.Ссылка, а в качестве даты текущую дату.
ОК. Прочитать должность мы теперь можем, но только на текущую дату. Но, что, если мы захотим узнать, а какая должность у сотрудника была вчера?
Для этого вызываем свойства реквизита ДатаДолжности (pic 5.20)

8gl7g5020
В палитре свойств в События нажимаем на значок лупы напротив события ОбработкаВыбора (pic 5.21)

8gl7g5021
В открывшейся заготовке процедуры ДатаДолжностиОбработкаВыбора пишем (pic 5.22)

8gl7g5022
Т.е. практически тоже самое, что и в процедуре при открытии формы, только в качестве даты передаем ВыбранноеЗначение.
Теперь почти готово, осталось только создать механизм записи в регистр сведений, а то читать будет нечего.
Запись в регистр сведений сделаем с помощью менеджера записи регистра сведений.
У нас уже имеется общий модуль для работы с регистром сведений, там и будем продолжать. (pic 5.23)

8gl7g5023
Здесь должно быть все понятно.
Не забудьте в процедуре поставить ключевое слово Экспорт, иначе она будет не видна вне общего модуля.
В модуле формы становимся на Форма, вызываем свойства находим событие ПриЗаписиНаСервере, нажимаем на значок лупы.(pic 5.24)

8gl7g5024
В сформированной заготовке пишем (pic 5.25)

8gl7g5025
Перед записью проверяем изменилась ли значение должности и, если изменилось записываем новое значение в регистр сведений.
Осталось только проверить как это все работает. Жмем F5.
Заходим в подсистему Бухгалтерия и добавляем несколько должностей (pic 5.26)

8gl7g5026
Заходим в справочник сотрудников и выбираем сотрудника Рожков, выставим дату 10.03.2011, выберем должность стажер, запишем.
Выберем дату 14.03.2011 и установим должность водитель-экспедитор, запишем.
Закроем и снова откроем элемент справочника сотрудники Рожков, посмотрим на его должность (pic 5.27)

8gl7g5027
Попробуйте изменить дату на 10.03.2011 (pic 5.28)

8gl7g5028
Замечание: чтобы должности выбирались вот таким компактным списком (pic 5.29)

8gl7g5029
Нужно в свойствах справочник должности за закладке Формы установить галочку Быстрый выбор (pic 5.30)

8gl7g5030
Если присмотреться, то панели навигации, эта та которая в 1С у нас слева, видны два одинаковых пункта Должности, если нажать первый, то мы перейдем к списку справочника должности, второй выведет нас к записям регистра сведений должности (pic 5.31)

8gl7g5031
Что бы не было путаницы в конфигураторе зайдем в свойства регистра сведений Должности и в поле Представление списка запишем Записи должностей.(pic 5.32)

8gl7g5032
Перейдем в 1С, панель навигации у нас изменилась.(pic 5.33)

8gl7g5033
Творение наше работает.
Конечно, по уму перемещение на должность лучше делать приказами, возможно позже мы так и сделаем, а пока и так неплохо.

СОЗДАНИЕ СПРАВОЧНИКА

Учебник 1С СОЗДАНИЕ СПРАВОЧНИКА

Нам нужно создать несколько объектов для хранения списков сотрудников, складов, запчастей и.т.д. – такие объекты называются справочниками
Для начала создадим справочник, где будем хранить данные о сотрудниках.
В контекстном меню элемента дерева Справочники жмем добавить (pic 4.1)

8gl7g4001

В свойствах справочника на закладке основные пишем Сотрудники (pic 4.2)

8gl7g4002

На закладке Подсистемы, выбираем видимость нашего справочника во всех подсистемах (pic 4.3)

8gl7g4003

На вкладке Иерархия, указываем, что элементы справочник иерархический – это означает, что мы можем группировать элементы справочника в логические группы, например, работающие и уволенные. (pic 4.4)

8gl7g4004

На закладке Данные увеличим длину наименования до 55 символов (pic 4.5)

8gl7g4005

Бухгалтера очень любят создавать пустые элементы без названия, в 8.2
с этим покончено по умолчанию – система сама проверит заполнен элемент или нет.
Настраивается это так:
Щелкните на закладке Данные кнопку Стандартные реквизиты (pic 4.6)

8gl7g4006

Появиться окно с реквизитами, которые система сформировала сама. (pic 4.7)

8gl7g4007

Станем на реквизит Наименование и вызовем контекстное меню. В свойствах этого реквизита есть пункт Проверка заполнения, сейчас там выбрано Выдавать ошибку, т.е. если вы не заполните значение вас предупредят по хорошему, что заполнять значение таки надо. Если вы не хотите, чтобы вас предупреждали можете выбрать Не проверять, но я вам не советую (pic 4.8)

8gl7g4008

Теперь , в дереве на ветке подсистемы зайдем в контекстное меню и выберем Все подсистемы. Самое правое окно называется командный интерфейс. Если пощелкать по подсистемам, то можно увидеть, что напротив Сотрудники везде стоит галочка – это означает, что справочник сотрудники можно будет открыть из любой подсистемы, а вот команды создания группы и элемента будет не видно. (pic 4.9)

8gl7g4009

Давайте договоримся, что вводить новых сотрудников будет только бухгалтерия, поэтому, в командном интерфейсе подсистемы Бухгалтерия установим галочки напротив Сотрудники: создать. (pic 4.10)

8gl7g4010

Создадим 2 обязательные группы, которые по умолчанию должны присутствовать у нас в справочнике – это группа Работающие и группа Уволенные. Такие группы называются предопределенные и максимум, что пользователь может над ними сотворить это изменить их название, но это не страшно, т.к. из встроенного языка мы все-равео можем к ним обратиться по тому имени, которое сами задали. Зато пользователь не сможет даже случайно удалить эти группы. Итак, заходим в справочнике Сотрудники на закладку прочие и жмем кнопку предопределенные (pic 4.11)

8gl7g4011

Появляется окно с предопределенными элементами справочника (pic 4.12)

8gl7g4012

Нажимаем на значек желтой папки с зеленым плюсом и добавляем группу работающие, а затем уволенные (pic 4.13)

8gl7g4013

Теперь окно предопределенных  элементов должно выглядеть так: (pic 4.14)

8gl7g4014

Пришла пора посмотреть что мы наделали. Жмем F5.
Переходим на вкладку бухгалтерия слева жмем на Сотрудники и справа внизу открывается справочник сотрудники с 2 готовыми папками. Обратите внимание, значок папки с точкой означает, что элемент предопределенный (pic 4.15)

8gl7g4015

Давайте создадим нового сотрудника. Жмем на плюсик напротив Работающие, далее жмем создать, откроется окно создание элемента справочника, внесем туда фамилию сотрудника и нажмем Записать и закрыть (pic 4.16)

8gl7g4016

Обратите внимание, что код присвоился элементу автоматически.(pic 4.17)

8gl7g4017

Займемся небольшим украшательством. В конфигураторе откроем справочник сотрудники.
И введем следующие данные:
Представление объекта:  Сотрудник
Расширенное представление объекта: Колегга
Представление списка: Список сотрудников
Расширенное представление списка: Список коллег

Жмем F5.  Эффект от произведенных изменений виден на (pic 4.19)

8gl7g4019

Есть идея к новогодним праздникам дарить подарки малолетним детям сотрудников. Для осуществления этой благой идеи нам необходимо знать сколько и каких детей нарожали коллеги. Проблема в том, что детей может быть от 0 до бесконечности и все разного возраста. Вопрос в какое место справочника их запихнуть? Ответ прост – в табличную часть справочника.
Открываем конфигуратор. Находим в дереве справочник сотрудники, Встаем на табличную часть, в контекстном меню  жмем добавить. (pic 4.20)

8gl7g4020

Вводим имя табличной части Дети (pic 4.21)

8gl7g4021

Открываем свойства справочника сотрудники на закладке Данные, внизу видна созданная табличная часть Дети. (pic 4.22)

8gl7g4022

Добавим два реквизита (вторая пиктограмма)
Имя тип Строка длина 30
ДатаРождения тип дата (без времени см. Состав даты) (pic 4.23)

8gl7g4023

Должно получиться как на (pic 4.24)

8gl7g4024
Жмем F5 и добавляем сотруднику двух детей.(pic 4.25)

8gl7g4025

ПОДСИСТЕМЫ

Учебник 1С ПОДСИСТЕМЫ

Итак, нам необходимо создать конфигурацию для автопарка предприятия.
Давайте подумаем, что может понадобиться небольшому предприятию для учета своего автотранспорта.

Первое, что приходит в голову это учет работы водителей  и автомобилей– т.е. путевые листы, учет топлива, учет пробега.
Неплохо бы знать, когда необходимо пройти ТО, получить талон ГТО.
Далее водители склонны получать за свою работу зарплату – следовательно, необходимы некоторые данные для ее начисления.
Автомобили нуждаются в обслуживании и ремонте – поэтому неплохо бы учитывать материальные расходы на ремонт и обслуживание.
Ну для первой прикидки достаточно.
Совершенно очевидно, что у нас уже наметились три функционально разные виды деятельности:

Функции  диспетчера (учет работы водителя, транспорта)
Функции механика (ремонт, движение запчастей,прохождение ТО, контактирование  с дорожной полицией)
Функции бухгалтера (начисление зарплаты, оплата запчастей и услуг)

По этому принципу разобьем нашу конфигурацию на три логические части (подсистемы):

Подсистема  Диспетчерская
Подсистема Механик
Подсистема Бухгалтерия

Для этого в конфигураторе развернем ветку Общие.

Чтобы не повторяться на протяжении всего примера поясняю один раз: разворачивание ветки означает, что вам нужно нажать слева от группы объектов на + (pic 3.1)

8gl7g3001

Найдем в ветке название  «Подсистемы» (pic 3.2)

8gl7g3002

Через контекстное меню жмем на  «Добавить» (pic 3.3)

8gl7g3003

Откроется окно свойств подсистемы (pic 3.4)
8gl7g3004

Заменим имя на  Диспетчерская (pic 3.5)

8gl7g3005

И вставим картинку (pic 3.6 – 3.8), последовательно нажав: Картинка … - Добавить – Выбрать из файла – закрыть.

8gl7g3006 8gl7g3008 8gl7g3007

Добавим еще две подсистемы «Механик» и «Бухгалтерия».
В результате в ветке подсистемы у вас должно получится тоже, что и у меня. (pic 3.9)

8gl7g3009

Жмем F5, «Да» и удивляемся на дело рук своих шаловливых.(pic 3.10)

8gl7g3010

Наши подсистемы расположены по алфавиту, что логически неправильно.
По уму надо бы расположить так диспетчерская – механик-бухгалтерия.
Кстати это сделать можно.
Закрываем  1С,   в конфигураторе заходим в контекстное меню АвтоБаза, выбираем «Открыть командный интерфейс конфигурации» (pic 3.11)

8gl7g3011

В открывшемся окне видим список наших подсистем (pic 3.12)

8gl7g3012

Выделяем подсистему Бухгалтерия и синей стрелкой перемещаем ее в низ.(pic 3.13)

8gl7g3013

Жмем F5 и видим, что подсистемы расположены с нашей точки зрения правильно (pic 3.14)

8gl7g3014

ЗАПУСК КОНФИГУРАТОРА

Учебник 1С ЗАПУСК КОНФИГУРАТОРА

Запустим  нашу базу в режиме конфигуратора (pic 2.1)

8gl7g2001

Нажмем Конфигурация – Открыть конфигурацию (pic 2.2)

8gl7g2002

Откроется так называемое дерево объектов конфигурации (pic 2.3)

8gl7g2003

В этом дереве мы и будем работать. Добавлять к нему веточки и листики, удобрять и поливать его.
Прежде всего изменим скучное название дерева – Конфигуратор на наше веселое Автобаза.
Для этого зайдем в контекстное меню и нажмем свойства.
Чтобы не повторяться на протяжении всего примера поясняю один раз: для того чтобы зайти в контекстное меню нужно выделить тот объект, который нам нужен и нажать на нем правой кнопкой мыши.
Мы увидим, что открылась некая палитра свойств объекта конфигурация. Меняем имя на АвтоБаза. (pic 2.4)

8gl7g2004

Обратите внимание имя дерева тоже поменялось на нужное нам. (pic 2.5)

8gl7g2005

Запустим нашу АвтоБазу. Жмем F5.
Внимательно читаем сообщение о том, что наша конфигурация отличается от базы данных и жмем Да.(pic 2.6)

8gl7g2006

Полюбуемся на вновь созданную конфигурацию, с удовольствием прочитаем, что она называется автобаза и закроем её, пока ничего интересного в ней нет.(pic 2.7)

8gl7g2007

Поздравляю! Первый шаг сделан.

СОЗДАНИЕ ПУСТОЙ БАЗЫ

Учебник 1С СОЗДАНИЕ ПУСТОЙ БАЗЫ

Если вы обнаружите значок 1С  смело щелкайте по нему.  При определенном везении у вас должно открыться вот такое окно (pic 1.1)

8gl7g1001

У меня уже что-то стоит из инфобаз, у вас может быть девственно чисто. В любом случае нам нужно создать нечто новое.
Смело жмем кнопулю «ДОБАВИТЬ».  Вываливается следующее окно- само собой выбираем «Создание новой информационной базы» (pic 1.2)

8gl7g1002

 

Жмем   «Далее», выбираем «Создание информационной базы без конфигурации ….» (pic 1.3)

8gl7g1003

Здесь придется поработать.  Во-первых заменим название с ИнформационнаяБаза на АвтоБаза, во-вторых, тип расположения информационной базы – укажем на сервере 1С Предприятия. (pic 1.4)

8gl7g1004

В следующем окошке заполним некоторые анкетные данные. А именно:

  • Кластер серверов 1С Предприятия:  у меня он находится на машине с именем BK-1C82, у вас скорее всего имя другое.
  • Имя информационной базы: можете назвать также как и у меня AutoBase
  • Защищенное соединение : Выключено
  • Тип СУБД: у меня MS SQL Server – у вас, скорее всего тот же, но не факт
  • Сервер баз данных: у меня он находится на другой машине, у вас может быть там же и кластер серверов.
  • Пользователь базы данных:  по умолчанию sa
  • Пароль пользователя: у меня «жаба съела канарейку», у вас, наверное, такой же
  • И последнее, должна стоять галочка «Создать базу данных, в случае ее отсутствия»

Уф, все! (pic 1.5)
8gl7g1005
В следующем окне оставляем все как есть, только установим вариант аутентификации «Запрашивать имя и пароль» и версия 1С Предприятия поставим 8.2 (pic 1.6)
8gl7g1006
Пустая база АвтоБаза готова.