gifts2017

Ввод документов на основании Заявки на кассовый расход

Опубликовал Кирилл Рубинчик (ivanchai) в раздел Программирование - Практика программирования

Пример ввода в ББУ на основании двух документов - ЗаявкаНаКассовыйРасход и ЗаявкаНаКассовыйРасходСокращенная, документов ПринятоеБюджетноеОбязательство и ОбязательствоПоПД

Добавляем в реквизиты документов ПринятоеБюджетноеОбязательство и ПринятоеОбязательствоПоПД реквизит СсылкаНаОснование с составным типом, состоящим из ДокументСсылка.ЗаявкаНаКассовыйРасход, СправочникСсылка.Договоры, ДокументСсылка.ЗаявкаНаКассовыйРасходСокращенная, ДокументСсылка.ПланФинансированияОбязательства

В свойствах документов ПринятоеБюджетноеОбязательство и ПринятоеОбязательствоПоПД на закладке Ввод на основании добавляем документы ЗаявкаНаКассовыйРасход и ЗаявкаНаКассовыйРасходСокращенная 

В модуле документа ПринятоеБюджетноеОбязательство дописываем в в конец процедуры ОбработкаЗаполнения(Основание) 

 

Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("СправочникСсылка.Договоры") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;
Договор= Основание.Ссылка;
Учреждение= Основание.Учреждение;
ВидОперации = Справочники.ВидыОпераций.ПринятоеБюджетноеОбязательство_ЗаСчетЛБО;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ОпределитьПланФинансированияПоДоговору();

ЗаполнитьДанныеДляБюджетногоУчета();

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПланФинансированияОбязательства") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Договор.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.Договор.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;
Договор= Основание.Договор.Ссылка;
Учреждение= Основание.Договор.Учреждение;
ВидОперации= Справочники.ВидыОпераций.ПринятоеБюджетноеОбязательство_ЗаСчетЛБО;
ПланФинансирования= Основание;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ЗаполнитьНаОснованииПланаФинансирования(ПланФинансирования);

ЗаполнитьДанныеДляБюджетногоУчета();

// by ivanchai ввод на основании документа ЗаявкаНаКассовыйРасход <<
ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаявкаНаКассовыйРасход") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаявкаНаКассовыйРасходСокращенная") Тогда

Если Основание.КВД = Перечисления.КВД.Бюджет Тогда 
Если НЕ ЗначениеЗаполнено(Основание.Договор.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.Договор.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|ПринятоеБюджетноеОбязательство.Ссылка
|ИЗ
|Документ.ПринятоеБюджетноеОбязательство КАК ПринятоеБюджетноеОбязательство
|ГДЕ
|ПринятоеБюджетноеОбязательство.СсылкаНаОснование = &Основание";

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

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

Пока Результат.Следующий() Цикл

ДокОбъект = Результат.Ссылка.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДокОбъект.УстановитьПометкуУдаления(Истина);

МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Результат.Ссылка);

Если НайтиПоСсылкам(МассивСсылок).Количество() = 0 Тогда
ДокОбъект.Удалить();
КонецЕсли;

КонецЦикла;

СсылкаНаОснование = Основание;

Договор= Основание.Договор.Ссылка;
Учреждение= Основание.Договор.Учреждение;
ВидОперации= Справочники.ВидыОпераций.ПринятоеБюджетноеОбязательство_ЗаСчетЛБО;
Дата= Основание.Дата;
ЛицевойСчет         = Основание.ЛицевойСчет;

ЗаполнениеРеквизитовПоВыбранномуДоговору();

//ЗаполнитьНаОснованииПланаФинансирования(ПланФинансирования);

ЗаполнитьДанныеДляБюджетногоУчета();

Для Каждого СтрокаИсточник Из Основание.РасшифровкаПлатежа Цикл

СтрокаПриемник = ЭтотОбъект.РасшифровкаОбязательства.Добавить();

СтрокаПриемник.РазделЛицевогоСчета = СтрокаИсточник.РазделЛицевогоСчета;
СтрокаПриемник.КБК = СтрокаИсточник.КБКНазначениеПлатежа;
СтрокаПриемник.КОСГУ = СтрокаИсточник.КОСГУНазначениеПлатежа;
СтрокаПриемник.ДопКлассификация = СтрокаИсточник.ДопКлассификация;

СтрокаПриемник.СуммаНаТекущийГод = СтрокаИсточник.Сумма;

КонецЦикла;

КонецЕсли;

Если ЗначениеЗаполнено(ПланФинансирования) Тогда
Если ПланФинансирования.Договор = Договор Тогда
СписокДляЗаполнения = Новый Массив;
СписокДляЗаполнения.Добавить(Договор);
СписокДляЗаполнения.Добавить(Контрагент);
Для Каждого СтрДокумента Из РасшифровкаОбязательства Цикл
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетДТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоПервыйПлановыйПериодСчетДТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоВторойПлановыйПериодСчетДТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетКТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоПервыйПлановыйПериодСчетКТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоВторойПлановыйПериодСчетКТ", СписокДляЗаполнения);
КонецЦикла;
Возврат;
КонецЕсли;
КонецЕсли;

//ОпределитьПланФинансированияПоДоговору();
Для Каждого СтрДокумента Из РасшифровкаОбязательства Цикл
ОпределитьРазделЛицевогоСчетаВСтроке(СтрДокумента);
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ТекущийПериодСчетДТ, "СубконтоТекущийПериодСчетДТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ТекущийПериодСчетКТ, "СубконтоТекущийПериодСчетКТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ПервыйПлановыйПериодСчетДТ, "СубконтоПервыйПлановыйПериодСчетДТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ПервыйПлановыйПериодСчетКТ, "СубконтоПервыйПлановыйПериодСчетКТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ВторойПлановыйПериодСчетДТ, "СубконтоВторойПлановыйПериодСчетДТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ВторойПлановыйПериодСчетКТ, "СубконтоВторойПлановыйПериодСчетКТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетДТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетКТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоПервыйПлановыйПериодСчетДТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоПервыйПлановыйПериодСчетКТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоВторойПлановыйПериодСчетДТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоВторойПлановыйПериодСчетКТ");
КонецЦикла;
// by ivanchai ввод на основании документа ЗаявкаНаКассовыйРасход >>

КонецЕсли;
 
КонецПроцедуры
 
// by ivanchai <<
Процедура УстановитьПараметрыСубконтоПоСчетуВТЧ_1(ДанныеСтроки, ТекСчет, ПрефиксРеквизитовСубконто, МассивНеобрабатываемыхСубконто="") Экспорт

ИмяТЧ = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(ДанныеСтроки);
МетаданныеДокумента = ОбщегоНазначения.ПолучитьМетаданныеДокументаПоСсылкеНаСтроку(ДанныеСтроки);

Если ТипЗнч(МассивНеобрабатываемыхСубконто) = Тип("Строка") Тогда
МассивНеобрабатываемыхСубконто = Новый Массив;
КонецЕсли;

МаксКоличествоСубконто = Метаданные.ПланыСчетов.ЕПСБУ.МаксКоличествоСубконто;
ЧислоСубконто = ?(ТекСчет.Пустая(),0,ТекСчет.ВидыСубконто.Количество());

