Заметка 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],
СформироватьИмяКолонкиПоПериоду(ДатаМесяца) + "План", СуммаПланаКосвенныеРасходы, СуммаПланаКосвенныеРасходы);
КонецЕсли;
КонецПроцедуры