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