#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Команда = Неопределено;
Если ПравоДоступа("Добавление", Метаданные.Справочники.ДоговорыМеждуОрганизациями) Тогда
Команда = КомандыСозданияНаОсновании.Добавить();
Команда.Менеджер = Метаданные.Справочники.ДоговорыМеждуОрганизациями.ПолноеИмя();
Команда.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Справочники.ДоговорыМеждуОрганизациями);
Команда.РежимЗаписи = "Проводить";
Команда.ФункциональныеОпции = "ИспользоватьДоговорыМеждуОрганизациями";
КонецЕсли;
Возврат Команда;
КонецФункции
Функция УстановитьСтатус(Договоры, Статус) Экспорт
МассивСсылок = Новый Массив;
КоличествоОбработанных = 0;
Для Каждого Договор Из Договоры Цикл
Если ТипЗнч(Договор) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Продолжить;
КонецЕсли;
МассивСсылок.Добавить(Договор);
КонецЦикла;
Если МассивСсылок = 0 Тогда
Возврат КоличествоОбработанных;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыМеждуОрганизациями.Ссылка КАК Ссылка,
| ДоговорыМеждуОрганизациями.ПометкаУдаления КАК ПометкаУдаления,
| ВЫБОР
| КОГДА ДоговорыМеждуОрганизациями.Статус = &Статус
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СтатусСовпадает
|ИЗ
| Справочник.ДоговорыМеждуОрганизациями КАК ДоговорыМеждуОрганизациями
|
|ГДЕ
| ДоговорыМеждуОрганизациями.Ссылка В(&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.УстановитьПараметр("Статус", Статус);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
ТекстОшибки = НСтр("ru='Договор %Договор% помечен на удаление. Невозможно изменить статус'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Договор%", Выборка.Ссылка);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ссылка);
Продолжить;
КонецЕсли;
Если Выборка.СтатусСовпадает Тогда
ТекстОшибки = НСтр("ru='Договору %Договор% уже присвоен статус ""%Статус%""'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Договор%", Выборка.Ссылка);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Статус%", Статус);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ссылка);
Продолжить;
КонецЕсли;
Попытка
ЗаблокироватьДанныеДляРедактирования(Выборка.Ссылка);
Исключение
ТекстОшибки = НСтр("ru='Не удалось заблокировать %Договор%. %ОписаниеОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Договор%", Выборка.Ссылка);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ссылка);
Продолжить;
КонецПопытки;
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Статус = Статус;
Если Статус = Перечисления.СтатусыДоговоровКонтрагентов.НеСогласован Тогда
Если Объект.Согласован Тогда
Объект.Согласован = Ложь;
КонецЕсли;
КонецЕсли;
Если Не Объект.ПроверитьЗаполнение() Тогда
Продолжить;
КонецЕсли;
Попытка
Объект.Записать();
КоличествоОбработанных = КоличествоОбработанных + 1;
Исключение
ТекстОшибки = НСтр("ru='Не удалось записать %Договор%. %ОписаниеОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Договор%", Выборка.Ссылка);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ссылка);
КонецПопытки
КонецЦикла;
Возврат КоличествоОбработанных;
КонецФункции
Процедура ЗаполнитьБанковскиеСчетаПоДоговору(Договор, БанковскийСчетОрганизации, БанковскийСчетОрганизацииПолучателя) Экспорт
ДанныеДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Договор, "БанковскийСчет, БанковскийСчетПолучателя");
БанковскийСчетОрганизации = ДанныеДоговора.БанковскийСчет;
БанковскийСчетОрганизацииПолучателя = ДанныеДоговора.БанковскийСчетПолучателя;
КонецПроцедуры
Процедура ЗаполнитьСтатьюДвиженияДенежныхСредствПоДоговору(Договор, СтатьяДвиженияДенежныхСредств) Экспорт
Если ЗначениеЗаполнено(Договор) Тогда
СтатьяДвиженияДенежныхСредств = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "СтатьяДвиженияДенежныхСредств");
КонецЕсли;
КонецПроцедуры
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
Результат = Новый Массив;
Результат.Добавить("ТипДоговора");
Результат.Добавить("Организация");
Результат.Добавить("ОрганизацияПолучатель");
Результат.Добавить("Подразделение");
Результат.Добавить("ОплатаВВалюте");
Результат.Добавить("ВалютаВзаиморасчетов");
Результат.Добавить("ПорядокРасчетов");
Результат.Добавить("ГруппаФинансовогоУчета");
Результат.Добавить("ГруппаФинансовогоУчетаПолучателя");
Результат.Добавить("НаправлениеДеятельности");
Возврат Результат;
КонецФункции
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "ТипДоговора,Менеджер";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "ТипДоговора";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
"ПорядокРасчетов", Параметры);
КонецПроцедуры
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| ИЛИ ЗначениеРазрешено(ОрганизацияПолучатель)";
КонецПроцедуры
#КонецОбласти
Функция ПараметрыЗаполненияНалогообложенияНДС(Объект) Экспорт
ИменаРеквизитов =
"ДатаНачалаДействия,
|ТипДоговора,
|Организация";
РеквизитыСправочника = Новый Структура(ИменаРеквизитов);
Если ТипЗнч(Объект) = Тип("СправочникСсылка.ДоговорыМеждуОрганизациями") Тогда
РеквизитыСправочника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект, РеквизитыСправочника);
Иначе
ЗаполнитьЗначенияСвойств(РеквизитыСправочника, Объект);
КонецЕсли;
РеализацияТоваров = РеквизитыСправочника.ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.КупляПродажа;
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияНалогообложенияНДСПродажи();
ПараметрыЗаполнения.Дата = РеквизитыСправочника.ДатаНачалаДействия;
ПараметрыЗаполнения.Организация = РеквизитыСправочника.Организация;
ПараметрыЗаполнения.РеализацияТоваров = РеализацияТоваров;
ПараметрыЗаполнения.РеализацияРаботУслуг = РеализацияТоваров;
ПараметрыЗаполнения.ОтчетКомиссионера = Не РеализацияТоваров;
ПараметрыЗаполнения.ЭтоОперацияМеждуОрганизациями = Истина;
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ПараметрыЗаполненияВидаДеятельностиНДС(Объект) Экспорт
ИменаРеквизитов =
"ДатаНачалаДействия,
|ТипДоговора,
|ОрганизацияПолучатель,
|НаправлениеДеятельности";
РеквизитыСправочника = Новый Структура(ИменаРеквизитов);
Если ТипЗнч(Объект) = Тип("СправочникСсылка.ДоговорыМеждуОрганизациями") Тогда
РеквизитыСправочника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект, РеквизитыСправочника);
Иначе
ЗаполнитьЗначенияСвойств(РеквизитыСправочника, Объект);
КонецЕсли;
ПриобретениеТоваров = РеквизитыСправочника.ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.КупляПродажа;
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС();
ПараметрыЗаполнения.Дата = РеквизитыСправочника.ДатаНачалаДействия;
ПараметрыЗаполнения.Организация = РеквизитыСправочника.ОрганизацияПолучатель;
ПараметрыЗаполнения.НаправлениеДеятельности = РеквизитыСправочника.НаправлениеДеятельности;
ПараметрыЗаполнения.ПриобретениеТоваров = ПриобретениеТоваров;
ПараметрыЗаполнения.ПриобретениеРабот = ПриобретениеТоваров;
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ПараметрыВзаиморасчеты(ДанныеЗаполнения = Неопределено) Экспорт
Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеЗаполнения) Тогда
ДанныеЗаполненияСтруктура = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеЗаполнения, "ТипДоговора, Сумма, ПорядокРасчетов");
ТипДоговора = ДанныеЗаполненияСтруктура.ТипДоговора;
Сумма = ДанныеЗаполненияСтруктура.Сумма;
ПорядокРасчетов = ДанныеЗаполненияСтруктура.ПорядокРасчетов;
ИначеЕсли ДанныеЗаполнения = Неопределено Тогда
ТипДоговора = Неопределено;
Сумма = 0;
ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПустаяСсылка();
Иначе
ТипДоговора = ДанныеЗаполнения.ТипДоговора;
Сумма = ДанныеЗаполнения.Сумма;
ПорядокРасчетов = ДанныеЗаполнения.ПорядокРасчетов;
КонецЕсли;
ВлияющиеРеквизиты = "ТипДоговора,ПорядокРасчетов";
МассивПараметров = Новый Массив();
#Область ОрганизацияОтправитель
#Область Отправитель
СтруктураПараметров = ВзаиморасчетыСервер.ПараметрыМеханизма();
СтруктураПараметров.ЭтоСправочник = Истина;
СтруктураПараметров.МожетЯвлятьсяОбъектомРасчетов = ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным;
СтруктураПараметров.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом;
СтруктураПараметров.ИзменяетПланОплаты = ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.КупляПродажа
И Сумма <> 0;
СтруктураПараметров.Дата = "Объект.Дата";
СтруктураПараметров.ВалютаДокумента = "Объект.ВалютаВзаиморасчетов";
СтруктураПараметров.СуммаДокумента = "Объект.Сумма";
СтруктураПараметров.Партнер = Справочники.Партнеры.НашеПредприятие;
СтруктураПараметров.Контрагент = "Объект.ОрганизацияПолучатель";
СтруктураПараметров.Договор = "Объект.Ссылка";
СтруктураПараметров.ПорядокРасчетов = "Объект.ПорядокРасчетов";
СтруктураПараметров.Соглашение = "";
СтруктураПараметров.БанковскийСчетОрганизации = "Объект.БанковскийСчет";
СтруктураПараметров.БанковскийСчетКонтрагента = "Объект.БанковскийСчетПолучателя";
СтруктураПараметров.Касса = "";
СтруктураПараметров.ФормаОплаты = "";
СтруктураПараметров.Менеджер = "Объект.Менеджер";
СтруктураПараметров.НомерВходящегоДокумента = "Объект.Номер";
СтруктураПараметров.ДатаВходящегоДокумента = "Объект.Дата";
СтруктураПараметров.ВлияющиеРеквизиты = ВлияющиеРеквизиты;
МассивПараметров.Добавить(СтруктураПараметров);
#КонецОбласти
#Область ОтправительВознаграждение
Если ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.Комиссионный Тогда
СтруктураПараметров = ВзаиморасчетыСервер.ПараметрыМеханизма();
СтруктураПараметров.ЭтоСправочник = Истина;
СтруктураПараметров.МожетЯвлятьсяОбъектомРасчетов = ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным;
СтруктураПараметров.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;
СтруктураПараметров.ИзменяетПланОплаты = Ложь;
СтруктураПараметров.ИзменяетПланОтгрузкиПоставки = Ложь;
СтруктураПараметров.Дата = "Объект.Дата";
СтруктураПараметров.ВалютаДокумента = "Объект.ВалютаВзаиморасчетов";
СтруктураПараметров.СуммаДокумента = "Объект.Сумма";
СтруктураПараметров.Партнер = Справочники.Партнеры.НашеПредприятие;
СтруктураПараметров.Контрагент = "Объект.ОрганизацияПолучатель";
СтруктураПараметров.Договор = "Объект.Ссылка";
СтруктураПараметров.ПорядокРасчетов = "Объект.ПорядокРасчетов";
СтруктураПараметров.Соглашение = "";
СтруктураПараметров.БанковскийСчетОрганизации = "Объект.БанковскийСчет";
СтруктураПараметров.БанковскийСчетКонтрагента = "Объект.БанковскийСчетПолучателя";
СтруктураПараметров.Касса = "";
СтруктураПараметров.ФормаОплаты = "";
СтруктураПараметров.Менеджер = "Объект.Менеджер";
СтруктураПараметров.НомерВходящегоДокумента = "Объект.Номер";
СтруктураПараметров.ДатаВходящегоДокумента = "Объект.Дата";
СтруктураПараметров.ВлияющиеРеквизиты = ВлияющиеРеквизиты;
МассивПараметров.Добавить(СтруктураПараметров);
КонецЕсли;
#КонецОбласти
#КонецОбласти
#Область ОрганизацияПолучатель
#Область Получатель
СтруктураПараметров = ВзаиморасчетыСервер.ПараметрыМеханизма();
СтруктураПараметров.ЭтоСправочник = Истина;
СтруктураПараметров.МожетЯвлятьсяОбъектомРасчетов = ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным;
СтруктураПараметров.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;
СтруктураПараметров.ИзменяетПланОплаты = ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.КупляПродажа
И Сумма <> 0;
СтруктураПараметров.Дата = "Объект.Дата";
СтруктураПараметров.ВалютаДокумента = "Объект.ВалютаВзаиморасчетов";
СтруктураПараметров.СуммаДокумента = "Объект.Сумма";
СтруктураПараметров.Организация = "Объект.ОрганизацияПолучатель";
СтруктураПараметров.Контрагент = "Объект.Организация";
СтруктураПараметров.Партнер = Справочники.Партнеры.НашеПредприятие;
СтруктураПараметров.Договор = "Объект.Ссылка";
СтруктураПараметров.ПорядокРасчетов = "Объект.ПорядокРасчетов";
СтруктураПараметров.Соглашение = "";
СтруктураПараметров.БанковскийСчетОрганизации = "Объект.БанковскийСчетПолучателя";
СтруктураПараметров.БанковскийСчетКонтрагента = "Объект.БанковскийСчет";
СтруктураПараметров.Касса = "";
СтруктураПараметров.ФормаОплаты = "";
СтруктураПараметров.ГруппаФинансовогоУчета = "Объект.ГруппаФинансовогоУчетаПолучателя";
СтруктураПараметров.Менеджер = "Объект.Менеджер";
СтруктураПараметров.НомерВходящегоДокумента = "Объект.Номер";
СтруктураПараметров.ДатаВходящегоДокумента = "Объект.Дата";
СтруктураПараметров.ВлияющиеРеквизиты = ВлияющиеРеквизиты;
МассивПараметров.Добавить(СтруктураПараметров);
#КонецОбласти
#Область ПолучательВознаграждение
Если ТипДоговора = Перечисления.ТипыДоговоровМеждуОрганизациями.Комиссионный Тогда
СтруктураПараметров = ВзаиморасчетыСервер.ПараметрыМеханизма();
СтруктураПараметров.ЭтоСправочник = Истина;
СтруктураПараметров.МожетЯвлятьсяОбъектомРасчетов = ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
Или ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным;
СтруктураПараметров.ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом;
СтруктураПараметров.ИзменяетПланОплаты = Ложь;
СтруктураПараметров.ИзменяетПланОтгрузкиПоставки = Ложь;
СтруктураПараметров.Дата = "Объект.Дата";
СтруктураПараметров.ВалютаДокумента = "Объект.ВалютаВзаиморасчетов";
СтруктураПараметров.СуммаДокумента = "Объект.Сумма";
СтруктураПараметров.Организация = "Объект.ОрганизацияПолучатель";
СтруктураПараметров.Контрагент = "Объект.Организация";
СтруктураПараметров.Партнер = Справочники.Партнеры.НашеПредприятие;
СтруктураПараметров.Договор = "Объект.Ссылка";
СтруктураПараметров.ПорядокРасчетов = "Объект.ПорядокРасчетов";
СтруктураПараметров.Соглашение = "";
СтруктураПараметров.БанковскийСчетОрганизации = "Объект.БанковскийСчетПолучателя";
СтруктураПараметров.БанковскийСчетКонтрагента = "Объект.БанковскийСчет";
СтруктураПараметров.Касса = "";
СтруктураПараметров.ФормаОплаты = "";
СтруктураПараметров.ГруппаФинансовогоУчета = "Объект.ГруппаФинансовогоУчетаПолучателя";
СтруктураПараметров.Менеджер = "Объект.Менеджер";
СтруктураПараметров.НомерВходящегоДокумента = "Объект.Номер";
СтруктураПараметров.ДатаВходящегоДокумента = "Объект.Дата";
СтруктураПараметров.ВлияющиеРеквизиты = ВлияющиеРеквизиты;
МассивПараметров.Добавить(СтруктураПараметров);
КонецЕсли;
#КонецОбласти
#КонецОбласти
Возврат МассивПараметров;
КонецФункции
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
ДоговорыМеждуОрганизациямиЛокализация.ДобавитьКомандыПечати(КомандыПечати);
КонецПроцедуры
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
ДоговорыМеждуОрганизациямиЛокализация.ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли