2 февраля 2014 в 16:40:13
(10 лет 42 недели 5 дней 6 часов назад)
01.02.2014 17:55:58
Текст задания
Перем СписокСотрудников;
Перем СписокПредметов;
//******************************************************************************
// Название: РаботаСоСписком
// Параметры:
// Режим - строка, принимающая 4 значения:
// "Добавить"
// "ДобавитьНесколько"
// "Удалить"
// "УдалитьВсе"
// Список - список значений, в котором задается множественный фильтр
// ТипСправочника - строка, содержащая идентификатор справочнника, по
// которому осуществляется мноджественный фильтр
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// кнопок работы с множественными фильтрами ("...",".....","X","XX")
// Наименование,.
// Описание:
// процедура предназначена для добавления и удаления элементов
// из множественных фильтров
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;
Если Режим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();
ИначеЕсли Режим="Удалить" Тогда // удаляем из списка один элемент
Если ТекПоз>0 Тогда
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // работа со списком
//-----------------------------
Процедура ОбработкаПодбора(ЗначПод)
Если ЗначПод.Вид()="Сотрудники" Тогда
Сотрудники.ДобавитьЗначение(ЗначПод,СокрЛП(ЗначПод.Наименование));
Сотрудники.ТекущаяСтрока(Сотрудники.РазмерСписка());
ИначеЕсли ЗначПод.Вид()="Предметы" Тогда
Предметы.ДобавитьЗначение(ЗначПод,СокрЛП(ЗначПод.Наименование));
Предметы.ТекущаяСтрока(Предметы.РазмерСписка());
КонецЕсли;
КонецПроцедуры
//-----------------------------
Процедура ПриОткрытии()
Если ПустоеЗначение(ВыбНачПериода)=1 Тогда
ВыбНачПериода=НачМесяца(ТекущаяДата());
КонецЕсли;
Если ПустоеЗначение(ВыбКонПериода)=1 Тогда
ВыбКонПериода=КонМесяца(ТекущаяДата());
КонецЕсли;
КонецПроцедуры
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Регистр.ВзаиморасчетыСотрудники.Сотрудник;
|Предмет = Регистр.ВзаиморасчетыСотрудники.Предмет;
|Сумма = Регистр.ВзаиморасчетыСотрудники.Сумма;
|ВидОплаты = Регистр.ВзаиморасчетыСотрудники.ВидОплаты;
|Код = Регистр.ВзаиморасчетыСотрудники.Код;
|ТекущийДокумент = Регистр.ВзаиморасчетыСотрудники.ТекущийДокумент;
|Функция СуммаНачОст = НачОст(Сумма);
|Функция СуммаПриход = Приход(Сумма);
|Функция СуммаРасход = Расход(Сумма);
|Функция СуммаКонОст = КонОст(Сумма);
|Группировка Сотрудник без групп;
|Группировка Предмет без групп;
|Группировка ТекущийДокумент;
|Условие((Код<>Перечисление.КодыОпераций.СписаниеУдержания) И (Код<>Перечисление.КодыОпераций.Удержание));
|Условие(Сотрудник в СписокСотрудников);
|Условие(Предмет в Списокпредметов);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Сотрудник
Таб.ВывестиСекцию("Сотрудник");
Если Групировка>1 Тогда
Пока Запрос.Группировка(2) = 1 Цикл
// Заполнение полей Предмет
Таб.ВывестиСекцию("Предмет");
Если Групировка>2 Тогда
Пока Запрос.Группировка(3) = 1 Цикл
// Заполнение полей ТекущийДокумент
Таб.ВывестиСекцию("ТекущийДокумент");
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//*******************************************
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сотрудник)
|Период с ВыбНачПериода по ВыбКонПериода;
|Группа = Регистр.ВзаиморасчетыСотрудники.Группа;
|Сотрудник = Регистр.ВзаиморасчетыСотрудники.Сотрудник;
|Предмет = Регистр.ВзаиморасчетыСотрудники.Предмет;
|Сумма = Регистр.ВзаиморасчетыСотрудники.Сумма;
|Код = Регистр.ВзаиморасчетыСотрудники.Код;
|Часов = Регистр.ВзаиморасчетыСотрудники.Часов;
|Стоимость = Регистр.ВзаиморасчетыСотрудники.Стоимость;
|ТекущийДокумент = Регистр.ВзаиморасчетыКлиенты.ТекущийДокумент;
|Функция СуммаПриход = Приход(Сумма);
|Группировка Сотрудник без групп;
|Группировка Группа без групп;
|Группировка Предмет без групп;
|Группировка Код;
|Условие(Сотрудник в СписокСотрудников);
|Условие(Предмет в Списокпредметов);
//|Условие(Код=Перечисление.КодыОпераций.НачислениеЗарплаты);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
ИтогоВыплата=0;
Пока Запрос.Группировка(1) = 1 Цикл
ТекСотрудник=Запрос.Сотрудник;
НалогСорудников=ТекСотрудник.ПроцентУдержания+ТекСотрудник.НакопительноеУдержание;
Таб.ВывестиСекцию("Сотрудник2");
Если Групировка>1 Тогда
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Группа2");
Если Групировка>2 Тогда
Пока Запрос.Группировка(3) = 1 Цикл
// Заполнение полей Предмет
Таб.ВывестиСекцию("Предмет2");
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//*******************************************
Процедура Отчет(Парам=0)
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
Если ВыбНачПериода>ВыбКонПериода Тогда
Предупреждение("Не правельный интервал дат");
Возврат;
КонецЕсли;
СписокПредметов=СоздатьОбъект("СписокЗначений");
СписокПредметов=СоздатьМассивЭлементов("","",Предметы,"Предметы");
Если Парам=1 Тогда
Ведомость()
Иначе
Сформировать();
КонецЕсли;
КонецПроцедуры
Стучите в скайп - обсудим.
Здесь немного о себе и примеры работ:
http://www.1c-work.ru/
Контакты:
E-mail: dump2003@mail.ru
ICQ: 58278581Три
Skype: Dump2003
Цена и сроки - после более подробного обсуждения задания.
Контакт по Skype значительно ускорит работу.
Аккаунт (отзывы) на фри-лансе: http://www.free-lance.ru/users/Dump_1964