// Установим параметры реквизитов субконто, которые не входят в "МассивНеобрабатываемыхСубконто"
Для Сч = 1 по МаксКоличествоСубконто Цикл
ИмяРеквизитаСубконто = ПрефиксРеквизитовСубконто + (Сч);
Если  НЕ ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента(ИмяРеквизитаСубконто, МетаданныеДокумента, ИмяТЧ) Тогда
Продолжить;
ИначеЕсли (МассивНеобрабатываемыхСубконто.Найти(ИмяРеквизитаСубконто) <> Неопределено) ИЛИ (Сч > ЧислоСубконто) Тогда
Если НЕ ДанныеСтроки[ИмяРеквизитаСубконто] = Неопределено Тогда
ДанныеСтроки[ИмяРеквизитаСубконто] = Неопределено;
КонецЕсли;
Продолжить;
КонецЕсли;
ТипСубконто = ТекСчет.ВидыСубконто[Сч-1].ВидСубконто.ТипЗначения;
//ТП.Колонки[ИмяРеквизитаСубконто].ЭлементУправления.ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);

Если ТипСубконто.ПривестиЗначение(ДанныеСтроки[ИмяРеквизитаСубконто]) <> ДанныеСтроки[ИмяРеквизитаСубконто] Тогда
ДанныеСтроки[ИмяРеквизитаСубконто] = ТипСубконто.ПривестиЗначение(ДанныеСтроки[ИмяРеквизитаСубконто]);
КонецЕсли;
КонецЦикла;

КонецПроцедуры
// by ivanchai >>

 

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

Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("СправочникСсылка.Договоры") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;
Договор= Основание.Ссылка;
Учреждение= Основание.Учреждение;
ВидОперации = Справочники.ВидыОпераций.ПринятоеОбязательствоПоПД_ОбязательствоТекущегоГода;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ОпределитьПланФинансированияПоДоговору();

ЗаполнитьДанныеДляБюджетногоУчета();

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПланФинансированияОбязательства") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Договор.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.Договор.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;
Договор= Основание.Договор.Ссылка;
Учреждение= Основание.Договор.Учреждение;
ВидОперации= Справочники.ВидыОпераций.ПринятоеОбязательствоПоПД_ОбязательствоТекущегоГода;
ПланФинансирования= Основание;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ЗаполнитьНаОснованииПланаФинансирования(ПланФинансирования);

ЗаполнитьДанныеДляБюджетногоУчета();

// by ivanchai ввод на основании документа ЗаявкаНаКассовыйРасход <<
ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаявкаНаКассовыйРасход") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаявкаНаКассовыйРасходСокращенная") Тогда

Если Основание.КВД = Перечисления.КВД.Внебюджет ИЛИ Основание.КВД = Перечисления.КВД.ВременноеРаспоряжение Тогда 

Если НЕ ЗначениеЗаполнено(Основание.Договор.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.Договор.УчреждениеИсполнитель Тогда
Возврат;                                        
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|ПринятоеОбязательствоПоПД.Ссылка
|ИЗ
|Документ.ПринятоеОбязательствоПоПД КАК ПринятоеОбязательствоПоПД
|ГДЕ
|ПринятоеОбязательствоПоПД.СсылкаНаОснование = &Основание";

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

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

Пока Результат.Следующий() Цикл

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

ДокОбъект.УстановитьПометкуУдаления(Истина);

МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Результат.Ссылка);

Если НайтиПоСсылкам(МассивСсылок).Количество() = 0 Тогда
ДокОбъект.Удалить();
КонецЕсли;

КонецЦикла;

СсылкаНаОснование = Основание;

Договор= Основание.Договор.Ссылка;
Учреждение= Основание.Договор.Учреждение;
ВидОперации= Справочники.ВидыОпераций.ПринятоеОбязательствоПоПД_ОбязательствоТекущегоГода;
ПланФинансирования= Основание;
Дата= Основание.Дата;
ЛицевойСчет         = Основание.ЛицевойСчет;

ЗаполнениеРеквизитовПоВыбранномуДоговору();

//ЗаполнитьНаОснованииПланаФинансирования(ПланФинансирования);

ЗаполнитьДанныеДляБюджетногоУчета();

Для Каждого СтрокаИсточник Из Основание.РасшифровкаПлатежа Цикл

СтрокаПриемник = ЭтотОбъект.РасшифровкаОбязательства.Добавить();

