Files

4980 lines
324 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#Область ПрограммныйИнтерфейс
// Создает платежные документы, либо формирует данные заполнения для создания одного платежного документа.
//
// Параметры:
// СтрокиГрафика - Массив - Ключи записей графика платежей
// ТипДокумента - Строка - Тип создаваемых документов. Если не задан, будет определен автоматически.
//
// Возвращаемое значение:
// Структура:
// ОткрыватьФормуПомощника - Булево - Признак необходимости открытия формы помощника создания документов
// ДокументКСозданию - Структура - Данные заполнения единственного документа
// ДлительнаяОперация - Структура - Длительная операция создания нескольких документов
// АдресСтрокГрафика - Строка - Адрес временного хранилища, в котором содержатся оплачиваемые строки графика.
//
Функция ОплатитьСтрокиГрафика(СтрокиГрафика, ТипДокумента) Экспорт
//++ Локализация
//-- Локализация
Возврат Неопределено;
КонецФункции
// Формирует варианты наименования юридического лица в соответствии с его организационно-правовой формой.
//
// Параметры:
// Наименование - Строка - Наименование юр. лица.
//
// Возвращаемое значение:
// Структура - Наименование, РабочееНаименование, ПолноеНаименование.
//
Функция НаименованиеОрганизации(Знач Наименование) Экспорт
Наименование = СокрЛП(Наименование);
СтруктураНаименования = Новый Структура("Наименование, СокращенноеНаименование, ПолноеНаименование",
Наименование, Наименование, Наименование);
//++ Локализация
Если УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='ООО'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Общество с ограниченной ответственностью'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ООО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='ОАО'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Открытое акционерное общество'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ОАО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='ЗАО'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Закрытое акционерное общество'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ЗАО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='ИП'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Индивидуальный предприниматель'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ИП'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='Общество с ограниченной ответственностью'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Общество с ограниченной ответственностью'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ООО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='Открытое акционерное общество'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Открытое акционерное общество'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ОАО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='Закрытое акционерное общество'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Закрытое акционерное общество'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ЗАО'");
ИначеЕсли УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("ru='Индивидуальный предприниматель'")) Тогда
ОрганизационноПравоваяФорма = НСтр("ru='Индивидуальный предприниматель'");
ОрганизационноПравоваяФормаСокращенно = НСтр("ru='ИП'");
Иначе
ОрганизационноПравоваяФорма = "";
ОрганизационноПравоваяФормаСокращенно = "";
КонецЕсли;
Если НЕ ПустаяСтрока(ОрганизационноПравоваяФорма) Тогда
КоличествоКавычек = СтрЧислоВхождений(Наименование, """");
Если КоличествоКавычек > 1 Тогда
// Наименование организации внутри внешних кавычек
ПозицияПервойКавычки = СтрНайти(Наименование, """");
ПозицияПоследнейКавычки = 0;
ВремНаименование = Наименование;
ПозицияКавычки = ПозицияПервойКавычки;
Пока ПозицияКавычки > 0 Цикл
ПозицияПоследнейКавычки = ПозицияПоследнейКавычки + ПозицияКавычки;
ВремНаименование = Сред(ВремНаименование, ПозицияКавычки + 1);
ПозицияКавычки = СтрНайти(ВремНаименование, """");
КонецЦикла;
Наименование = Сред(Наименование, ПозицияПервойКавычки + 1, ПозицияПоследнейКавычки - ПозицияПервойКавычки - 1);
Если НЕ КоличествоКавычек%2 = 0 Тогда
Наименование = Наименование + """";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОрганизационноПравоваяФорма) Тогда
ПолноеНаименование = Наименование;
Иначе
ПолноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 ""%2""",
ОрганизационноПравоваяФорма, Наименование);
КонецЕсли;
СокращенноеНаименование = Наименование + ?(ПустаяСтрока(ОрганизационноПравоваяФормаСокращенно), "", " ")
+ ОрганизационноПравоваяФормаСокращенно;
СтруктураНаименования = Новый Структура("Наименование, СокращенноеНаименование, ПолноеНаименование",
Наименование, СокращенноеНаименование, ПолноеНаименование);
//-- Локализация
Возврат СтруктураНаименования;
КонецФункции
// Функция получает валюту, соответствующую номеру банковского счета.
// 6-8 разряды номера банковского счета соответствуют коду валюты.
// Для рублей используется код 810.
//
// Параметры:
// НомерСчета - Число - Номер банковского счета.
//
// Возвращаемое значение:
// СправочникСсылка.Валюты - Валюта банковского счета.
//
Функция ПолучитьВалютуПоНомеруСчета(НомерСчета) Экспорт
Валюта = Справочники.Валюты.ПустаяСсылка();
//++ Локализация
УстановитьПривилегированныйРежим(Истина);
КодВалюты = Сред(НомерСчета, 6, 3);
Если КодВалюты = "810" Тогда
КодВалюты = "643";
КонецЕсли;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Валюты.Ссылка КАК Валюта
|ИЗ
| Справочник.Валюты КАК Валюты
|ГДЕ
| Валюты.Код = &КодВалюты
|");
Запрос.УстановитьПараметр("КодВалюты", КодВалюты);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Валюта = Выборка.Валюта;
КонецЕсли;
//-- Локализация
Возврат Валюта;
КонецФункции
// Формирует описание реквизитов объекта, заполняемых по статистике их использования.
//
// Параметры:
// ОписаниеРеквизитов - см. ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов.
//
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
//++ Локализация
Если ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Организация, Контрагент, ХозяйственнаяОперация, СписокКонтрагентов";
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Договор";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Организация, Контрагент, ХозяйственнаяОперация";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
"ОперацияССамозанятым", Параметры);
КонецЕсли;
//-- Локализация
КонецПроцедуры
// Формирует описание реквизитов объекта, заполняемых по статистике их использования.
//
// Параметры:
// ОписаниеРеквизитов - см. ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов.
//
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПриобретенияПоСтатистике(ОписаниеРеквизитов) Экспорт
//++ Локализация
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда =
"Организация, Контрагент, ХозяйственнаяОперация, Договор, НалогообложениеНДС";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены =
"Организация, Контрагент, ХозяйственнаяОперация, НалогообложениеНДС";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
"ОперацияССамозанятым", Параметры);
//-- Локализация
КонецПроцедуры
// Список хозяйственных операций, доступных для документа основания.
//
// Параметры:
// ДокументОснование - ДокументСсылка, СправочникСсылка - основание, по которому создан документ.
// СписокОпераций - СписокЗначений из ПеречислениеСсылка.ХозяйственныеОперации, Неопределено - доступные операции по основанию.
//
Процедура ПолучитьДоступныеХозяйственныеОперацииПоОснованию(ДокументОснование, СписокОпераций = Неопределено) Экспорт
Если СписокОпераций = Неопределено Тогда
СписокОпераций = Новый СписокЗначений;
КонецЕсли;
//++ Локализация
Если ЗначениеЗаполнено(ДокументОснование) Тогда
ТипОснования = ТипЗнч(ДокументОснование);
Если ТипОснования = Тип("ДокументСсылка.ЗаявлениеОВвозеТоваров") Тогда
СписокОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПеречислениеВБюджет);
ИначеЕсли ТипОснования = Тип("ДокументСсылка.ВыемкаДенежныхСредствИзКассыККМ") Тогда
СписокОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзДругойКассы);
КонецЕсли;
КонецЕсли;
//-- Локализация
КонецПроцедуры
// Процедура проверяет возможность корреспонденции между банковскими счетами, указанными в договоре
//
// Параметры:
// ДоговорОбъект - СправочникОбъект - договор, по которому нужно получить возможные корреспонденции
// Отказ - Булево - Признак отказа от продолжения работы.
//
Процедура ПроверитьДоговорНаВозможностьКорреспонденцииСоСчетомЦифровогоРубля(ДоговорОбъект, Отказ) Экспорт
ПараметрыКорреспонденции =
ПараметрыКорреспонденцииСоСчетомЦифровогорубля(ДоговорОбъект.БанковскийСчет,
ДоговорОбъект.БанковскийСчетКонтрагента);
Если Не ПараметрыКорреспонденции.ДопустимаКорреспонденцияСоСчетомЦифровогоРубля Тогда
ИмяЭлементаПозиционирования =
?(ПараметрыКорреспонденции.КоррСчетЦифровогоРубля, "БанковскийСчет", "БанковскийСчетКонтрагента");
ТекстОшибки = НСтр("ru = 'Расчетный счет не может корреспондировать со счетом цифрового рубля.
|Укажите другой счет'");
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
ДоговорОбъект,
ИмяЭлементаПозиционирования,
,
Отказ);
КонецЕсли;
КонецПроцедуры
// Функция определяет:
// -допустимость корреспонденции со счетом цифрового рубля,
// -является ли корр. счет счетом цифрового рубля.
//
// Параметры:
// БанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций,
// СправочникСсылка.БанковскиеСчетаКонтрагентов - проверяемый счет.
// КорБанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций,
// СправочникСсылка.БанковскиеСчетаКонтрагентов - проверяемый кор. счет.
//
// Возвращаемое значение:
// -Структура - параметры корреспонденции со счетом цифрового рубля:
// *ДопустимаКорреспонденцияСоСчетомЦифровогоРубля - Булево - признак допустимости корресп. со счетом цифрового рубля
// *КоррСчетЦифровогоРубля - Булево - признак того, что в качестве корр счета используется счет цифрового рубля.
//
Функция ПараметрыКорреспонденцииСоСчетомЦифровогорубля(БанковскийСчет, КорБанковскийСчет) Экспорт
ПараметрыКорреспонденции = Новый Структура;
ПараметрыКорреспонденции.Вставить("ДопустимаКорреспонденцияСоСчетомЦифровогоРубля", Истина);
ПараметрыКорреспонденции.Вставить("КоррСчетЦифровогоРубля", Ложь);
Если Не ЗначениеЗаполнено(БанковскийСчет)
ИЛИ Не ЗначениеЗаполнено(КорБанковскийСчет) Тогда
Возврат ПараметрыКорреспонденции;
КонецЕсли;
МассивБанковскихСчетов = ОбщегоНазначенияКлиентСервер.МассивЗначений(БанковскийСчет, КорБанковскийСчет);
ДанныеБанковскихСчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивБанковскихСчетов, "СчетЦифровогоРубля");
КоррСчетЦифровогоРубля = ДанныеБанковскихСчетов.Получить(КорБанковскийСчет);
СчетЦифровогоРубля = ДанныеБанковскихСчетов.Получить(БанковскийСчет);
ПараметрыКорреспонденции.ДопустимаКорреспонденцияСоСчетомЦифровогоРубля =
(СчетЦифровогоРубля И КоррСчетЦифровогоРубля)
ИЛИ (Не СчетЦифровогоРубля И НЕ КоррСчетЦифровогоРубля);
ПараметрыКорреспонденции.КоррСчетЦифровогоРубля = КоррСчетЦифровогоРубля;
Возврат ПараметрыКорреспонденции;
КонецФункции
// Добавляет команды создания банковских счетов на форму.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, в группу которой будут добавлены команды создания банковских счетов.
// СправочникМетаданные - ОбъектМетаданных - метаданные справочника для проверки прав доступа.
//
Процедура ДобавитьКомандыСозданияБанковскихСчетов(Форма, СправочникМетаданные) Экспорт
ГруппаСоздать = Форма.Элементы.Найти("ГруппаСоздать");
Если ГруппаСоздать = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ПравоДоступа("Добавление", СправочникМетаданные) Тогда
Возврат;
КонецЕсли;
КомандыДобавления = Новый Соответствие;
КомандыДобавления.Вставить("СоздатьБанковскийСчет", "Создать");
ГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок;
//++ Локализация
ГруппаСоздать.Вид = ВидГруппыФормы.Подменю;
ГруппаСоздать.Картинка = БиблиотекаКартинок.СоздатьЭлементСписка;
КомандыДобавления.Очистить();
КомандыДобавления.Вставить("СоздатьСчетЦифровогоРубля", НСтр("ru = 'Счет цифрового рубля'"));
КомандыДобавления.Вставить("СоздатьБанковскийСчет", НСтр("ru = 'Банковский счет'"));
//-- Локализация
Для Каждого ОписаниеКоманды Из КомандыДобавления Цикл
КомандаСоздания = Форма.Команды.Добавить(ОписаниеКоманды.Ключ);
КомандаСоздания.Действие = "Подключаемый_СоздатьБанковскийСчет";
КнопкаКоманды = Форма.Элементы.Добавить(ОписаниеКоманды.Ключ, Тип("КнопкаФормы"), ГруппаСоздать);
КнопкаКоманды.Заголовок = ОписаниеКоманды.Значение;
КнопкаКоманды.ИмяКоманды = ОписаниеКоманды.Ключ;
КонецЦикла;
КонецПроцедуры
// Добавляет доступные формы оплаты
//
// Параметры:
// ФормыОплаты - Массив из ПеречислениеСсылка.ФормыОплаты - список форм оплаты.
//
Процедура ДобавитьДоступныеФормыОплаты(ФормыОплаты) Экспорт
//++ Локализация
ФормыОплаты.Добавить(Перечисления.ФормыОплаты.СистемаБыстрыхПлатежей);
//-- Локализация
Возврат;
КонецПроцедуры
//++ Локализация
#Область ИнтерфейсныеЭлементы
// Функция формирует массив хозяйственных операций, для которых доступно перечисление в бюджет.
//
// Возвращаемое значение:
// - Массив из ПеречислениеСсылка.ХозяйственныеОперации.
//
Функция МассивОперацийПеречисленияВБюджет() Экспорт
МассивОпераций = Новый Массив;
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ОплатаПоставщику);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ВозвратОплатыКлиенту);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПеречислениеТаможне);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПеречислениеВБюджет);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПрочаяВыдачаДенежныхСредств);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ОплатаПоКредитам);
МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ВозвратНалогов);
Возврат МассивОпераций;
КонецФункции
// Процедура устанавливает видимость выбора операции оплаты таможенного платежа в форме.
//
// Параметры:
// Поле - ПолеФормы - Поле формы для выбора хозяйственной операции.
//
Процедура УстановитьВидимостьОперацииПеречислениеТаможне(Поле) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьИмпортныеЗакупки") Тогда
ЭлементСписка = Поле.СписокВыбора.НайтиПоЗначению(Перечисления.ХозяйственныеОперации.ПеречислениеТаможне);
Если ЭлементСписка <> Неопределено Тогда
Поле.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Процедура устанавливает видимость выбора операций выдачи и погашения займов сотрудникам в форме.
//
// Параметры:
// Поле - ПолеФормы - Поле формы для выбора хозяйственной операции.
//
Процедура УстановитьВидимостьОперацийЗаймамСотрудникам(Поле) Экспорт
ОперацииПоЗаймамДоступны = Не ПолучитьФункциональнуюОпцию("УправлениеТорговлей");
Если Не ОперацииПоЗаймамДоступны Тогда
ЭлементСписка = Поле.СписокВыбора.НайтиПоЗначению(Перечисления.ХозяйственныеОперации.ВыдачаЗаймаСотруднику);
Если ЭлементСписка <> Неопределено Тогда
Поле.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
ЭлементСписка = Поле.СписокВыбора.НайтиПоЗначению(Перечисления.ХозяйственныеОперации.ПогашениеЗаймаСотрудником);
Если ЭлементСписка <> Неопределено Тогда
Поле.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Подмена префикса организации префиксом кассовой книги
//
// Параметры:
// Источник - ДокументОбъект - ПКО, РКО, Кассовая книга
// СтандартнаяОбработка - Булево - флаг стандартной обработки подписки
// Префикс - Строка - префикс объекта, который нужно изменить.
//
Процедура УстановитьПрефиксКассовойКнигиНомеруДокументаПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
РеквизитыПрефиксации = "";
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЛистКассовойКниги")
Или ТипЗнч(Источник) = Тип("ДокументОбъект.ИнвентаризацияНаличныхДенежныхСредств") Тогда
РеквизитыПрефиксации = ПолучитьПрефиксациюКассыКассовойКниги(Источник.КассоваяКнига);
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер")
Или ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
РеквизитыПрефиксации = ПолучитьПрефиксациюКассыКассовойКниги(Источник.Касса);
КонецЕсли;
Если ЗначениеЗаполнено(РеквизитыПрефиксации)
И ЗначениеЗаполнено(РеквизитыПрефиксации.ИспользоватьПрефикс)
И РеквизитыПрефиксации.ИспользоватьПрефикс Тогда
ПрефиксКассовойКниги = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(РеквизитыПрефиксации.Префикс, 2, "0", "Слева");
Префикс = ПрефиксКассовойКниги + Прав(Префикс, СтрДлина(Префикс) - 2);
КонецЕсли;
КонецПроцедуры
// Сброс номера документа при необходимости его изменения
//
// Параметры:
// Источник - ДокументОбъект - ПКО, РКО, Кассовая книга
// Отказ - Булево - флаг отказа
// РежимЗаписи - РежимЗаписиДокумента - Режим записи
// РежимПроведения - РежимПроведенияДокумента - Режим проведения.
//
Процедура ПроверитьНомерДокументаПоДатеОрганизацииКассовойКнигеПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
ИначеЕсли Источник.ЭтоНовый() Тогда
Возврат;
КонецЕсли;
ПрефиксацияОбъектовСобытия.ПроверитьНомерДокументаПоДатеИОрганизации(Источник, Отказ, РежимЗаписи, РежимПроведения);
РеквизитыПрефиксацииДоИзменения = "";
РеквизитыПрефиксацииПослеИзменения = "";
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЛистКассовойКниги")
Или ТипЗнч(Источник) = Тип("ДокументОбъект.ИнвентаризацияНаличныхДенежныхСредств") Тогда
КассоваяКнигаСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "КассоваяКнига");
РеквизитыПрефиксацииДоИзменения = ПолучитьПрефиксациюКассыКассовойКниги(КассоваяКнигаСсылка);
РеквизитыПрефиксацииПослеИзменения = ПолучитьПрефиксациюКассыКассовойКниги(Источник.КассоваяКнига);
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер")
Или ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
КассаСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Касса");
РеквизитыПрефиксацииДоИзменения = ПолучитьПрефиксациюКассыКассовойКниги(КассаСсылка);
РеквизитыПрефиксацииПослеИзменения = ПолучитьПрефиксациюКассыКассовойКниги(Источник.Касса);
КонецЕсли;
ПрефиксДоИзменения = ?(
ЗначениеЗаполнено(РеквизитыПрефиксацииДоИзменения)
И ЗначениеЗаполнено(РеквизитыПрефиксацииДоИзменения.ИспользоватьПрефикс)
И РеквизитыПрефиксацииДоИзменения.ИспользоватьПрефикс,
РеквизитыПрефиксацииДоИзменения.Префикс,
"");
ПрефиксПослеИзменения = ?(
ЗначениеЗаполнено(РеквизитыПрефиксацииПослеИзменения)
И ЗначениеЗаполнено(РеквизитыПрефиксацииПослеИзменения.ИспользоватьПрефикс)
И РеквизитыПрефиксацииПослеИзменения.ИспользоватьПрефикс,
РеквизитыПрефиксацииПослеИзменения.Префикс,
"");
Если ПрефиксДоИзменения <> ПрефиксПослеИзменения Тогда
Источник.Номер = "";
КонецЕсли;
КонецПроцедуры
// Устанавливает параметры выбора договора с заказчиком в рамках кооперации ГОЗ
//
// Параметры:
// Элемент - ПолеФормы - Поле ввода договора.
// ДополнительныеПараметры - Структура - Набор дополнительных параметров
//
Процедура УстановитьПараметрыВыбораДоговораСЗаказчиком(Элемент, ДополнительныеПараметры = Неопределено) Экспорт
ПараметрыВыбораДоговора = Новый Массив;
ПараметрыВыбораДоговора.Добавить(Новый ПараметрВыбора("Отбор.ПлатежиПо275ФЗ", Истина));
ПараметрыВыбораДоговора.Добавить(Новый ПараметрВыбора("Отбор.ДоговорСУчастникомГОЗ", Истина));
ПараметрыВыбораДоговора.Добавить(Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь));
ПараметрыВыбораДоговора.Добавить(Новый ПараметрВыбора("Отбор.ПодходитДляПодбораВДоговорЗаказчика", Истина));
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
Для Каждого ДополнительныйПараметр Из ДополнительныеПараметры Цикл
ПараметрыВыбораДоговора.Добавить(Новый ПараметрВыбора("Отбор." + ДополнительныйПараметр.Ключ, ДополнительныйПараметр.Значение));
КонецЦикла;
КонецЕсли;
Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораДоговора);
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеДокументов
// Проверяет корреспонденцию между банковскими счетами.
//
// Параметры:
// ДокументОбъект - ДокументОбъект - документ, для которого необходимо выполнить проверку корреспонденции
// Отказ - Булево - Признак отказа от продолжения работы
// ХозяйственнаяОперацияДокумента - ПеречислениеСсылка.ХозяйственныеОперации - хозяйственная операция документа
// ОшибкиЗаполнения - Строка - Строка, накапливающая ошибки проверок.
//
Процедура ПроверитьКорреспонденциюБанковскихСчетов(ДокументОбъект, Отказ, ХозяйственнаяОперацияДокумента, ОшибкиЗаполнения = "") Экспорт
ПараметрыПроверкиКорреспонденции = Неопределено;
Если Не ДокументОбъект.ДополнительныеСвойства.Свойство(
"ПараметрыПроверкиКорреспонденцииБанковскихСчетов", ПараметрыПроверкиКорреспонденции) Тогда
Возврат;
КонецЕсли;
Операции = Перечисления.ХозяйственныеОперации;
ИмяЭлементаПозиционирования = ПараметрыПроверкиКорреспонденции.ИмяЭлементаБанковскийСчет;
КорСчетОрганизацииЦифровогоРубля = ПараметрыПроверкиКорреспонденции.КорСчетОрганизацииЦифровогоРубля;
КорСчетКонтрагентаЦифровогоРубля = ПараметрыПроверкиКорреспонденции.КорСчетКонтрагентаЦифровогоРубля;
КорреспонденцияСЦифровымСчетом = ПараметрыПроверкиКорреспонденции.СчетЦифровогоРубляОрганизации ИЛИ
КорСчетОрганизацииЦифровогоРубля ИЛИ
КорСчетКонтрагентаЦифровогоРубля;
РазныйХарактерСчетовОрганизация = ?(КорСчетОрганизацииЦифровогоРубля,
ПараметрыПроверкиКорреспонденции.РасчетныйСчетОрганизации,
ПараметрыПроверкиКорреспонденции.СчетЦифровогоРубляОрганизации);
РазныйХарактерСчетовКонтрагент = ?(КорСчетКонтрагентаЦифровогоРубля,
ПараметрыПроверкиКорреспонденции.РасчетныйСчетОрганизации,
ПараметрыПроверкиКорреспонденции.СчетЦифровогоРубляОрганизации);
// Разрешаются корреспонденции только между счетами ЦР
ОперацииМеждуОрганизациями = Новый Массив;
// Операции СБДС
ОперацииМеждуОрганизациями.Добавить(Операции.ВозвратДенежныхСредствВДругуюОрганизацию);
ОперацииМеждуОрганизациями.Добавить(Операции.ОплатаДенежныхСредствВДругуюОрганизацию);
// Операции ПБДС
ОперацииМеждуОрганизациями.Добавить(Операции.ВозвратДенежныхСредствОтДругойОрганизации);
ОперацииМеждуОрганизациями.Добавить(Операции.ПоступлениеДенежныхСредствИзДругойОрганизации);
// Операции СБДС и ПБДС
ОперацииМеждуОрганизациями.Добавить(Операции.ВнутренняяПередачаДенежныхСредств);
ОперацииОрганизацияКонтрагент = Новый Массив;
// Операции СБДС
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратОплатыКлиенту);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВыдачаДенежныхСредствПодотчетнику);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВыплатаЗарплатыНаЛицевыеСчета);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВыплатаЗарплатыПоЗарплатномуПроекту);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВыплатаЗарплаты);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ПеречислениеТаможне);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ОплатаПоставщику);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ПеречислениеВБюджет);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ПрочаяВыдачаДенежныхСредств);
// Операции ПБДС
ОперацииОрганизацияКонтрагент.Добавить(Операции.ПоступлениеОплатыОтКлиента);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ПрочееПоступлениеДенежныхСредств);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратДенежныхСредствОтПоставщика);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратДенежныхСредствОтПодотчетника);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратДенежныхСредствОтАрендодателя);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратНеперечисленныхДС);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратНеперечисленнойЗарплатыПоЗарплатномуПроекту);
ОперацииОрганизацияКонтрагент.Добавить(Операции.ВозвратНалогов);
// Запрещены корреспонденции со счетом ЦР
ЗапрещенныеОперации = Новый Массив;
// Операции СБДС
ЗапрещенныеОперации.Добавить(Операции.СнятиеНаличныхДенежныхСредств);
ЗапрещенныеОперации.Добавить(Операции.ПеречислениеНаДепозиты);
ЗапрещенныеОперации.Добавить(Операции.КонвертацияВалюты);
ЗапрещенныеОперации.Добавить(Операции.ВозвратОплатыКлиентуНаПлатежнуюКарту);
ЗапрещенныеОперации.Добавить(Операции.ВозвратОплатыНаПлатежнуюКарту);
ЗапрещенныеОперации.Добавить(Операции.ОплатаПоКредитам);
ЗапрещенныеОперации.Добавить(Операции.ВыдачаЗаймаСотруднику);
ЗапрещенныеОперации.Добавить(Операции.ВыдачаЗаймов);
// Операции ПБДС
ЗапрещенныеОперации.Добавить(Операции.ПоступлениеДенежныхСредствИзКассыНаРасчетныйСчет);
ЗапрещенныеОперации.Добавить(Операции.ПоступлениеОплатыПоПлатежнойКарте);
ЗапрещенныеОперации.Добавить(Операции.ПоступлениеДенежныхСредствПоКредитам);
ЗапрещенныеОперации.Добавить(Операции.ПоступлениеДенежныхСредствПоДепозитам);
ЗапрещенныеОперации.Добавить(Операции.ПогашениеЗаймаСотрудником);
ЗапрещенныеОперации.Добавить(Операции.ПоступлениеДенежныхСредствПоЗаймамВыданным);
ЭтоОперацияМеждуОрганизациями = Не ОперацииМеждуОрганизациями.Найти(ХозяйственнаяОперацияДокумента) = Неопределено;
ЭтоОперацияОрганизацияКонтрагент = Не ОперацииОрганизацияКонтрагент.Найти(ХозяйственнаяОперацияДокумента) = Неопределено;
ЭтоЗапрещеннаяОперация = Не ЗапрещенныеОперации.Найти(ХозяйственнаяОперацияДокумента) = Неопределено;
НедопустимаяКорреспонденцияСОрганизацией = ЭтоОперацияМеждуОрганизациями И РазныйХарактерСчетовОрганизация;
НедопустимаяКорреспонденцияСКонтрагентом = ЭтоОперацияОрганизацияКонтрагент И РазныйХарактерСчетовКонтрагент;
Если ЭтоЗапрещеннаяОперация Тогда
Если КорСчетОрганизацииЦифровогоРубля Тогда
ИмяЭлементаПозиционирования = ПараметрыПроверкиКорреспонденции.ИмяЭлементаКорБанковскийСчет;
ИначеЕсли КорСчетКонтрагентаЦифровогоРубля Тогда
ИмяЭлементаПозиционирования = "БанковскийСчетКонтрагента";
КонецЕсли;
// Для позиционирования на счете, который не является счетом цифрового рубля
ИначеЕсли НедопустимаяКорреспонденцияСОрганизацией И НЕ КорСчетОрганизацииЦифровогоРубля Тогда
ИмяЭлементаПозиционирования = ПараметрыПроверкиКорреспонденции.ИмяЭлементаКорБанковскийСчет;
ИначеЕсли НедопустимаяКорреспонденцияСКонтрагентом И НЕ КорСчетКонтрагентаЦифровогоРубля Тогда
ИмяЭлементаПозиционирования = "БанковскийСчетКонтрагента";
КонецЕсли;
Если НедопустимаяКорреспонденцияСОрганизацией
ИЛИ НедопустимаяКорреспонденцияСКонтрагентом Тогда
// позиционирование на элементе расчетного счета
Текст = НСтр("ru = 'Расчетный счет не может корреспондировать со счетом цифрового рубля.
|Укажите другой счет'");
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, Текст);
ОбщегоНазначения.СообщитьПользователю(
Текст,
ДокументОбъект,
ИмяЭлементаПозиционирования,
,
Отказ);
КонецЕсли;
Если ЭтоЗапрещеннаяОперация И КорреспонденцияСЦифровымСчетом Тогда
// позиционирование на элементе счета цифрового рубля
Текст = СтрШаблон(НСтр("ru = 'Счет цифрового рубля не может быть использован для хозяйственной операции ""%1"".
|Укажите другой счет'"),
ХозяйственнаяОперацияДокумента);
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, Текст);
ОбщегоНазначения.СообщитьПользователю(
Текст,
ДокументОбъект,
ИмяЭлементаПозиционирования,
,
Отказ);
КонецЕсли;
КонецПроцедуры
// Возвращает параметры проверки корреспонденции между банковскими счетами для документов.
//
// Параметры:
// Объект - ДокументОбъект.ПоступлениеБезналичныхДенежныхСредств,
// ДокументОбъект.СписаниеБезналичныхДенежныхСредств - Документ, движения которого следует исключить.
// ИмяРеквизитаКорБанкСчетОрганизации - Строка - имя реквизита кор. банковского счета организации.
//
// Возвращаемое значение:
// Структура:
// *СчетЦифровогоРубляОрганизации - Булево - признак счета цифрового рубля
// *РасчетныйСчетОрганизации - Булево - признак, если счет не является цифровым
// *КорСчетОрганизацииЦифровогоРубля - Булево - признак счета цифрового рубля
// *КорСчетКонтрагентаЦифровогоРубля - Булево - признак счета цифрового рубля
// *ИмяЭлементаБанковскийСчет - Строка - имя элемента банковского счета
// *ИмяЭлементаКорБанковскийСчет - Строка - имя элемента корреспондирующего банковского счета
//
Функция ПараметрыПроверкиКорреспонденцииМеждуБанковскимиСчетами(Объект, ИмяРеквизитаКорБанкСчетОрганизации) Экспорт
КорБанковскийСчетОрганизации = Объект[ИмяРеквизитаКорБанкСчетОрганизации];
МассивБанковскихСчетов = ОбщегоНазначенияКлиентСервер.МассивЗначений(
Объект.БанковскийСчет, КорБанковскийСчетОрганизации, Объект.БанковскийСчетКонтрагента);
ДанныеБанковскихСчетов =
ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивБанковскихСчетов, "СчетЦифровогоРубля");
БанковскийСчетЦифровогоРубля = ?(ЗначениеЗаполнено(Объект.БанковскийСчет),
ДанныеБанковскихСчетов.Получить(Объект.БанковскийСчет),
Ложь);
КорСчетОрганизацииЦифровогоРубля = ?(ЗначениеЗаполнено(КорБанковскийСчетОрганизации),
ДанныеБанковскихСчетов.Получить(КорБанковскийСчетОрганизации),
Ложь);
КорСчетКонтрагентаЦифровогоРубля = ?(ЗначениеЗаполнено(Объект.БанковскийСчетКонтрагента),
ДанныеБанковскихСчетов.Получить(Объект.БанковскийСчетКонтрагента),
Ложь);
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("СчетЦифровогоРубляОрганизации", БанковскийСчетЦифровогоРубля = Истина);
ПараметрыПроверки.Вставить("РасчетныйСчетОрганизации", БанковскийСчетЦифровогоРубля = Ложь);
ПараметрыПроверки.Вставить("КорСчетОрганизацииЦифровогоРубля", КорСчетОрганизацииЦифровогоРубля);
ПараметрыПроверки.Вставить("КорСчетКонтрагентаЦифровогоРубля", КорСчетКонтрагентаЦифровогоРубля);
ПараметрыПроверки.Вставить("ИмяЭлементаБанковскийСчет", "БанковскийСчет");
ПараметрыПроверки.Вставить("ИмяЭлементаКорБанковскийСчет", ИмяРеквизитаКорБанкСчетОрганизации);
Возврат ПараметрыПроверки;
КонецФункции
// Процедура заполняет документ на основании уведомления о зачислении валюты
//
// Параметры:
// ДокументОснование - ДокументСсылка.УведомлениеОЗачисленииВалюты - Документ - основание
// ДокументОбъект - ДокументОбъект - Текущий документ
// ДанныеЗаполнения - Структура - Данные заполнения.
//
Процедура ЗаполнитьДокументПоУведомлениюОЗачисленииВалюты(Знач ДокументОснование, ДокументОбъект, ДанныеЗаполнения) Экспорт
ТекстЗапроса = "
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПеречислениеДенежныхСредствНаДругойСчет) КАК ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Перечисление.ТипыПлатежныхДокументов.РаспоряжениеОбОбязательнойПродаже) КАК ТипПлатежногоДокумента,
| ДанныеДокумента.Организация КАК Организация,
| ДанныеДокумента.БанковскийСчет.Подразделение КАК Подразделение,
| ДанныеДокумента.Валюта КАК Валюта,
| ДанныеДокумента.Ссылка КАК УведомлениеОЗачисленииВалюты,
| ДанныеДокумента.Ссылка КАК ДокументОснование,
|
| ДанныеДокумента.БанковскийСчет КАК БанковскийСчет,
| ДанныеДокумента.БанковскийСчет.ОсновнойБанковскийСчет КАК БанковскийСчетПолучатель,
|
| ДенежныеСредства.СуммаОстаток КАК СуммаДокумента
|ИЗ
| Документ.УведомлениеОЗачисленииВалюты КАК ДанныеДокумента
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ДенежныеСредстваКВыплате.Остатки(,
| ЗаявкаНаРасходованиеДенежныхСредств = &Ссылка
| ) КАК ДенежныеСредства
| ПО
| ИСТИНА
|
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не требуется вводить ""Списание безналичных ДС"" на основании документа %1'"),
ДокументОснование);
ВызватьИсключение Текст;
Иначе
ДанныеЗаполнения = Новый Структура;
Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
ДанныеЗаполнения.Вставить(Колонка.Имя);
КонецЦикла;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, Выборка);
КонецЕсли;
КонецПроцедуры
// Очищает реквизиты платежей в бюджет после проверки даты применения Приказа 58н
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты.
// ПредыдущийПериод - Дата - исходный период (до изменения)
// НовыйПериод - Дата - новый период.
//
Процедура ПриИзмененииПравилПлатежейВБюджет(Объект, ПредыдущийПериод, НовыйПериод) Экспорт
Если Не Объект.ПеречислениеВБюджет Тогда
Возврат;
КонецЕсли;
ДействовалиНовыеПравила = ПлатежиВБюджетКлиентСервер.ДействуетПриказ58н_202604(ПредыдущийПериод);
ДействуютНовыеПравила = ПлатежиВБюджетКлиентСервер.ДействуетПриказ58н_202604(НовыйПериод);
Если ДействовалиНовыеПравила <> ДействуютНовыеПравила Тогда
ПлатежиВБюджет.РеквизитыПлатежаВБюджетПоУмолчанию(Объект);
КонецЕсли;
КонецПроцедуры
// Выбирает перечень КПП подразделений организации
//
// Параметры:
// Организация - СправочникСсылка.Организации - Организация, для которой определяет перечень КПП.
//
// Возвращаемое значение:
// Массив из Структура - содержит:
// * КПП - Строка - КПП филиала
// * Подразделение - Строка, Неопределено - Филиал, имеющий регистрацию в налоговом органе
// * РегистрацияСсылка - СправочникСсылка.РегистрацииВНалоговомОргане - Регистрация филиала
//
Функция СписокКППОрганизации(Организация) Экспорт
СписокВыбораКПП = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Регистрации.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
| Регистрации.РегистрацияВНалоговомОргане КАК РегистрацияВНалоговомОргане
|ПОМЕСТИТЬ КППКрупнейшегоНалогоплательщика
|ИЗ
| РегистрСведений.КрупнейшийНалогоплательщикИсторияРегистрацийВНалоговомОргане.СрезПоследних(, СтруктурнаяЕдиница = &Организация) КАК Регистрации
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(Регистрации.РегистрацияВНалоговомОргане.КПП, """") КАК КПП,
| ЕСТЬNULL(Регистрации.Подразделение.Наименование, """") КАК Подразделение,
| Регистрации.РегистрацияВНалоговомОргане КАК РегистрацияСсылка
|ПОМЕСТИТЬ КППОрганизаций
|ИЗ
| РегистрСведений.РегистрацииВНалоговомОргане.СрезПоследних(, Организация = &Организация) КАК Регистрации
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЕСТЬNULL(Организации.РегистрацияВНалоговомОргане.КПП, ""0""),
| Организации.Наименование,
| Организации.РегистрацияВНалоговомОргане
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.ГоловнаяОрганизация = &Организация
| И Организации.ОбособленноеПодразделение
| И НЕ Организации.ПометкаУдаления
| И Организации.РегистрацияВНалоговомОргане <> ЗНАЧЕНИЕ(Справочник.РегистрацииВНалоговомОргане.ПустаяСсылка)
| И Организации.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.Действует)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЕСТЬNULL(Регистрации.РегистрацияВНалоговомОргане.КПП, """") КАК КПП,
| ЕСТЬNULL(Регистрации.Подразделение.Наименование, """") КАК Подразделение,
| Регистрации.РегистрацияВНалоговомОргане КАК РегистрацияСсылка
|ИЗ
| РегистрСведений.РегистрацииВНалоговомОргане.СрезПоследних(
| , Организация.ГоловнаяОрганизация = &Организация И Организация <> &Организация) КАК Регистрации
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| КППКрупнейшегоНалогоплательщика.РегистрацияВНалоговомОргане.КПП,
| """",
| КППКрупнейшегоНалогоплательщика.РегистрацияВНалоговомОргане
|ИЗ
| КППКрупнейшегоНалогоплательщика КАК КППКрупнейшегоНалогоплательщика
|
|ИНДЕКСИРОВАТЬ ПО
| КПП
|;
|//////////////////////////////////////////////
|ВЫБРАТЬ
| Организации.КПП КАК КПП
|ПОМЕСТИТЬ КПППредприятия
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.Ссылка = &Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КППОрганизаций.КПП КАК КПП,
| КППОрганизаций.Подразделение КАК Подразделение,
| КППОрганизаций.РегистрацияСсылка КАК РегистрацияСсылка
|ИЗ
| КППОрганизаций КАК КППОрганизаций
|ГДЕ
| НЕ КППОрганизаций.КПП В
| (ВЫБРАТЬ
| КПППредприятия.КПП КАК КПП
| ИЗ
| КПППредприятия КАК КПППредприятия)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КПППредприятия.КПП КАК КПП
|ИЗ
| КПППредприятия КАК КПППредприятия
|";
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.ВыполнитьПакет();
Выборка = Результат[Результат.ВГраница()].Выбрать();
Если Выборка.Следующий() Тогда
КПП = Новый Структура("КПП, Подразделение, РегистрацияСсылка");
ЗаполнитьЗначенияСвойств(КПП, Выборка);
СписокВыбораКПП.Добавить(КПП);
КонецЕсли;
Выборка = Результат[Результат.ВГраница() - 1].Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.КПП) Тогда
КПП = Новый Структура("КПП, Подразделение, РегистрацияСсылка");
ЗаполнитьЗначенияСвойств(КПП, Выборка);
СписокВыбораКПП.Добавить(КПП);
КонецЕсли;
КонецЦикла;
Возврат СписокВыбораКПП;
КонецФункции
#КонецОбласти
#Область ОбменСБанками
// Загружает электронную выписку банка
//
// Параметры:
// ЭлектроннаяВыпискаБанка - Ссылка - Электронная выписка банка
//
Процедура РазобратьВыпискуБанка(ЭлектроннаяВыпискаБанка) Экспорт
Перем ДеревоВыписки;
// ЭлектронноеВзаимодействие.ОбменСБанками
ОбменСБанками.ПолучитьДанныеВыпискиБанкаДеревоЗначений(ЭлектроннаяВыпискаБанка, ДеревоВыписки);
// Конец ЭлектронноеВзаимодействие.ОбменСБанками
КлиентБанк = Обработки.КлиентБанк.Создать();
КлиентБанк.ЗаполнитьТаблицуСчетовЗагрузки();
КлиентБанк.СоздаватьКонтрагентов = Истина;
КлиентБанк.ПроводитьДокументы = Истина;
СтрокаСчета = Неопределено;
Если ДеревоВыписки.Строки.Количество() Тогда
Выписки = ДеревоВыписки.Строки[0];
Если Выписки.Строки.Количество() Тогда
Выписка = Выписки.Строки[0];
СтрокаНомерСчета = Выписка.Строки.Найти("Выписки.НомерСтроки.НомерСчета", "ПолныйПуть");
Если СтрокаНомерСчета <> Неопределено Тогда
СчетаВыписки = КлиентБанк.БанковскиеСчета.НайтиСтроки(Новый Структура("НомерСчета", СтрокаНомерСчета.Значение));
Если СчетаВыписки.Количество() Тогда
СтрокаСчета = СчетаВыписки[0];
СтрокаФайла = КлиентБанк.Файлы.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаФайла, СтрокаСчета);
СтрокаФайла.БанковскийСчет = СтрокаСчета.Ссылка;
СтрокаФайла.АдресХранилищаФайла = ПоместитьВоВременноеХранилище(ДеревоВыписки, Новый УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СтрокаСчета <> Неопределено Тогда
КлиентБанк.ЗагрузитьПлатежиПоСчету(СтрокаСчета, Новый УникальныйИдентификатор, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Бюджет
// Проверяет корректность заполнения налоговых реквизитов
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты.
// Отказ - Булево - Признак отказа от продолжения работы
// НепроверяемыеРеквизиты - Массив из Строка - Непроверяемые реквизиты документа
// ФлагОбменСБанками - Булево - используется обмен с банком
// ОшибкиЗаполнения - Строка - Накопленное описание ошибок.
//
Процедура ПроверитьЗаполнениеНалоговыхРеквизитов(Объект, Отказ, НепроверяемыеРеквизиты, ФлагОбменСБанками = Ложь, ОшибкиЗаполнения = "") Экспорт
ХозяйственнаяОперация = Объект.ХозяйственнаяОперация;
ПеречислениеВБюджет = Объект.ПеречислениеВБюджет;
ВидПеречисленияВБюджет = Объект.ВидПеречисленияВБюджет;
СтатусСоставителя = Объект.СтатусСоставителя;
Дата = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса());
ДатаНачалаПримененияПриказа126н = Константы.ДатаНачалаПримененияПриказа126н.Получить();
ПараметрыПроверкиЗаполнения = Новый Структура;
ПараметрыПроверкиЗаполнения.Вставить("ПрименениеПриказа107н",
Дата >= Константы.ДатаНачалаПримененияПриказа107н.Получить());
ПараметрыПроверкиЗаполнения.Вставить("ПрименениеПриказа126н",
ДатаНачалаПримененияПриказа126н <> '00010101'
И Дата >= ДатаНачалаПримененияПриказа126н);
ПараметрыПроверкиЗаполнения.Вставить("ПрименениеПриказа58н",
ПлатежиВБюджетКлиентСервер.ДействуетПриказ58н_202604(Дата));
МассивОпераций = МассивОперацийПеречисленияВБюджет();
Если ПеречислениеВБюджет И МассивОпераций.Найти(ХозяйственнаяОперация) <> Неопределено Тогда
// Проверки, общие для всех видов перечислений в бюджет
Если ПлатежиВБюджетКлиентСервер.СтатусыПлательщика(
ПараметрыПроверкиЗаполнения.ПрименениеПриказа107н, Дата).НайтиПоЗначению(СтатусСоставителя) = Неопределено Тогда
ТекстОшибки = НСтр("ru = 'Неверное значение поля ""Статус плательщика""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
ДоступныеСтатусыПлательщика = ПлатежиВБюджетКлиентСервер.ДоступныеСтатусыПлательщикаПоВидуПлатежа(ВидПеречисленияВБюджет, Объект.КодБК, Объект.Дата);
Если ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н
И ДоступныеСтатусыПлательщика.НайтиПоЗначению(Объект.СтатусСоставителя) = Неопределено Тогда
СтрокаДоступныхСтатусов = СтрСоединить(ДоступныеСтатусыПлательщика.ВыгрузитьЗначения(), ", ");
ТекстОшибки =
СтрШаблон(НСтр("ru = 'В поле ""Статус плательщика"" следует указать одно из доступных значений: %1'"), СтрокаДоступныхСтатусов);
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "НадписьРеквизитыПлатежаВБюджет", , Отказ);
КонецЕсли;
КонецЕсли;
Если ПараметрыПроверкиЗаполнения.ПрименениеПриказа126н Тогда
НепроверяемыеРеквизиты.Добавить("ПоказательТипа");
КонецЕсли;
Если ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.НалоговыйПлатеж Тогда
ПроверитьЗаполнениеРеквизитовНалоговыхПлатежей(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ИначеЕсли ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.ТаможенныйПлатеж Тогда
ПроверитьЗаполнениеРеквизитовТаможенныхПлатежей(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ИначеЕсли ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж Тогда
ПроверитьЗаполнениеРеквизитовИныхПлатежейВБюджет(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Проверяет корректность заполнения реквизитов платежа в бюджет согласно 148н
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты.
// Отказ - Булево - Признак отказа от продолжения работы.
//
Процедура ПроверитьИННиКППНаСоответствие148н(Объект, Отказ) Экспорт
Если Объект.Дата < ПлатежиВБюджетКлиентСервер.НачалоДействияУказания3844У() Тогда
Возврат;
КонецЕсли;
РеквизитыПлательщика = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Организация, "ИНН, КПП");
Если ТипЗнч(Объект) = Тип("ДокументОбъект.СписаниеБезналичныхДенежныхСредств")
И ЗначениеЗаполнено(Объект.РегистрацияВНалоговомОргане) Тогда
РеквизитыПлательщика.КПП = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.РегистрацияВНалоговомОргане, "КПП");
КонецЕсли;
РеквизитыПолучателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.БанковскийСчетКонтрагента, "Владелец.ИНН, Владелец.КПП");
Если Лев(РеквизитыПлательщика.ИНН, 2) = "00" Тогда
ТекстОшибки = НСтр("ru = 'Первые две цифры ИНН плательщика не могут быть ""00""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, Объект,,, Отказ);
КонецЕсли;
Если Лев(РеквизитыПлательщика.КПП, 2) = "00" Тогда
ТекстОшибки = НСтр("ru = 'Первые две цифры КПП плательщика не могут быть ""00""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, Объект,,, Отказ);
КонецЕсли;
Если Лев(РеквизитыПолучателя.ВладелецИНН, 2) = "00" Тогда
ТекстОшибки = НСтр("ru = 'Первые две цифры ИНН получателя не могут быть ""00""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, Объект, "Контрагент",, Отказ);
КонецЕсли;
Если Лев(РеквизитыПолучателя.ВладелецКПП, 2) = "00" Тогда
ТекстОшибки = НСтр("ru = 'Первые две цифры КПП получателя не могут быть ""00""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, Объект, "Контрагент",, Отказ);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
//-- Локализация
#Область ВыплатыСамозанятым
// Изменяет свойства элементов, связанных с операцией с самозанятыми, в документах "Приобретение товаров и услуг"
// и "Приобретение услуг и прочих активов".
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, в которой изменяется отображение.
//
Процедура НастроитьЭлементыОперацииССамозанятым(Форма, ЕстьПривязкаЧека = Истина) Экспорт
//++ Локализация
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
Возврат;
КонецЕсли;
Элементы = Форма.Элементы;
Объект = Форма.Объект; // ДанныеФормыСтруктура
ВидыКонтрагентов = Новый Массив;
ВидыКонтрагентов.Добавить(Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель);
ВидыКонтрагентов.Добавить(Перечисления.ЮрФизЛицо.ФизЛицо);
Элементы.ОперацияССамозанятым.Видимость =
ВидыКонтрагентов.Найти(Форма.КонтрагентЮрФизЛицо) <> Неопределено
И (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика
ИЛИ Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки);
Если ЕстьПривязкаЧека Тогда
Элементы.СтатусЧекаСамозанятого.Видимость = Объект.ОперацияССамозанятым;
КонецЕсли;
Если Объект.ОперацияССамозанятым Тогда
Элементы.НалогообложениеНДС.Видимость = Ложь;
КонецЕсли;
//-- Локализация
Возврат;
КонецПроцедуры
// Отключает флаг закупки у самозанятого в документах приобретения: "Приобретение товаров и услуг"
// и "Приобретение услуг и прочих активов".
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа приобретения.
//
Процедура ЗаполнитьПризнакЗакупкиУСамозанятого(Форма) Экспорт
//++ Локализация
Объект = Форма.Объект;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
Возврат;
КонецЕсли;
Если Не ((Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика
ИЛИ Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки)
И (Форма.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
ИЛИ Форма.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо)) Тогда
Объект.ОперацияССамозанятым = Ложь;
КонецЕсли;
//-- Локализация
Возврат;
КонецПроцедуры
// Заполняет документ при изменении флага "Операция с самозанятым".
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа.
//
Процедура ОперацияССамозанятымПриИзменении(Форма, ЕстьПривязкаЧека = Истина) Экспорт
//++ Локализация
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
Возврат;
КонецЕсли;
Объект = Форма.Объект;
Элементы = Форма.Элементы;
ВзаиморасчетыРаботаСФормами.ФормаПриИзмененииРеквизитов(Форма, "Контрагент");
Если Объект.ОперацияССамозанятым Тогда
Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
Иначе
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка);
ПараметрыЗаполнения = МенеджерОбъекта.ПараметрыЗаполненияНалогообложенияНДСЗакупки(Объект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСЗакупки(Объект.НалогообложениеНДС, ПараметрыЗаполнения, Неопределено);
УчетНДСУП.ЗаполнитьСписокВыбораНалогообложенияНДСЗакупки(
Элементы.НалогообложениеНДС, Объект.НалогообложениеНДС, ПараметрыЗаполнения, Неопределено);
КонецЕсли;
НастроитьЭлементыОперацииССамозанятым(Форма, ЕстьПривязкаЧека);
Если ЕстьПривязкаЧека Тогда
Если Форма.ОперацияССамозанятым <> Объект.ОперацияССамозанятым Тогда
УстановитьСтатусЗагрузкиЧеков(Форма);
КонецЕсли;
Форма.ОперацияССамозанятым = Объект.ОперацияССамозанятым;
КонецЕсли;
//-- Локализация
Возврат;
КонецПроцедуры
// Устанавливает статус загрузки чеков в форме документов приобретения: "Приобретение товаров и услуг"
// и "Приобретение услуг и прочих активов".
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа приобретения.
//
Процедура УстановитьСтатусЗагрузкиЧеков(Форма) Экспорт
//++ Локализация
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
Возврат;
КонецЕсли;
Объект = Форма.Объект; // ДанныеФормыСтруктура
Элементы = Форма.Элементы;
Если Не Объект.ОперацияССамозанятым Тогда
Форма.ЧекиСамозанятого.Очистить();
Форма.СтатусЧекаСамозанятого = "";
Возврат;
КонецЕсли;
ЦветТекстаСтатусЗагрузкиЧеков = ЦветаСтиля.ГиперссылкаЦвет;
Чеки = Новый Массив;
Форма.ЧекиСамозанятого.Очистить();
ЗаполнитьЧекиСамозанятого(Объект.Ссылка, Форма.ЧекиСамозанятого);
Для Каждого ТекущийЧек Из Форма.ЧекиСамозанятого Цикл
Чеки.Добавить(СтрШаблон("№%1", ТекущийЧек.НомерЧека));
КонецЦикла;
Если Чеки.Количество() = 0 Тогда
СтатусЗагрузкиЧеков = НСтр("ru='Загрузить чек'");
ЦветТекстаСтатусЗагрузкиЧеков = ЦветаСтиля.ЦветТекстаПроблема;
Иначе
СтрокаЧеков = СтрСоединить(Чеки, ", ");
СтатусЗагрузкиЧеков = СтрШаблон(НСтр("ru = '%1 %2'"), ?(Чеки.Количество() > 1, НСтр("ru = 'Чеки:'"), НСтр("ru = 'Чек'")), СтрокаЧеков);
КонецЕсли;
Форма.СтатусЧекаСамозанятого = СтроковыеФункции.ФорматированнаяСтрока(СтатусЗагрузкиЧеков);
Элементы.СтатусЧекаСамозанятого.ЦветТекста = ЦветТекстаСтатусЗагрузкиЧеков;
//-- Локализация
Возврат;
КонецПроцедуры
//++ Локализация
// Сохраняет чек самозанятого в присоединенных файлах документа.
//
// Параметры:
// Документ - ДокументСсылка.ПриобретениеТоваровУслуг, ДокументСсылка.ПриобретениеУслугПрочихАктивов - будущий
// документ, владелец файла.
// ДанныеЧека - Структура - Данные чека:
// * НомерЧека - Строка - номер чека.
// * СсылкаНаЧек - Строка - ссылка на чек.
// * ЧекСамозанятого - ДвоичныеДанные - файл чека в виде двоичных данных.
Процедура СохранитьЧекСамозанятого(Документ, ДанныеЧека) Экспорт
Если Не ПустаяСтрока(ДанныеЧека.ЧекСамозанятого) Тогда
ИмяФайла = СтрШаблон(НСтр("ru = '№%1'"), ДанныеЧека.НомерЧека);
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла("Описание");
ПараметрыФайла.ВладелецФайлов = Документ;
ПараметрыФайла.ИмяБезРасширения = ИмяФайла;
ПараметрыФайла.РасширениеБезТочки = "jpg";
ПараметрыФайла.ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата();
ПараметрыФайла.Вставить("ЭтоЧекСамозанятого", Истина);
ПараметрыФайла.Вставить("СсылкаНаЧек", ДанныеЧека.СсылкаНаЧек);
ПараметрыФайла.Служебный = Ложь;
АдресФайла = ПоместитьВоВременноеХранилище(ДанныеЧека.ЧекСамозанятого);
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайла);
ИначеЕсли Не ПустаяСтрока(ДанныеЧека.СсылкаНаЧек) Тогда
ДобавитьЧекСамозанятогоИзИнтернета(
ДанныеЧека.СсылкаНаЧек, Документ);
КонецЕсли;
КонецПроцедуры
// Создает ссылку на скаченный файл чека самозанятого по переданной ссылке
//
// Параметры:
// СсылкаНаЧек - Строка - URL на чек самозанятого на сайте ФНС
// Документ - ДокументСсылка.ПриобретениеТоваровУслуг, ДокументСсылка.ПриобретениеУслугПрочихАктивов - Ссылка на
// документ, к которому присоединяется файл.
//
Процедура ДобавитьЧекСамозанятогоИзИнтернета(СсылкаНаЧек, Документ) Экспорт
Адрес = СсылкаНаЧек;
ПараметрыПолучения = ПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла();
ПараметрыПолучения.Таймаут = 1260;
Результат = ПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище(Адрес, ПараметрыПолучения);
Если Результат.Статус Тогда
ИмяФайла = СтрШаблон(НСтр("ru='№%1'"), НомерЧекаИзСсылки(СсылкаНаЧек));
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла("Описание");
ПараметрыФайла.ВладелецФайлов = Документ;
ПараметрыФайла.ИмяБезРасширения = ИмяФайла;
ПараметрыФайла.РасширениеБезТочки = "jpg";
ПараметрыФайла.ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата();
ПараметрыФайла.Служебный = Ложь;
ПараметрыФайла.Вставить("ЭтоЧекСамозанятого", Истина);
ПараметрыФайла.Вставить("СсылкаНаЧек", СсылкаНаЧек);
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, Результат.Путь);
УдалитьИзВременногоХранилища(Результат.Путь);
Иначе
ТекстОшибки = НСтр("ru = 'Не удалось скачать чек самозанятого.
|Описание: %1
|URL: %2'");
Если Результат.Свойство("КодСостояния") Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Код ошибки: %3'");
ТекстОшибки = СтрШаблон(ТекстОшибки, Результат.СообщениеОбОшибке, Адрес, Результат.КодСостояния);
Иначе
ТекстОшибки = СтрШаблон(ТекстОшибки, Результат.СообщениеОбОшибке, Адрес);
КонецЕсли;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение чека самозанятого по ссылке'"), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецЕсли;
КонецПроцедуры
// Функция возвращает номер чека из ссылки на чек на сайте ФНС
//
// Параметры:
// СсылкаНаЧек - Строка - URL на чек самозанятого на сайте ФНС
//
// Возвращаемое значение:
// Строка - Номер чека
//
Функция НомерЧекаИзСсылки(СсылкаНаЧек) Экспорт
ЧастьСсылкиНаЧек = СтрЗаменить(СсылкаНаЧек, ДенежныеСредстваПовтИспРФ.АдресСервисаФНС(), "");
МассивЧастейСсылки = СтрРазделить(ЧастьСсылкиНаЧек, "/");
ИНН = ИННИзСсылкиНаЧек(МассивЧастейСсылки);
НомерЧека = "";
ПредыдущееЗначение = "";
СоответствуетУсловиям = Ложь;
// Номер чека идет после ИНН и перед "print"
Для Каждого ЧастьСсылки Из МассивЧастейСсылки Цикл
Если ЗначениеЗаполнено(НомерЧека) И ЧастьСсылки = "print" Тогда
СоответствуетУсловиям = Истина;
КонецЕсли;
Если ПредыдущееЗначение = ИНН Тогда
НомерЧека = ЧастьСсылки;
КонецЕсли;
ПредыдущееЗначение = ЧастьСсылки;
КонецЦикла;
Если Не СоответствуетУсловиям Тогда
НомерЧека = "";
КонецЕсли;
Возврат НомерЧека;
КонецФункции
// Получает ИНН контрагента из ссылки на чек самозанятого.
//
// Параметры:
// МассивЧастейСсылки - Массив из Строка - Массив, полученный в результате разделения ссылки на чек по символу "/".
//
// Возвращаемое значение:
// Строка - ИНН
//
Функция ИННИзСсылкиНаЧек(МассивЧастейСсылки) Экспорт
ИНН = "";
Для Каждого ЧастьСсылки Из МассивЧастейСсылки Цикл
Если ЧастьСсылки <> ""
И СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ЧастьСсылки) Тогда
ТекстОшибки = "";
СоответствуетТребованиям =
РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ЧастьСсылки, Ложь, ТекстОшибки);
Если СоответствуетТребованиям Тогда
ИНН = ЧастьСсылки;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ИНН;
КонецФункции
// Возвращает адрес сервиса ФНС с чеками
//
// Возвращаемое значение:
// Строка - адрес страницы
//
Функция АдресСервисаФНС() Экспорт
ИспользуетсяТестовыйРежим = Ложь;
ОбменСБанкамиПереопределяемый.ПроверитьИспользованиеТестовогоРежима(ИспользуетсяТестовыйРежим);
Если Не ИспользуетсяТестовыйРежим Тогда
Возврат "https://lknpd.nalog.ru";
Иначе
Возврат "https://lknpd-adp.gnivc.ru";
КонецЕсли;
КонецФункции
// Возвращает признак, что счет открыт в Сбербанке
//
// Параметры:
// БанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций - Ссылка на банковский счет, который стоит проверить.
//
// Возвращаемое значение:
// Булево - Истина, если счет открыт в Сбербанке
//
Функция ЭтоСчетСбербанка(БанковскийСчет) Экспорт
РеквизитыСчета = Справочники.БанковскиеСчетаОрганизаций.ПолучитьРеквизитыБанковскогоСчетаОрганизации(БанковскийСчет);
ЭтоСчетСбербанка = Ложь;
БИК = РеквизитыСчета.БИК;
Макет = Справочники.НастройкиОбменСБанками.ПолучитьМакет("СписокБанков");
Макет.КодЯзыка = Метаданные.Языки.Русский.КодЯзыка;
Для Индекс = 1 По Макет.ВысотаТаблицы Цикл
БИКБанка = Макет.Область(Индекс, 2).Текст;
Если БИК <> БИКБанка Тогда
Продолжить;
КонецЕсли;
СпособОбмена = Макет.Область(Индекс, 3).Текст;
Если СпособОбмена = "Сбербанк" Тогда
ЭтоСчетСбербанка = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ЭтоСчетСбербанка;
КонецФункции
// Очищает неиспользуемые реквизиты при оплате самозанятым.
//
// Параметры:
// ДокументОбъект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств,
// ДокументОбъект.СписаниеБезналичныхДенежныхСредств - текущий объект.
//
Процедура ОчиститьНеиспользуемыеРеквизитыОплатыСамозанятым(ДокументОбъект) Экспорт
Если ДокументОбъект.ОперацияССамозанятым Тогда
ДокументОбъект.ПеречислениеВБюджет = Ложь;
КонецЕсли;
КонецПроцедуры
// Процедура устанавливает параметры выбора для счета для списка контрагентов
//
// Параметры:
// Объект - ДанныеФормыСтруктура - Текущий объект
// Элемент - ПолеФормы - Поле для ввода банковского счета.
//
Процедура УстановитьПараметрыВыбораБанковскихСчетаСпискаКонтрагентов(Объект, Элемент) Экспорт
СвязиПараметров = Новый Массив;
СвязиПараметров.Добавить(Новый СвязьПараметраВыбора("Отбор.Владелец", "Элементы.БанковскиеСчетаСпискаКонтрагентов.ТекущиеДанные.Контрагент"));
Если Объект.ПлатежСКонвертацией Тогда
СвязиПараметров.Добавить(Новый СвязьПараметраВыбора("Отбор.ВалютаДенежныхСредств", "Объект.Валюта"));
КонецЕсли;
Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметров);
КонецПроцедуры
//-- Локализация
#КонецОбласти
#Область СистемаБыстрыхПлатежей
// Возвращает платежную ссылку b2b.
//
// Параметры:
// ДокументСсылка - ДокументСсылка - Документ, для который выполняется поиск платежной ссылки.
//
// Возвращаемое значение:
// Строка, Неопределено - Платежная ссылка b2b
Функция ПлатежнаяСсылкаb2b(ДокументСсылка) Экспорт
Результат = Неопределено;
//++ Локализация
Если ПереводыСБПb2b.ЧтениеПереводовСБПДоступно() Тогда
ДанныеПлатежа = РегистрыСведений.ИдентификаторыОперацийСБПb2b.ДанныеПлатежнойСсылки(ДокументСсылка);
Если ДанныеПлатежа <> Неопределено Тогда
Результат = ДанныеПлатежа.ПлатежнаяСсылка;
КонецЕсли;
КонецЕсли;
//-- Локализация
Возврат Результат;
КонецФункции
// Возвращает двоичные данные платежные ссылки СБП b2b.
//
// Параметры:
// ДокументСсылка - ДокументСсылка - Документ, для который выполняется поиск платежной ссылки.
// Размер - Число - Размер картинки QR-кода.
//
// Возвращаемое значение:
// Неопределено, ДвоичныеДанные - Изображение QRКода СБПb2b
Функция ИзображениеQRКодаСБПb2b(ДокументСсылка, Размер = 200) Экспорт
ДвоичныеДанные = Неопределено;
//++ Локализация
ПлатежнаяСсылка = ПлатежнаяСсылкаb2b(ДокументСсылка);
Если ПлатежнаяСсылка <> Неопределено Тогда
ДвоичныеДанные = СистемаБыстрыхПлатежей.ИзображениеQRКодаСБП(ПлатежнаяСсылка, Размер, 0);
Если ТипЗнч(ДвоичныеДанные) <> Тип("ДвоичныеДанные") Тогда
Шаблон = Нстр("ru = 'Не удалось сформировать QR-код для документа %1.
|Технические подробности см. в журнале регистрации.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДокументСсылка);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;
//-- Локализация
Возврат ДвоичныеДанные;
КонецФункции
// Добавляет команду "Обновить статус оплаты СБП" на форму документа.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма документа.
// ПараметрыКоманды - см. НовыйПараметрыКомандыОбновленияСтатусаОплатыСБП.
//
Процедура ДобавитьКомандуОбновленияСтатусаОплатыСБП(Форма, ПараметрыКоманды) Экспорт
//++ Локализация
СистемаБыстрыхПлатежейУТ.ДобавитьКомандуОбновленияСтатусаОплатыСБП(Форма, ПараметрыКоманды);
//-- Локализация
Возврат;
КонецПроцедуры
// Возвращает структуру параметров команды обновления статуса оплаты СБП.
//
// Возвращаемое значение:
// Структура:
// * Родитель - Неопределено - форма документа или группа на форме.
// * МестоРасположения - Неопределено - элемент, перед которым будет расположена команда.
Функция НовыйПараметрыКомандыОбновленияСтатусаОплатыСБП() Экспорт
ПараметрыКоманды = Новый Структура;
ПараметрыКоманды.Вставить("Родитель", Неопределено);
ПараметрыКоманды.Вставить("МестоРасположения", Неопределено);
Возврат ПараметрыКоманды;
КонецФункции
// Проверяет получателя, указанного в документе, и получателя, указанного в платежной ссылке СБП.
//
// Параметры:
// ДокументОбъект - ДокументОбъект - Документ, содержащий входящую платежную ссылку СБП.
// РежимЗаписи - РежимЗаписиДокумента - режим записи документа.
// Отказ - Булево - признак отказа от записи.
//
Процедура ПроверитьПолучателяПлатежныхСсылокСБП(ДокументОбъект, РежимЗаписи, Отказ) Экспорт
//++ Локализация
Если РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВходящиеПлатежныеСсылкиСБП.ДокументОперации КАК ДокументОперации,
| ВходящиеПлатежныеСсылкиСБП.ПлатежнаяСсылка КАК ПлатежнаяСсылка,
| ВходящиеПлатежныеСсылкиСБП.НастройкаПодключения КАК НастройкаПодключения,
| ВходящиеПлатежныеСсылкиСБП.ИНН КАК ИНН,
| ВходящиеПлатежныеСсылкиСБП.НомерСчета КАК СчетПолучателя,
| ВходящиеПлатежныеСсылкиСБП.ПроверкаПройдена КАК ПроверкаПройдена
|ИЗ
| РегистрСведений.ВходящиеПлатежныеСсылкиСБП КАК ВходящиеПлатежныеСсылкиСБП
|ГДЕ
| ВходящиеПлатежныеСсылкиСБП.ДокументОперации = &ДокументОперации";
Запрос.УстановитьПараметр("ДокументОперации", ДокументОбъект.Ссылка);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(Метаданные.РегистрыСведений.ВходящиеПлатежныеСсылкиСБП.ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("ДокументОперации", ДокументОбъект.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
ПараметрыМеханизма = МенеджерОбъекта.ПараметрыВзаиморасчеты(ДокументОбъект);
Если ТипЗнч(ПараметрыМеханизма) = Тип("Массив") Тогда
МассивПараметров = ПараметрыМеханизма;
Иначе
МассивПараметров = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыМеханизма);
КонецЕсли;
ПараметрыПроверки = ДенежныеСредстваКлиентСерверЛокализация.ПараметрыПроверкиПолучателяПлатежнойСсылки();
Для Каждого Реквизиты Из МассивПараметров Цикл
Если Реквизиты.ТипРасчетов <> Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком Тогда
Продолжить;
КонецЕсли;
Контрагент = ОбщегоНазначенияУТКлиентСервер.ДанныеПоПути(ДокументОбъект, Реквизиты.Контрагент);
Если ЗначениеЗаполнено(Контрагент) Тогда
ПараметрыПроверки.ИНН = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН");
КонецЕсли;
СчетКонтрагента = ОбщегоНазначенияУТКлиентСервер.ДанныеПоПути(ДокументОбъект, Реквизиты.БанковскийСчетКонтрагента);
Если ЗначениеЗаполнено(СчетКонтрагента) Тогда
ПараметрыПроверки.НомерСчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СчетКонтрагента, "НомерСчета");
КонецЕсли;
Прервать;
КонецЦикла;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
СсылкаКорректная = ДенежныеСредстваКлиентСерверЛокализация.ПолучательПлатежнойСсылкиСоответствуетДокументу(
ПараметрыПроверки, Выборка);
Если (Не СсылкаКорректная
И Выборка.ПроверкаПройдена)
Или (СсылкаКорректная
И Не Выборка.ПроверкаПройдена) Тогда
Если Не СсылкаКорректная Тогда
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Реквизиты получателя платежа, указанные в платежной ссылке %1, не соответствуют данным получателя в документе.
|Получатель платежа СБП: ИНН - %2 , счет - %3'"),
Выборка.ПлатежнаяСсылка, Выборка.ИНН, Выборка.СчетПолучателя);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
НаборЗаписей = РегистрыСведений.ВходящиеПлатежныеСсылкиСБП.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ДокументОперации.Установить(Выборка.ДокументОперации);
НаборЗаписей.Отбор.ПлатежнаяСсылка.Установить(Выборка.ПлатежнаяСсылка);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Запись.ПроверкаПройдена = СсылкаКорректная;
КонецЦикла;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
Исключение
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не удалось выполнить проверку платежных ссылок СБП по причине: %1'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ);
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
//-- Локализация
Возврат;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
//++ Локализация
#Область СлужебныйПрограммныйИнтерфейс
Процедура ЗаполнитьСписокТиповДокумента(Объект, Элемент) Экспорт
ТипыДокумента = Перечисления.ТипыПлатежныхДокументов;
СписокВыбора = Элемент.СписокВыбора;
СписокВыбора.Очистить();
СписокВыбора.Добавить(ТипыДокумента.ПлатежноеПоручение);
СписокВыбора.Добавить(ТипыДокумента.ИнкассовоеПоручение);
СписокВыбора.Добавить(ТипыДокумента.ПлатежноеТребование);
СписокВыбора.Добавить(ТипыДокумента.ПлатежныйОрдер);
СписокВыбора.Добавить(ТипыДокумента.БанковскийОрдер);
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеречислениеДенежныхСредствНаДругойСчет
И ПолучитьФункциональнуюОпцию("ИспользоватьВалютныеПлатежи") Тогда
СписокВыбора.Добавить(ТипыДокумента.РаспоряжениеОбОбязательнойПродаже);
КонецЕсли;
КонецПроцедуры
Процедура УправлениеЭлементамиФормыПриЧтенииСозданииНаСервере(Форма) Экспорт
ИмяОбъекта = "";
Если Форма.Параметры.Свойство("Ключ") Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Форма.Параметры.Ключ));
Если ОбъектМетаданных <> Неопределено Тогда
ИмяОбъекта = ОбъектМетаданных.Имя;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ИмяОбъекта) Тогда
ВызватьИсключение НСтр("ru = 'Не удалось выполнить настройку полей формы'");
КонецЕсли;
НастройкиПолейФормыЛокализация = ДенежныеСредстваСервер.ИнициализироватьНастройкиПолейФормы();
МодульЛокализацииОбъекта = ОбщегоНазначения.ОбщийМодуль(ИмяОбъекта + "Локализация");
МодульЛокализацииОбъекта.ЗаполнитьНастройкиПолейФормы(НастройкиПолейФормыЛокализация);
НастройкиПолейФормы = Форма.РеквизитФормыВЗначение("НастройкиПолей");
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(НастройкиПолейФормы, НастройкиПолейФормыЛокализация);
Форма.ЗначениеВРеквизитФормы(НастройкиПолейФормы, "НастройкиПолей");
ЗависимостиПолейФормы = ДенежныеСредстваСервер.ЗависимостиПолейФормы(НастройкиПолейФормы);
Форма.ЗначениеВРеквизитФормы(ЗависимостиПолейФормы, "ЗависимостиПолей");
КонецПроцедуры
Процедура ПриСозданииФормыСпискаПрисоединенныхФайлов(Форма) Экспорт
Если ДокументыСПередачейФайловВБанк().Найти(ТипЗнч(Форма.ВладелецФайла)) <> Неопределено Тогда
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(Форма.Список.ТекстЗапроса);
СхемаЗапроса.ПакетЗапросов[0].Операторы[0].ВыбираемыеПоля.Добавить("Файлы.ДляПередачиВБанк");
Форма.Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
НовыйЭлемент = Форма.Элементы.Добавить("СписокДляПередачиВБанк", Тип("ПолеФормы"), Форма.Элементы.Список);
НовыйЭлемент.ПутьКДанным = "Список.ДляПередачиВБанк";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
Форма.Элементы.Переместить(НовыйЭлемент, Форма.Элементы.Список, Форма.Элементы.СписокНомерКартинкиПодписанЗашифрован);
КонецЕсли;
КонецПроцедуры
Процедура ПриСозданииФормыЭлементаПрисоединенныхФайлов(Форма) Экспорт
Если ДокументыСПередачейФайловВБанк().Найти(ТипЗнч(Форма.Объект.ВладелецФайла)) <> Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить("ДляПередачиВБанк", Тип("ПолеФормы"), Форма.Элементы.ГруппаОбщиеДанные);
НовыйЭлемент.ПутьКДанным = "Объект.ДляПередачиВБанк";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
Форма.Элементы.Переместить(НовыйЭлемент, Форма.Элементы.ГруппаОбщиеДанные, Форма.Элементы.Наименование0);
КонецЕсли;
КонецПроцедуры
Функция НадписьФайлыДляПередачиВБанк(Ссылка) Экспорт
ТекстНадписи = НСтр("ru='Файлы для передачи в банк'");
Если ЗначениеЗаполнено(Ссылка) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| %ИмяТаблицы%
|ГДЕ
| ВладелецФайла = &Ссылка
| И ДляПередачиВБанк
| И НЕ ПометкаУдаления
|";
ИмяТаблицы = "Справочник." + Ссылка.Метаданные().Имя + "ПрисоединенныеФайлы";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ИмяТаблицы%", ИмяТаблицы);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
ТекстНадписи = ТекстНадписи + " (" + Запрос.Выполнить().Выгрузить()[0].Количество + ")";
КонецЕсли;
Возврат ТекстНадписи;
КонецФункции
#Область РеквизитыПлательщикаПолучателя
// Заполняет реквизиты плательщика в объекте документа на указанную дату.
//
// Параметры:
// ДокументОбъект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств, ДокументОбъект.СписаниеБезналичныхДенежныхСредств, ДанныеФормыСтруктура -
// документ, в который заполняются реквизиты плательщика
// Дата - Дата - дата, на которую определяются реквизиты плательщика
//
Процедура ЗаполнитьРеквизитыПлательщика(ДокументОбъект, Дата) Экспорт
СтруктураРеквизитовПлательщика = РеквизитыПлательщика(ДокументОбъект, Дата);
ЗаполнитьЗначенияСвойств(ДокументОбъект, СтруктураРеквизитовПлательщика);
КонецПроцедуры
// Обновляет реквизиты плательщика в форме объекта на указанную дату.
//
// Параметры:
// ДокументОбъект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств, ДокументОбъект.СписаниеБезналичныхДенежныхСредств, ДанныеФормыСтруктура -
// документ, в котором обновляются реквизиты плательщика
// Дата - Дата - Дата, на которую актуализируются реквизиты плательщика
//
Процедура ОбновитьРеквизитыПлательщика(ДокументОбъект, Дата) Экспорт
РеквизитыПлательщика = РеквизитыПлательщика(ДокументОбъект, Дата);
ПреобразоватьПустойРеквизитПлательщика(ДокументОбъект.ПеречислениеВБюджет, ДокументОбъект.ИННПлательщика);
ПреобразоватьПустойРеквизитПлательщика(ДокументОбъект.ПеречислениеВБюджет, ДокументОбъект.КПППлательщика);
ДокументОбъект.ТекстПлательщика = РеквизитыПлательщика.ТекстПлательщика;
КонецПроцедуры
// Возвращает реквизиты плательщика для указанного объекта.
//
// Параметры:
// Объект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств,
// ДокументОбъект.СписаниеБезналичныхДенежныхСредств - документ оплаты.
// - ДанныеФормыСтруктура - структура с данными документа.
// - Структура - данные плательщика и платежа:
// * Организация - СправочникСсылка.Организации - плательщик.
// * БанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций - банковский счет плательщика.
// * ПеречислениеВБюджет - Булево - признак перечисления денежных средств в бюджет.
// * ТипНалога - СправочникСсылка.ВидыНалоговВзносов - тип налога при перечислении в бюджет, используется при Истина в ПеречислениеВБюджет.
// * КодБК - Строка - КБК при перечислении в бюджет, используется при Истина в ПеречислениеВБюджет.
// Дата - Дата - дата, на которую формируются реквизиты
//
// Возвращаемое значение:
// см. ДанныеПлательщика
//
Функция РеквизитыПлательщика(Объект, Дата) Экспорт
Результат = ДанныеПлательщика(Объект.Организация, Объект.БанковскийСчет, Дата, Объект.ПеречислениеВБюджет);
Если Объект.ПеречислениеВБюджет Тогда
ИНН = Результат.ИННПлательщика;
ИНН = СтрЗаменить(ИНН, "0", "");
Если ПустаяСтрока(ИНН) Тогда
Результат.ИННПлательщика = "0";
КонецЕсли;
КПП = Результат.КПППлательщика;
КПП = СтрЗаменить(КПП, "0", "");
Если (ПустаяСтрока(КПП)
Или Результат.ИННПлательщика = "0") Тогда
Результат.КПППлательщика = "0";
КонецЕсли;
Если ПлатежиВБюджетКлиентСервер.ДействуетПриказ58н_202604(Дата)
И (Объект.ТипНалога = Справочники.ВидыНалоговВзносов.ЕдиныйНалоговыйПлатеж
Или ПлатежиВБюджетКлиентСервер.ЭтоЕдиныйНалоговыйПлатеж(Объект.КодБК))
И СтрДлина(Результат.ИННПлательщика) <> 5 Тогда
Результат.КПППлательщика = "0";
КонецЕсли;
Иначе
Если Лев(Результат.ИННПлательщика, 2) = "00" Тогда
Результат.ИННПлательщика = "0";
КонецЕсли;
Если Лев(Результат.КПППлательщика, 2) = "00" Тогда
Результат.КПППлательщика = "0";
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает значение основных реквизитов плательщика.
//
// Параметры:
// Организация - СправочникСсылка.Организации - организация.
// БанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций - банковский счет.
// НаДату - Дата - дата актуальности данных
// ЭтоПеречислениеВБюджет - Булево - признак перечисления в бюджет
//
// Возвращаемое значение:
// Структура - данные плательщика:
// * ИННПлательщика - Строка - ИНН.
// * КПППлательщика - Строка - КПП.
// * ТекстПлательщика - Строка - наименование плательщика в печатных документах.
//
Функция ДанныеПлательщика(Организация, БанковскийСчет, НаДату, ЭтоПеречислениеВБюджет) Экспорт
Результат = Новый Структура;
Результат.Вставить("ИННПлательщика", "");
Результат.Вставить("КПППлательщика", "");
Результат.Вставить("ТекстПлательщика", "");
Если ЗначениеЗаполнено(Организация) Тогда
Отбор = ДенежныеСредстваСервер.ПараметрыДляПоискаДанныхСторонДокумента();
Отбор.Дата = ?(НаДату = Дата('00010101'), ТекущаяДатаСеанса(), НаДату);
Отбор.Организация = Организация;
РеквизитыСторон = ДенежныеСредстваСервер.СведенияОПолучателеПлательщикеПоСтруктуре(Истина, Отбор);
Результат.ИННПлательщика = РеквизитыСторон.ИННПлательщика;
Результат.КПППлательщика = РеквизитыСторон.КПППлательщика;
Результат.ТекстПлательщика = РеквизитыСторон.НаименованиеСокращенноеПлательщика;
Если ЗначениеЗаполнено(БанковскийСчет) Тогда
Если ЭтоПеречислениеВБюджет Тогда
ТекстКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(БанковскийСчет, "ТекстКорреспондентаБюджет");
Иначе
ТекстКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(БанковскийСчет, "ТекстКорреспондента");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстКорреспондента) Тогда
Результат.ТекстПлательщика = ТекстКорреспондента;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Устанавливает текст надписи с реквизитами стороны (плательщика или получателя) на форме в зависимости от выбранной хозяйственной операции.
//
// Параметры:
// ЭтоПлательщик - Булево - признак того, что сторона является плательщиком.
// Форма - ФормаКлиентскогоПриложения - форма документа.
// РеквизитыСтороны - см. ОписаниеРеквизитовСтороныДляПроверки
//
Процедура УстановитьНадписьРеквизитыПлательщикаПолучателя(ЭтоПлательщик, Форма, РеквизитыСтороны) Экспорт
Объект = Форма.Объект;
Если ЗначениеЗаполнено(РеквизитыСтороны.Объект) Тогда
ТекстНадписи = НадписьРеквизитыПлательщикаПолучателя(
РеквизитыСтороны.ИНН, РеквизитыСтороны.КПП, РеквизитыСтороны.Наименование, РеквизитыСтороны.ЮрФизЛицо, ЭтоПлательщик, Объект.ПеречислениеВБюджет);
Иначе
ТекстНадписи = "";
КонецЕсли;
Если СтрДлина(ТекстНадписи) > 70 Тогда
ТекстНадписи = Лев(ТекстНадписи, 70) + "...";
КонецЕсли;
Если ЭтоПлательщик Тогда
Форма.НадписьРеквизитыПлательщика = ТекстНадписи;
Иначе
Форма.НадписьРеквизитыПолучателя = ТекстНадписи;
КонецЕсли;
КонецПроцедуры
// Проверяет реквизиты плательщика или получателя и обновляет надпись на форме в зависимости от наличия ошибок заполнения
//
// Параметры:
// ЭтоПлательщик - Булево - Истина для проверки плательщика, Ложь для получателя
// Форма - ФормаКлиентскогоПриложения - Форма, содержащая проверяемые данные
// РеквизитыСтороны - см. ОписаниеРеквизитовСтороныДляПроверки
//
Процедура ПроверитьРеквизитыПлательщикаПолучателя(ЭтоПлательщик, Форма, РеквизитыСтороны) Экспорт
Объект = Форма.Объект;
Ошибка = Ложь;
Если Объект.ПеречислениеВБюджет
И ЭтоПлательщик Тогда
ОшибкиЗаполнения = ПлатежиВБюджет.ОшибкиЗаполненияРеквизитовПлательщика(Объект, РеквизитыСтороны, Ложь, Ошибка);
ИначеЕсли Объект.ПеречислениеВБюджет
И Не ЭтоПлательщик Тогда
ОшибкиЗаполнения = ПлатежиВБюджет.ОшибкиЗаполненияРеквизитовПолучателя(Объект, РеквизитыСтороны, Ложь, Ошибка);
Иначе
ОшибкиЗаполнения = ОшибкиЗаполненияРеквизитовПлательщикаПолучателя(ЭтоПлательщик, Объект, РеквизитыСтороны, Ложь, Ошибка);
КонецЕсли;
Если ЭтоПлательщик Тогда
ЭлементФормы = Форма.Элементы.НадписьРеквизитыПлательщика;
Иначе
ЭлементФормы = Форма.Элементы.НадписьРеквизитыПолучателя;
КонецЕсли;
Если ОшибкиЗаполнения.Количество() <> 0 Тогда
ЭлементФормы.ЦветТекста = ЦветаСтиля.РезультатПроблемаЦвет;
ЭлементФормы.Подсказка = СтрСоединить(ОшибкиЗаполнения, Символы.ПС);
Иначе
ЭлементФормы.ЦветТекста = ЦветаСтиля.ГиперссылкаЦвет;
ЭлементФормы.Подсказка = "";
КонецЕсли;
КонецПроцедуры
// Проверяет корректность заполнения реквизитов плательщика (ИНН, КПП, наименование плательщика)
// и формирует массив описаний найденных ошибок.
//
// Параметры:
// ЭтоПлательщик - Булево - Истина для проверки плательщика, Ложь для получателя
// ДокументОбъект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств, ДокументОбъект.СписаниеБезналичныхДенежныхСредств, ДанныеФормыСтруктура -
// документ, содержащий проверяемые реквизиты плательщика
// РеквизитыСтороны - см. ОписаниеРеквизитовСтороныДляПроверки
// ВыводитьСообщение - Булево - если Истина, выводит сообщения пользователю об ошибках
// Отказ - Булево - признак отмены проведения документа (используется при выводе сообщений при проведении)
//
// Возвращаемое значение:
// Массив из Строка - массив текстовых описаний найденных ошибок заполнения
Функция ОшибкиЗаполненияРеквизитовПлательщикаПолучателя(ЭтоПлательщик, ДокументОбъект, РеквизитыСтороны, ВыводитьСообщение, Отказ = Ложь) Экспорт
ОшибкиЗаполнения = Новый Массив;
Если Не ЗначениеЗаполнено(РеквизитыСтороны.Объект) Тогда
Возврат ОшибкиЗаполнения;
КонецЕсли;
ИНН = СокрЛП(РеквизитыСтороны.ИНН);
КПП = СокрЛП(РеквизитыСтороны.КПП);
Если ПустаяСтрока(РеквизитыСтороны.Наименование) Тогда
Если ЭтоПлательщик Тогда
ОшибкиЗаполнения.Добавить(НСтр("ru = 'Наименование плательщика не заполнено'"));
Иначе
ОшибкиЗаполнения.Добавить(НСтр("ru = 'Наименование получателя не заполнено'"));
КонецЕсли;
КонецЕсли;
Если ЭтоПлательщик
Или (Не ЭтоПлательщик И Не ДокументОбъект.ПеречислениеВБюджет) Тогда
ЭтоЮрЛицо = СтрДлина(ИНН) = 10;
ЭтоФизЛицо = СтрДлина(ИНН) = 12;
ЭтоИнЮрЛицо = СтрДлина(ИНН) = 5;
Иначе
ЭтоЮрЛицо = (РеквизитыСтороны.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо);
ЭтоФизЛицо = (РеквизитыСтороны.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
Или РеквизитыСтороны.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель);
ЭтоИнЮрЛицо = (РеквизитыСтороны.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент);
КонецЕсли;
НулевойИНН = (ИНН = "0");
ПолеИНН = ?(ЭтоПлательщик, НСтр("ru = 'ИНН плательщика'"), НСтр("ru = 'ИНН получателя'"));
ПолеКПП = ?(ЭтоПлательщик, НСтр("ru = 'КПП плательщика'"), НСтр("ru = 'КПП получателя'"));
Если ЭтоИнЮрЛицо Тогда
Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИНН) Тогда
Шаблон = НСтр("ru = '%1 должен состоять только из цифр'");
ОшибкиЗаполнения.Добавить(СтрШаблон(Шаблон, ПолеИНН));
КонецЕсли;
ИначеЕсли Не НулевойИНН И ИНН <> "" И Не ЭтоИнЮрЛицо И Не ДокументОбъект.ПеречислениеВБюджет Тогда
ТекстОшибки = "";
Если Не РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ИНН,
?(Не ЭтоЮрЛицо И Не ЭтоФизЛицо И Не ЭтоИнЮрЛицо, РеквизитыСтороны.ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель И РеквизитыСтороны.ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ФизЛицо, ЭтоЮрЛицо),
ТекстОшибки) Тогда
ОшибкиЗаполнения.Добавить(СтрЗаменить(ТекстОшибки, НСтр("ru = 'ИНН'"), ПолеИНН));
КонецЕсли;
КонецЕсли;
Если Лев(ИНН, 2) = "00" Тогда
Шаблон = НСтр("ru = 'Первый и второй знаки %1 не могут одновременно принимать значение ""0""'");
ОшибкиЗаполнения.Добавить(СтрШаблон(Шаблон, ПолеИНН));
КонецЕсли;
Если Лев(КПП, 2) = "00" Тогда
Шаблон = НСтр("ru = 'Первый и второй знаки %1 не могут одновременно принимать значение ""0""'");
ОшибкиЗаполнения.Добавить(СтрШаблон(Шаблон, ПолеКПП));
КонецЕсли;
Если ЭтоЮрЛицо И КПП <> "" И СтрДлина(КПП) <> 9
И Не ДокументОбъект.ПеречислениеВБюджет Тогда
Шаблон = НСтр("ru = '%1 должен содержать 9 символов'");
ОшибкиЗаполнения.Добавить(СтрШаблон(Шаблон, ПолеКПП));
КонецЕсли;
Если ЭтоФизЛицо И КПП <> "" И КПП <> "0" Тогда
Шаблон = НСтр("ru = '%1 для физлица не заполняется'");
ОшибкиЗаполнения.Добавить(СтрШаблон(Шаблон, ПолеКПП));
КонецЕсли;
Если ВыводитьСообщение Тогда
Если ЭтоПлательщик Тогда
Поле = "НадписьРеквизитыПлательщика";
Иначе
Поле = "НадписьРеквизитыПолучателя";
КонецЕсли;
Для Каждого ТекстОшибки Из ОшибкиЗаполнения Цикл
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Поле, , Отказ);
КонецЦикла;
КонецЕсли;
Возврат ОшибкиЗаполнения;
КонецФункции
// Заполняет реквизиты получателя (ИНН, КПП, Наименование) на форме в зависимости от выбранной хозяйственной операции.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - Форма документа для заполнения реквизитов
// Дата - Дата - Дата актуальности данных получателя
// Получатель - СправочникСсылка.Контрагенты, СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, Неопределено - Контрагент-получатель
// СчетПолучателя - СправочникСсылка.БанковскиеСчетаОрганизаций, СправочникСсылка.БанковскиеСчетаКонтрагентов, Неопределено - Счет получателя
//
Процедура ЗаполнитьРеквизитыПолучателя(Форма, Дата, Получатель, СчетПолучателя) Экспорт
Результат = ДанныеПолучателя(Получатель, СчетПолучателя, Дата);
Форма.ИННПолучателя = Результат.ИННПолучателя;
Форма.КПППолучателя = Результат.КПППолучателя;
Форма.ТекстПолучателя = Результат.ТекстПолучателя;
КонецПроцедуры
// Формирует структуру с данными получателя: ИНН, КПП и наименование.
//
// Параметры:
// Получатель - СправочникСсылка.Контрагенты, СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица, Неопределено - ссылка на получателя
// БанковскийСчет - СправочникСсылка.БанковскиеСчетаКонтрагентов, СправочникСсылка.БанковскиеСчетаОрганизаций, Неопределено - банковский счет получателя
// НаДату - Дата - дата актуальности данных
//
// Возвращаемое значение:
// Структура:
// * ИННПолучателя - Строка - ИНН получателя
// * КПППолучателя - Строка - КПП получателя
// * ТекстПолучателя - Строка - наименование получателя
//
Функция ДанныеПолучателя(Получатель, БанковскийСчет, НаДату) Экспорт
Результат = Новый Структура;
Результат.Вставить("ИННПолучателя", "");
Результат.Вставить("КПППолучателя", "");
Результат.Вставить("ТекстПолучателя", "");
Если ЗначениеЗаполнено(Получатель) Тогда
Отбор = ДенежныеСредстваСервер.ПараметрыДляПоискаДанныхСторонДокумента();
Отбор.Дата = ?(НаДату = Дата('00010101'), ТекущаяДатаСеанса(), НаДату);
Отбор.Контрагент = Получатель;
РеквизитыСторон = ДенежныеСредстваСервер.СведенияОПолучателеПлательщикеПоСтруктуре(Истина, Отбор);
Результат.ИННПолучателя = РеквизитыСторон.ИННПолучателя;
Результат.КПППолучателя = РеквизитыСторон.КПППолучателя;
Если ТипЗнч(Получатель) = Тип("СправочникСсылка.Организации") Тогда
Результат.ТекстПолучателя = РеквизитыСторон.НаименованиеСокращенноеПолучателя;
Иначе
Результат.ТекстПолучателя = РеквизитыСторон.НаименованиеПолноеПолучателя;
КонецЕсли;
Если ЗначениеЗаполнено(БанковскийСчет) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| БанковскиеСчетаКонтрагентов.ИННКорреспондента КАК ИНН,
| БанковскиеСчетаКонтрагентов.КППКорреспондента КАК КПП,
| БанковскиеСчетаКонтрагентов.ТекстКорреспондента КАК Наименование
|ИЗ
| Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
|ГДЕ
| БанковскиеСчетаКонтрагентов.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| """",
| """",
| БанковскиеСчетаОрганизаций.ТекстКорреспондента
|ИЗ
| Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчетаОрганизаций
|ГДЕ
| БанковскиеСчетаОрганизаций.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", БанковскийСчет);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
Если ЗначениеЗаполнено(РезультатЗапроса.ИНН) Тогда
Результат.ИННПолучателя = РезультатЗапроса.ИНН;
КонецЕсли;
Если ЗначениеЗаполнено(РезультатЗапроса.КПП) Тогда
Результат.КПППолучателя = РезультатЗапроса.КПП;
КонецЕсли;
Если ЗначениеЗаполнено(РезультатЗапроса.Наименование) Тогда
Результат.ТекстПолучателя = РезультатЗапроса.Наименование;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// Формирует строковое представление реквизитов плательщика (ИНН, КПП и Наименование) с учетом локализации.
//
// Параметры:
// ИНН - Строка - идентификационный номер налогоплательщика
// КПП - Строка - код причины постановки на учет
// ТекстКорреспондента - Строка - наименование или описание корреспондента
// ЮрФизЛицо - ПеречислениеСсылка.ЮрФизЛицо - тип контрагента (юрлицо, физлицо, ИП, юрлицо (нерезидент))
// ЭтоПлательщик - Булево - признак, что это плательщик, а не получатель
// ЭтоПеречислениеВБюджет - Булево - признак перечисления средств в бюджет
//
// Возвращаемое значение:
// Строка - отформатированная строка с реквизитами плательщика
//
Функция НадписьРеквизитыПлательщикаПолучателя(ИНН, КПП, ТекстКорреспондента, ЮрФизЛицо, ЭтоПлательщик = Ложь, ЭтоПеречислениеВБюджет = Ложь) Экспорт
ШаблонНадписи = НСтр("ru = 'ИНН %1%2, %3'");
СтрокаИНН = ?(ПустаяСтрока(ИНН), НСтр("ru = '<не указан>'"), СокрЛП(ИНН));
СтрокаКПП = ", " + НСтр("ru = 'КПП'");
Если Не ЗначениеЗаполнено(КПП) Тогда
Если ЭтоПлательщик Тогда
Если Не ЭтоПеречислениеВБюджет И СтрДлина(СокрЛП(ИНН)) = 12 Тогда
СтрокаКПП = "";
Иначе
СтрокаКПП = СтрокаКПП + " " + НСтр("ru = '<не указан>'");
КонецЕсли;
Иначе
Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
Или ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
СтрокаКПП = "";
Иначе
СтрокаКПП = СтрокаКПП + " " + НСтр("ru = '<не указан>'");
КонецЕсли;
КонецЕсли;
Иначе
СтрокаКПП = СтрокаКПП + " " + КПП;
КонецЕсли;
СтрокаТекстКорреспондента = СокрЛП(ТекстКорреспондента);
Возврат СтрШаблон(ШаблонНадписи,
СтрокаИНН,
СтрокаКПП,
СтрокаТекстКорреспондента);
КонецФункции
// Возвращает структуру с набором реквизитов стороны для проверки.
//
// Возвращаемое значение:
// Структура:
// * ИНН - Строка - ИНН стороны
// * КПП - Строка - КПП стороны
// * Наименование - Строка - Наименование стороны
// * Объект - Произвольный - Объект стороны
// * ЮрФизЛицо - ПеречислениеСсылка.ЮрФизЛицо - Признак юр./физ. лица
//
Функция ОписаниеРеквизитовСтороныДляПроверки() Экспорт
РеквизитыСтороны = Новый Структура;
РеквизитыСтороны.Вставить("ИНН", "");
РеквизитыСтороны.Вставить("КПП", "");
РеквизитыСтороны.Вставить("Наименование", "");
РеквизитыСтороны.Вставить("Объект", Неопределено);
РеквизитыСтороны.Вставить("ЮрФизЛицо", Перечисления.ЮрФизЛицо.ПустаяСсылка());
Возврат РеквизитыСтороны;
КонецФункции
#КонецОбласти
// Проверяет корректность заполнения поля "Код вида дохода".
//
// Параметры:
// Объект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств, ДокументОбъект.СписаниеБезналичныхДенежныхСредств - документ,
// для которого выполняется проверка.
// ХозяйственнаяОперация - ПеречислениеСсылка.ХозяйственныеОперации - операция документа
// Отказ - Булево - признак наличия ошибки
//
Процедура ПроверитьЗаполнениеКодаВидаДохода(Объект, ХозяйственнаяОперация, Отказ) Экспорт
Если Не ЗначениеЗаполнено(Объект.КодВидаДохода) Тогда
Возврат;
КонецЕсли;
Коды = ПлатежиВБюджетКлиентСервер.КодыВидовДохода(Объект.Дата,
ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыплатаЗарплатыПоЗарплатномуПроекту
ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыплатаЗарплатыНаЛицевыеСчета);
Если Коды.НайтиПоЗначению(Объект.КодВидаДохода) = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Значение в поле ""КВД"" отсутствует в списке выбора.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Объект, "КодВидаДохода", , Отказ);
КонецЕсли;
КонецПроцедуры
// Возвращает ссылку на созданный документ "Зачисление ДС на лицевые счета", формирует документ по данным файла
//
// Параметры:
// ДвоичныеДанныеФайла - ДвоичныеДанные - Файл в виде двоичных данных
// БанковскийСчет - СправочникСсылка.БанковскиеСчетаОрганизаций - Банковский счет
//
// Возвращаемое значение:
// Неопределено, ДокументСсылка.ПодтверждениеЗачисленияЗарплаты - подтверждение зачисления денежных средств
Функция ФормированиеПодтвержденияЗачисленияДенежныхСредств(ДвоичныеДанныеФайла, БанковскийСчет) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьПоток(ДвоичныеДанныеФайла.ОткрытьПотокДляЧтения());
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ДанныеЗаполнения = ОбменСБанкамиУТ.ДанныеПодтвержденияЗачисленияИзXDTO(ОбъектXDTO);
ЧтениеXML.Закрыть();
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(ДвоичныеДанныеФайла);
ХешСумма = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
ДанныеЗаполнения.Вставить("ХешФайла", ХешСумма);
НомерСчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(БанковскийСчет, "НомерСчета");
Если ДанныеЗаполнения.РасчетныйСчетОрганизации <> НомерСчета Тогда
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеЗаполнения.ПервичныйДокумент) Тогда
Возврат Неопределено;
КонецЕсли;
Отбор = Новый Структура("ФизическоеЛицо", Справочники.ФизическиеЛица.ПустаяСсылка());
ОшибочныеСтроки = ДанныеЗаполнения.Сотрудники.НайтиСтроки(Отбор);
Для каждого ТекСтрока Из ОшибочныеСтроки Цикл
ДанныеЗаполнения.Сотрудники.Удалить(ТекСтрока);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВложенныйЗапрос.Документ КАК Документ,
| ВложенныйЗапрос.Приоритет КАК Приоритет
|ИЗ
| (ВЫБРАТЬ
| ПодтверждениеЗачисленияЗарплаты.Ссылка КАК Документ,
| 0 КАК Приоритет
| ИЗ
| Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты
| ГДЕ
| ПодтверждениеЗачисленияЗарплаты.ХешФайла = &ХешФайла
| И ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент = &ПервичныйДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ПодтверждениеЗачисленияЗарплаты.Ссылка,
| 1
| ИЗ
| Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты
| ГДЕ
| ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент = &ПервичныйДокумент) КАК ВложенныйЗапрос
|
|УПОРЯДОЧИТЬ ПО
| Приоритет";
Запрос.УстановитьПараметр("ПервичныйДокумент", ДанныеЗаполнения.ПервичныйДокумент);
Запрос.УстановитьПараметр("ХешФайла", ХешСумма);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
ДокументОбъект = Выборка.Документ.ПолучитьОбъект();
Иначе
ДокументОбъект = Документы.ПодтверждениеЗачисленияЗарплаты.СоздатьДокумент();
КонецЕсли;
Если ДокументОбъект.Проведен Тогда
Возврат ДокументОбъект.Ссылка;
КонецЕсли;
Если ДокументОбъект.ПометкаУдаления Тогда
ДокументОбъект.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
ДокументОбъект.Заполнить(ДанныеЗаполнения);
ЕстьОшибки = ДокументОбъект.ПроверитьЗаполнение();
ОшибкиЗагрузки = "";
Если ДокументОбъект.Сотрудники.Количество() <> ДанныеЗаполнения.КоличествоЗаписей Тогда
ДенежныеСредстваСервер.ДобавитьОшибкуЗаполнения(ОшибкиЗагрузки,
НСтр("ru = 'Количество строк в документе не совпадает с контрольными данными.'"));
ЕстьОшибки = Истина;
КонецЕсли;
Если ДанныеЗаполнения.СуммаИтого <> Неопределено
И ДокументОбъект.Сотрудники.Итог("Сумма") <> ДанныеЗаполнения.СуммаИтого Тогда
ДенежныеСредстваСервер.ДобавитьОшибкуЗаполнения(ОшибкиЗагрузки,
НСтр("ru = 'Сумма, зачисленная по документу, не совпадает с контрольными данными.'"));
ЕстьОшибки = Истина;
КонецЕсли;
Если ЕстьОшибки Тогда
ДенежныеСредстваСервер.ДобавитьОшибкуЗаполнения(ОшибкиЗагрузки,
ДокументОбъект.ДополнительныеСвойства.ОшибкиЗаполнения);
КонецЕсли;
ДокументОбъект.ОшибкиЗагрузки = СокрЛП(ОшибкиЗагрузки);
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Если Не ЕстьОшибки Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Возврат ДокументОбъект.Ссылка;
КонецФункции
// Возвращает таблицу физических лиц, созданную по данным ФИО.
//
// Параметры:
// Сотрудники - ТаблицаЗначений - таблица сотрудников для получения ссылок:
// * Фамилия - Строка - фамилия сотрудника
// * Имя - Строка - имя сотрудника
// * Отчество - Строка - отчество сотрудника
// * НомерЛицевогоСчета - Строка - номер лицевого счета сотрудника
// * НомерСтроки - Строка - идентификатор номера строки в таблице
//
// Возвращаемое значение:
// ТаблицаЗначений - Физические лица с номерами лицевых счетов:
// * ФизическоеЛицо - СправочникСсылка.ФизическиеЛица - ссылка на справочник для ФИО
// * НомерЛицевогоСчета - Строка - номер лицевого счета ФИО
// * НомерСтроки - Строка - идентификатор номера строки в передаваемой таблице сотрудников
//
Функция ФизическиеЛицаЛицевыхСчетов(Сотрудники) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(Сотрудники.Фамилия КАК СТРОКА(50)) КАК Фамилия,
| ВЫРАЗИТЬ(Сотрудники.Имя КАК СТРОКА(50)) КАК Имя,
| ВЫРАЗИТЬ(Сотрудники.Отчество КАК СТРОКА(50)) КАК Отчество,
| Сотрудники.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| Сотрудники.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ДанныеСотрудников
|ИЗ
| &Сотрудники КАК Сотрудники
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ФИОФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеСотрудников.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ДанныеСотрудников.НомерСтроки КАК НомерСтроки
|ИЗ
| ДанныеСотрудников КАК ДанныеСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц КАК ФИОФизическихЛиц
| ПО ДанныеСотрудников.Фамилия = ФИОФизическихЛиц.Фамилия
| И ДанныеСотрудников.Имя = ФИОФизическихЛиц.Имя
| И ДанныеСотрудников.Отчество = ФИОФизическихЛиц.Отчество
|";
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
// Проверяет наличие выполненной выгрузки реестра в банк на перечисление ДС физическим лицам в измененном документе и
// выдает пользователю вопрос.
//
// Параметры:
// ТекущийОбъект - ДокументОбъект.СписаниеБезналичныхДенежныхСредств - проверяемый документ.
// Отказ - Булево - если Отказ будет ИСТИНА, то программа прекратит выполнения после обработчика, из которого вызвана
// процедура.
// ФлагОбменСБанками - Булево - признак запуска проверки в момент обмена с банком
//
Процедура ПроверитьВыгрузкуРеестраНаЗачислениеДенежныхСредств(ТекущийОбъект, Отказ, ФлагОбменСБанками) Экспорт
Если НЕ (ТекущийОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику
И ТекущийОбъект.СписокФизЛиц) Тогда
Возврат;
КонецЕсли;
КонтрольныеРеквизиты = Новый Массив;
КонтрольныеРеквизиты.Добавить("Организация");
КонтрольныеРеквизиты.Добавить("Номер");
КонтрольныеРеквизиты.Добавить("Дата");
КонтрольныеРеквизиты.Добавить("ЛицевыеСчетаСотрудников");
КонтрольныеРеквизиты.Добавить("БанковскийСчет");
КонтрольныеРеквизиты.Добавить("Валюта");
КонтрольныеРеквизиты.Добавить("ОтделениеБанка");
КонтрольныеРеквизиты.Добавить("ФилиалОтделенияБанка");
КонтрольныеРеквизиты.Добавить("НомерВходящегоДокумента");
КонтрольныеРеквизиты.Добавить("ДатаВходящегоДокумента");
КонтрольныеРеквизиты.Добавить("СуммаДокумента");
КонтрольныеРеквизиты.Добавить("НомерДоговораСБанком");
КонтрольныеРеквизиты.Добавить("ДатаДоговораСБанком");
КонтрольныеРеквизиты.Добавить("ВидЗачисления");
КонтрольныеРеквизиты.Добавить("КодировкаФайла");
Если ТекущийОбъект.ДатаВыгрузкиРеестра <> '00010101' Тогда
Если ДокументИзменен(ТекущийОбъект, КонтрольныеРеквизиты)
И НЕ ДенежныеСредстваСервер.СуществуютЗачисленияДСНаЛицевыеСчета(ТекущийОбъект.Ссылка) Тогда
ТекстСообщения = НСтр("ru = 'Данные изменились с последней выгрузки реестра в банк и могут повлиять на процесс зачисления денежных средств.'");
Если Не ФлагОбменСБанками Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Возвращает первичный документ для документа "Зачисление ДС на лицевые счета" по уникальному идентификатору.
//
// Параметры:
// Идентификатор - Строка - уникальный идентификатор объекта в информационной базе.
//
// Возвращаемое значение:
// - ОпределяемыйТип.ДокументЗачисленияЗарплаты
//
Функция ПервичныйДокументПоИдентификатору(Идентификатор) Экспорт
ИдентификаторДокумента = Новый УникальныйИдентификатор(Идентификатор);
ПервичныйДокументСсылка = Документы.СписаниеБезналичныхДенежныхСредств.ПолучитьСсылку(ИдентификаторДокумента);
Возврат ПервичныйДокументСсылка;
КонецФункции
// Проверяет счет на соответствие лицевому счету при казначейском сопровождении.
//
// Параметры:
// Объект - ФормаКлиентскогоПриложения - форма, на которой выполняется проверка.
//
Процедура ПроверитьЛицевойСчетКазначейскогоСопровождения(Объект) Экспорт
КонецПроцедуры
// Корректирует номер документа на основании письма ЦБ России № 59-Т от 03.04.2013.
//
// Параметры:
// Объект - ДокументОбъект.СписаниеБезналичныхДенежныхСредств, ДокументОбъект.ПоступлениеБезналичныхДенежныхСредств -
// документ, в котором выполняется корректировка.
//
Процедура ИзменитьНомерПлатежногоПоручения(Объект) Экспорт
ПоследниеТриСимвола = Прав(СокрЛП(Объект.Номер), 3);
ЭтоПлатежныйДокументКВыгрузке = (ТипЗнч(Объект) = Тип("ДокументОбъект.СписаниеБезналичныхДенежныхСредств")
И Объект.ТипПлатежногоДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение)
ИЛИ (ТипЗнч(Объект) = Тип("ДокументОбъект.ПоступлениеБезналичныхДенежныхСредств")
И Объект.ТипПлатежногоДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеТребование);
Если ПоследниеТриСимвола = "000"
И ЭтоПлатежныйДокументКВыгрузке
И Не (ЗначениеЗаполнено(Объект.НомерВходящегоДокумента)
ИЛИ ЗначениеЗаполнено(Объект.ДатаВходящегоДокумента)) Тогда
ПозицияДефис = Найти(Объект.Номер, "-");
ОсновнойПрефикс = ?(ПозицияДефис > 0, Лев(Объект.Номер, ПозицияДефис), "");
ПользовательскийПрефикс = ПрефиксацияОбъектовКлиентСервер.ПользовательскийПрефикс(Объект.Номер);
Префикс = ОсновнойПрефикс + ПользовательскийПрефикс;
ДлинаНомера = СтрДлина(СокрЛП(Объект.Номер)) - СтрДлина(Префикс);
НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Объект.Номер, Истина, Истина);
НомерДокумента = ?(НомерДокумента = "", 0, Число(НомерДокумента));
ПараметрыНомера = Новый Структура;
ПараметрыНомера.Вставить("Номер", НомерДокумента);
ПараметрыНомера.Вставить("Префикс", Префикс);
ПараметрыНомера.Вставить("Длина", ДлинаНомера);
УвеличитьНомерПлатежногоДокумента(Объект, ПараметрыНомера);
КонецЕсли;
КонецПроцедуры
// Определяет свойства полей формы в зависимости от данных
//
// Параметры:
// Настройки - см. ДенежныеСредстваСервер.ИнициализироватьНастройкиПолейФормы.
//
Процедура ЗаполнитьНастройкиПолейФормы(Настройки) Экспорт
Финансы = ФинансоваяОтчетностьСервер;
ОтборВыплатаСамозанятому = ДенежныеСредстваСервер.ОтборВыплатаСамозанятому();
ОтборСписокКонтрагентов = ДенежныеСредстваСервер.ОтборСписокКонтрагентов(ОтборВыплатаСамозанятому);
// Оплата самозанятому
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("ОперацияССамозанятым");
Финансы.НовыйОтбор(Элемент.Условие, "ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.ОплатаПоставщику);
ГруппаИли = Финансы.НовыйОтбор(Элемент.Условие, , , Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Финансы.СкопироватьОтбор(ОтборСписокКонтрагентов, ГруппаИли);
Финансы.НовыйОтбор(ГруппаИли, "Дополнительно.КонтрагентЮрФизЛицо", Перечисления.ЮрФизЛицо.ФизЛицо);
Финансы.НовыйОтбор(ГруппаИли, "Дополнительно.КонтрагентЮрФизЛицо", Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель);
Финансы.НовыйОтбор(ГруппаИли, "ОперацияССамозанятым", Истина);
Элемент.Свойства.Вставить("Видимость");
// Получатель
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("ЛокализацияГруппаПолучатель");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Элемент.Свойства.Вставить("Видимость");
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("Получатель");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Элемент.Свойства.Вставить("Заголовок", НСтр("ru = 'Самозанятый'"));
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("Получатель");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Финансы.НовыйОтбор(Элемент.Условие, "СписокКонтрагентов", Ложь);
Элемент.Свойства.Вставить("Видимость");
// Пустой контрагент
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("ПустойКонтрагент");
Финансы.СкопироватьОтбор(ОтборСписокКонтрагентов, Элемент.Условие);
Элемент.Свойства.Вставить("Видимость");
// ПлатежиПо275ФЗ
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("ПлатежиПо275ФЗ");
ГруппаНе = Финансы.НовыйОтбор(Элемент.Условие,,, Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаНе.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе;
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, ГруппаНе);
ГруппаНеХозОперации = Финансы.НовыйОтбор(Элемент.Условие,,, Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаНеХозОперации.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе;
ГруппаИлиХозОперации = Финансы.НовыйОтбор(ГруппаНеХозОперации, , , Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаИлиХозОперации.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Финансы.НовыйОтбор(ГруппаИлиХозОперации, "ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.ВыдачаЗаймов);
Финансы.НовыйОтбор(ГруппаИлиХозОперации, "ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.ВыдачаЗаймаСотруднику);
Элемент.Свойства.Вставить("Видимость");
#Область РасшифровкаПлатежа
// Контрагент
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("РасшифровкаПлатежа.Контрагент");
Финансы.СкопироватьОтбор(ОтборСписокКонтрагентов, Элемент.Условие);
Элемент.Свойства.Вставить("Видимость");
// ГруппаНДС
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("ГруппаНДС");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Элемент.Свойства.Вставить("Видимость", Ложь);
#КонецОбласти
#Область БанковскиеСчетаКонтрагентов
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("БанковскиеСчетаСпискаКонтрагентов");
Финансы.СкопироватьОтбор(ОтборСписокКонтрагентов, Элемент.Условие);
Элемент.Свойства.Вставить("Видимость");
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("БанковскиеСчетаСпискаКонтрагентовКонтрагент");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Элемент.Свойства.Вставить("Заголовок", "Самозанятый");
Элемент = Настройки.Добавить();
Элемент.Поля.Добавить("БанковскиеСчетаСпискаКонтрагентовБанковскийСчетКонтрагента");
Финансы.СкопироватьОтбор(ОтборВыплатаСамозанятому, Элемент.Условие);
Элемент.Свойства.Вставить("Заголовок", "Счет");
#КонецОбласти
КонецПроцедуры
// Процедура устанавливает параметры выбора для контрагента.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа.
// Объект - ДанныеФормыСтруктура - Текущий объект
// Элемент - ПолеФормы - Поле для ввода контрагента.
//
Процедура УстановитьПараметрыВыбораКонтрагента(Форма, Объект, Элемент) Экспорт
Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);
КонецПроцедуры
// Устанавливает код вида дохода для самозанятого.
//
// Параметры:
// Объект - ДокументОбъект - документ, в котором выполняется установка.
//
Процедура УстановитьКодВидаДоходаСамозанятого(Объект) Экспорт
Если (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И Объект.ОперацияССамозанятым)
И Не Объект.СписокКонтрагентов Тогда
ВидКонтрагента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Контрагент, "ЮрФизЛицо");
Если ВидКонтрагента = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
Объект.КодВидаДохода = "1";
Иначе
Объект.КодВидаДохода = "";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Выполняет изменение данных объекта и реквизитов формы при изменении переключателя списка контрагентов.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется изменение.
//
Процедура ПриИзмененииПризнакаСпискаКонтрагентов(Форма) Экспорт
Форма.Объект.СписокКонтрагентов = Булево(Форма.СписокКонтрагентов);
Форма.Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Форма.Объект.БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
Если Булево(Форма.СписокКонтрагентов) Тогда
Форма.Объект.КодВидаДохода = "";
Форма.ДоговорКонтрагента = Неопределено;
Форма.Объект.Договор = Неопределено;
Форма.Объект.ИдентификаторПлатежа = "";
ДенежныеСредстваСервер.ЗаполнитьДанныеОбъектаРасчетовРасшифровкиПлатежа(Форма.Объект);
КонецЕсли;
УстановитьПереключательРасшифровки(Форма);
ЗаполнитьКонтрагентаРасшифровкиПлатежа(Форма.Объект);
ЗаполнитьРеестрКонтрагентов(Форма.Объект);
ДенежныеСредстваСерверЛокализация.УстановитьПараметрыВыбораБанковскихСчетаСпискаКонтрагентов(
Форма.Объект, Форма.Элементы.БанковскиеСчетаСпискаКонтрагентовБанковскийСчетКонтрагента);
КонецПроцедуры
// Выполняет изменение данных объекта и реквизитов формы при изменении хозяйственной операции.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется изменение операции.
//
Процедура ПриИзмененииХозяйственнойОперации(Форма) Экспорт
Если Форма.Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И Форма.Объект.ОперацияССамозанятым Тогда
ТипКонтрагента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Форма.Объект.Контрагент, "ЮридическоеФизическоеЛицо");
Если ТипКонтрагента <> Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
Форма.Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Форма.Объект.БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
КонецЕсли;
Форма.Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
Иначе
Форма.СписокКонтрагентов = 0;
Форма.Объект.СписокКонтрагентов = Булево(Форма.СписокКонтрагентов);
Форма.Объект.ОперацияССамозанятым = Ложь;
КонецЕсли;
УстановитьКодВидаДоходаСамозанятого(Форма.Объект);
ДенежныеСредстваКлиентСерверЛокализация.УстановитьПараметрыВыбораПолучателя(Форма, Форма.Объект, Форма.Элементы.Получатель);
КонецПроцедуры
// Переключает вид расшифровки платежа на форме: без разбиения/списком.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется переключение вида расшифровки.
//
Процедура УстановитьПереключательРасшифровки(Форма) Экспорт
Форма.ПереключательРасшифровки = ?(Форма.Объект.РасшифровкаПлатежа.Количество() > 1, 1, Форма.Объект.СписокКонтрагентов Или Форма.ЭтоПодборЗаявок);
Если Форма.ПереключательРасшифровки Тогда
Форма.Элементы.СтраницыРасшифровки.ТекущаяСтраница = Форма.Элементы.РасшифровкаСписком;
Иначе
Форма.Элементы.СтраницыРасшифровки.ТекущаяСтраница = Форма.Элементы.РасшифровкаБезРазбиения;
КонецЕсли;
КонецПроцедуры
// Заполняет таблицу реестра контрагентов по расшифровке платежа.
//
// Параметры:
// Объект - ДокументОбъект - исходные данные для формирования реестра контрагентов.
//
Процедура ЗаполнитьРеестрКонтрагентов(Объект) Экспорт
Если Не Объект.СписокКонтрагентов Тогда
Объект.БанковскиеСчетаСпискаКонтрагентов.Очистить();
Возврат;
КонецЕсли;
НовыйРеестр = РеестрКонтрагентов(Объект);
Объект.БанковскиеСчетаСпискаКонтрагентов.Очистить();
Объект.БанковскиеСчетаСпискаКонтрагентов.Загрузить(НовыйРеестр);
КонецПроцедуры
// Возвращает реестр контрагентов по расшифровке платежа.
//
// Параметры:
// Объект - ДокументОбъект, Структура - исходные данные с таблицей "Расшифровка платежа" для формирования реестра контрагентов.
//
// Возвращаемое значение:
// см. НоваяТаблицаБанковскихСчетовСпискаКонтрагентов.
//
Функция РеестрКонтрагентов(Объект) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Расчеты.Сумма КАК Сумма,
| Расчеты.Контрагент КАК Контрагент,
| Расчеты.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| Расчеты.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ Платежи
|ИЗ
| &Расчеты КАК Расчеты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Реестр.Контрагент КАК Контрагент,
| Реестр.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента
|ПОМЕСТИТЬ ИсходныйРеестр
|ИЗ
| &Реестр КАК Реестр
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИсходныйРеестр.Контрагент КАК Контрагент,
| ИсходныйРеестр.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента,
| БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств КАК Валюта
|ИЗ
| ИсходныйРеестр КАК ИсходныйРеестр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
| ПО ИсходныйРеестр.БанковскийСчетКонтрагента = БанковскиеСчетаКонтрагентов.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Платежи.Контрагент КАК Контрагент,
| ОбъектыРасчетов.БанковскийСчетКонтрагента КАК БанковскийСчетКонтрагента
|ИЗ
| Платежи КАК Платежи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО Платежи.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
|ГДЕ
| ОбъектыРасчетов.БанковскийСчетКонтрагента <> ЗНАЧЕНИЕ(Справочник.БанковскиеСчетаКонтрагентов.ПустаяСсылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Платежи.Контрагент КАК Контрагент,
| БанковскиеСчетаКонтрагентов.Ссылка КАК БанковскийСчетКонтрагента,
| БанковскиеСчетаКонтрагентов.Банк КАК Банк
|ИЗ
| Платежи КАК Платежи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов
| ПО Платежи.Контрагент = БанковскиеСчетаКонтрагентов.Владелец
| И Платежи.ВалютаВзаиморасчетов = БанковскиеСчетаКонтрагентов.ВалютаДенежныхСредств
|ГДЕ
| НЕ БанковскиеСчетаКонтрагентов.ПометкаУдаления
| И НЕ БанковскиеСчетаКонтрагентов.Закрыт
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Платежи.Контрагент КАК Контрагент,
| СУММА(Платежи.Сумма) КАК Сумма,
| Платежи.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов
|ИЗ
| Платежи КАК Платежи
|
|СГРУППИРОВАТЬ ПО
| Платежи.Контрагент,
| Платежи.ВалютаВзаиморасчетов";
ТаблицаКонтрагентов = Объект.РасшифровкаПлатежа.Выгрузить(, "ОбъектРасчетов, Контрагент, Сумма, ВалютаВзаиморасчетов");
ТаблицаКонтрагентов.Свернуть("ОбъектРасчетов, Контрагент, ВалютаВзаиморасчетов", "Сумма");
Запрос.УстановитьПараметр("Расчеты", ТаблицаКонтрагентов);
Запрос.УстановитьПараметр("Реестр", Объект.БанковскиеСчетаСпискаКонтрагентов.Выгрузить(, "Контрагент, БанковскийСчетКонтрагента"));
РезультатЗапроса = Запрос.ВыполнитьПакет();
ВыборкаРасшифровкаПлатежа = РезультатЗапроса[РезультатЗапроса.ВГраница()].Выбрать();
БанковскиеСчета = РезультатЗапроса[РезультатЗапроса.ВГраница() - 1].Выгрузить();
БанковскиеСчетаПоОбъектуРасчетов = РезультатЗапроса[РезультатЗапроса.ВГраница() - 2].Выгрузить();
БанковскиеСчетаПоРеестру = РезультатЗапроса[РезультатЗапроса.ВГраница() - 3].Выгрузить();
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц);
БанкПолучателя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.БанковскийСчетКонтрагента, "Банк");
Результат = НоваяТаблицаБанковскихСчетовСпискаКонтрагентов();
Пока ВыборкаРасшифровкаПлатежа.Следующий() Цикл
НоваяСтрока = Результат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаРасшифровкаПлатежа);
Если Не ЗначениеЗаполнено(НоваяСтрока.Контрагент) Тогда
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Контрагент", НоваяСтрока.Контрагент);
СчетаПоОбъектуРасчетовНайденныеСтроки = БанковскиеСчетаПоОбъектуРасчетов.НайтиСтроки(ПараметрыОтбора);
Если СчетаПоОбъектуРасчетовНайденныеСтроки.Количество() = 1 Тогда
НоваяСтрока.БанковскийСчетКонтрагента = СчетаПоОбъектуРасчетовНайденныеСтроки[0].БанковскийСчетКонтрагента;
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Контрагент", НоваяСтрока.Контрагент);
ПараметрыОтбора.Вставить("Валюта", ВыборкаРасшифровкаПлатежа.ВалютаВзаиморасчетов);
ИсходныйРеестрНайденныеСтроки = БанковскиеСчетаПоРеестру.НайтиСтроки(ПараметрыОтбора);
Если ИсходныйРеестрНайденныеСтроки.Количество() = 1 Тогда
НоваяСтрока.БанковскийСчетКонтрагента = ИсходныйРеестрНайденныеСтроки[0].БанковскийСчетКонтрагента;
Продолжить;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Контрагент", НоваяСтрока.Контрагент);
СчетаНайденныеСтроки = БанковскиеСчета.НайтиСтроки(ПараметрыОтбора);
Если СчетаНайденныеСтроки.Количество() = 1 Тогда
НоваяСтрока.БанковскийСчетКонтрагента = СчетаНайденныеСтроки[0].БанковскийСчетКонтрагента;
ИначеЕсли СчетаНайденныеСтроки.Количество() > 1 Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Контрагент", НоваяСтрока.Контрагент);
ПараметрыОтбора.Вставить("Банк", БанкПолучателя);
СчетаНайденныеСтрокиПоБанку = БанковскиеСчета.НайтиСтроки(ПараметрыОтбора);
Если СчетаНайденныеСтрокиПоБанку.Количество() = 1 Тогда
НоваяСтрока.БанковскийСчетКонтрагента = СчетаНайденныеСтрокиПоБанку[0].БанковскийСчетКонтрагента;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Выполняет проверку заполнения документа при расчетах с самозанятыми.
//
// Параметры:
// ДокументОбъект - ДокументОбъект - документ, в котором выполняется проверка.
// Ошибка - Булево - признак ошибки при проверке.
// ФлагОбменСБанками - Булево - признак выполнения обмена с банком.
// ОшибкиЗаполнения - Строка - строки с ошибками.
//
Процедура ПроверитьЗаполнениеОплатыСамозанятому(ДокументОбъект, Ошибка, ФлагОбменСБанками = Ложь, ОшибкиЗаполнения = "") Экспорт
Если Не (ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И ДокументОбъект.ОперацияССамозанятым)Тогда
Возврат;
КонецЕсли;
ПроверитьОбъектыРасчетовССамозанятыми(ДокументОбъект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения);
ПроверитьРеестрКонтрагентов(ДокументОбъект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения);
КонецПроцедуры
// Заполняет контрагента по строке в табличную части "Расшифровка платежа".
//
// Параметры:
// ДокументОбъект - ДокументОбъект.СписаниеБезналичныхДенежныхСредств,
// ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств - объект, в котором выполняется заполнение.
//
Процедура ЗаполнитьКонтрагентаРасшифровкиПлатежа(ДокументОбъект) Экспорт
Если Не ДокументОбъект.СписокКонтрагентов Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасшифровкаПлатежа.НомерСтроки КАК НомерСтроки,
| РасшифровкаПлатежа.ОбъектРасчетов КАК ОбъектРасчетов,
| РасшифровкаПлатежа.Партнер КАК Партнер
|ПОМЕСТИТЬ РасшифровкаПлатежей
|ИЗ
| &РасшифровкаПлатежа КАК РасшифровкаПлатежа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РасшифровкаПлатежей.НомерСтроки КАК НомерСтроки,
| ОбъектыРасчетов.Контрагент КАК Контрагент,
| 0 КАК Приоритет
|ИЗ
| РасшифровкаПлатежей КАК РасшифровкаПлатежей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО РасшифровкаПлатежей.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
|ГДЕ
| ОбъектыРасчетов.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасшифровкаПлатежей.НомерСтроки,
| Контрагенты.Ссылка,
| 1
|ИЗ
| РасшифровкаПлатежей КАК РасшифровкаПлатежей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО РасшифровкаПлатежей.Партнер = Контрагенты.Партнер
|
|УПОРЯДОЧИТЬ ПО
| Приоритет";
Запрос.УстановитьПараметр("РасшифровкаПлатежа", ДокументОбъект.РасшифровкаПлатежа.Выгрузить(, "НомерСтроки, ОбъектРасчетов, Партнер"));
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаРасшифровки Из ДокументОбъект.РасшифровкаПлатежа Цикл
Если Не ЗначениеЗаполнено(СтрокаРасшифровки.Контрагент) Тогда
Если ЗначениеЗаполнено(СтрокаРасшифровки.ОбъектРасчетов) Тогда
СтрокаРасшифровки.Контрагент = КонтрагентИзТаблицы(РезультатЗапроса, СтрокаРасшифровки.НомерСтроки, 0);
ИначеЕсли ЗначениеЗаполнено(СтрокаРасшифровки.Партнер) Тогда
СтрокаРасшифровки.Контрагент = КонтрагентИзТаблицы(РезультатЗапроса, СтрокаРасшифровки.НомерСтроки, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Возвращает пустую структуру с параметрами для выполнения процедуры при изменении контрагента.
//
// Возвращаемое значение:
// Структура:
// * Контрагент - СправочникСсылка.Контрагенты - измененный контрагент.
// * БанковскийСчетКонтрагента - СправочникСсылка.БанковскиеСчетаКонтрагентов - банковский счет контрагента.
// * ЗаполнитьРасшифровкуПоКонтрагенту - Булево - признак заполнения табличной части "Расшифровка платежа" по контрагенту.
// * ТекущийПартнер - Неопределено, СправочникСсылка.Партнеры - значение партнера.
// * ТекущаяСтрокаРасшифровки - Неопределено, ДанныеФормыЭлементКоллекции - строка в табличной части "Расшифровка платежа".
//
Функция НовыйПараметрыПриИзмененииКонтрагента() Экспорт
Параметры = Новый Структура;
Параметры.Вставить("Контрагент", Справочники.Контрагенты.ПустаяСсылка());
Параметры.Вставить("БанковскийСчетКонтрагента", Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка());
Параметры.Вставить("ЗаполнитьРасшифровкуПоКонтрагенту", Истина);
Параметры.Вставить("ТекущийПартнер", Неопределено);
Параметры.Вставить("ТекущаяСтрокаРасшифровки", Неопределено);
Возврат Параметры;
КонецФункции
// Возвращает структуру параметров для процедуры при изменении контрагента табличной части "Расшифровка платежа" в форме документа.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа, в котором выполняется изменение.
// ИдентификаторСтроки - Число - идентификатор текущей строки табличной части.
//
// Возвращаемое значение:
// Неопределено,
// см. НовыйПараметрыПриИзмененииКонтрагента.
//
Функция ПараметрыПриИзмененииКонтрагентаВРасшифровкеПлатежа(Форма, ИдентификаторСтроки) Экспорт
СтрокаТабличнойЧасти = Форма.Объект.РасшифровкаПлатежа.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаТабличнойЧасти = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
ТекущийПартнер = ?(ЗначениеЗаполнено(СтрокаТабличнойЧасти.Партнер), СтрокаТабличнойЧасти.Партнер, Неопределено);
Если ЗначениеЗаполнено(ТекущийПартнер) Тогда
Если Не ПартнерыИКонтрагенты.КонтрагентДоступенДляВыбораДляПартнера(ТекущийПартнер, СтрокаТабличнойЧасти.Контрагент) Тогда
ТекущийПартнер = Неопределено;
КонецЕсли;
КонецЕсли;
Параметры = НовыйПараметрыПриИзмененииКонтрагента();
Параметры.Вставить("Контрагент", СтрокаТабличнойЧасти.Контрагент);
Параметры.Вставить("БанковскийСчетКонтрагента", БанковскийСчетКонтрагента);
Параметры.Вставить("ЗаполнитьРасшифровкуПоКонтрагенту", Истина);
Параметры.Вставить("ТекущийПартнер", ТекущийПартнер);
Параметры.Вставить("ТекущаяСтрокаРасшифровки", СтрокаТабличнойЧасти);
Возврат Параметры;
КонецФункции
// Возвращает структуру параметров для процедуры при изменении партнера табличной части "Расшифровка платежа" в форме документа.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма документа, в котором выполняется изменение.
// ИдентификаторСтроки - Число - идентификатор текущей строки табличной части.
//
// Возвращаемое значение:
// Неопределено,
// см. НовыйПараметрыПриИзмененииКонтрагента.
//
Функция ПараметрыПриИзмененииПартнераВРасшифровкеПлатежа(Форма, ИдентификаторСтроки) Экспорт
СтрокаТабличнойЧасти = Форма.Объект.РасшифровкаПлатежа.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаТабличнойЧасти = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Параметры = НовыйПараметрыПриИзмененииКонтрагента();
Если Форма.Объект.СписокКонтрагентов Тогда
СписокКонтрагентов = ПартнерыИКонтрагенты.ПолучитьВсехКонтрагентовПартнера(СтрокаТабличнойЧасти.Партнер);
ИсключитьИзСпискаКонтрагентовЮрЛица(СписокКонтрагентов);
Если СписокКонтрагентов.Найти(СтрокаТабличнойЧасти.Контрагент) <> Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТекущийКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(СтрокаТабличнойЧасти.Партнер, ТекущийКонтрагент);
// если у партнера определено несколько контрагентов, то ТекущийКонтрагент будет пустым
// возмем среди контрагентов только физлицо, если оно одно
Если Не ЗначениеЗаполнено(ТекущийКонтрагент)
И СписокКонтрагентов.Количество() = 1 Тогда
ТекущийКонтрагент = СписокКонтрагентов[0];
КонецЕсли;
ВидКонтрагента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийКонтрагент, "ЮридическоеФизическоеЛицо");
Если ВидКонтрагента = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
СтрокаТабличнойЧасти.Контрагент = ТекущийКонтрагент;
Иначе
СтрокаТабличнойЧасти.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
КонецЕсли;
БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка();
Параметры.Вставить("Контрагент", СтрокаТабличнойЧасти.Контрагент);
Параметры.Вставить("БанковскийСчетКонтрагента", БанковскийСчетКонтрагента);
Параметры.Вставить("ЗаполнитьРасшифровкуПоКонтрагенту", Истина);
Параметры.Вставить("ТекущийПартнер", СтрокаТабличнойЧасти.Партнер);
Параметры.Вставить("ТекущаяСтрокаРасшифровки", СтрокаТабличнойЧасти);
Иначе
Параметры.Вставить("Контрагент", Форма.Объект.Контрагент);
Параметры.Вставить("БанковскийСчетКонтрагента", Форма.Объект.БанковскийСчетКонтрагента);
Параметры.Вставить("ЗаполнитьРасшифровкуПоКонтрагенту", Истина);
Параметры.Вставить("ТекущийПартнер", СтрокаТабличнойЧасти.Партнер);
Параметры.Вставить("ТекущаяСтрокаРасшифровки", СтрокаТабличнойЧасти);
КонецЕсли;
Возврат Параметры;
КонецФункции
Процедура ИнициализироватьБанковскиеСчетаСпискаКонтрагентов(Объект, ДанныеЗаполнения = Неопределено) Экспорт
Если (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И Объект.ОперацияССамозанятым)
ИЛИ (ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
И ДанныеЗаполнения.Свойство("ХозяйственнаяОперация")
И (ДанныеЗаполнения.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеЗаполнения, "ОперацияССамозанятым")
И ДанныеЗаполнения.ОперацияССамозанятым)) Тогда
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
И ДанныеЗаполнения.Свойство("СписокКонтрагентов") Тогда
Объект.СписокКонтрагентов = ДанныеЗаполнения.СписокКонтрагентов;
КонецЕсли;
ЗаполнитьРеестрКонтрагентов(Объект);
Иначе
Объект.БанковскиеСчетаСпискаКонтрагентов.Очистить();
КонецЕсли;
КонецПроцедуры
// Выполняет очистку реквизитов оплаты с самозанятым.
//
// Параметры:
// Объект - ДанныеФормыСтруктура - документ объект.
//
Процедура ОчиститьРеквизитыОплатыСамозанятому(Объект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым")
И Объект.ОперацияССамозанятым Тогда
Если Объект.РасшифровкаПлатежа.Количество() > 1
И Объект.СписокКонтрагентов Тогда
Объект.РасшифровкаПлатежа.Очистить();
КонецЕсли;
Объект.ОперацияССамозанятым = Ложь;
Объект.СписокКонтрагентов = Ложь;
КонецЕсли;
КонецПроцедуры
// Выполняет проверку признака "Договор с плательщиком НПД" в договоре и "Операция с самозанятым" объекта расчетов в
// табличной части "Расшифровка платежа".
//
// Параметры:
// Объект - ДокументОбъект.ЗаявкаНаРасходованиеДенежныхСредств, ДокументОбъект.СписаниеБезналичныхДенежныхСредств - документ,
// в котором выполняется проверка.
// Ошибка - Булево - признак ошибки при проверке.
// ФлагОбменСБанками - Булево - признак выполнения процедуры в момент выполнения обработки обмена с банком.
// ОшибкиЗаполнения - Строка - строка с ошибками.
//
Процедура ПроверитьЗаполнениеДокументаСФлагомСамозанятого(Объект, Ошибка, ФлагОбменСБанками = Ложь, ОшибкиЗаполнения = "") Экспорт
КонтрагентЮрФизЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Контрагент, "ЮрФизЛицо");
ДокументСФлагом = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОплатаПоставщику
И (КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
ИЛИ КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель
ИЛИ Объект.СписокКонтрагентов);
Если Не ДокументСФлагом Тогда
Возврат;
КонецЕсли;
Таблица = Объект.РасшифровкаПлатежа.Выгрузить(, "ОбъектРасчетов, НомерСтроки");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсходныеДанные.ОбъектРасчетов КАК ОбъектРасчетов,
| ИсходныеДанные.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ТаблицаДанных
|ИЗ
| &ИсходныеДанные КАК ИсходныеДанные
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаДанных.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(НЕ ДоговорыКонтрагентов.ДоговорССамозанятым, ЛОЖЬ) КАК ОшибкаДоговора,
| ЕСТЬNULL(НЕ ОбъектыРасчетов.ОперацияССамозанятым, ЛОЖЬ) КАК ОшибкаОбъектаРасчетов,
| ВЫБОР
| КОГДА &Признак = ИСТИНА
| И НЕ ОбъектыРасчетов.НалогообложениеНДС ЕСТЬ NULL
| ТОГДА ВЫБОР
| КОГДА ОбъектыРасчетов.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА КОНЕЦ
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОшибкаРежимаНалогообложения
|ИЗ
| ТаблицаДанных КАК ТаблицаДанных
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПО ОбъектыРасчетов.Договор = ДоговорыКонтрагентов.Ссылка
| ПО ТаблицаДанных.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
|ГДЕ
| ЕСТЬNULL(ДоговорыКонтрагентов.ДоговорССамозанятым,
| ЕСТЬNULL(ОбъектыРасчетов.ОперацияССамозанятым,
| ВЫБОР
| КОГДА &Признак = ИСТИНА
| И НЕ ОбъектыРасчетов.НалогообложениеНДС ЕСТЬ NULL
| ТОГДА ВЫБОР
| КОГДА ОбъектыРасчетов.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ КОНЕЦ
| ИНАЧЕ &Признак
| КОНЕЦ)) <> &Признак";
Запрос.УстановитьПараметр("ИсходныеДанные", Таблица);
Запрос.УстановитьПараметр("Признак", Объект.ОперацияССамозанятым);
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Если Запрос.МенеджерВременныхТаблиц <> Неопределено Тогда
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц);
КонецЕсли;
Пока Выборка.Следующий() Цикл
ТекстыСообщений = Новый Массив;
Если Объект.ОперацияССамозанятым Тогда
ТекстыСообщений.Добавить(НСтр("ru = 'В строке №%1 введены не корректные данные для документа с признаком оплаты самозанятому:'"));
Если Выборка.ОшибкаДоговора Тогда
ТекстыСообщений.Добавить(НСтр("ru = 'заполнен договор без признака ""Договор с плательщиком НПД"".'"));
ИмяРеквизита = "Договор";
ИначеЕсли Выборка.ОшибкаОбъектаРасчетов Тогда
ТекстыСообщений.Добавить(НСтр("ru = 'заполнен объект расчетов без признака ""Операция с самозанятым"".'"));
ИмяРеквизита = "ОбъектРасчетов";
Иначе
ТекстыСообщений.Добавить(НСтр("ru = 'заполнен объект расчетов с не применяемым режимом налогообложения.'"));
ИмяРеквизита = "";
КонецЕсли;
Иначе
Если ПолучитьФункциональнуюОпцию("ИспользоватьВыплатыСамозанятым") Тогда
ТекстыСообщений.Добавить(НСтр("ru = 'В строке №%1 введены не корректные данные для документа без признака оплаты самозанятому:'"));
Иначе
ТекстыСообщений.Добавить(НСтр("ru = 'В строке №%1 необходимо скорректировать объект, созданный при включенной настройке ""Выплаты самозанятым"" или создать новый:'"));
КонецЕсли;
Если Выборка.ОшибкаДоговора Тогда
ТекстыСообщений.Добавить(НСтр("ru = 'заполнен договор с признаком ""Договор с плательщиком НПД"".'"));
ИмяРеквизита = "Договор";
Иначе
ТекстыСообщений.Добавить(НСтр("ru = 'заполнен объект расчетов с признаком ""Операция с самозанятым"".'"));
ИмяРеквизита = "ОбъектРасчетов";
КонецЕсли;
КонецЕсли;
Текст = СтрШаблон(СтрСоединить(ТекстыСообщений, Символы.ПС), Выборка.НомерСтроки);
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, Текст);
Иначе
Если Объект.СписокКонтрагентов
ИЛИ Объект.РасшифровкаПлатежа.Количество() > 1 Тогда
Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("РасшифровкаПлатежа", Выборка.НомерСтроки, ИмяРеквизита);
Иначе
Поле = СтрШаблон("РасшифровкаБезРазбиения%1", ИмяРеквизита);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(Текст, Объект, Поле, , Ошибка);
КонецЕсли;
КонецЦикла;
ПроверитьЗаполнениеОплатыСамозанятому(Объект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения);
КонецПроцедуры
// Проверяет заполнение банковских реквизитов.
//
// Параметры:
// Объект - СправочникОбъект.БанковскиеСчетаОрганизаций, СправочникОбъект.БанковскиеСчетаКонтрагентов - банковский счет.
// Отказ - Булево - признак ошибки.
// ВалютныйСчет - Булево - признак валютного счета.
Процедура ПроверитьЗаполнениеБанковскихРеквизитов(Объект, Отказ, ВалютныйСчет) Экспорт
НациональныеРеквизитыБанковскихСчетов = ПолучитьФункциональнуюОпцию("НациональныеРеквизитыБанковскихСчетов");
Если Не ЗначениеЗаполнено(Объект.Банк)
И Не Объект.РучноеИзменениеРеквизитовБанка Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Банк"" не заполнено.'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Объект, "Банк", , Отказ);
ИначеЕсли Не ЗначениеЗаполнено(Объект.Банк)
И Объект.РучноеИзменениеРеквизитовБанка Тогда
Если НациональныеРеквизитыБанковскихСчетов Тогда
ОбязательныеРеквизитыПлатежа = Новый Соответствие;
Если Не Объект.ИностранныйБанк Тогда
ОбязательныеРеквизитыПлатежа.Вставить("БИКБанка", НСтр("ru = 'БИК'"));
ИначеЕсли Не ЗначениеЗаполнено(Объект.БИКБанка) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("СВИФТБанка", НСтр("ru = 'Код / SWIFT BIC'"));
КонецЕсли;
ОбязательныеРеквизитыПлатежа.Вставить("НаименованиеБанка", НСтр("ru = 'Наименование'"));
ОбязательныеРеквизитыПлатежа.Вставить("ГородБанка", НСтр("ru = 'Город'"));
Если Не Объект.ИностранныйБанк
И Не ВалютныйСчет Тогда
ОбязательныеРеквизитыПлатежа.Вставить("КоррСчетБанка", НСтр("ru = 'Корр. счет'"));
КонецЕсли;
ПараметрыСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыСообщения.Текст = НСтр("ru = 'Поле ""%1"" не заполнено.'");
ПараметрыДопСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыДопСообщения.Текст = НСтр("ru = 'Необходимо заполнить поле ""Банк"" или банковские реквизиты счета:'");
ПараметрыДопСообщения.КлючДанных = Объект;
ПараметрыДопСообщения.Поле = "Банк";
ВывестиОшибкуПроверкиБанковскихРеквизитов(Объект, Отказ, ОбязательныеРеквизитыПлатежа, ПараметрыСообщения, ПараметрыДопСообщения);
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Объект.Банк) Тогда
ДанныеБанка = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Банк, "Код, СВИФТБИК, Наименование, КоррСчет, Город, ИНН");
ОбязательныеРеквизитыПлатежа = Новый Соответствие;
Если Не Объект.ИностранныйБанк Тогда
ОбязательныеРеквизитыПлатежа.Вставить("Код", НСтр("ru = 'БИК'"));
ИначеЕсли Не ЗначениеЗаполнено(ДанныеБанка.Код) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("СВИФТБИК", НСтр("ru = 'Код / SWIFT BIC'"));
КонецЕсли;
ОбязательныеРеквизитыПлатежа.Вставить("Наименование", НСтр("ru = 'Наименование'"));
ОбязательныеРеквизитыПлатежа.Вставить("Город", НСтр("ru = 'Город'"));
Если Не Объект.ИностранныйБанк
И ЗначениеЗаполнено(Объект.ВалютаДенежныхСредств)
И ДанныеБанка.ИНН <> "" Тогда
ОбязательныеРеквизитыПлатежа.Вставить("КоррСчет", НСтр("ru = 'Корр. счет'"));
КонецЕсли;
ПараметрыСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыСообщения.Текст = НСтр("ru = 'Поле ""%1"" у банка не заполнено.'");
ПараметрыСообщения.КлючДанных = Объект.Банк;
ПараметрыСообщения.ПутьКДанным = "Объект";
ПараметрыДопСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыДопСообщения.Текст = НСтр("ru = 'Необходимо заполнить реквизиты банка:'");
ПараметрыДопСообщения.КлючДанных = Объект;
ПараметрыДопСообщения.Поле = "Банк";
ВывестиОшибкуПроверкиБанковскихРеквизитов(ДанныеБанка, Отказ, ОбязательныеРеквизитыПлатежа, ПараметрыСообщения, ПараметрыДопСообщения);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.БанкДляРасчетов)
И Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов Тогда
Если НациональныеРеквизитыБанковскихСчетов Тогда
ОбязательныеРеквизитыПлатежа = Новый Соответствие;
Если Не ЭтоИностранныйБанкРасчетов(Объект.СтранаБанкаДляРасчетов) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("БИКБанкаДляРасчетов", НСтр("ru = 'БИК'"));
ИначеЕсли Не ЗначениеЗаполнено(Объект.БИКБанкаДляРасчетов) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("СВИФТБанкаДляРасчетов", НСтр("ru = 'Код / SWIFT BIC'"));
КонецЕсли;
ОбязательныеРеквизитыПлатежа.Вставить("НаименованиеБанкаДляРасчетов", НСтр("ru = 'Наименование'"));
ОбязательныеРеквизитыПлатежа.Вставить("ГородБанкаДляРасчетов", НСтр("ru = 'Город'"));
Если Не Объект.ИностранныйБанк
И Не ВалютныйСчет Тогда
ОбязательныеРеквизитыПлатежа.Вставить("КоррСчетБанкаДляРасчетов", НСтр("ru = 'Корр. счет'"));
КонецЕсли;
ПараметрыСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыСообщения.Текст = НСтр("ru = 'Поле ""%1"" банка-корреспондента не заполнено.'");
ПараметрыДопСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыДопСообщения.Текст = НСтр("ru = 'Необходимо заполнить поле ""Банк корреспондент"" или реквизиты банка-корреспондента счета:'");
ПараметрыДопСообщения.КлючДанных = Объект;
ПараметрыДопСообщения.Поле = "БанкДляРасчетов";
ВывестиОшибкуПроверкиБанковскихРеквизитов(Объект, Отказ, ОбязательныеРеквизитыПлатежа, ПараметрыСообщения, ПараметрыДопСообщения);
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Объект.БанкДляРасчетов) Тогда
ДанныеБанка = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.БанкДляРасчетов, "Код, СВИФТБИК, Наименование, КоррСчет, Город, КодСтраны, ИНН");
СтранаБанкаДляРасчетов = ДенежныеСредстваСервер.СтранаБанкаПоКоду(ДанныеБанка.КодСтраны);
ОбязательныеРеквизитыПлатежа = Новый Соответствие;
Если Не ЭтоИностранныйБанкРасчетов(СтранаБанкаДляРасчетов) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("Код", НСтр("ru = 'БИК'"));
ИначеЕсли Не ЗначениеЗаполнено(ДанныеБанка.Код) Тогда
ОбязательныеРеквизитыПлатежа.Вставить("СВИФТБИК", НСтр("ru = 'Код / SWIFT BIC'"));
КонецЕсли;
ОбязательныеРеквизитыПлатежа.Вставить("Наименование", НСтр("ru = 'Наименование'"));
ОбязательныеРеквизитыПлатежа.Вставить("Город", НСтр("ru = 'Город'"));
Если Не Объект.ИностранныйБанк
И ЗначениеЗаполнено(Объект.ВалютаДенежныхСредств)
И ДанныеБанка.ИНН <> "" Тогда
ОбязательныеРеквизитыПлатежа.Вставить("КоррСчет", НСтр("ru = 'Корр. счет'"));
КонецЕсли;
ПараметрыСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыСообщения.Текст = НСтр("ru = 'Поле ""%1"" у банка-корреспондента не заполнено.'");
ПараметрыСообщения.КлючДанных = Объект.БанкДляРасчетов;
ПараметрыСообщения.ПутьКДанным = "Объект";
ПараметрыДопСообщения = НовыеПараметрыВыводаСообщения();
ПараметрыДопСообщения.Текст = НСтр("ru = 'Необходимо заполнить реквизиты банка-корреспондента:'");
ПараметрыДопСообщения.КлючДанных = Объект;
ПараметрыДопСообщения.Поле = "БанкДляРасчетов";
ВывестиОшибкуПроверкиБанковскихРеквизитов(ДанныеБанка, Отказ, ОбязательныеРеквизитыПлатежа, ПараметрыСообщения, ПараметрыДопСообщения);
КонецЕсли;
КонецПроцедуры
#Область СистемаБыстрыхПлатежей
// Возвращает признак доступности платежной ссылки в документе по форме оплаты.
//
// Параметры:
// ДокументСсылка - ДокументСсылка - документ, по которому определяется доступность платежной ссылки.
// ФормаОплаты - ПеречислениеСсылка.ФормыОплаты - форма оплаты.
// Входящая - Булево - признак направления платежной ссылки.
//
// Возвращаемое значение:
// Булево
Функция ДоступнаГиперссылкаСБП(ДокументСсылка, ФормаОплаты, Входящая) Экспорт
Если Не Входящая Тогда
КомандаОтображается = ВключенаГенерацияПлатежнойСсылкиСБППоДокументу(ДокументСсылка);
Иначе
КомандаОтображается = Истина;
КонецЕсли;
Возврат КомандаОтображается
И (ФормаОплаты = Перечисления.ФормыОплаты.ПустаяСсылка()
Или ФормаОплаты = Перечисления.ФормыОплаты.СистемаБыстрыхПлатежей)
И ДокументСсылка <> Неопределено
И ?(Входящая, СистемаБыстрыхПлатежейУТ.ДоступноДобавлениеВходящейСсылкиПоДокументу(ДокументСсылка), СистемаБыстрыхПлатежейУТ.ПереводыСБППоДокументуДоступны(ДокументСсылка));
КонецФункции
// Возвращает признак использования команды генерации платежной ссылки СБП по документу.
//
// Параметры:
// ДокументСсылка - ОпределяемыйТип.ДокументОперацииСБП - Документ, включенный в список документов, по которым доступно
// генерации платежной ссылки по умолчанию.
//
// Возвращаемое значение:
// Булево - Включена генерация платежной ссылки СБППо документу.
Функция ВключенаГенерацияПлатежнойСсылкиСБППоДокументу(ДокументСсылка) Экспорт
ХранилищеНастроекСБП = Константы.НастройкиОтображенияКомандПлатежныхСистем.Получить();
НастройкиВидимости = ХранилищеНастроекСБП.Получить(); // ФиксированноеСоответствие
Результат = Истина;
Если НастройкиВидимости <> Неопределено Тогда
НастройкиВидимостиСБП = НастройкиВидимости.Получить("СистемаБыстрыхПлатежей");
Если НастройкиВидимостиСБП <> Неопределено Тогда
Видимость = НастройкиВидимостиСБП.Получить(ДокументСсылка.Метаданные().ПолноеИмя())
Иначе
Видимость = НастройкиВидимости.Получить(ДокументСсылка.Метаданные().ПолноеИмя());
КонецЕсли;
Результат = ?(Видимость = Неопределено, Ложь, Видимость);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьПрефиксациюКассыКассовойКниги(Ссылка)
РеквизитыПрефиксации = Новый Структура("ИспользоватьПрефикс, Префикс");
Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.КассовыеКниги") Тогда
РеквизитыПрефиксации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ИспользоватьПрефикс, Префикс");
ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка.Кассы") Тогда
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "КассоваяКнига.ИспользоватьПрефикс, КассоваяКнига.Префикс");
РеквизитыПрефиксации.Вставить("ИспользоватьПрефикс", Реквизиты.КассоваяКнигаИспользоватьПрефикс);
РеквизитыПрефиксации.Вставить("Префикс", Реквизиты.КассоваяКнигаПрефикс);
КонецЕсли;
Возврат РеквизитыПрефиксации;
КонецФункции
Процедура ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки)
ОшибкиЗаполнения = ОшибкиЗаполнения + "
|" + ТекстОшибки;
КонецПроцедуры
Функция ДокументыСПередачейФайловВБанк()
ТипыДокументов = Новый Массив;
ТипыДокументов.Добавить(Тип("ДокументСсылка.СправкаОПодтверждающихДокументах"));
ТипыДокументов.Добавить(Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств"));
Возврат ТипыДокументов;
КонецФункции
Функция УбратьИзНаименованияОрганизационнуюФорму(Наименование, ИмяОрганизационнойФормы)
Результат = Ложь;
Наименование = СокрЛП(Наименование);
ДлинаНаименования = СтрДлина(Наименование);
ДлинаОрганизационнойФормы = СтрДлина(ИмяОрганизационнойФормы);
Если Лев(Наименование, ДлинаОрганизационнойФормы) = ИмяОрганизационнойФормы Тогда
Наименование = СокрЛ(Сред(Наименование, ДлинаОрганизационнойФормы + 1));
Результат = Истина;
КонецЕсли;
Если Прав(Наименование, ДлинаОрганизационнойФормы) = ИмяОрганизационнойФормы Тогда
Наименование = СокрП(Лев(Наименование, ДлинаНаименования - ДлинаОрганизационнойФормы - 1));
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает признак модифицированности документа
//
// Параметры:
// ДокументОбъект - ДокументОбъект.СписаниеБезналичныхДенежныхСредств - проверяемый документ.
// ОсновныеРеквизиты - Массив из Строка - список имен метаданных ДокументОбъект для проверки изменений.
//
// Возвращаемое значение:
// Булево
//
Функция ДокументИзменен(ДокументОбъект, ОсновныеРеквизиты)
ДокументСсылка = ДокументОбъект.Ссылка;
МетаданныеДокумента = ДокументСсылка.Метаданные();
Для Каждого ТекущийРеквизит Из ОсновныеРеквизиты Цикл
Если МетаданныеДокумента.Реквизиты.Найти(ТекущийРеквизит) <> Неопределено Тогда
Если ДокументСсылка[ТекущийРеквизит] <> ДокументОбъект[ТекущийРеквизит] Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если МетаданныеДокумента.ТабличныеЧасти.Найти(ТекущийРеквизит) <> Неопределено Тогда
ВсегоОбъект = ДокументОбъект[ТекущийРеквизит].Количество();
ВсегоСсылка = ДокументСсылка[ТекущийРеквизит].Количество();
Если ВсегоСсылка <> ВсегоОбъект Тогда
Возврат Истина;
КонецЕсли;
ТабличнаяЧасть = МетаданныеДокумента.ТабличныеЧасти[ТекущийРеквизит];
Индекс = 0;
Пока Индекс < ВсегоОбъект Цикл
СтрокаТабличнойЧастиОбъекта = ДокументОбъект[ТекущийРеквизит][Индекс];
СтрокаТабличнойЧастиСсылки = ДокументОбъект[ТекущийРеквизит][Индекс];
Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
Если СтрокаТабличнойЧастиОбъекта[Реквизит.Имя] <> СтрокаТабличнойЧастиСсылки[Реквизит.Имя] Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
#Область БюджетСлужебные
// Проверка заполнения реквизитов налоговых платежей в документе.
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты.
// ПараметрыПроверкиЗаполнения - Структура - Параметры проверки заполнения:
// * ПрименениеПриказа107н - Булево - Признак применения приказа 107н.
// * ПрименениеПриказа126н - Булево - Признак применения приказа 126н.
// * ЕдиныйНалоговыйПлатеж - Булево - Признак единого налогового платежа.
// * ПрименениеПриказа58н - Булево - Признак применения приказа 58н.
// Отказ - Булево - Признак отказа от продолжения работы
// ФлагОбменСБанками - Булево - используется обмен с банком
// ОшибкиЗаполнения - Строка - Накопленное описание ошибок.
//
Процедура ПроверитьЗаполнениеРеквизитовНалоговыхПлатежей(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
ВидПеречисленияВБюджет = Объект.ВидПеречисленияВБюджет;
ПоказательОснования = Объект.ПоказательОснования;
ПоказательПериода = Объект.ПоказательПериода;
ПоказательТипа = Объект.ПоказательТипа;
ПоказательНомера = Объект.ПоказательНомера;
ПоказательДаты = Объект.ПоказательДаты;
ПроверитьЗаполнениеКБК(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеОКТМО(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеУИН(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ПроверитьЗаполнениеПоказателяПериода(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ПроверитьЗаполнениеПоказателяНомера(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеПоказателяДаты(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ДействуетПриказ199н_202110 = ПлатежиВБюджетКлиентСервер.ДействуетПриказ199н_202110(Объект.Дата);
ДействуетПриказ199н_202302 = ПлатежиВБюджетКлиентСервер.ДействуетПриказ199н_202302(Объект.Дата);
Если ПлатежиВБюджет.ИспользуетсяЕдиныйНалоговыйПлатеж(Объект.Организация, Объект.Дата)
И Объект.ТипНалога = Справочники.ВидыНалоговВзносов.ЕдиныйНалоговыйПлатеж Тогда
КодБК = ВидыНалоговВзносовЛокализация.КБКПоВидуНалоговогоОбязательства(Объект.ТипНалога, , Объект.Дата);
Если Не ПустаяСтрока(Объект.КодБК) И СокрЛП(Объект.КодБК) <> КодБК Тогда
ТекстОшибки = НСтр("ru = 'КБК не соответствует реквизитам единого налогового платежа'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет", , Отказ);
КонецЕсли;
КонецЕсли;
Если (ПоказательОснования <> "0" ИЛИ ПоказательПериода <> "0" ИЛИ ПоказательНомера <> "0" ИЛИ ПоказательДаты <> "0") Тогда
ТекстОшибки = НСтр("ru = 'При перечислении в бюджет единого налогового платежа следует указать ""0"" в полях:
| ""Основание"", ""Период"", ""Номер документа"" и ""Дата документа""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
Если ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н
И Объект.СтатусСоставителя <> "01" Тогда
ТекстОшибки = НСтр("ru = 'В поле ""Статус плательщика"" следует указать значение ""01""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "НадписьРеквизитыПлатежаВБюджет", , Отказ);
КонецЕсли;
ИначеЕсли ДействуетПриказ199н_202302
И Объект.СтатусСоставителя <> "01"
И Объект.СтатусСоставителя <> "27" Тогда
ТекстОшибки =
НСтр("ru = 'В поле ""Статус плательщика"" следует указать значение ""01"" (для кредитных организаций ""27"")'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "НадписьРеквизитыПлатежаВБюджет", , Отказ);
КонецЕсли;
КонецЕсли;
ИначеЕсли Объект.ТипНалога = Справочники.ВидыНалоговВзносов.ОбеспечительныйПлатежСПОТ Тогда
КодБК = ВидыНалоговВзносовЛокализация.КБКПоВидуНалоговогоОбязательства(Объект.ТипНалога, , Объект.Дата);
Если Не ПустаяСтрока(Объект.КодБК) И СокрЛП(Объект.КодБК) <> КодБК Тогда
ТекстОшибки = НСтр("ru = 'КБК не соответствует реквизитам обеспечительного платежа'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет");
КонецЕсли;
КонецЕсли;
ИначеЕсли ПлатежиВБюджетКлиентСервер.ПлатежАдминистрируетсяНалоговымиОрганами(Объект.КодБК)
И Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н
И ДействуетПриказ199н_202302
И Объект.СтатусСоставителя <> "01"
И Объект.СтатусСоставителя <> "02"
И Объект.СтатусСоставителя <> "13"
И Объект.СтатусСоставителя <> "27" Тогда
ТекстОшибки =
НСтр("ru = 'В поле ""Статус плательщика"" следует указать значение ""01"", ""13"" (для кредитных организаций ""27"") или ""02"" (для уведомления об исчисленных суммах налога)'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "НадписьРеквизитыПлатежаВБюджет", , Отказ);
КонецЕсли;
КонецЕсли;
Если ПлатежиВБюджетКлиентСервер.ОснованияПлатежа(
ВидПеречисленияВБюджет, ПараметрыПроверкиЗаполнения.ПрименениеПриказа107н, Объект.Дата).НайтиПоЗначению(ПоказательОснования) = Неопределено
И ПоказательТипа <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Неверное значение поля ""Основание""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
Если Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа126н Тогда
Если ПлатежиВБюджетКлиентСервер.ТипыПлатежа(ВидПеречисленияВБюджет, ПараметрыПроверкиЗаполнения.ПрименениеПриказа107н).НайтиПоЗначению(ПоказательТипа) = Неопределено
И ПоказательТипа <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Неверно указано значение в поле ""Тип платежа""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СтрНайти("АП,АР", ПоказательОснования) > 0
И Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н Тогда
Если ЗначениеЗаполнено(ПоказательПериода)
И ПоказательПериода <> "0" Тогда
ТекстОшибки = НСтр("ru = 'При основании платежа ""АП"" или ""АР"" следует указать ""0"" в поле ""Период""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
ИначеЕсли СтрНайти("ТП,ЗД", ПоказательОснования) > 0
И Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н Тогда
Если ЗначениеЗаполнено(ПоказательНомера)
И ПоказательНомера <> "0"
И (НЕ ДействуетПриказ199н_202110
ИЛИ ДействуетПриказ199н_202110
И ПоказательОснования = "ТП") Тогда
ТекстОшибки = СтрШаблон(НСтр("ru = 'При основании платежа ""%1"" необходимо указывать ""0"" в поле ""Номер""'"), ПоказательОснования);
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
ПоказательДатыСтрокой = ПоказательДаты;
Если Лев(ПоказательДатыСтрокой, 1) = "0"
И Сред(ПоказательДатыСтрокой, 2, 2) = " ." Тогда
ПоказательДатыСтрокой = "0";
КонецЕсли;
Если ПустаяСтрока(СтрЗаменить(ПоказательДатыСтрокой, ".", "")) Тогда
ПоказательДатыСтрокой = "";
КонецЕсли;
Если ПоказательОснования = "ЗД" Тогда
Если ЗначениеЗаполнено(ПоказательДатыСтрокой)
И ПоказательДатыСтрокой <> "0"
И (НЕ ДействуетПриказ199н_202110
ИЛИ ДействуетПриказ199н_202110
И ПоказательНомера = "0") Тогда
ТекстОшибки = НСтр("ru = 'При основании платежа ""ЗД"" следует указать ""0"" в поле ""Дата""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ПоказательОснования = "ЗД"
И ДействуетПриказ199н_202110 Тогда
Если ПоказательНомера <> "0" Тогда
Префикс = Лев(ПоказательНомера, 2);
Если СтрНайти("ТР,ПР,АП,АР", Префикс) = 0 Тогда
ТекстОшибки = НСтр("ru = 'Необходимо указать номер документа с префиксом (ТР, ПР, АП или АР)'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
Если ПоказательДатыСтрокой = "0" Тогда
ТекстОшибки = НСтр("ru = 'Необходимо указать дату документа'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Проверка заполнения реквизитов таможенных платежей в документе.
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты.
// ПараметрыПроверкиЗаполнения - Структура - Параметры проверки заполнения:
// * ПрименениеПриказа107н - Булево - Признак применения приказа 107н.
// * ПрименениеПриказа126н - Булево - Признак применения приказа 126н.
// * ЕдиныйНалоговыйПлатеж - Булево - Признак единого налогового платежа.
// * ПрименениеПриказа58н - Булево - Признак применения приказа 58н.
// Отказ - Булево - Признак отказа от продолжения работы
// ФлагОбменСБанками - Булево - используется обмен с банком
// ОшибкиЗаполнения - Строка - Накопленное описание ошибок.
//
Процедура ПроверитьЗаполнениеРеквизитовТаможенныхПлатежей(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
ВидПеречисленияВБюджет = Объект.ВидПеречисленияВБюджет;
ПоказательОснования = Объект.ПоказательОснования;
ПоказательТипа = Объект.ПоказательТипа;
ПроверитьЗаполнениеКБК(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеОКТМО(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеУИН(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ПроверитьЗаполнениеКодТаможенногоОргана(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеПоказателяНомера(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеПоказателяДаты(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
Если ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н
И Не ЗначениеЗаполнено(Объект.ПоказательОснования) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Основание"" не заполнено'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
ИначеЕсли ПлатежиВБюджетКлиентСервер.ОснованияПлатежа(
ВидПеречисленияВБюджет, ПараметрыПроверкиЗаполнения.ПрименениеПриказа107н,
?(Объект.Дата = Дата('00010101'), ТекущаяДатаСеанса(), Объект.Дата)).НайтиПоЗначению(ПоказательОснования) = Неопределено
И ПоказательТипа <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Неверное значение поля ""Основание""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
Если Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа126н Тогда
Если ПлатежиВБюджетКлиентСервер.ТипыПлатежа(ВидПеречисленияВБюджет, ПараметрыПроверкиЗаполнения.ПрименениеПриказа107н).НайтиПоЗначению(ПоказательТипа) = Неопределено
И ПоказательТипа <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Неверно указано значение в поле ""Тип платежа""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Проверка заполнения реквизитов иных платежей в бюджет в документе.
//
// Параметры:
// Объект - ДокументОбъект - Документ оплаты
// ПараметрыПроверкиЗаполнения - Структура - Параметры проверки заполнения:
// * ПрименениеПриказа107н - Булево - Признак применения приказа 107н.
// * ПрименениеПриказа126н - Булево - Признак применения приказа 126н.
// * ЕдиныйНалоговыйПлатеж - Булево - Признак единого налогового платежа.
// * ПрименениеПриказа58н - Булево - Признак применения приказа 58н.
// Отказ - Булево - Признак отказа от продолжения работы
// ФлагОбменСБанками - Булево - используется обмен с банком
// ОшибкиЗаполнения - Строка - Накопленное описание ошибок.
//
Процедура ПроверитьЗаполнениеРеквизитовИныхПлатежейВБюджет(Объект, ПараметрыПроверкиЗаполнения, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("ПоказательПериода", "Период");
СтруктураПолей.Вставить("ПоказательНомера", НСтр("ru='Номер документа'"));
СтруктураПолей.Вставить("ПоказательДаты", НСтр("ru='Дата документа'"));
ПроверитьЗаполнениеКБК(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеОКТМО(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеУИН(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения);
ПроверитьЗаполнениеПоказателяНомера(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
ПроверитьЗаполнениеПоказателяДаты(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверкиЗаполнения);
Если Не ПараметрыПроверкиЗаполнения.ПрименениеПриказа58н
И Объект.СтатусСоставителя = "08" Тогда
Для каждого ЭлементСтруктуры Из СтруктураПолей Цикл
Если Объект[ЭлементСтруктуры.Ключ] <> "0" Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При статусе плательщика ""08"" следует указать ""0"" в поле ""%1""'"),
ЭлементСтруктуры.Значение);
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПоказателяПериода(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
ПоказательПериода = Объект.ПоказательПериода;
ПоказательОснования = Объект.ПоказательОснования;
ОшибкаЗаполненияПериода = Ложь;
РасшифровкаОшибки = "";
Если Не ЗначениеЗаполнено(Объект.ПоказательПериода) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Период"" не заполнено'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
Если ПлатежиВБюджетКлиентСервер.ДействуетПриказ199н_202110(Объект.Дата) Тогда
ПоказателиДляПроверкиКонкретнойДаты = "РС,ОТ,РТ,ВУ,ПБ,ИН";
ПоказателиДляПроверки = "ТП,ЗД";
Иначе
ПоказателиДляПроверкиКонкретнойДаты = "ТР,РС,ОТ,РТ,ВУ,ПБ,ПР";
ПоказателиДляПроверки = "ТП,ЗД";
КонецЕсли;
Если ЗначениеЗаполнено(ПоказательПериода) Тогда
Если СтрНайти(ПоказателиДляПроверки, ПоказательОснования) > 0 И ПоказательПериода <> "0" Тогда
ПериодичностьНалога = Сред((ПоказательПериода), 1, 2);
НомерПериода = Сред((ПоказательПериода), 4, 2);
НомерПериода = ?(ПустаяСтрока(НомерПериода), 0, Число(НомерПериода));
ГодПериода = Сред((ПоказательПериода), 7, 4);
ГодПериода = ?(ПустаяСтрока(ГодПериода), 0, Число(ГодПериода));
Если СтрНайти("МС,КВ,ПЛ,ГД", ПериодичностьНалога) > 0 Тогда
Если СтрДлина(ПоказательПериода) - СтрДлина(СтрЗаменить(ПоказательПериода, ".", "")) <> 2
ИЛИ ГодПериода < 2000 Тогда
ОшибкаЗаполненияПериода = Истина;
КонецЕсли;
КонецЕсли;
Если ПериодичностьНалога = "МС" Тогда
Если НомерПериода < 1
ИЛИ НомерПериода > 12 Тогда
ОшибкаЗаполненияПериода = Истина;
РасшифровкаОшибки = Нстр("ru = 'четвертый и пятый знак периода платежа заполнены некорректно,
|для месячных платежей необходимо заполнить порядковый номер месяца (с 1 по 12).'");
КонецЕсли;
ИначеЕсли ПериодичностьНалога = "КВ" Тогда
Если НомерПериода < 1
ИЛИ НомерПериода > 4 Тогда
ОшибкаЗаполненияПериода = Истина;
РасшифровкаОшибки = Нстр("ru = 'четвертый и пятый знак периода платежа заполнены некорректно,
|для квартальных платежей необходимо заполнить порядковый номер квартала (с 1 по 4).'");
КонецЕсли;
ИначеЕсли ПериодичностьНалога = "ПЛ" Тогда
Если НомерПериода < 1
ИЛИ НомерПериода > 2 Тогда
ОшибкаЗаполненияПериода = Истина;
РасшифровкаОшибки = Нстр("ru = 'четвертый и пятый знак периода платежа заполнены некорректно,
|для полугодовых платежей необходимо заполнить порядковый номер полугодия (01 или 02).'");
КонецЕсли;
ИначеЕсли ПериодичностьНалога = "ГД" Тогда
Если НомерПериода <> 0 Тогда
ОшибкаЗаполненияПериода = Истина;
РасшифровкаОшибки = Нстр("ru = 'четвертый и пятый знак периода платежа заполнены некорректно
|для годовых платежей необходимо заполнить значением 00.'");
КонецЕсли;
Иначе
ПроверитьДатуПериода(Объект, ОшибкаЗаполненияПериода);
КонецЕсли;
ИначеЕсли СтрНайти(ПоказателиДляПроверкиКонкретнойДаты, ПоказательОснования) > 0
И ПоказательПериода <> "0" Тогда
ПериодичностьНалога = Сред((ПоказательПериода), 1, 2);
Если СтрНайти("МС,КВ,ПЛ,ГД", ПериодичностьНалога) > 0 Тогда
ОшибкаЗаполненияПериода = Истина;
РасшифровкаОшибки = Нстр("ru = 'необходимо указать конкретный период платежа.'");
Иначе
ПроверитьДатуПериода(Объект, ОшибкаЗаполненияПериода);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ОшибкаЗаполненияПериода Тогда
ТекстОшибки = НСтр("ru = 'Неверно указано значение в поле ""Период""'");
Если РасшифровкаОшибки <> "" Тогда
ТекстОшибки = ТекстОшибки + ":" + Символы.ПС + РасшифровкаОшибки;
КонецЕсли;
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеКБК(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверки)
КБК = Объект.КодБК;
НомерСчетаПолучателя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.БанковскийСчетКонтрагента, "НомерСчета");
Если Объект.ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж
И ПустаяСтрока(КБК)
И Лев(НомерСчетаПолучателя, 5) <> "03100"
И ПараметрыПроверки.ПрименениеПриказа58н Тогда
ТекстОшибки = НСтр("ru = 'КБК должен состоять из 20 знаков или ""0""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
Возврат;
ИначеЕсли Объект.ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж
И СокрЛП(КБК) = "0"
И Лев(НомерСчетаПолучателя, 5) <> "03100"
И ПараметрыПроверки.ПрименениеПриказа58н Тогда
Возврат;
ИначеЕсли Объект.ВидПеречисленияВБюджет = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж
И СокрЛП(КБК) = "0"
И Не ПараметрыПроверки.ПрименениеПриказа58н Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "";
// Проверим валидность введенного кода
Если СтрДлина(СокрП(КБК)) <> 20 Тогда
ТекстОшибки = НСтр("ru = 'КБК должен состоять из 20 знаков'");
// Допустимы символы 0123456789АБВГДЕЖИКЛМНПРСТУФЦЧШЩЭЮЯABCDEFGHIJKLMNPQRSTUVWYZ
ИначеЕсли Не СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке(ВРег(КБК), Истина, "0123456789АБВГДЕЖИКЛМНПРСТУФЦЧШЩЭЮЯ")
Или СтрНайти(ВРег(КБК), "O") > 0
Или СтрНайти(ВРег(КБК), "X") > 0 Тогда
ТекстОшибки = НСтр("ru = 'В КБК допустимо вводить только цифры и буквы (8 - 17 разряды, кроме ""О"" и ""Х"")'");
ИначеЕсли ПустаяСтрока(СокрЛП(СтрЗаменить(КБК, "0", ""))) Тогда
ТекстОшибки = НСтр("ru = 'Все знаки КБК не могут одновременно принимать значение ""0""'");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеОКТМО(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверки)
КодОКАТО = Объект.КодОКАТО;
ТекстОшибки = "";
Если ПустаяСтрока(КодОКАТО)
И ПараметрыПроверки.ПрименениеПриказа58н Тогда
ТекстОшибки = НСтр("ru = 'ОКТМО должен состоять из 8 знаков или ""0""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
// Проверим валидность введенного кода
Если СтрДлина(СокрЛП(КодОКАТО)) > 1 И ПустаяСтрока(СокрЛП(СтрЗаменить(КодОКАТО, "0", ""))) Тогда
ТекстОшибки = НСтр("ru = 'Все знаки ОКТМО не могут одновременно принимать значение ""0""'");
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеУИН(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
УИН = Объект.ИдентификаторПлатежа;
ТекстОшибки = "";
// Проверим валидность введенного кода
Если СтрДлина(СокрП(УИН)) <> 20 И СтрДлина(СокрП(УИН)) <> 25 И СтрДлина(СокрП(УИН)) <> 1 И СтрДлина(СокрП(УИН)) <> 0
И СтрДлина(СокрЛП(УИН)) <> 4 Тогда
ТекстОшибки = НСтр("ru = 'УИН должен состоять из 20 или 25 знаков.
|В случае отсутствия Уникального идентификатора начисления указывается значение ""0"".'");
ИначеЕсли ПустаяСтрока(СокрЛП(СтрЗаменить(УИН, "0", ""))) И СтрДлина(СокрП(УИН)) <> 0 И СокрП(УИН) <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Все знаки УИН не могут одновременно принимать значение ""0""'");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки,
Объект,
"ИдентификаторПлатежа",
,
Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьДатуПериода(Объект, ОшибкаЗаполненияПериода)
ПоказательПериода = Объект.ПоказательПериода;
ПозицияПериода = СтрНайти(СокрЛП(ПоказательПериода),".");
ПозицияГода = СтрНайти(Сред(СокрЛП(ПоказательПериода), ПозицияПериода + 1), ".") + ПозицияПериода;
ДатаПериода = Лев(СокрЛП(ПоказательПериода), ПозицияПериода - 1);
НомерПериода = Сред(СокрЛП(ПоказательПериода), ПозицияПериода + 1, ПозицияГода - ПозицияПериода - 1);
ГодПериода = Сред(СокрЛП(ПоказательПериода), ПозицияГода + 1);
Попытка
ДатаПоказателя = Дата(Число(ГодПериода), Число(НомерПериода), Число(ДатаПериода));
Исключение
ОшибкаЗаполненияПериода = Истина;
КонецПопытки
КонецПроцедуры
Процедура ПроверитьЗаполнениеКодТаможенногоОргана(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверки)
КодТаможенногоОргана = Объект.ПоказательПериода;
ТекстОшибки = "";
Если ПараметрыПроверки.ПрименениеПриказа58н
И ПустаяСтрока(КодТаможенногоОргана) Тогда
ТекстОшибки = НСтр("ru = 'Код таможенного органа должен состоять из 8 знаков или ""0""'");
ИначеЕсли ПустаяСтрока(КодТаможенногоОргана) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Код таможенного органа"" не заполнено'");
ИначеЕсли ПустаяСтрока(СокрЛП(СтрЗаменить(КодТаможенногоОргана, "0", "")))
И СокрЛП(КодТаможенногоОргана) <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Все знаки Кода таможенного органа не могут одновременно принимать значение ""0""'");
ИначеЕсли СтрДлина(СокрП(КодТаможенногоОргана)) <> 8
И СокрП(КодТаможенногоОргана) <> "0" Тогда
ТекстОшибки = НСтр("ru = 'Код таможенного органа должен состоять из 8 знаков'");
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПоказателяНомера(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверки)
ВидПлатежа = Объект.ВидПеречисленияВБюджет;
ПоказательНомера = Объект.ПоказательНомера;
ПоказательОснования = Объект.ПоказательОснования;
ТекстОшибки = "";
Если ВидПлатежа = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж
И Не ПараметрыПроверки.ПрименениеПриказа58н Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПоказательНомера) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Номер документа"" не заполнено'");
ИначеЕсли ПараметрыПроверки.ПрименениеПриказа58н
И ПоказательНомера = "0"
И (Объект.СтатусСоставителя = "05" Или Объект.СтатусСоставителя = "19" Или Объект.СтатусСоставителя = "28" Или Объект.СтатусСоставителя = "32")
И СокрП(Объект.ИННПлательщика) = "0"
И (СокрП(Объект.ИдентификаторПлатежа) = "0" Или Объект.ИдентификаторПлатежа = "") Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Номер документа"" должно быть заполнено конкретным значением и не ""0""'");
ИначеЕсли ПараметрыПроверки.ПрименениеПриказа58н
И ПоказательОснования <> "0" И ПоказательОснования <> "00"
И ПоказательНомера = "0" Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Номер документа"" должно быть заполнено конкретным значением и не ""0""'");
КонецЕсли;
Если Не ПустаяСтрока(ТекстОшибки) Тогда
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПоказателяДаты(Объект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения, ПараметрыПроверки)
ВидПлатежа = Объект.ВидПеречисленияВБюджет;
ПоказательДаты = Объект.ПоказательДаты;
ПоказательОснования = Объект.ПоказательОснования;
ТекстОшибки = "";
Если ВидПлатежа = Перечисления.ВидыПеречисленийВБюджет.ИнойПлатеж
И Не ПараметрыПроверки.ПрименениеПриказа58н Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПоказательДаты) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Дата документа"" не заполнено'");
ИначеЕсли ПараметрыПроверки.ПрименениеПриказа58н
И ПоказательОснования = "00"
И ПоказательДаты <> "00" Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Дата документа"" должно быть заполнено значением ""00""'");
КонецЕсли;
Если Не ПустаяСтрока(ТекстОшибки) Тогда
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстОшибки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,, "НадписьРеквизитыПлатежаВБюджет",, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Процедура ПроверитьРеестрКонтрагентовПоРасшифровкеПлатежа(
ДокументОбъект, Отказ, ФлагОбменСБанками, ОшибкиЗаполнения)
РеестрПолучателей = ДокументОбъект.БанковскиеСчетаСпискаКонтрагентов.Выгрузить(, "НомерСтроки, Контрагент, Сумма");
ТаблицаПолучателей = РеестрПолучателей.Скопировать();
ТаблицаПолучателей.Свернуть("Контрагент", "Сумма");
РасшифровкаПлатежа = ДокументОбъект.РасшифровкаПлатежа.Выгрузить(, "Контрагент, Сумма");
РасшифровкаПлатежа.Свернуть("Контрагент", "Сумма");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| СписокКонтрагентов.Контрагент КАК Контрагент,
| СписокКонтрагентов.Сумма КАК Сумма
|ПОМЕСТИТЬ ТаблицаПолучателей
|ИЗ
| &СписокКонтрагентов КАК СписокКонтрагентов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасшифровкаПлатежа.Контрагент КАК Контрагент,
| РасшифровкаПлатежа.Сумма КАК Сумма
|ПОМЕСТИТЬ ТаблицаРасшифровка
|ИЗ
| &РасшифровкаПлатежа КАК РасшифровкаПлатежа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаПолучателей.Контрагент КАК КонтрагентПолучатель,
| ТаблицаПолучателей.Сумма КАК СуммаПолучатель,
| ТаблицаРасшифровка.Контрагент КАК КонтрагентРасшифровка,
| ТаблицаРасшифровка.Сумма КАК СуммаРасшифровка
|ПОМЕСТИТЬ ПолнаяТаблица
|ИЗ
| ТаблицаРасшифровка КАК ТаблицаРасшифровка
| ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаПолучателей КАК ТаблицаПолучателей
| ПО ТаблицаРасшифровка.Контрагент = ТаблицаПолучателей.Контрагент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПолнаяТаблица.КонтрагентПолучатель КАК Контрагент,
| ИСТИНА КАК ОтсутствуетПоставщик,
| ЛОЖЬ КАК ОтсутствуетПолучатель,
| ЛОЖЬ КАК ОшибкаСуммы
|ИЗ
| ПолнаяТаблица КАК ПолнаяТаблица
|ГДЕ
| ПолнаяТаблица.КонтрагентРасшифровка ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПолнаяТаблица.КонтрагентРасшифровка,
| ЛОЖЬ,
| ИСТИНА,
| ЛОЖЬ
|ИЗ
| ПолнаяТаблица КАК ПолнаяТаблица
|ГДЕ
| ПолнаяТаблица.КонтрагентПолучатель ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПолнаяТаблица.КонтрагентПолучатель,
| ЛОЖЬ,
| ЛОЖЬ,
| ИСТИНА
|ИЗ
| ПолнаяТаблица КАК ПолнаяТаблица
|ГДЕ
| ПолнаяТаблица.КонтрагентПолучатель = ПолнаяТаблица.КонтрагентРасшифровка
| И ПолнаяТаблица.СуммаПолучатель <> ПолнаяТаблица.СуммаРасшифровка";
Запрос.УстановитьПараметр("СписокКонтрагентов", ТаблицаПолучателей);
Запрос.УстановитьПараметр("РасшифровкаПлатежа", РасшифровкаПлатежа);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц);
Пока РезультатЗапроса.Следующий() Цикл
ТекстыСообщений = Новый Массив;
Если РезультатЗапроса.ОтсутствуетПоставщик Тогда
ПараметрыОтбора = Новый Структура("Контрагент", РезультатЗапроса.Контрагент);
СписокСтрок = РеестрПолучателей.НайтиСтроки(ПараметрыОтбора);
Для Каждого СтрокаОшибки Из СписокСтрок Цикл
ТекстШаблон = НСтр("ru = 'В строке %1 введен получатель, которого нет в расшифровке платежа'");
ТекстСообщения = СтрШаблон(ТекстШаблон, СтрокаОшибки.НомерСтроки);
ТекстыСообщений.Добавить(ТекстСообщения);
КонецЦикла;
ИначеЕсли РезультатЗапроса.ОтсутствуетПолучатель Тогда
ТекстШаблон = НСтр("ru = 'В реестре отсутствует получатель ""%1""'");
ТекстСообщения = СтрШаблон(ТекстШаблон, РезультатЗапроса.Контрагент);
ТекстыСообщений.Добавить(ТекстСообщения);
ИначеЕсли РезультатЗапроса.ОшибкаСуммы Тогда
ТекстШаблон = НСтр("ru = 'Сумма в реестре по получателю ""%1"" отличается от расшифровки платежа'");
ТекстСообщения = СтрШаблон(ТекстШаблон, РезультатЗапроса.Контрагент);
ТекстыСообщений.Добавить(ТекстСообщения);
КонецЕсли;
Если ТекстыСообщений.Количество() <> 0 Тогда
Для Каждого ТекущееСообщение Из ТекстыСообщений Цикл
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекущееСообщение);
Иначе
ОбщегоНазначения.СообщитьПользователю(
ТекущееСообщение, ДокументОбъект, "БанковскиеСчетаСпискаКонтрагентов", , Отказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Таблица банковских счетов списка контрагентов.
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица банковских счетов списка контрагентов:
// * Контрагент - СправочникСсылка.Контрагенты - контрагент.
// * БанковскийСчетКонтрагента - СправочникСсылка.БанковскиеСчетаКонтрагентов - банковский счет контрагента.
// * Сумма - Число - сумма списания.
//
Функция НоваяТаблицаБанковскихСчетовСпискаКонтрагентов()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Таблица.Колонки.Добавить("БанковскийСчетКонтрагента", Новый ОписаниеТипов("СправочникСсылка.БанковскиеСчетаКонтрагентов"));
Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Возврат Таблица;
КонецФункции
// Выполняет проверку реестра контрагентов.
//
// Параметры:
// ДокументОбъект - ДокументОбъект - документ, в котором выполняется проверка.
// Ошибка - Булево - признак ошибки при проверке.
// ФлагОбменСБанками - Булево - признак выполнения процедуры в момент выполнения обработки обмена с банком.
// ОшибкиЗаполнения - Строка - строка с ошибками.
//
Процедура ПроверитьРеестрКонтрагентов(ДокументОбъект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения)
Если Не ДокументОбъект.СписокКонтрагентов Тогда
Возврат;
КонецЕсли;
ПроверитьРеестрКонтрагентовПоРасшифровкеПлатежа(ДокументОбъект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения);
КонецПроцедуры
// Выполняет проверку объектов расчета с самозанятыми.
//
// Параметры:
// ДокументОбъект - ДокументОбъект - документ, в котором выполняется проверка.
// Ошибка - Булево - признак ошибки при проверке.
// ФлагОбменСБанками - Булево - признак выполнения процедуры в момент выполнения обработки обмена с банком.
// ОшибкиЗаполнения - Строка - строка с ошибками.
//
Процедура ПроверитьОбъектыРасчетовССамозанятыми(ДокументОбъект, Ошибка, ФлагОбменСБанками, ОшибкиЗаполнения)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаРасшифровка.НомерСтроки КАК НомерСтроки,
| ТаблицаРасшифровка.ОбъектРасчетов КАК ОбъектРасчетов
|ПОМЕСТИТЬ РасшифровкаПлатежа
|ИЗ
| &ТаблицаРасшифровка КАК ТаблицаРасшифровка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасшифровкаПлатежа.НомерСтроки КАК НомерСтроки,
| ОбъектыРасчетов.ТипСсылки КАК ТипСсылки
|ИЗ
| РасшифровкаПлатежа КАК РасшифровкаПлатежа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО РасшифровкаПлатежа.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
|ГДЕ
| ТИПЗНАЧЕНИЯ(ОбъектыРасчетов.Объект) В(&ТипыОбъектов)";
СписокОбъектов = Новый Массив;
СписокОбъектов.Добавить(Тип("ДокументСсылка.ОтчетКомиссионера"));
СписокОбъектов.Добавить(Тип("ДокументСсылка.АвансовыйОтчет"));
Запрос.УстановитьПараметр("ТипыОбъектов", СписокОбъектов);
Запрос.УстановитьПараметр("ТаблицаРасшифровка", ДокументОбъект.РасшифровкаПлатежа.Выгрузить());
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если Запрос.МенеджерВременныхТаблиц <> Неопределено Тогда
ОбщегоНазначенияУТ.УничтожитьВременныеТаблицы(Запрос.МенеджерВременныхТаблиц);
КонецЕсли;
Пока РезультатЗапроса.Следующий() Цикл
Если ДокументОбъект.РасшифровкаПлатежа.Количество() = 1
И Не ДокументОбъект.СписокКонтрагентов Тогда
ТекстШаблон = НСтр("ru = 'Введен недопустимый объект расчета с самозанятыми ""%1""'");
ТекстСообщения = СтрШаблон(ТекстШаблон, РезультатЗапроса.ТипСсылки);
Иначе
ТекстШаблон = НСтр("ru = 'В строке %1 введен недопустимый объект расчета с самозанятыми ""%2""'");
ТекстСообщения = СтрШаблон(ТекстШаблон, РезультатЗапроса.НомерСтроки, РезультатЗапроса.ТипСсылки);
КонецЕсли;
Поле = "РасшифровкаПлатежа[" + (РезультатЗапроса.НомерСтроки - 1) + "].ОбъектРасчетов";
Если ФлагОбменСБанками Тогда
ДобавитьОшибкуЗаполнения(ОшибкиЗаполнения, ТекстСообщения);
Иначе
ОбщегоНазначения.СообщитьПользователю(
ТекстСообщения, ДокументОбъект, Поле, , Ошибка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция КонтрагентИзТаблицы(Таблица, НомерСтроки, Приоритет)
Контрагент = Справочники.Контрагенты.ПустаяСсылка();
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("НомерСтроки", НомерСтроки);
ПараметрыОтбора.Вставить("Приоритет", Приоритет);
НайденноеЗначение = Таблица.НайтиСтроки(ПараметрыОтбора);
Если НайденноеЗначение.Количество() = 1 Тогда
Контрагент = НайденноеЗначение[0].Контрагент;
КонецЕсли;
Возврат Контрагент;
КонецФункции
#Область ВыплатыСамозанятым
Процедура ЗаполнитьЧекиСамозанятого(Ссылка, ТаблицаЧеков = Неопределено) Экспорт
Если ТаблицаЧеков = Неопределено Тогда
ТаблицаЧеков = НоваяТаблицаЧековСамозанятых();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ПрисоединенныеФайлы.Наименование КАК НомерЧека,
| ПрисоединенныеФайлы.СсылкаНаЧек КАК СсылкаНаЧек,
| ПрисоединенныеФайлы.Ссылка КАК ФайлЧека
|ИЗ
| &ПрисоединенныеФайлы КАК ПрисоединенныеФайлы
|ГДЕ
| ПрисоединенныеФайлы.ВладелецФайла = &Ссылка
| И ПрисоединенныеФайлы.ЭтоЧекСамозанятого
| И НЕ ПрисоединенныеФайлы.ПометкаУдаления";
СсылкаПрисоединенныхФайлов = РаботаСФайлами.НоваяСсылкаНаФайл(Ссылка);
ИмяДокумента = ОбщегоНазначения.ИмяТаблицыПоСсылке(СсылкаПрисоединенныхФайлов);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПрисоединенныеФайлы", ИмяДокумента);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Чек = ТаблицаЧеков.Добавить();
ЗаполнитьЗначенияСвойств(Чек, Выборка);
Чек.НомерЧека = СтрЗаменить(Чек.НомерЧека, "№", "");
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция НоваяТаблицаЧековСамозанятых()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("НомерЧека", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("СсылкаНаЧек", Новый ОписаниеТипов("Строка"));
ТипыФайлов = Новый Массив;
ТипыФайлов.Добавить(Тип("СправочникСсылка.ПриобретениеТоваровУслугПрисоединенныеФайлы"));
ТипыФайлов.Добавить(Тип("СправочникСсылка.ПриобретениеУслугПрочихАктивовПрисоединенныеФайлы"));
Таблица.Колонки.Добавить("ФайлЧека", Новый ОписаниеТипов(ТипыФайлов));
Возврат Таблица
КонецФункции
#КонецОбласти
Процедура ВывестиОшибкуПроверкиБанковскихРеквизитов(ДанныеБанка, Отказ, РеквизитыБанка, СвойстваСообщения, СвойстваДополнительногоСообщения = Неопределено)
ТекстЗаголовка = "";
Если ЗначениеЗаполнено(СвойстваДополнительногоСообщения) Тогда
ТекстЗаголовка = СвойстваДополнительногоСообщения.Текст;
КонецЕсли;
Для Каждого РеквизитБанка Из РеквизитыБанка Цикл
Если Не ЗначениеЗаполнено(ДанныеБанка[РеквизитБанка.Ключ]) Тогда
Если ТекстЗаголовка <> "" Тогда
ОбщегоНазначения.СообщитьПользователю(
ТекстЗаголовка, СвойстваДополнительногоСообщения.КлючДанных, СвойстваДополнительногоСообщения.Поле, , Отказ);
ТекстЗаголовка = "";
КонецЕсли;
ТекстОшибки = СтрШаблон(СвойстваСообщения.Текст, РеквизитБанка.Значение);
ОбщегоНазначения.СообщитьПользователю(
Символы.Таб + ТекстОшибки, СвойстваСообщения.КлючДанных, РеквизитБанка.Ключ, СвойстваСообщения.ПутьКДанным, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция НовыеПараметрыВыводаСообщения()
Результат = Новый Структура;
Результат.Вставить("Текст", "");
Результат.Вставить("Поле", "");
Результат.Вставить("КлючДанных", Неопределено);
Результат.Вставить("ПутьКДанным", "");
Возврат Результат;
КонецФункции
Процедура ИсключитьИзСпискаКонтрагентовЮрЛица(Список)
Если Список.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Контрагенты.Ссылка КАК Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо)
| И Контрагенты.Ссылка В (&Ссылка)";
Запрос.УстановитьПараметр("Ссылка", Список);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Список = Новый Массив;
Иначе
Список = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контрагент");
КонецЕсли;
КонецПроцедуры
Функция ЭтоИностранныйБанкРасчетов(СтранаБанка)
Результат = Истина;
Если Не ЗначениеЗаполнено(СтранаБанка)
Или СтранаБанка = Справочники.СтраныМира.Россия Тогда
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура УвеличитьНомерПлатежногоДокумента(Объект, ПараметрыНомера)
НовыйНомер = ПараметрыНомера.Номер + 1;
НомерДокумента = Формат(НовыйНомер, "ЧГ=0");
Пока СтрДлина(НомерДокумента) < ПараметрыНомера.Длина Цикл
НомерДокумента = "0" + НомерДокумента;
КонецЦикла;
НомерДокумента = ПараметрыНомера.Префикс + НомерДокумента;
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка);
Если МенеджерОбъекта.ЭтоУникальныйНомерДокумента(Объект.Дата, НомерДокумента) Тогда
Объект.Номер = НомерДокумента;
Иначе
ПараметрыНомера.Номер = НовыйНомер;
УвеличитьНомерПлатежногоДокумента(Объект, ПараметрыНомера);
КонецЕсли;
КонецПроцедуры
#Область РеквизитыПлательщика
Процедура ПреобразоватьПустойРеквизитПлательщика(ЭтоПеречислениеВБюджет, ЗначениеРеквизита)
Если ЗначениеРеквизита = "" И ЭтоПеречислениеВБюджет Тогда
ЗначениеРеквизита = "0";
ИначеЕсли ЗначениеРеквизита = "0" И Не ЭтоПеречислениеВБюджет Тогда
ЗначениеРеквизита = "";
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
//-- Локализация