Skip to main content

Заметка 2

1 сессия Загрузка

 

&НаСервере

Процедура ЗагрузитьНаСервере()

Табдок = Новый ТабличныйДокумент;

Попытка

                Табдок.Прочитать(ПутьКФайлу,СпособЧтенияЗначенийТабличногоДокумента.Значение);

Исключение

                Сообщение = Новый СообщениеПользователю;

                Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();

                Сообщение.Сообщить();

                Возврат;

КонецПопытки;

     КоличествоСтрок = Табдок.ВысотаТаблицы;

                 Для НомерСтроки = 2 По КоличествоСтрок Цикл

                                

                                СтрокаДанных = ТЧ.Добавить(); 

                                СтрокаДанных.Клиент = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+1).ТекущаяОбласть.Текст;

         СтрокаДанных.Проект = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+2).ТекущаяОбласть.Текст;

         СтрокаДанных.НазваниеЗадачи = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+3).ТекущаяОбласть.Текст;

         СтрокаДанных.ТекстЗадачи = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+4).ТекущаяОбласть.Текст;

         СтрокаДанных.Статус = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+5).ТекущаяОбласть.Текст;

         СтрокаДанных.Дата = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+6).ТекущаяОбласть.Текст;

         СтрокаДанных.Номер = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+7).ТекущаяОбласть.Текст; 

         СтрокаДанных.Исполнитель = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+8).ТекущаяОбласть.Текст;

         СтрокаДанных.Оценка = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+9).ТекущаяОбласть.Текст;

                               СтрокаДанных.ФактическоеВремя = Табдок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0")+"C"+10).ТекущаяОбласть.Текст;

                              

                               СтрокаДанных.КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию(СтрокаДанных.Клиент).Ссылка;                                            

                               СтрокаДанных.СотрудникСсылка = Справочники.Сотрудники.НайтиПоНаименованию(СтрокаДанных.Исполнитель).Ссылка;  

                               Если СтрокаДанных.СотрудникСсылка.Пустая() Тогда

                                               СтрокаДанных.КомментарийПоСотруднику = "Загрузка этого документа невозможна!";

                               КонецЕсли;

                               Если СтрокаДанных.КонтрагентСсылка.Пустая() И НЕ СтрокаДанных.СотрудникСсылка.Пустая() Тогда

                                               СтрокаДанных.КомментарийПоКонтрагенту = "Контрагент будет добавлен!";

                               КонецЕсли;

 

                 КонецЦикла;

                 

 

КонецПроцедуры

 

&НаКлиенте

Процедура Загрузить(Команда)

                ТЧ.Очистить();

                ЗагрузитьНаСервере();

КонецПроцедуры

 

&НаСервере

Процедура СопоставитьНаСервере()

                СтрокаПроект = Справочники.Проекты;

                СтрокаСотрудник = Справочники.Сотрудники;

                СтрокаКонтрагент = Справочники.Контрагенты; 

                СтрокаКалендарь = Справочники.КалендариСотрудников; 

                СтрокаКолонка = Справочники.КолонкиКалендарейСотрудников;

    Док = Документы.ЗаданиеНаРаботу;

               

                Для Каждого Строка Из ТЧ Цикл   

                                Мас=СтрРазделить(Строка.Дата, ".",); 

                                ДатаПоиска = Дата(Мас[2],Мас[1], Мас[0]);

                 Если Док.НайтиПоНомеру(Строка.Номер, ДатаПоиска).Пустая() Тогда

                 Если НЕ Строка.СотрудникСсылка.Пустая() Тогда  

                 ДокПриход  = Док.СоздатьДокумент();

                 ДокПриход.Номер = Строка.Номер;

                 ДокПриход.Дата = ДатаПоиска;

                 Если СтрокаПроект.НайтиПоНаименованию(Строка.Проект).Пустая() Тогда

                              НовыйЭлемент = СтрокаПроект.СоздатьЭлемент();

                               НовыйЭлемент.Наименование = Строка.Проект;  

                               Если СтрокаКонтрагент.НайтиПоНаименованию(Строка.Клиент).Пустая() Тогда

                                               НовыйЭлемент1 = СтрокаКонтрагент.СоздатьЭлемент();

                                                // сопоставляем поля  Контрагента

                                               НовыйЭлемент1.Покупатель = Истина;

                                                НовыйЭлемент1.Наименование = Строка.Клиент;

                                                НовыйЭлемент1.СчетУчетаАвансовПокупателя = ПланыСчетов.Управленческий.РасчетыПоАвансамПолученным;

                                                НовыйЭлемент1.СчетУчетаАвансовПоставщику = ПланыСчетов.Управленческий.РасчетыПоАвансамВыданным;

                                                НовыйЭлемент1.СчетУчетаРасчетовСПокупателем = ПланыСчетов.Управленческий.РасчетыСПокупателями;

                                                НовыйЭлемент1.СчетУчетаРасчетовСПоставщиком = ПланыСчетов.Управленческий.РасчетыСПоставщиками;

                                                НовыйЭлемент1.ВидГосударственногоОргана = Перечисления.ВидыГосударственныхОрганов.Прочий;

                                                НовыйЭлемент1.ВидКонтрагента = Перечисления.ВидыКонтрагентов.ЮридическоеЛицо;  

                                                НовыйЭлемент1.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;

                                                НовыйЭлемент1.Записать();

                                НовыйЭлемент.Контрагент = НовыйЭлемент1.Ссылка; 

                                Иначе

                               НовыйЭлемент.Контрагент = СтрокаКонтрагент.НайтиПоНаименованию(Строка.Клиент).Ссылка;

                               Календарь = ПолучитьКалендарь(НовыйЭлемент.Наименование);

                               НовыйЭлемент.пр_КалендарьСотрудника = Календарь.Ссылка;

                                КонецЕсли;  

                               НовыйЭлемент.Договор =ПолучитьДоговорКонтрагента(СтрокаКонтрагент.НайтиПоНаименованию(Строка.Клиент).Ссылка) ;

                                               Календарь = ПолучитьКалендарь(НовыйЭлемент.Наименование);

                               НовыйЭлемент.пр_КалендарьСотрудника = Календарь.Ссылка;

                               НовыйЭлемент.Записать();  

                 ДокПриход.пр_Проект = НовыйЭлемент.Ссылка;  

                 ДокПриход.КалендарьСотрудника = Календарь.Ссылка;

 Иначе 

                 ДокПриход.пр_Проект = СтрокаПроект.НайтиПоНаименованию(Строка.Проект).Ссылка;  

                 ДокПриход.КалендарьСотрудника = ПолучитьКалендарь(СтрокаПроект.НайтиПоНаименованию(Строка.Проект).Ссылка);

КонецЕсли;

               ДокПриход.Автор = Справочники.Пользователи.НайтиПоНаименованию(

                 ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя);

                  ДокПриход.пр_ПланGitLab = Строка.Оценка;

                 ДокПриход.пр_ФактGitLab = Строка.ФактическоеВремя;   

                 ДокПриход.Организация = Справочники.Организации.ОрганизацияПоУмолчанию();

                 ДокПриход.Состояние = Справочники.СостоянияСобытий.Запланировано;

                 ДокПриход.СтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.ОсновноеПодразделение;

                 ДокПриход.Сотрудник=Строка.СотрудникСсылка;

                 Шаблон = "Название задачи: %1

                                     |Текст задачи: %2";  

                 НоваяСтрока = ДокПриход.Работы.Добавить();

                 НоваяСтрока.Комментарий = СтрШаблон(Шаблон,Строка.НазваниеЗадачи, Строка.ТекстЗадачи);

                 ДокПриход.Записать(РежимЗаписиДокумента.Проведение,

                   РежимПроведенияДокумента.Неоперативный);

                 ЗаписьКалендаря = СоздатьИлиОбновитьЗаписьКалендаря(ДокПриход, Строка, ДокПриход.КалендарьСотрудника);

                 ЗаписьКалендаря.Записать();  

                 Сообщить("Загрузка завершена");

 Иначе

      Сообщить("Нельзя загрузить данные по несуществующему сотруднику "+ Строка.Исполнитель);

     

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

                 КонецЦикла; 

    

КонецПроцедуры

                                              

 &НаСервере

 Функция ПолучитьДоговорКонтрагента(Контрагент)

               Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ ПЕРВЫЕ 1

                               |              ДоговорыКонтрагентов.Ссылка КАК Ссылка

                               |ИЗ

                               |              Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов

                               |ГДЕ

                               |              ДоговорыКонтрагентов.Владелец = &Владелец";

                Запрос.УстановитьПараметр("Владелец", Контрагент);

                РезультатЗапроса = Запрос.Выполнить();

                Выборка = РезультатЗапроса.Выбрать();

                Пока Выборка.Следующий() Цикл

                               Возврат Выборка.Ссылка;

                КонецЦикла;   

    КонецФункции 

 

  &НаСервере

   Функция ПолучитьКалендарь(НаименованиеПроекта)

                  Календарь = Справочники.КалендариСотрудников.НайтиПоНаименованию(НаименованиеПроекта);

                   Если Календарь.Пустая() Или Календарь = Неопределено Тогда

                                  Календарь = Справочники.КалендариСотрудников.СоздатьЭлемент();

                                  Календарь.Наименование = НаименованиеПроекта;

                                  Календарь.ВладелецКалендаря = Справочники.Сотрудники.НайтиПоНаименованию(

                                  ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя).Ссылка;

                                  Календарь.Записать();

                   КонецЕсли;

                   Возврат Календарь;

      КонецФункции

 

      &НаСервере

  Функция СоздатьИлиОбновитьЗаписьКалендаря(ЗаданиеНаРаботу, Строка, Календарь)

                                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ ПЕРВЫЕ 1

                               |              ЗаписиКалендаряСотрудника.Ссылка КАК СсылкаЗаписьКалендаряСотрудника

                               |ИЗ

                               |              Справочник.ЗаписиКалендаряСотрудника КАК ЗаписиКалендаряСотрудника

                               |ГДЕ

                               |              ЗаписиКалендаряСотрудника.Источник = &Источник";

               

                Запрос.УстановитьПараметр("Источник", ЗаданиеНаРаботу.Ссылка);

                РезультатЗапроса = Запрос.Выполнить();

                Выборка = РезультатЗапроса.Выбрать();

                Если Выборка.Следующий() Тогда                      

                               ЗаписьКалендаря = Выборка.СсылкаЗаписьКалендаряСотрудника.ПолучитьОбъект();

                Иначе

                               ЗаписьКалендаря = Справочники.ЗаписиКалендаряСотрудника.СоздатьЭлемент();

                               ЗаписьКалендаря.Источник = ЗаданиеНаРаботу.Ссылка;

                КонецЕсли;

                КолонкаКалендаря = ПолучитьИлиСоздатьКолонкуКалендаря(Строка.Статус, Календарь);

                Если КолонкаКалендаря<>Неопределено Тогда

                               ЗаписьКалендаря.КолонкаКалендаря= КолонкаКалендаря;

                КонецЕсли;

                Возврат ЗаписьКалендаря;

       КонецФункции

 

&НаСервере

  Функция ПолучитьИлиСоздатьКолонкуКалендаря(Статус, Календарь)

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ ПЕРВЫЕ 1

                               |              КолонкиКалендарейСотрудников.Ссылка КАК Ссылка

                               |ИЗ

                               |              Справочник.КолонкиКалендарейСотрудников КАК КолонкиКалендарейСотрудников

                               |ГДЕ

                               |              КолонкиКалендарейСотрудников.Владелец = &Владелец

                               |              И КолонкиКалендарейСотрудников.Наименование = &Наименование";

                Запрос.УстановитьПараметр("Владелец", Календарь);

                Запрос.УстановитьПараметр("Наименование", Статус);

                РезультатЗапроса = Запрос.Выполнить();

                Выборка = РезультатЗапроса.Выбрать();

                Если Выборка.Следующий() Тогда

                               Колонка = Выборка.Ссылка;

                Иначе

                               Колонка = Справочники.КолонкиКалендарейСотрудников.СоздатьЭлемент();

                               Колонка.Наименование = Статус;

                               Колонка.Владелец = Календарь;

                               Колонка.Записать();

                              

                КонецЕсли;

               

                 Возврат Колонка;

    КонецФункции

 

&НаКлиенте

Процедура Сопоставить(Команда)

                СопоставитьНаСервере();

КонецПроцедуры

 

&НаКлиенте

Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)

                Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

                Проводник.Заголовок = "Выберите файл";

                Фильтр = "Файл Excel (*.xlsx)|*.xlsx";

                Проводник.Фильтр = Фильтр;

                Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);

                Проводник.Показать(Оповещение);

КонецПроцедуры  

 

&НаКлиенте

Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

                Если ВыбранныеФайлы = Неопределено Тогда

                               Возврат;             

                КонецЕсли; 

                ПутьКФайлу = ВыбранныеФайлы[0];

КонецПроцедуры

 

 

&НаКлиенте

Процедура ПутьКФайлуОткрытие(Элемент, СтандартнаяОбработка)

                СтандартнаяОбработка = Ложь;

                ЗапуститьПриложение(ПутьКФайлу);

КонецПроцедуры

 

 

 

 


 

2 сессия сообщения

Общий модуль отправка уведомлений

Процедура ОтправкаУведомления()   Экспорт

КонецПроцедуры

 

Добавление в форму Задание на работу

ПолеФормы = Элементы.Добавить("пр_ДатаНачалаАнализа", Тип("ПолеФормы"), ГруппаФормы);

                ПолеФормы.Вид = ВидПоляФормы.ПолеВвода;

                ПолеФормы.ПутьКДанным = "Объект.пр_ДатаНачалаАнализа";

                ПолеФормы = Элементы.Добавить("пр_ДатаНачалаРазработки", Тип("ПолеФормы"), ГруппаФормы);

                ПолеФормы.Вид = ВидПоляФормы.ПолеВвода;

                ПолеФормы.ПутьКДанным = "Объект.пр_ДатаНачалаРазработки";

 

Форма записи регистра сведений

&НаСервере

Процедура ИзменениеДанныхРеквизитов()

                Если Запись.УведомлениеОДлительнойРазработке = Ложь Тогда

                               Элементы.НастройкаУведомленийРазработки.Видимость = Ложь;

                КонецЕсли;

                Если Запись.УведомлениеОДлительномАнализе = Ложь Тогда

                               Элементы.НастройкаУведомленийАнализа.Видимость = Ложь;

                КонецЕсли;

КонецПроцедуры

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                ИзменениеДанныхРеквизитов();

КонецПроцедуры

&НаКлиенте

Процедура УведомлениеОДлительномАнализеПриИзменении(Элемент)

                ИзменениеДанныхРеквизитов();

КонецПроцедуры

&НаКлиенте

Процедура УведомлениеОДлительнойРазработкеПриИзменении(Элемент)

                ИзменениеДанныхРеквизитов();

КонецПроцедуры

 

Форма обработки настройки уведомлений

&НаСервере

Процедура ИзменениеДанныхРеквизитов()

                СправкаОПодставляемыхпеременных = "Есть специальные параметры, которые можно вставлять в текст уведомлений, которые отвечают за какие-то данные"

                +Символы.ПС+Символы.ПС+"Есть следующие параметры: "+Символы.ПС

                +"[Дней_На_Анализ] - Хранит в себе данные текущего максимального срока по анализу:"+Символы.ПС

                +"[Дней_На_Разработку] - Хранит в себе данные текущего максимального срока по разработке:"+Символы.ПС

                +"[НомерЗадания](Обязательный) - Хранит в себе данные текущего номера задания:"+Символы.ПС

                +"[Ответственный] - Хранит в себе данные текущего пользователя, который получит уведомление:" +Символы.ПС

                +"[Стадия] - Хранит в себе данные текущей стадии по которой пройдёт уведомление.";

                Если УведомлениеОДлительнойРазработке = Ложь Тогда

                               Элементы.НастройкаУведомленийРазработки.Видимость = Ложь;

                               МаксимальныйСрокРазработки = Неопределено;

                               ПользовательДляУведомленияПоРазработке = Неопределено;

                               ТекстУведомленияПоРазработке = Неопределено;

                Иначе

                               Элементы.НастройкаУведомленийРазработки.Видимость = Истина;

                               СправкаОПодставляемыхПеременных = СправкаОПодставляемыхПеременных+Символы.ПС+Символы.ПС+"Пример №1"+

                               Символы.ПС+"Пример текста уведомления: По заданию№ [НомерЗадания] на стадии ""[Стадия]""превышен срок выполнения "

                               + "([Дней_На_Разработку] дней), ответственный по заданию - [Ответственный]."+Символы.ПС+"Пример полученного сообщения с текущими настройками:"

                               + "По заданию №17 на стадии ""В работе"" превышен срок выполнения "

                               + "(" + Строка(МаксимальныйСрокРазработки) +" дней), ответственный по заданию - "

                               +Строка(ПользовательДляУведомленияПоРазработке)+".";

                КонецЕсли;

                   Если УведомлениеОДлительномАнализе = Ложь Тогда

                               Элементы.НастройкаУведомленийАнализа.Видимость = Ложь;

                               МаксимальныйСрокАнализа = Неопределено;

                               ПользовательДляУведомленияПоАнализу = Неопределено;

                               ТекстУведомленияПоАнализу = Неопределено;

                Иначе

                               Элементы.НастройкаУведомленийАнализа.Видимость = Истина;

                               Если УведомлениеОДлительномАнализе = Ложь Тогда

                                               СправкаОПодставляемыхПеременных = СправкаОПодставляемыхПеременных+Символы.ПС+Символы.ПС+"Пример №1";

                               Иначе

                                               СправкаОПодставляемыхПеременных = СправкаОПодставляемыхПеременных+Символы.ПС+Символы.ПС+"Пример №2";

                               КонецЕсли;

                               СправкаОПодставляемыхПеременных = СправкаОПодставляемыхПеременных+Символы.ПС+Символы.ПС+"Пример №1"+

                               Символы.ПС+"Пример текста уведомления: По заданию№ [НомерЗадания] на стадии ""[Стадия]""превышен срок выполнения "

                               + "([Дней_На_Анализ] дней), ответственный по заданию - [Ответственный]."+Символы.ПС+"Пример полученного сообщения с текущими настройками:"

                               + "По заданию №17 на стадии ""Анализ"" превышен срок выполнения "

                               + "(" + Строка(МаксимальныйСрокАнализа) +" дней), ответственный по заданию - "

                               +Строка(ПользовательДляУведомленияПоАнализу)+".";

                КонецЕсли;

КонецПроцедуры

    &НаСервере

                Процедура ПолучитьНастройкиПроекта()

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |              пр_НастройкиУведомленийПроектов.МаксимальныйСрокАнализа КАК МаксимальныйСрокАнализа,

                               |              пр_НастройкиУведомленийПроектов.МаксимальныйСрокРазработки КАК МаксимальныйСрокРазработки,

                               |              пр_НастройкиУведомленийПроектов.ПользовательДляУведомленийПоАнализу КАК ПользовательДляУведомленийПоАнализу,

                               |              пр_НастройкиУведомленийПроектов.ПользовательДляУведомленийПоРазработке КАК ПользовательДляУведомленийПоРазработке,

                               |              пр_НастройкиУведомленийПроектов.ТекстУведомленияПоАнализу КАК ТекстУведомленияПоАнализу,

                               |              пр_НастройкиУведомленийПроектов.ТекстУведомленияПоРазработке КАК ТекстУведомленияПоРазработке,

                               |              пр_НастройкиУведомленийПроектов.УведомлениеОДлительномАнализе КАК УведомлениеОДлительномАнализе,

                               |              пр_НастройкиУведомленийПроектов.УведомлениеОДлительнойРазработке КАК УведомлениеОДлительнойРазработке

                               |ИЗ

                               |              РегистрСведений.пр_НастройкиУведомленийПроектов КАК пр_НастройкиУведомленийПроектов

                               |ГДЕ

                               |              пр_НастройкиУведомленийПроектов.Проект = &Проект";

               

                Запрос.УстановитьПараметр("Проект", Проект);

                Выборка = Запрос.Выполнить().Выбрать();

                Если Выборка.Следующий() Тогда

                               УведомлениеОДлительнойРазработке = Выборка.УведомлениеОДлительнойРазработке;

                               УведомлениеОДлительномАнализе = Выборка.УведомлениеОДлительномАнализе;

                               МаксимальныйСрокАнализа = Выборка.МаксимальныйСрокАнализа;

                               МаксимальныйСрокРазработки = Выборка.МаксимальныйСрокРазработки;

                               ПользовательДляУведомленияПоАнализу = Выборка.ПользовательДляУведомленийПоАнализу;

                               ПользовательДляУведомленияПоРазработке = Выборка.ПользовательДляУведомленийПоРазработке;

                               ТекстУведомленияПоАнализу = Выборка.ТекстУведомленияПоАнализу;

                               ТекстУведомленияПоРазработке = Выборка.ТекстУведомленияПоРазработке;

                Иначе

                               УведомлениеОДлительнойРазработке = Неопределено;

                               УведомлениеОДлительномАнализе = Неопределено;

                               МаксимальныйСрокАнализа = Неопределено;

                               МаксимальныйСрокРазработки = Неопределено;

                               ПользовательДляУведомленияПоАнализу = Неопределено;

                               ПользовательДляУведомленияПоРазработке = Неопределено;

                               ТекстУведомленияПоАнализу = Неопределено;

                               ТекстУведомленияПоРазработке = Неопределено;

                КонецЕсли; 

                    ИзменениеДанныхРеквизитов();

                КонецПроцедуры

 

&НаСервере

                Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

                Элементы.ОсновныеДанные.Видимость = Ложь;

                Проект = Параметры.Проект;

                Если Проект<> Неопределено Тогда

                               Элементы.ОсновныеДанные.Видимость = Истина;

                               ПолучитьНастройкиПроекта();

                               КонецЕсли;

                КонецПроцедуры

&НаКлиенте

                Процедура ПроектПриИзменении(Элемент)

                                Элементы.ОсновныеДанные.Видимость = Ложь;

                                Если Не Проект.Пустая() Тогда

                                                Элементы.ОсновныеДанные.Видимость = Истина;

                                                ПолучитьНастройкиПроекта();

                                КонецЕсли;

                КонецПроцедуры

 

&НаКлиенте

                Процедура УведомлениеОДлительномАнализеПриИзменении(Элемент)

                               ИзменениеДанныхРеквизитов();

                КонецПроцедуры

 

&НаКлиенте

                Процедура УведомлениеОДлительнойРазработкеПриИзменении(Элемент)

                               ИзменениеДанныхРеквизитов();

                КонецПроцедуры

               

  &НаКлиенте

  Процедура ПриИзмененииДанныхУведомлений(Элемент)

                  Если ЗначениеЗаполнено(МаксимальныйСрокАнализа) И ЗначениеЗаполнено(ПользовательДляУведомленияПоАнализу)

                                 И Не ЗначениеЗаполнено(ТекстУведомленияПоАнализу) Тогда

                                 ТекстУведомленияПоАнализу = "По заданию №[НомерЗадания] на стадии ""[Стадия]"" превышен срок выполнения"

                                 + "([Дней_На_Анализ] дней), ответственный по заданию - [Ответственный].";

                  КонецЕсли;

                   Если ЗначениеЗаполнено(МаксимальныйСрокРазработки) И ЗначениеЗаполнено(ПользовательДляУведомленияПоРазработке)

                                 И Не ЗначениеЗаполнено(ТекстУведомленияПоРазработке) Тогда

                                 ТекстУведомленияПоРазработке = "По заданию №[НомерЗадания] на стадии ""[Стадия]"" превышен срок выполнения"

                                 + "([Дней_На_Разработку] дней), ответственный по заданию - [Ответственный].";

                  КонецЕсли;

       ИзменениеДанныхРеквизитов();

   КонецПроцедуры       

 

       &НаСервере

                   Функция ЗаписатьНастройкиУведомлений()

                   Настройки = РегистрыСведений.пр_НастройкиУведомленийПроектов.СоздатьМенеджерЗаписи();

                   Настройки.Проект = Проект;

                   Настройки.МаксимальныйСрокАнализа = МаксимальныйСрокАнализа;

                   Настройки.МаксимальныйСрокРазработки = МаксимальныйСрокРазработки;

                   Настройки.ПользовательДляУведомленийПоАнализу = ПользовательДляУведомленияПоАнализу;

                   Настройки.ПользовательДляУведомленийПоРазработке = ПользовательДляУведомленияПоРазработке;

                   Настройки.УведомлениеОДлительнойРазработке = УведомлениеОДлительнойРазработке;

                   Настройки.УведомлениеОДлительномАнализе = УведомлениеОДлительномАнализе;

                   Настройки.ТекстУведомленияПоАнализу = ТекстУведомленияПоАнализу;

                   Настройки.ТекстУведомленияПоРазработке = ТекстУведомленияПоРазработке;

                   Настройки.Записать(Истина);

                   КонецФункции               

 

&НаКлиенте

                   Процедура СохранитьНастройки(Команда)

                                 ЗаписатьНастройкиУведомлений();

                                 ПоказатьОповещениеПользователя("Настройки сохранены!");

                   КонецПроцедуры

 

&НаКлиенте

                   Процедура ОткрытьЖурналЛогов(Команда)

                 Массив = Новый Массив;

                 Массив.Добавить("Уведомление отправлено успешно!");

                 Массив.Добавить("Уведомление не отправлено!");

                 ПередаваемыеПараметры = Новый Структура("СобытиеЖурналаРегистрации", Массив);

                 ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПередаваемыеПараметры);

                   КонецПроцедуры

 

&НаКлиенте

                   Процедура ОтправитьУведомлениеПоПросроченнымЗаданиямНаРаботу(Команда)

                                 пр_ОтправкаУведомленийПоПросроченнымЗаданиям.ОтправкаУведомления();

                   КонецПроцедуры

  

Модуль формы контакт-центра

&НаСервере

&ИзменениеИКонтроль("УправлениеФормой")