СтрокаПриемник.РазделЛицевогоСчета = СтрокаИсточник.РазделЛицевогоСчета;
СтрокаПриемник.КБК = СтрокаИсточник.КБКНазначениеПлатежа;
СтрокаПриемник.КОСГУ = СтрокаИсточник.КОСГУНазначениеПлатежа;
СтрокаПриемник.ДопКлассификация = СтрокаИсточник.ДопКлассификация;

СтрокаПриемник.СуммаНаТекущийГод = СтрокаИсточник.Сумма;

КонецЦикла;

Если ЗначениеЗаполнено(ПланФинансирования) Тогда
Если ПланФинансирования.Договор = Договор Тогда
СписокДляЗаполнения = Новый Массив;
СписокДляЗаполнения.Добавить(Договор);
СписокДляЗаполнения.Добавить(Контрагент);
Для Каждого СтрДокумента Из РасшифровкаОбязательства Цикл
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетДТ", СписокДляЗаполнения);
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетКТ", СписокДляЗаполнения);
КонецЦикла;
Возврат;
КонецЕсли;
КонецЕсли;

//ОпределитьПланФинансированияПоДоговору();

Для Каждого СтрДокумента Из РасшифровкаОбязательства Цикл                 
ОпределитьРазделЛицевогоСчетаВСтроке(СтрДокумента);
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ТекущийПериодСчетДТ, "СубконтоТекущийПериодСчетДТ");
УстановитьПараметрыСубконтоПоСчетуВТЧ_1(СтрДокумента, ТекущийПериодСчетКТ, "СубконтоТекущийПериодСчетКТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетДТ");
ЗаполнитьЗначенияСубконтоСчета(СтрДокумента, "СубконтоТекущийПериодСчетКТ");
КонецЦикла;

КонецЕсли;
// by ivanchai ввод на основании документа ЗаявкаНаКассовыйРасход >>

КонецЕсли;
 
КонецПроцедуры
 
// by ivanchai <<
Процедура УстановитьПараметрыСубконтоПоСчетуВТЧ_1(ДанныеСтроки, ТекСчет, ПрефиксРеквизитовСубконто, МассивНеобрабатываемыхСубконто="") Экспорт

ИмяТЧ = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(ДанныеСтроки);
МетаданныеДокумента = ОбщегоНазначения.ПолучитьМетаданныеДокументаПоСсылкеНаСтроку(ДанныеСтроки);

Если ТипЗнч(МассивНеобрабатываемыхСубконто) = Тип("Строка") Тогда
МассивНеобрабатываемыхСубконто = Новый Массив;
КонецЕсли;

МаксКоличествоСубконто = Метаданные.ПланыСчетов.ЕПСБУ.МаксКоличествоСубконто;
ЧислоСубконто = ?(ТекСчет.Пустая(),0,ТекСчет.ВидыСубконто.Количество());

// Установим параметры реквизитов субконто, которые не входят в "МассивНеобрабатываемыхСубконто"
Для Сч = 1 по МаксКоличествоСубконто Цикл
ИмяРеквизитаСубконто = ПрефиксРеквизитовСубконто + (Сч);
Если  НЕ ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента(ИмяРеквизитаСубконто, МетаданныеДокумента, ИмяТЧ) Тогда
Продолжить;
ИначеЕсли (МассивНеобрабатываемыхСубконто.Найти(ИмяРеквизитаСубконто) <> Неопределено) ИЛИ (Сч > ЧислоСубконто) Тогда
Если НЕ ДанныеСтроки[ИмяРеквизитаСубконто] = Неопределено Тогда
ДанныеСтроки[ИмяРеквизитаСубконто] = Неопределено;
КонецЕсли;
Продолжить;
КонецЕсли;
ТипСубконто = ТекСчет.ВидыСубконто[Сч-1].ВидСубконто.ТипЗначения;
//ТП.Колонки[ИмяРеквизитаСубконто].ЭлементУправления.ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);

Если ТипСубконто.ПривестиЗначение(ДанныеСтроки[ИмяРеквизитаСубконто]) <> ДанныеСтроки[ИмяРеквизитаСубконто] Тогда
ДанныеСтроки[ИмяРеквизитаСубконто] = ТипСубконто.ПривестиЗначение(ДанныеСтроки[ИмяРеквизитаСубконто]);
КонецЕсли;
КонецЦикла;

КонецПроцедуры
// by ivanchai >> 
 

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Владимир Московой (mvv1975) 10.07.11 13:19
Решение интересное. Вы пошли на автоматиматизацию БО по факту оплат. Я реализацию АвтоБО по факту несения затрат, т.е. при возникновении корреспонденций затратных счетов (302, 206, 208) со счетами 101, 105, 106, 401; а также при оплате по авансу (деньги на 206) - формирую БО. Мне интересно мнение сопровожденцев бюджетного учета - у кого какой подход.
2. Кирилл Рубинчик (ivanchai) 10.07.11 19:12
Если честно, то мне сказали бухи что надо сделать я так и сделал, а насчет методологии бюджетного бух учета я не в курсе
3. slimper (slimper) 10.07.11 20:38
(2) Принятые бюджетные обязательства возникают в момент заключения договора, вашим бухгалтерам надо более внимательно читать инструкции по бюджетному учету,т.к. они подвигли вас на бесполезную работу.
(1) В вашем случае вы регистрируете принятые денежные обязательства, а не БО.
4. Владимир Московой (mvv1975) 10.07.11 20:39
(2) По методологии бухучета БО обязательство формируется при заключении договора, при этам рассчитывается сумма договора до конца его действия (по статьям и периодам). Поэтому в 1С нет взаимосвязи текучки и БО. Но никто их бухов на практике таких расчетов не делает и "кротко" просят автоматизировать данный процесс. Думаю многие сопры "решились" это сделать. Вот я и хочу узнать - кто как это делает.
5. Владимир Московой (mvv1975) 10.07.11 20:49
(3) Я знаю что это не совсем БО получаются. Поэтому у меня есть возможность указать в договоре - не формировать автоматически БО. Но когда речь идет о З/П или электроэнергии, ктр. силами бухгалтерии подсчитать на год просто невозможно (некому и некогда) - к концу года наше БО будет равно понесенным затратам. В случае (0) - получится сумма оплаты по договору, если только бухи не будут использовать данный механизм как факт заключения договора, т.е. оформления этих самых БО.
6. slimper (slimper) 10.07.11 21:41
Кроме бухгалтерии существует еще плановый отдел (один или несколько экономистов) - вот это их задача. Они (экономисты) планируют расход средств по статьям и контрагентам в рамках выделенных лимитов.
7. Владимир Московой (mvv1975) 11.07.11 06:13
(6) Особенно когда этот плановый отдел составлен из тех же самых бухгалтеров... Вы сопровожденец? Если да, то скажите, у вас все клиенты аккуратно ведут БО и заводят их при заключении договоров?
8. adeich adeich (adeich) 11.07.11 11:23
(6) а есть уще куча бухгалтеров, которые не понимают, зачем им это и заводят БО "сводом" по договору по результатам месяца-квартала, но опять же по факту оплаты, мотивируя это тем - "а нам никто рекомендаций не давал"
9. Анна Код (annkod) 22.09.11 10:11
У нас в городе такой же подход - регистрировать обязательства по факту оплаты. "Запланированных" договоров ведь единицы, а есть еще з/п, налоги, разовые платежи и т.п. Я, чтоб не лезть в конфигурацию, решила вопрос по-другому. Внешней обработкой, прикрепив ее к нужному документу (ПП либо Заявке) как внешний отчет. :) Может подход корявый, зато обновляемся без проблем. Как говорится, кнопку нажал - спина сырая
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа