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(Показатель, ПараметрыОтчета, ТаблицаРезультата) Экспорт

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

Пока ПараметрыОтчета.ПериодОтчета.ДатаОкончания >= ТекущийПериод Цикл
	
	Периоды.Добавить(ТекущийПериод);
	
	Если ПараметрыОтчета.Периодичность = Перечисления.Периодичность.Месяц Тогда
		КоличествоМесяцев = 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], СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПланаКосвенныеРасходы, СуммаПланаКосвенныеРасходы); КонецЕсли; КонецПроцедуры