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