#Область ПрограммныйИнтерфейс // Создает платежные документы, либо формирует данные заполнения для создания одного платежного документа. // // Параметры: // СтрокиГрафика - Массив - Ключи записей графика платежей // ТипДокумента - Строка - Тип создаваемых документов. Если не задан, будет определен автоматически. // // Возвращаемое значение: // Структура: // ОткрыватьФормуПомощника - Булево - Признак необходимости открытия формы помощника создания документов // ДокументКСозданию - Структура - Данные заполнения единственного документа // ДлительнаяОперация - Структура - Длительная операция создания нескольких документов // АдресСтрокГрафика - Строка - Адрес временного хранилища, в котором содержатся оплачиваемые строки графика. // Функция ОплатитьСтрокиГрафика(СтрокиГрафика, ТипДокумента) Экспорт //++ Локализация //-- Локализация Возврат Неопределено; КонецФункции // Формирует варианты наименования юридического лица в соответствии с его организационно-правовой формой. // // Параметры: // Наименование - Строка - Наименование юр. лица. // // Возвращаемое значение: // Структура - Наименование, РабочееНаименование, ПолноеНаименование. // Функция НаименованиеОрганизации(Знач Наименование) Экспорт Наименование = СокрЛП(Наименование); СтруктураНаименования = Новый Структура("Наименование, СокращенноеНаименование, ПолноеНаименование", Наименование, Наименование, Наименование); //++ Локализация Если УбратьИзНаименованияОрганизационнуюФорму(Наименование, НСтр("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" И Не ЭтоПеречислениеВБюджет Тогда ЗначениеРеквизита = ""; КонецЕсли; КонецПроцедуры #КонецОбласти #КонецОбласти //-- Локализация