Процедура пр_УправлениеФормой()

                Элементы.ГруппаВходящее.Видимость = ВидыКонтактЦентра <> 3 И ВидыКонтактЦентра <> 4;

                Элементы.РазделительнаяЛиния.Видимость = ВидыКонтактЦентра <> 3 И ВидыКонтактЦентра <> 4;

                Элементы.ГруппаФильтрыНастройкиИДопИнфо.Видимость = ВидыКонтактЦентра <> 3;

                Элементы.ДоступныеКалендари.Видимость = ВидыКонтактЦентра <> 4;

                Элементы.ДобавитьКалендарь.Видимость = ВидыКонтактЦентра <> 4;

                Элементы.ОтборЗавершенные.Видимость = ВидыКонтактЦентра <> 4;

 

                // вид отображения "Список"

                Элементы.ГруппаВРаботе.Видимость = ВидыКонтактЦентра = 0;

                Элементы.ПредставлениеПериодаЗадачи.Видимость = ВидыКонтактЦентра = 0;

 

                // вид отображения "Канбан"

                Элементы.СтраницыКанбан.Видимость =  ВидыКонтактЦентра = 1;

                Элементы.ЗадачиЗавершены.Видимость = ОтборЗавершенные;

                Элементы.ЗаголовокЗадачиЗавершены.Видимость = ОтборЗавершенные;

 

                // Вид отображения "Календарь"

                Элементы.Календарь.Видимость = ВидыКонтактЦентра = 2;

                Если ВидыКонтактЦентра = 2 Тогда

                               НастроитьВидимостьГруппыСинхронизировать();

                Иначе

                               Элементы.ГруппаСинхронизировать.Видимость = Ложь;

                КонецЕсли;

                Элементы.ГруппаПечать.Видимость = ВидыКонтактЦентра = 2;

 

                // Вид отображения "Доски"

                Элементы.Доски.Видимость = ВидыКонтактЦентра = 3;

                Элементы.ФормаПоказыватьНедействительные.Видимость = ВидыКонтактЦентра = 3;

     #Вставка 

                 Если Элементы.Найти("пр_ОткрытьНастройкиУведомлений") = Неопределено Тогда

                                МояКоманда = Команды.Добавить("пр_ОткрытьНастройкиУведомленийпроекта");

                                МояКоманда.Заголовок = "Открыть настройки уведомлений проекта";

                                МояКоманда.Действие = "пр_ОткрытьНастройкиУведомлений";

                                

                                МояКнопка = Элементы.Добавить("пр_ОткрытьНастройкиУведомлений",Тип("КнопкаФормы"), Элементы.ГруппаКоманднаяПанель);

                                МояКнопка.Заголовок = "Открыть настройки уведомлений";

                                МояКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

                                МояКнопка.ИмяКоманды = "пр_ОткрытьНастройкиУведомленийПроекта";

                                МояКнопка.Видимость = ВидыКонтактЦентра = 4;

                                

                                МояКоманда = Команды.Добавить("пр_ОткрытьЖурналЛогов");

                                МояКоманда.Заголовок = "Открыть журнал логов";

                                МояКоманда.Действие = "пр_ОткрытьЖурнал"; 

                                

                                МояКнопка = Элементы.Добавить("пр_ОткрытьЖурнал",Тип("КнопкаФормы"), Элементы.ГруппаКоманднаяПанель);

                                МояКнопка.Заголовок = "Открыть журнал";

                                МояКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

                                МояКнопка.ИмяКоманды = "пр_ОткрытьЖурналЛогов";

                                МояКнопка.Видимость = ВидыКонтактЦентра = 4; 

                                

                                МояКоманда = Команды.Добавить("пр_ОтправитьУведомлениеПоПросроченнымЗаданиямНаРаботу");

                                МояКоманда.Заголовок = "Отправить уведомления по просроченным заданиям на работу";

                                МояКоманда.Действие = "пр_ОтправитьУведомлениеПоПросроченнымЗаданиям"; 

                                

                                МояКнопка = Элементы.Добавить("пр_ОтправитьУведомлениеПоПросроченнымЗаданиям",Тип("КнопкаФормы"), Элементы.ГруппаКоманднаяПанель);

                                МояКнопка.Заголовок = "Отправить уведомление по просроченным заданиям";

                                МояКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

                                МояКнопка.ИмяКоманды = "пр_ОтправитьУведомлениеПоПросроченнымЗаданиямНаРаботу";

                                МояКнопка.Видимость = ВидыКонтактЦентра = 4; 

                 Иначе

                                Элементы.Найти("пр_ОткрытьНастройкиУведомлений").Видимость = ВидыКонтактЦентра = 4;

                                Элементы.Найти("пр_ОткрытьЖурнал").Видимость = ВидыКонтактЦентра = 4;

                Элементы.Найти("пр_ОтправитьУведомлениеПоПросроченнымЗаданиям").Видимость = ВидыКонтактЦентра = 4;

       КонецЕсли;

                 #КонецВставки

                // Вид отображения "Текущая доска"

                Элементы.СтраницыДоска.Видимость = ВидыКонтактЦентра = 4;

                Элементы.СтраницыДоска.Видимость = ВидыКонтактЦентра = 4;

                ЭлементДоски = Элементы.Переключатель.СписокВыбора.НайтиПоЗначению(4);

                Если ЭлементДоски <> Неопределено Тогда

                               ЭлементДоски.Представление = Строка(ТекущаяДоска);

                КонецЕсли;

 

                // Отображение пустого списка "Входящее" 

                ОбработаноВсеВходящее  = КонтактЦентр.ОбработаноВсеВходящее(СотрудникТекущегоПользователя);

 

                Элементы.ГруппаНетПодключенныхКаналов.Видимость = Ложь;

                Элементы.ГруппаОбработаноВсеВходящее.Видимость = ОбработаноВсеВходящее;

                Элементы.ДекорацияРастяжение.Видимость = ОбработаноВсеВходящее;

                Элементы.Входящее.Видимость = НЕ Элементы.ДекорацияРастяжение.Видимость;

 

                Элементы.ГруппаПодсказкаЦели.Видимость = ОтображатьПодсказкуДоски;

                Если ВидыКонтактЦентра = 4 Тогда

                               Элементы.ДобавитьКолонкуКалендаря.Видимость = ВидимостьПодсказкиДобавленияКолонки();

                КонецЕсли;

 

                СистемнаяИнформация = Новый СистемнаяИнформация;

                ТекущаяВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;

 

                Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ТекущаяВерсияПлатформы, "8.3.19.0") >= 0 Тогда

                               ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтраницыДоска", "Ширина", 0);

                               ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтраницыКанбан", "Ширина", 0);

                Иначе

                               ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтраницыДоска", "Ширина", 1);

                               ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтраницыКанбан", "Ширина", 1);

                КонецЕсли;

КонецПроцедуры

 

&НаСервере

Функция ПолучитьПроектКалендаря()

               Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |              Проекты.Ссылка КАК Ссылка

                               |ИЗ

                               |              Справочник.Проекты КАК Проекты

                               |ГДЕ

                               |              Проекты.пр_КалендарьСотрудника = &пр_КалендарьСотрудника";

               

                Запрос.УстановитьПараметр("пр_КалендарьСотрудника", ТекущаяДоска);

               

                РезультатЗапроса = Запрос.Выполнить();

               

                ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

               

                Если ВыборкаДетальныеЗаписи.Следующий() Тогда

                              

        Возврат ВыборкаДетальныеЗаписи.Ссылка;

                КонецЕсли;

                Возврат Неопределено;

               

КонецФункции

 

&НаКлиенте

Процедура пр_ОткрытьНастройкиУведомлений()

                ПередаваемыеПараметры = Новый Структура("Проект", ПолучитьПроектКалендаря());

                ОткрытьФорму("Обработка.пр_НастройкиУведомлений.Форма.Форма", ПередаваемыеПараметры);

Конецпроцедуры

 

&НаКлиенте

Процедура пр_ОткрытьЖурнал()

                Массив = Новый Массив;

                Массив.Добавить("Уведомление отправлено успешно");

                Массив.Добавить("Уведомление не отправлено");

                ПередаваемыеПараметры = Новый Структура("СобытиеЖурналаРегистрации", Массив);

                ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПередаваемыеПараметры);

Конецпроцедуры

 

&НаКлиенте

Процедура пр_ОтправитьУведомлениеПоПросроченнымЗаданиям()

      пр_ОтправкаУведомленийПоПросроченнымЗаданиям.ОтправкаУведомления();

Конецпроцедуры

 

Внешняя обработка Регламентное задание

                  Функция СведенияОВнешнейОбработке () Экспорт

                                 РегламентныеДанные = Новый Структура;

                                 РегламентныеДанные.Вставить("Наименование","Реглментное задание отправки просроченных заданий");

                                 РегламентныеДанные.Вставить("Информация","Реглментное задание отправки просроченных заданий");

                                 РегламентныеДанные.Вставить("ВерсияБСП","2.1.8.1");

           РегламентныеДанные.Вставить("Версия","1.0");     

                                    РегламентныеДанные.Вставить("ФормированиеФоновогоЗадания",Истина); 

                                                  РегламентныеДанные.Вставить("Вид","ДополнительнаяОбработка");

            ТЗКоманд = Новый ТаблицаЗначений;

                                               ТЗКоманд.Колонки.Вставить("Идентификатор");

                                               ТЗКоманд.Колонки.Вставить("Представление");

           ТЗКоманд.Колонки.Вставить("Использование");

                                  ТЗКоманд.Колонки.Вставить("Показыватьоповещение");     

                                  СтрокаКоманды = ТЗКоманд.Добавить();

                                  СтрокаКоманды.Идентификатор ="Реглментное задание отправки просроченных заданий";

                                  СтрокаКоманды.Представление = "Реглментное задание отправки просроченных заданий";

                                  СтрокаКоманды.Использование = "ВызовСерверногоМетода";

                                  СтрокаКоманды.Показыватьоповещение = Истина;

                                  РегламентныеДанные.Вставить("Команды",ТЗКоманд);

                                  Возврат РегламентныеДанные;

                   КонецФункции

                   Процедура ВыполнитьКоманду(ИдентификаторКоманды,ПараметрыОбработки) Экспорт                

                              

                    пр_ОтправкаУведомленийПоПросроченнымЗаданиям.ОтправкаУведомления();

                   КонецПроцедуры

                  

 

 

3 сессия

Общий модуль ОбщегоНазначения

 

&ИзменениеИКонтроль("ИдентификаторОбъектаМетаданных")

Функция пр_ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных, ВызыватьИсключение)

    #Вставка

                Если ТипЗнч(ОписаниеОбъектаМетаданных) = Тип("Строка") Тогда

                               ИдентификаторРасширения = Справочники.ИдентификаторыОбъектовРасширений.НайтиПоНаименованию(ОписаниеОбъектаМетаданных, Истина);

                               Если ЗначениеЗаполнено(ИдентификаторРасширения) Тогда

                                               Возврат ИдентификаторРасширения;

                               КонецЕсли;

                КонецЕсли;

                #КонецВставки

                Возврат Справочники.ИдентификаторыОбъектовМетаданных.ИдентификаторОбъектаМетаданных(

                ОписаниеОбъектаМетаданных, ВызыватьИсключение);

КонецФункции

 

План счетов управленческий ФормаСчета

 

&НаКлиенте

&ИзменениеИКонтроль("УправлениеФормой")

Процедура пр_УправлениеФормой()

                // Прочие расчеты

                Элементы.АналитикаДоходовИРасходов.Видимость = Ложь;

                // Конец Прочие расчеты

                Если Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.КосвенныеЗатраты") Тогда

                               Элементы.СчетЗакрытия.Видимость = Истина;

                               Элементы.СпособРаспределения.Видимость = Истина;

                               Элементы.СпособРаспределения.СписокВыбора.Очистить();

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ОбъемВыпуска"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ПрямыеЗатраты"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.НеРаспределять"));

                               Элементы.СчетЗакрытия.Подсказка = ?(

                               ИспользоватьБюджетирование,

                               НСтр("ru='Счет автоматического закрытия при закрытии месяца и бюджетировании'"),

                               НСтр("ru='Счет автоматического закрытия при закрытии месяца'"));

                               Элементы.СпособРаспределения.Подсказка = НСтр(

                               "ru='Способ автоматического распределения на себестоимость выпущенной продукции при закрытии месяца'");

                ИначеЕсли Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.НезавершенноеПроизводство") Тогда

                               Элементы.СчетЗакрытия.Видимость = Истина;

                               Элементы.СпособРаспределения.Видимость = Истина;

                               Элементы.СпособРаспределения.СписокВыбора.Очистить();

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ОбъемВыпуска"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ПрямыеЗатраты"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.НеРаспределять"));

                               Элементы.СчетЗакрытия.Подсказка = ?(

                               ИспользоватьБюджетирование,

                               НСтр("ru='Счет автоматического закрытия при закрытии месяца и бюджетировании'"),

                               НСтр("ru='Счет автоматического закрытия при закрытии месяца'"));

                               Элементы.СпособРаспределения.Подсказка = НСтр(

                               "ru='Способ автоматического распределения на себестоимость выпущенной продукции при закрытии месяца для нематериальных затрат'");

                ИначеЕсли (ТипСчета <>  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы")

                               ИЛИ ТипСчета <>  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеРасходы")

                               ИЛИ ТипСчета <>  ПредопределенноеЗначение("Перечисление.ТипыСчетов.Расходы")

                               ИЛИ ТипСчета <>  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПроцентыПоКредитам")

                               ИЛИ ТипСчета <>  ПредопределенноеЗначение("Перечисление.ТипыСчетов.Доходы"))

                               И (Объект.ТипСчета =  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы")

                               ИЛИ Объект.ТипСчета =  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеРасходы")

                               ИЛИ Объект.ТипСчета =  ПредопределенноеЗначение("Перечисление.ТипыСчетов.Расходы")

                               ИЛИ Объект.ТипСчета =  ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПроцентыПоКредитам")

                               ИЛИ Объект.ТипСчета =  ПредопределенноеЗначение("Перечисление.ТипыСчетов.Доходы")) Тогда

                               Элементы.СчетЗакрытия.Видимость = Ложь;

                               Элементы.СпособРаспределения.Видимость = Истина;

                               Элементы.СпособРаспределения.СписокВыбора.Очистить();

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ОбъемПродаж"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ВыручкаОтПродаж"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.СебестоимостьПродаж"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ВаловаяПрибыль"));

                Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.НеРаспределять"), НСтр("ru = 'Прямое распределение'"));

                              

                               #Вставка    

Элементы.СпособРаспределения.СписокВыбора.Добавить(ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.пр_ПоСпискуПроектов"));

                               #КонецВставки

                              

                               Элементы.СпособРаспределения.Подсказка = ?(

                               ИспользоватьБюджетирование,

                               НСтр("ru='Способ автоматического распределения на финансовый результат при закрытии месяца и бюджетировании'"),

                               НСтр("ru='Способ автоматического распределения на финансовый результат при закрытии месяца'"));

 

                               // Прочие расчеты

                               Если Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеДоходы")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеРасходы")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.КосвенныеЗатраты")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.НезавершенноеПроизводство")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.Расходы")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПроцентыПоКредитам")

                                               ИЛИ Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.НераспределеннаяПрибыль") Тогда

                                               Элементы.АналитикаДоходовИРасходов.Видимость = Истина;

                               Иначе

                                               Элементы.АналитикаДоходовИРасходов.Видимость = Ложь;

                               КонецЕсли;

                               // Конец Прочие расчеты

                               // Прочие расчеты

                ИначеЕсли Объект.ТипСчета = ПредопределенноеЗначение("Перечисление.ТипыСчетов.ПрочиеОборотныеАктивы") Тогда

                               Элементы.АналитикаДоходовИРасходов.Видимость = Истина;

                               Элементы.СпособРаспределения.Видимость = Ложь;

                               Элементы.СчетЗакрытия.Видимость = Ложь;

                               // Конец Прочие расчеты

                Иначе

                               Элементы.СпособРаспределения.Видимость = Ложь;

                               Элементы.СчетЗакрытия.Видимость = Ложь;

                КонецЕсли;

                Элементы.Фильтр.Видимость = Объект.СпособРаспределения = ПредопределенноеЗначение("Перечисление.БазыРаспределенияРасходов.ПрямыеЗатраты");

КонецПроцедуры

 

Документ Закрытие месяца Модуль объекта

 

&ИзменениеИКонтроль("СформироватьТаблицуБазыРаспределенияФинансовогоРезультата")

Функция пр_СформироватьТаблицуБазыРаспределенияФинансовогоРезультата(БазаРаспределения, ФильтрПоСтруктурнаяЕдиница, ФильтрПоНаправлениеДеятельности, ФильтрПоЗаказ, ФильтрПоПроект)

 

                #Вставка    

                ТекущиеПравилаРаспределения = Документы.пр_ПравилаРаспределения.НайтиПоРеквизиту("ДатаРаспределенияРасходов", НачалоДня(КонецМесяца(Дата)));

                Если НЕ ТекущиеПравилаРаспределения.Пустая() И ТекущиеПравилаРаспределения<>Неопределено Тогда

                               Если БазаРаспределения = ТекущиеПравилаРаспределения.СпособРаспределения Тогда

                                               ФильтрПоПроект = Новый Массив;

                                               Для Каждого ТекущаяСтрока Из ТекущиеПравилаРаспределения.ПроектыДляРаспределенияРасходов Цикл

                                                               ФильтрПоПроект.Добавить(ТекущаяСтрока.Проект);

                                               КонецЦикла;

                               КонецЕсли;

                КонецЕсли;

                #КонецВставки

               

                ТаблицаРезультата = Новый ТаблицаЗначений;

 

                Запрос = Новый Запрос;

    #Удаление

                Если БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВыручкаОтПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.СебестоимостьПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ОбъемПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВаловаяПрибыль Тогда

                               Если БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВыручкаОтПродаж Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СуммаОборот)";

                               ИначеЕсли БазаРаспределения = Перечисления.БазыРаспределенияРасходов.СебестоимостьПродаж Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СебестоимостьОборот)";

                               ИначеЕсли БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВаловаяПрибыль Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот)";

                               Иначе

                                               ТекстБазы = "СУММА(ПродажиОбороты.КоличествоОборот)";

                               КонецЕсли;

      #КонецУдаления

                  #Вставка  

                   Если БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВыручкаОтПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.СебестоимостьПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ОбъемПродаж

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВаловаяПрибыль

                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.пр_ПоСпискуПроектов Тогда

 

                               Если БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВыручкаОтПродаж

                                               ИЛИ БазаРаспределения = Перечисления.БазыРаспределенияРасходов.пр_ПоСпискуПроектов

                                               Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СуммаОборот)";

                               ИначеЕсли БазаРаспределения = Перечисления.БазыРаспределенияРасходов.СебестоимостьПродаж Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СебестоимостьОборот)";

                               ИначеЕсли БазаРаспределения = Перечисления.БазыРаспределенияРасходов.ВаловаяПрибыль Тогда

                                               ТекстБазы = "СУММА(ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот)";

                               Иначе

                                               ТекстБазы = "СУММА(ПродажиОбороты.КоличествоОборот)";

                               КонецЕсли;

                  #КонецВставки

                               ТекстЗапроса =

                               "ВЫБРАТЬ

                               |              ПродажиОбороты.Организация КАК Организация,

                               |              ПродажиОбороты.Номенклатура.НаправлениеДеятельности КАК НаправлениеДеятельности,

                               |              ПродажиОбороты.ЗаказПокупателя КАК Заказ,

                               |                ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаВыручкиОтПродаж КАК СчетУчетаВыручкиОтПродаж,

                               |                ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаСебестоимостиПродаж КАК СчетУчетаСебестоимостиПродаж,

                               |              ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаПрибыли КАК СчетУчетаПрибыли,

                               |              // ТекстБазы КАК База,

                               |              ПродажиОбороты.Подразделение КАК СтруктурнаяЕдиница,

                               |              ПродажиОбороты.Проект КАК Проект

                               |ИЗ

                               |              РегистрНакопления.Продажи.Обороты(

                               |                                             &НачДата,

                               |                                             &КонДата,

                               |                                             Авто,

                               |                                             Организация = &Организация

                               |                                                             // ФильтрПоСтруктурнаяЕдиница

                               |                                                             // ФильтрПоПроект

                               |                                                             // ФильтрПоНаправлениеДеятельности

                               |                                                             // ФильтрПоЗаказ

                               |                                             ) КАК ПродажиОбороты

                               |ГДЕ

                               |              ПродажиОбороты.Номенклатура.НаправлениеДеятельности <> ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.Прочее)

                               |СГРУППИРОВАТЬ ПО

                               |              ПродажиОбороты.Организация,

                               |              ПродажиОбороты.Номенклатура.НаправлениеДеятельности,

                               |              ПродажиОбороты.ЗаказПокупателя,

                               |                ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаВыручкиОтПродаж,

                               |                ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаСебестоимостиПродаж,

                               |              ПродажиОбороты.Номенклатура.НаправлениеДеятельности.СчетУчетаПрибыли,

                               |              ПродажиОбороты.Подразделение,

                               |              ПродажиОбороты.Проект";

 

                               ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ФильтрПоСтруктурнаяЕдиница", ?(ЗначениеЗаполнено(ФильтрПоСтруктурнаяЕдиница), "И Подразделение В (&МассивСтруктурныхЕдиниц)", ""));

                               ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ФильтрПоПроект", ?(ЗначениеЗаполнено(ФильтрПоПроект), "И Проект В (&МассивПроектов)", ""));

                               ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ФильтрПоНаправлениеДеятельности", ?(ЗначениеЗаполнено(ФильтрПоНаправлениеДеятельности), "И Номенклатура.НаправлениеДеятельности В (&МассивНаправленийДеятельности)", ""));

                               ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ФильтрПоЗаказ", ?(ЗначениеЗаполнено(ФильтрПоЗаказ), "И ЗаказПокупателя В (&МассивЗаказов)", ""));

                               ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ТекстБазы", ТекстБазы);

 

                Иначе

                               Возврат ТаблицаРезультата;

                КонецЕсли;

 

                Запрос.Текст = ТекстЗапроса;

 

                Запрос.УстановитьПараметр("НачДата"    , ДополнительныеСвойства.ДляПроведения.НачальнаяДатаПериода);

                Запрос.УстановитьПараметр("КонДата"    , ДополнительныеСвойства.ДляПроведения.КонечнаяДатаПериода);

                Запрос.УстановитьПараметр("Организация", ДополнительныеСвойства.ДляПроведения.Организация);

 

                Если ЗначениеЗаполнено(ФильтрПоЗаказ) Тогда

                               Если ТипЗнч(ФильтрПоЗаказ) = Тип("Массив") Тогда

                                               Запрос.УстановитьПараметр("МассивЗаказов", ФильтрПоЗаказ);

                               Иначе

                                               МассивДляОтбора = Новый Массив;

                                               МассивДляОтбора.Добавить(ФильтрПоЗаказ);

                                               Запрос.УстановитьПараметр("МассивЗаказов", МассивДляОтбора);

                               КонецЕсли;

                КонецЕсли;

 

                Если ЗначениеЗаполнено(ФильтрПоСтруктурнаяЕдиница) Тогда

                               Если ТипЗнч(ФильтрПоСтруктурнаяЕдиница) = Тип("Массив") Тогда

                                               Запрос.УстановитьПараметр("МассивСтруктурныхЕдиниц", ФильтрПоСтруктурнаяЕдиница);

                               Иначе

                                               МассивДляОтбора = Новый Массив;

                                               МассивДляОтбора.Добавить(ФильтрПоСтруктурнаяЕдиница);

                                               Запрос.УстановитьПараметр("МассивСтруктурныхЕдиниц", МассивДляОтбора);

                               КонецЕсли;

                КонецЕсли;

 

                Если ЗначениеЗаполнено(ФильтрПоПроект) Тогда

                               Если ТипЗнч(ФильтрПоПроект) = Тип("Массив") Тогда

                                               Запрос.УстановитьПараметр("МассивПроектов", ФильтрПоПроект);

                               Иначе

                                               МассивДляОтбора = Новый Массив;

                                               МассивДляОтбора.Добавить(ФильтрПоПроект);

                                               Запрос.УстановитьПараметр("МассивПроектов", МассивДляОтбора);

                               КонецЕсли;

                КонецЕсли;

 

                Если ЗначениеЗаполнено(ФильтрПоНаправлениеДеятельности) Тогда

                               Если ТипЗнч(ФильтрПоНаправлениеДеятельности) = Тип("Массив") Тогда

                                               Запрос.УстановитьПараметр("МассивНаправленийДеятельности", ФильтрПоНаправлениеДеятельности);

                               Иначе

                                               МассивДляОтбора = Новый Массив;

                                               МассивДляОтбора.Добавить(ФильтрПоНаправлениеДеятельности);

                                               Запрос.УстановитьПараметр("МассивНаправленийДеятельности", ФильтрПоНаправлениеДеятельности);

                               КонецЕсли;

                КонецЕсли;

 

                ТаблицаРезультата = Запрос.Выполнить().Выгрузить();

 

                Возврат ТаблицаРезультата;

 

КонецФункции

 

 

 

 

 


 

4 сессия

Процедура ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(Показатель, ПараметрыОтчета, ТаблицаРезультата, ИмяКолонкиПопериоду, ПлановоеЗначение = 0, ВсегоПлан = 0, ВсегоФакт = 0) Экспорт

  Если ЗначениеЗаполнено(ПлановоеЗначение) Тогда
    
    Попытка
      ТаблицаРезультата.ИтогоПлан = ПлановоеЗначение;
    Исключение
      ТаблицаРезультата.Итого = ПлановоеЗначение;
    КонецПопытки;
    
    Попытка
      Выполнить("ТаблицаРезультата." + ИмяКолонкиПопериоду + " = " + ?(ТипЗнч(ПлановоеЗначение) = Тип("Null"), 0, ПлановоеЗначение) + ";");
    Исключение
    КонецПопытки;
    
  КонецЕсли;
  
  Если ЗначениеЗаполнено(ВсегоПлан) И ЗначениеЗаполнено(ВсегоФакт) Тогда
    
    Если Строка(ПараметрыОтчета.ПланФакт) = "План факт" Тогда
      ТаблицаРезультата.ИтогоПлан = ВсегоПлан;
      ТаблицаРезультата.ИтогоФакт = ВсегоФакт;
    ИначеЕсли Строка(ПараметрыОтчета.ПланФакт) = "только план" Тогда
      ТаблицаРезультата.Итого = ВсегоПлан;
    Иначе
      ТаблицаРезультата.Итого = ВсегоФакт;
    КонецЕсли;
    
  КонецЕсли;
  
КонецПроцедуры

---------------------------------------------------------

Процедура ЗаполнитьДанныеФактаПоМесяцам(ВыборкаДанныеФакта, ДанныеФактаПоМесяцам)

  ВыборкаДанныеФакта.Сбросить();
  
  Пока ВыборкаДанныеФакта.Следующий() Цикл
    Ключ = Строка(Формат(ВыборкаДанныеФакта.Год, "ЧГ=0")) + Формат(ВыборкаДанныеФакта.Месяц, "ЧЦ=2; ЧВН=");
    ДанныеФактаПоМесяцам.Вставить(Ключ, ВыборкаДанныеФакта.КоличествоЧасов);
  КонецЦикла;
  
КонецПроцедуры

-------------------------------------------------------------------------------------------------------

Документ ПланПродаж форма документа

&НаСервере

Процедура пр_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

                ПолеФормы=Элементы.Добавить("пр_ОбщаяВыручкаЗаМесяц", Тип("ПолеФормы"), Элементы.ШапкаПраво);

                ПолеФормы.Вид=ВидПоляФормы.ПолеВвода;

                ПолеФормы.Заголовок="Общая выручка за месяц";

                ПолеФормы.ПутьКДанным="Объект.пр_ОбщаяВыручкаЗаМесяц";

КонецПроцедуры

 

Документ ПланПродаж модуль объекта

&ИзменениеИКонтроль("ОбработкаПроведения")

Процедура пр_ОбработкаПроведения(Отказ, РежимПроведения)

                // Инициализация дополнительных свойств для проведения документа

                ПроведениеДокументовУНФ.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства);

                // Инициализация данных документа

                Документы.ПланПродаж.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);

                // Подготовка наборов записей

                ПроведениеДокументовУНФ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);

                // Отражение в разделах учета

                ПроведениеДокументовУНФ.ОтразитьДвижения("ПланыПродаж", ДополнительныеСвойства.ТаблицыДляДвижений, Движения, Отказ);

                // Запись наборов записей

                ПроведениеДокументовУНФ.ЗаписатьНаборыЗаписей(ЭтотОбъект);

                ПроведениеДокументовУНФ.ЗакрытьМенеджерВременныхТаблиц(ЭтотОбъект); 

                #Вставка

                Движения.пр_ПлановаяВыработкаПоПроектам.Записывать = Истина;

                Для Каждого ТекСтрокаВыработки Из Запасы Цикл

                               Двидение = Движения.пр_ПлановаяВыработкаПоПроектам.Добавить();

                               Движения.Период = Дата;

                               Движения.ОбъектПланирования = ТекСтрокаВыработки.ОбъектПланирования;

                               Движения.ДатаПлана = НачалоПланирования;

                               Движения.Проект = ТекСтрокаВыработки.ЗаказПолучателя.Проект;

                               Движения.СуммаПлана = ТекСтрокаВыработки.Сумма;

                КонецЦикла;

                #КонецВставки

КонецПроцедуры

 

Общий модуль ПодключаемыеПроцедуры

Процедура ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(Показатель, ПараметрыОтчета, ТаблицаРезультата) Экспорт

               

                Периоды  = Новый Массив;

                ТекущийПериод =  ПараметрыОтчета.ПериодОтчета.ДатаНачала;

               

                Пока ПараметрыОтчета.ПериодОтчета.ДатаОкончания >= ТекущийПериод Цикл

                              

                               Периоды.Добавить(ТекущийПериод);

                              

                               Если ПараметрыОтчета.Периодичность = Перечисления.Периодичность.Месяц Тогда

                                               КоличествоМесяцев = 1;

                               ИначеЕсли ПараметрыОтчета.Периодичность = Перечисления.Периодичность.Квартал Тогда

                                               КоличествоМесяцев = 3;

                               Иначе

                                               КоличествоМесяцев = 6;

                               КонецЕсли;

                              

                               ТекущийПериод = ДобавитьМесяц(ТекущийПериод, КоличествоМесяцев);

                              

                КонецЦикла;

               

                ИдентификаторПоказателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Показатель, "ИдентификаторПоказателя");

                Для каждого Период Из Периоды Цикл

                               НоваяСтрока =  ТаблицаРезультата.Добавить();

                               НоваяСтрока.Показатель = Показатель;

                               НоваяСтрока.ИдентификаторПоказателя = ИдентификаторПоказателя;

                               НоваяСтрока.Период = Период;

                               НоваяСтрока.Сумма = 100;

                               НоваяСтрока.СуммаПлан = 100;

                               НоваяСтрока.СуммаФакт = 100

                КонецЦикла;

               

КонецПроцедуры

 

 

Отчет АнализБизнеса модуль менеджера

 

&ИзменениеИКонтроль("ЗаполнитьДеревоПоказателей")

Процедура пр_ЗаполнитьДеревоПоказателей(ДанныеОтчета, Выборка, ТаблицаПодключаемыхПоказателей, ИтоговоеДерево, Аналитика)

 

                МассивПоказателейДляПересчета = Новый Массив;

 

                Если ДанныеОтчета.ВидОтчетаОтбор = Перечисления.ВидыФинансовыхОтчетов.ДенежныйПоток Тогда

                               ИсходноеДерево = ДанныеОтчета.ДеревоПоказателейДенежныйПоток.Строки;

                Иначе

                               ИсходноеДерево = ДанныеОтчета.ДеревоПоказателейДоходыРасходы.Строки;

                КонецЕсли;

                // Добавляем показатели

                СкопироватьДеревоПоказателейРекурсивно(ИтоговоеДерево, ИсходноеДерево, Аналитика);

                Пока Выборка.Следующий() Цикл

                               ДобавитьСтрокуДерева(ИтоговоеДерево, Выборка, ДанныеОтчета, МассивПоказателейДляПересчета);

                КонецЦикла;

                Если ТаблицаПодключаемыхПоказателей <> Неопределено Тогда

                               Для Каждого СтрокаПоказателя Из ТаблицаПодключаемыхПоказателей Цикл

                                               ДобавитьСтрокуДерева(ИтоговоеДерево, СтрокаПоказателя, ДанныеОтчета, МассивПоказателейДляПересчета);

                               КонецЦикла;

                КонецЕсли;

               

                #Вставка

Если ИтоговоеДерево[1].Показатель.Наименование = "Выработка (часы)" Тогда

    ДатаНачалаМесяца = ПолучитьДатуНачалаПериода(ДанныеОтчета.ПериодОтчета);

    ДатаКонцаПериода = ПолучитьДатуКонцаПериода(ДанныеОтчета.ПериодОтчета);

    ВыборкаДанныеПлана = Неопределено; //Здесь будут храниться плановые данные

    ВыборкаДанныеФакта = Неопределено; //Здесь будут храниться фактические данные

    ПлановыеЧасы = 0; //Общее количество плановых часов для проекта

    ВыборкаДанныеПлана = ПолучитьДанныеПланаЗаПериод(ДатаНачалаМесяца, ДатаКонцаПериода, ИтоговоеДерево[1].Аналитика);

    ВыборкаДанныеФакта = ПолучитьДанныеФактаЗаПериод(ДатаНачалаМесяца, ДатаКонцаПериода, ИтоговоеДерево[1].Аналитика);

    ПлановыеЧасы = ПолучитьПлановыеЧасыДляПроекта(ИтоговоеДерево[1].Аналитика);

    ОбработатьДанныеПоМесяцам(ДанныеОтчета, ИтоговоеДерево, ДатаНачалаМесяца, ДатаКонцаПериода,

        ВыборкаДанныеПлана, ВыборкаДанныеФакта, ПлановыеЧасы);

КонецЕсли;

                #КонецВставки

                ВременныеИдентификаторыПоказателейДляФормул = Новый Соответствие;

                ЗаполнитьИдентификаторыПоказателейДляФормулРекурсивно(ИтоговоеДерево, ВременныеИдентификаторыПоказателейДляФормул);

 

                ТаблицаПриоритетовФормул = ПоказателиБизнесаФормулы.СформироватьТаблицуПриоритетовФормул(ИтоговоеДерево, ВременныеИдентификаторыПоказателейДляФормул);

 

                Для каждого СтрокаФормулы Из ТаблицаПриоритетовФормул Цикл

                               РассчитатьФормулу(ДанныеОтчета, ИтоговоеДерево, СтрокаФормулы.Формула, ВременныеИдентификаторыПоказателейДляФормул);

                КонецЦикла;

 

КонецПроцедуры

 

Функция ПолучитьДатуНачалаПериода(ПериодОтчета)

    СтрокаДаты = Лев(ПериодОтчета, 10);

    Возврат Дата(Прав(СтрокаДаты, 4), Сред(СтрокаДаты, 4, 2), Лев(СтрокаДаты, 2));

КонецФункции

 

Функция ПолучитьДатуКонцаПериода(ПериодОтчета)

    СтрокаДаты = Прав(ПериодОтчета, 10);

    Возврат Дата(Прав(СтрокаДаты, 4), Сред(СтрокаДаты, 4, 2), Лев(СтрокаДаты, 2));

КонецФункции

 

Функция ПолучитьДанныеПланаЗаПериод(ДатаНачала, ДатаКонца, Проект)

               //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

                // Данный фрагмент построен конструктором.

                // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

               

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |              пр_ПлановаяВыработкаПоПроектам.Регистратор.пр_ОбщаяВыручкаЗаМесяц КАК Регистраторпр_ОбщаяВыручкаЗаМесяц,

                               |              пр_ПлановаяВыработкаПоПроектам.ОбъектПланирования КАК ОбъектПланирования,

                               |              СУММА(пр_ПлановаяВыработкаПоПроектам.СуммаПлана) КАК СуммаПлана,

                               |              МЕСЯЦ(пр_ПлановаяВыработкаПоПроектам.ДатаПлана) КАК Месяц,

                               |              ГОД(пр_ПлановаяВыработкаПоПроектам.ДатаПлана) КАК Год

                               |ИЗ

                               |              РегистрСведений.пр_ПлановаяВыработкаПоПроектам КАК пр_ПлановаяВыработкаПоПроектам

                               |ГДЕ

                               |              пр_ПлановаяВыработкаПоПроектам.Проект = &Проект

                               |              И пр_ПлановаяВыработкаПоПроектам.ДатаПлана МЕЖДУ &ДатаНачала И &ДатаКонца

                               |

                               |СГРУППИРОВАТЬ ПО

                               |              ГОД(пр_ПлановаяВыработкаПоПроектам.ДатаПлана),

                               |              МЕСЯЦ(пр_ПлановаяВыработкаПоПроектам.ДатаПлана),

                               |              пр_ПлановаяВыработкаПоПроектам.ОбъектПланирования,

                               |              пр_ПлановаяВыработкаПоПроектам.Регистратор.пр_ОбщаяВыручкаЗаМесяц";

               

                Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);

                Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);

                Запрос.УстановитьПараметр("Проект", Проект);

               

                Возврат Запрос.Выполнить().Выбрать();

                               //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецФункции

 

Функция ПолучитьДанныеФактаЗаПериод(ДатаНачала, ДатаКонца, Проект)

                //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

                // Данный фрагмент построен конструктором.

                // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

               

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |              СУММА(Продажи.Количество) КАК КоличествоЧасов,

                               |              МЕСЯЦ(Продажи.Период) КАК Месяц,

                               |              ГОД(Продажи.Период) КАК Год

                               |ИЗ

                               |              РегистрНакопления.Продажи КАК Продажи

                               |ГДЕ

                               |              Продажи.Период >= &ДатаНачала

                               |              И Продажи.Период <= &ДатаКонца

                               |              И Продажи.Проект = &Проект

                               |

                               |СГРУППИРОВАТЬ ПО

                               |              МЕСЯЦ(Продажи.Период),

                               |              ГОД(Продажи.Период)";

               

                Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);

                Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);

                Запрос.УстановитьПараметр("Проект", Проект);

               

                Возврат Запрос.Выполнить().Выбрать();

КонецФункции

 

Функция ПолучитьПлановыеЧасыДляПроекта(Проект)

               //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

                // Данный фрагмент построен конструктором.

                // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

               

                Запрос = Новый Запрос;

                Запрос.Текст =

                               "ВЫБРАТЬ

                               |              пр_ПлановоеКоличествоЧасовДляПроекта.ПланЧасов КАК ПланЧасов

                               |ИЗ

                               |              РегистрСведений.пр_ПлановоеКоличествоЧасовДляПроекта КАК пр_ПлановоеКоличествоЧасовДляПроекта

                               |ГДЕ

                               |              пр_ПлановоеКоличествоЧасовДляПроекта.Проект = &Проект";

               

                Запрос.УстановитьПараметр("Проект", Проект);

               

                Выборка = Запрос.Выполнить().Выбрать();

                Если Выборка.Следующий() Тогда

                               Возврат Выборка.ПланЧасов;

                КонецЕсли;

                Возврат 0;

КонецФункции

 

Процедура ОбработатьДанныеПоМесяцам(ДанныеОтчета, ИтоговоеДерево, ДатаНачалаМесяца, ДатаКонцаПериода, ВыборкаДанныеПлана,

    ВыборкаДанныеФакта, ПлановыеЧасы)

 

    ВсегоПлан = 0;

    ВсегоФакт = 0;

   

    ДанныеПланаПоМесяцам = Новый Соответствие;

    ДанныеФактаПоМесяцам = Новый Соответствие;

   

    ЗаполнитьДанныеПланаПоМесяцам(ВыборкаДанныеПлана, ДанныеПланаПоМесяцам);

    ЗаполнитьДанныеФактаПоМесяцам(ВыборкаДанныеФакта, ДанныеФактаПоМесяцам);

   

    ТекДата = ДатаНачалаМесяца;

    Пока ТекДата <= ДатаКонцаПериода Цикл

        КлючМесяца = Формат(ТекДата, "Дф=ууууММ");

        ДатаКонцаМесяца = КонецМесяца(ТекДата);

       

        Если Строка(ДанныеОтчета.ПланФакт) = "План факт" Или Строка(ДанныеОтчета.ПланФакт) = "План" Тогда

            ОбработатьПлановыеДанныеЗаМесяц(ДанныеОтчета, ИтоговоеДерево, ТекДата, ДанныеПланаПоМесяцам, КлючМесяца);

        КонецЕсли;

       

        ФактЧасов = 0;

        Если ДанныеФактаПоМесяцам[КлючМесяца] <> Неопределено Тогда

            ФактЧасов = ДанныеФактаПоМесяцам[КлючМесяца];

        КонецЕсли;

       

        ВсегоФакт = ВсегоФакт + ФактЧасов;

       

        ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

            ИтоговоеДерево[1].Показатель, ДанныеОтчета, ИтоговоеДерево[1],

            СформироватьИмяКолонкиПоПериоду(ТекДата), ФактЧасов, , ФактЧасов);

       

        ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

            ИтоговоеДерево[1].Показатель, ДанныеОтчета, ИтоговоеДерево[1],

            СформироватьИмяКолонкиПоПериоду(ТекДата) + "План", ПлановыеЧасы, ПлановыеЧасы);

       

        ВсегоПлан = ВсегоПлан + ПлановыеЧасы;

       

        ТекДата = ДобавитьМесяц(ТекДата, 1);

    КонецЦикла;

   

    ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

        ИтоговоеДерево[1].Показатель, ДанныеОтчета, ИтоговоеДерево[1],

        СформироватьИмяКолонкиПоПериоду(ТекДата), ВсегоПлан, ВсегоФакт);

       

КонецПроцедуры

 

Процедура ЗаполнитьДанныеПланаПоМесяцам(ВыборкаДанныеПлана, ДанныеПланаПоМесяцам)

    ВыборкаДанныеПлана.Сбросить();

   

    Пока ВыборкаДанныеПлана.Следующий() Цикл

        Ключ = Строка(Формат(ВыборкаДанныеПлана.Год, "ЧТ=0")) + Формат(ВыборкаДанныеПлана.Месяц, "ЧЦ=2; ЧВН=");

       

        ДанныеСтроки = Новый Структура;

        ДанныеСтроки.Вставить("Месяц", ВыборкаДанныеПлана.Месяц);

        ДанныеСтроки.Вставить("Год", ВыборкаДанныеПлана.Год);

        ДанныеСтроки.Вставить("СуммаПлана", ВыборкаДанныеПлана.СуммаПлана);

        ДанныеСтроки.Вставить("ОбъектПланирования", ВыборкаДанныеПлана.ОбъектПланирования);

        ДанныеСтроки.Вставить("ОбщаяВыручкаЗаМесяц", ВыборкаДанныеПлана.ОбщаяВыручкаЗаМесяц);

       

        МассивДанных = ДанныеПланаПоМесяцам.Получить(Ключ);

        Если МассивДанных = Неопределено Тогда

            МассивДанных = Новый Массив;

            ДанныеПланаПоМесяцам.Вставить(Ключ, МассивДанных);

        КонецЕсли;

       

        МассивДанных.Добавить(ДанныеСтроки);

    КонецЦикла;

КонецПроцедуры

 

Процедура ЗаполнитьДанныеФактаПоМесяцам(ВыборкаДанныеФакта, ДанныеФактаПоМесяцам)

    ВыборкаДанныеФакта.Сбросить();

   

    Пока ВыборкаДанныеФакта.Следующий() Цикл

        Ключ = Строка(Формат(ВыборкаДанныеФакта.Год, "ЧГ=0")) + Формат(ВыборкаДанныеФакта.Месяц, "ЧЦ=2; ЧВН=");

        ДанныеФактаПоМесяцам.Вставить(Ключ, ВыборкаДанныеФакта.КоличествоЧасов);

    КонецЦикла;

КонецПроцедуры

 

Процедура ОбработатьПлановыеДанныеЗаМесяц(ДанныеОтчета, ИтоговоеДерево, ДатаМесяца, ДанныеПланаПоМесяцам, КлючМесяца)

    СуммаПланаСебестоимость = 0;

    СуммаПланаКосвенныеРасходы = 0;

    МассивДанных = ДанныеПланаПоМесяцам.Получить(КлючМесяца);

    Если МассивДанных <> Неопределено Тогда

       

        Для Каждого ДанныеСтроки Из МассивДанных Цикл

            ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

                ИтоговоеДерево[0].Показатель, ДанныеОтчета, ИтоговоеДерево[0],

                СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План",

                ДанныеСтроки.ОбщаяВыручкаЗаМесяц, ДанныеСтроки.ОбщаяВыручкаЗаМесяц);

           

            ОбъектПланирования = Строка(ДанныеСтроки.ОбъектПланирования);

            СуммаПлана = ДанныеСтроки.СуммаПлана;

            Если ОбъектПланирования = "Разработка по часам" Тогда

                ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

                    ИтоговоеДерево[2].Строки[0].Показатель, ДанныеОтчета, ИтоговоеДерево[2].Строки[0],

                    СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПлана, СуммаПлана);

                   

                СуммаПланаСебестоимость = СуммаПланаСебестоимость + СуммаПлана;

               

            ИначеЕсли ОбъектПланирования = "Поддержка DevOps" Тогда

               

                ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

                    ИтоговоеДерево[5].Строки[0].Показатель, ДанныеОтчета, ИтоговоеДерево[5].Строки[0],

                    СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПлана, СуммаПлана);

                СуммаПланаКосвенныеРасходы = СуммаПланаКосвенныеРасходы + СуммаПлана;

            ИначеЕсли ОбъектПланирования = "Аренда серверов" Тогда

                ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

                    ИтоговоеДерево[5].Строки[1].Показатель, ДанныеОтчета, ИтоговоеДерево[5].Строки[1],

                    СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПлана, СуммаПлана);

                СуммаПланаКосвенныеРасходы = СуммаПланаКосвенныеРасходы + СуммаПлана;

            КонецЕсли;

                               КонецЦикла;

ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

    ИтоговоеДерево[2].Показатель, ДанныеОтчета, ИтоговоеДерево[2],

    СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПланаСебестоимость, СуммаПланаСебестоимость);

 

ПодключаемыеПроцедуры.ПолучитьПоказатель_e234a8b0_6960_11ec_879d_001a7dda7113(

    ИтоговоеДерево[5].Показатель, ДанныеОтчета, ИтоговоеДерево[5],

    СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПланаКосвенныеРасходы, СуммаПланаКосвенныеРасходы);

КонецЕсли;

КонецПроцедуры