Главная » 1С Предприятие » МОДИФИКАЦИЯ МЕНЮ ИНТЕРФЕЙСА УЧЕНИК

0

Дл я  доступа   к  созданным  журналам  и   документам  модифицируем   отдельные колонки  меню  интерфейса Ученик (рис. 7.45).  Для  вновь введенных  в  колонку  Журналы документов     пунктов     (Расчеты    и     Табель)    укажем    соответственно   объекты    Жур нал.Расчеты и  Журнал.Табель.

Рис.   7.45.  Модифицированные колонки меню  интерфейса  Ученик

7.6.2.   МОДУЛЬ  ФОРМЫ СПИСКА ДОКУМЕНТА

Содержит, кроме  названных в  табл.  7.11, процедуру ПриОткрытии.

перем  часы[31], сДейст;                         //                часы массив часов по календарю процедура  Проследить() далее

процедура  Заполнить() далее

процедура ОбработкаПодбора(значен, конт)  далее процедура  ОдинСотрудник()  далее

процедура  Ч131 () далее процедура  Всего()  далее

процедура  УдалитьЗап(флаг)  далее

// Формирует  список  подразделений сПодр и устанавливает начальные значения

// переменных диалога процедура  ПриОткрытии()

перем  сСотр_2, дост;

сСотр_2  =  СоздатьОбъект("Справочник.Сотрудники_2");

// Формируем, анализируя справочник Сотрудники_2, список подразделгний

// Задаем выбор элементов справочника в порядке возрастания их кодов сСотр_2.ПорядокКодов();

сСотр_2.ВыбратьЭлементы( );

пока сСотр_2.ПолучитьЭлемент() = 1 цикл если сСотр_2.ЭтоГруппа() = 1  тогда

сПодр.ДобавитьЗначение(сСотр_2.ТекущийЭлемент(), сСотр_2.Наименование); конецЕсли;

конецЦикла; // пока

если  Проведен()=  0 тогда                   //             Если документ не проведен

кто  = 2;                         //               Табель  на сотрудников  выбранного подразделения текСтрока =  1;                //           Позиционируемся на цехе 01  в списке сПодр

иначе                             //                    Документ проведен

если  кто = 2 тогда             //         Правильно позиционируем список значений сПодр

сПодр.ТекущаяСтрока(текСтрока); конецЕсли;

конецЕсли; Проследить();

// дост = 1, если в табличной части есть записи. Переменная используется

// для управления доступностью элементов диалога формы списка документа дост = ?(КоличествоСтрок() = 0, 0, 1);

форма.Удалить.Доступность(дост); форма.Очистить.Доступность(дост);

форма.ПанельИнструментов(0);    //  Отключаем панель инструментов форма.Заголовок("Табель");

// Для кнопки Действия (рис. 7.40)

сДейст  = СоздатьОбъект("СписокЗначений"); сДейст.ДобавитьЗначение("Открыть в журнале");

конецПроцедуры // ПриОткрытии

// Управляет доступностью элемента диалога сПодр

процедура Проследить()

если (кто = 1) или (кто = 3) тогда   // Табель на отобранных или всех сотрудников форма.СПодр.Доступность(0);

иначе                          //                кто = 2

форма.СПодр.Доступность(1); конецЕсли;

конецПроцедуры // Проследить

процедура   ОтобразитьСПодр()   //   Формула элемента диалога    сПодр текСтрока = сПодр.ТекущаяСтрока(); сПодр.ПолучитьЗначение(текСтрока);

конецПроцедуры // ОтобразитьСПодр

процедура ОдинСотрудник()

//

Заполняет массив часы для одного сотрудник

перем ин, кален;

для ин 1 по 31 цикл

//

Инициализация массива часов

часы[ин] = 0;

конецЦикла; // для

кален = Сотрудник.Календарь; если кален.Выбран() = 1 тогда

кален.ВыбратьДаты(НачМесяца(ДатаДок), КонМесяца(ДатаДок)); ин = 0;

// Заносим в массив часы данные календаря сотрудника

пока кален.СледующаяДата() = 1 цикл ин = ин+ 1;

часы[ин] = кален.Значение; конецЦикла; // пока

конецЕсли;

конецПроцедуры // ОдинСотрудник

// Определяем значения реквизитов документа ч1 чЗ 1

// Далее эти значения могут быть отредактированы процедура Ч131()

ч1 = часы[1]; ч2 = часы[2]; чЗ = часы[3];

ч4 = часы[4]; ч5 = часы[5]; чб = часы[6];  ч7 = часы[7]; ч8 = часы[8]; ч9 = часы[9];

ч10 = часы[10];  ч11 = часы[11];  ч12 = часы[12];

ч13 = часы[13];  ч14 = часы[14];  ч15 = часы[15];

