Базовый курс. Домашнее задание №4
Первое задание по 1-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 1. Типы данных
Глава 2. Контекст выполнения кода
Глава 3. Модули
Глава 4. Синтакс-помощник
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
<code>
&НаКлиенте
Процедура Команда1(Команда)
Для Год=2010 По 2019 Цикл
КонецГода = Дата(Год,12,31);
КолвоДнейВГоду = ДеньГода(КонецГода);
ЦелыхНедель = Цел(КолвоДнейВгоду/7);
НеобработаноДней = КолвоДнейВгоду%7;
Январь01 = Дата(Год,1,1);
Февраль23 = Дата(Год,2,23);
Март08 = Дата(Год,3,8);
РабочихДней = ЦелыхНедель*5;
Для Сч=1 По НеобработаноДней Цикл
ТекДень = Дата(Год, 1, Сч);
Если ДеньНедели(ТекДень)>6 Тогда
РабочихДней = РабочихДней+1;
КонецЕсли;
КонецЦикла;
РабочихДней = РабочихДней – РабочийДень(Январь01)
– РабочийДень(Февраль23) – РабочийДень(Март08);
Сообщить(“”+Строка(Год)+” год – “+РабочихДней+” рабочих дней”);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция РабочийДень(День)
Если ДеньНедели(День)<6 Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
</code>
Кстати, в видеоуроке посвящённой описанию создания Ролей, рассазывается про 2 чек-бокса: “устанавливать права для новых объектов” и “устанавливать права для реквизитов и табличных частей по умолчанию”. Но в моём релизе (8.2.13.202) этих чек-боксов уже три. Если не сложно – осветите плз тему “с чем едят” чек-бокс “независимые права подчинённых объектов”. Заранее спасибо :-)
Ок, выпустим отдельную тематическую сессию МГ по изменениям релиза 8.2.13.
Пытаюсь “догнать уходящий поезд”. На практике потренировался на запросной модели обращения к справочникам. В часности сделал такой вариант функции “СинхронизацияПользователей”
<code>
Функция СинхронизацияПользователей () Экспорт
Запрос = Новый Запрос;
Запрос.Текст = “ВЫБРАТЬ
| Пользователи.ПометкаУдаления,
| Пользователи.Код,
| Пользователи.Наименование
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.ПользовательИБ = &ПользовательИБ”;
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Запрос.УстановитьПараметр(“ПользовательИБ”, Пользователь.УникальныйИдентификатор);
Выборка = Запрос.Выполнить().Выбрать();
// Порверяем – есть ли такой ГУИД пользователя
Если Выборка.Количество() = 0 Тогда
//Гуид отсутствует – проверяем есть такое имя уже в справочнике
ЗапросИмени = новый Запрос;
ЗапросИмени.Текст = “ВЫБРАТЬ
| Пользователи.ПометкаУдаления
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Код = &Код”;
ЗапросИмени.УстановитьПараметр(“Код”, Пользователь.Имя);
ВыборкаИмени = ЗапросИмени.Выполнить().Выбрать();
Если ВыборкаИмени.Количество() = 0 Тогда
//ГУИД отсутствует и такого имени в справочнике нет
// – Создаём новый элемент справочника “Пользователи”
НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
НовыйПользователь.ПользовательИБ = Пользователь.УникальныйИдентификатор;
НовыйПользователь.Код = Пользователь.Имя;
НовыйПользователь.Наименование = Пользователь.ПолноеИмя;
Попытка
НовыйПользователь.Записать();
Исключение
// Проблема записи в справочник “Пользователи”
Возврат Ложь;
КонецПопытки;
Возврат Истина;
Иначе
// ГУИД отсутствует, но пользователь с таким именем существует (видно заведён ранее вручную)
// – Заполняем отсутствующий ГУИД
СуществующийПользователь = Справочники.Пользователи.НайтиПоКоду(Пользователь.Имя).ПолучитьОбъект();
СуществующийПользователь.ПользовательИБ = Пользователь.УникальныйИдентификатор;
Попытка
СуществующийПользователь.Записать();
Исключение
// Проблема записи в справочник “Пользователи”
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецЕсли;
Иначе
// такой ГУИД в нашей базе есть обрабатываем на предмет “пометка на удаление”
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
// Пользователь в справочнике помечен на удаление – вход не возможен
Возврат Ложь;
Иначе
// Проверяем – не изменилось ли имя пользователя в конфигураторе
Если Выборка.Код <> Пользователь.Имя Тогда
// Синхронизируем имя в справочнике по значению имени сеанса
СуществующийПользователь = Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”, Пользователь.УникальныйИдентификатор).ПолучитьОбъект();
СуществующийПользователь.Код = Пользователь.Имя;
Попытка
СуществующийПользователь.Записать();
Исключение
// Проблема записи в справочник “Пользователи”
Возврат Ложь;
КонецПопытки;
Конецесли;
Если Выборка.Код <> Пользователь.Имя Тогда
// Синхронизируем имя в справочнике по значению имени сеанса
СуществующийПользователь = Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”, Пользователь.УникальныйИдентификатор).ПолучитьОбъект();
СуществующийПользователь.Наименование = Пользователь.ПолноеИмя;
Попытка
СуществующийПользователь.Записать();
Исключение
// Проблема записи в справочник “Пользователи”
Возврат Ложь;
КонецПопытки;
Конецесли;
Возврат Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
</code>
>Если Выборка.Количество() = 0 Тогда
Я бы рекомендовал использовать следующий подход.
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
КонецЕсли;