ч16 = часы[16]; ч17  часы[17]; ч18 = часы[18] ч19 = часы[19]; ч20 = часы[20]; ч21  = часы[21] ч22 = часы[22]; ч23 = часы[23]; ч24 = часы[24] ч25 = часы[25]; ч26 = часы[26]; 427 = 4асы[27]

428 = 4асы[28]; 429 = часы[29]; 430 = часы[30]; 431  = 4асы[31]; конецПроцедуры // Ч131

процедура Всего()                         //                Возвращает общее 4исло отработанных  4асов всегоЧасов = ч1 + ч2 + ч3 + ч4 + ч5 + ч6 + ч7 + ч8 + ч9 + ч10 +

ч11 +ч12+ч13+ч14+ч15+ч16+ ч17+ ч18+ч19 +

ч20 + ч21 + ч22 + ч23 + ч24 + ч25 + ч26 + ч27 + ч28 + ч29 + ч30 + ч31; конецПроцедуры // Всего

// Заполняет  табличную часть документа Табель для одного или группы сотрудников процедура Заполнить()

перем  подр;

// Удаляем, если табличная часть заполняется  для подразделение или всего предприятие,

// ее строки, но только с согласия пользователя если (кто  >  1) и (КоличествоСтрок() > 0) тогда

если  Вопрос("Удалить имеющиеся строки?", "Да+Нет")  = "Да" тогда

УдалитьСтроки();                    //             04ищаем табли4ную 4асть документа иначе

возврат;

конецЕсли; конецЕсли;

если кто =  1 тогда

// Указываем  явно имя основной формы списка для метода  ОткрытьПодбор

// Задаем режим множественного выбора

// Добавляем  в табличную  часть  в результате каждого выбора в открытой форме

// данные одного сотрудника. Собственно добавление осуществляет

// предопределенная процедура модуля формы ОбработкаПодбора ОткрытьПодбор("Справо4ник.Сотрудники_2", "ФормаСписка",, 1);

ина4еЕсли кто >=  2 тогда                    //             Подразделение или все предприятие сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2");

// Заносим в табличную часть данные о сотрудниках выбранного подразделения подр

если кто = 2 тогда                      //               Подразделение

подр  = сПодр.ПолучитьЗначение(сПодр.ТекущаяСтрока()); сСотр_2.ИспользоватьРодителя(подр);

конецЕсли; сСотр_2.ВыбратьЭлементы();

пока сСотр_2.ПолучитьЭлемент()  = 1 цикл

если сСотр_2.ЭтоГруппа() = 0 тогда // Только  сотрудники

// Используем уже имеющуюся  процедуру  ОбработкаПодбора,

// выполняющую обработку одного сотрудника ОбработкаПодбора(сСотр_2,"");

конецЕсли; конецЦикла; // пока

конецЕсли;

если КоличествоСтрок() >  0 тогда форма.Удалить. Доступность(1); форма.Очистить.Доступность(1);

конецЕсли; конецПроцедуры // Заполнить

процедура  ОбработкаПодбора(значен, конт)

// Запрещаем, если добавляем  по одному  сотруднику, выбор того же лица дважды если (кто = 1) и (ВыбратьСтроки( ) = 1) тогда

пока ПолучитьСтроку( ) = 1 цикл

если Сотрудник  = значен.ТекущийЭлемент( ) тогда Предупреждение("Сотрудник уже  выбран."); возврат;

конецЕсли;

конецЦикла; // пока конецЕсли;

НоваяСтрока();                      //              Новая строка в табличной части табеля Сотрудник = значен.ТекущийЭлемент();

ОдинСотрудник();                   //             Заполняет массив часы для  одного сотрудника

// Определяем значения  реквизитов документа ч1-чЗ  1  и всегоЧасов

Ч131(); Всего();

// Если есть хотя бы одна запись, то есть что удалять

если (кто = 1) и (КоличествоСтрок() = 1) тогда форма.Удалить. Доступность(1); форма.Очистить.Доступность(1);

конецЕсли;

конецПроцедуры // ОбработкаПодбора

// Удаляет с согласия пользователя, если флаг = 1, текущую запись табличной

// части документа, и, если флаг = 2, все записи процедура   УдалитьЗап(флаг)

перем  вопр;

вопр = "Удалить " + ?(флаг= 1, "одну запись", "все записи") + "?"; если Вопрос(вопр, "Да+Нет") = "Да" тогда

если флаг = 1  тогда УдалитьСтроку();

иначе                             //                 флаг = 2

УдалитьСтроки(); конецЕсли;

если КоличествоСтрок() = 0 тогда

форма.Удалить.Доступность(0); форма.Очистить.Доступность(0);

конецЕсли; конецЕсли;

конецПроцедуры // УдалитьЗап

Результат  автоматического   заполнения  табеля   для  сотрудников  второго  цеха  приведен  на  рис.  7.46.

Рис.  7.46.  Фрагмент табеля цеха  02

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии