//////////////////////////////////////////////////////////////////////////////// // Подсистема "Обмен с банками по зарплатным проектам". // //////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс // Возвращает данные документов для обмена с банком по зарплатным проектам. // // Параметры: // Документы - Массив из ОпределяемыйТип.ВедомостьВБанкЗарплатаКадры, // Массив из ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников, // Массив из ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников - // документы, по которым требуется получить данные. // ДатаПолученияДанных - Дата - дата формирования файла. // ПлатежныйДокумент - ДокументСсылка - платежный документ, в который входят ведомости. // // Возвращаемое значение: // - Соответствие: // * Ключ - ОпределяемыйТип.ВедомостьВБанкЗарплатаКадры, // ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников, // ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников - // документ, данные по которому возвращаются. // * Значение - Структура - данные документа. // - Неопределено - когда нет документов, по которым требуется получить данные. // Функция ДанныеДокументовДляОбменаСБанком(Документы, ДатаПолученияДанных, ПлатежныйДокумент = Неопределено) Экспорт Если Документы.Количество() = 0 Тогда Возврат Неопределено; КонецЕсли; ТипДокументов = ТипЗнч(Документы[0]); Если ЭтоВедомостьВБанк(Документы[0]) Тогда Возврат Документы.ВедомостьНаВыплатуЗарплатыВБанк.ДанныеВедомостиНаВыплатуЗарплатыВБанк(Документы, ДатаПолученияДанных, ПлатежныйДокумент); ИначеЕсли ТипДокументов = Тип("ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников") Тогда Возврат Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ДанныеОткрытияЛицевыхСчетов(Документы, ДатаПолученияДанных); ИначеЕсли ТипДокументов = Тип("ДокументСсылка.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников") Тогда Возврат Документы.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.ДанныеЗакрытияЛицевыхСчетов(Документы, ДатаПолученияДанных); КонецЕсли; Возврат Неопределено КонецФункции // В зависимости от зарплатного проекта устанавливает доступность у соответствия способов зачисления выплат. // // Параметры: // СпособыЗачисления - см. НовоеСоответствиеСпособовЗачисления(), // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты. // Процедура УстановитьДоступностьСпособовЗачисленияПоЗарплатномуПроекту(СпособыЗачисления, ЗарплатныйПроект) Экспорт Если не ЗначениеЗаполнено(ЗарплатныйПроект) Тогда Возврат КонецЕсли; ЗарплатныйПроектДляПеречисленийНаКартыМир = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗарплатныйПроект, "ДляПеречисленийНаКартыМир"); Если ЗарплатныйПроектДляПеречисленийНаКартыМир Тогда СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоЛицевомуСчету] = Ложь; СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоНомеруКарты] = Истина; СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоНомеруТелефона] = Ложь; СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоСНИЛС] = Ложь; Иначе СоответствиеФорматов = СоответствиеФорматовФайла(); ФорматФайлаЗарплатногоПроекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗарплатныйПроект, "ФорматФайла"); ФорматФайла = ?(СоответствиеФорматов[ФорматФайлаЗарплатногоПроекта] = Неопределено, 0, СоответствиеФорматов[ФорматФайлаЗарплатногоПроекта]); СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоЛицевомуСчету] = Истина; Если ФорматФайла > 3.6 Тогда СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоНомеруКарты] = Истина; СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоНомеруТелефона] = Истина; СпособыЗачисления[Перечисления.СпособыЗачисленияВыплат.ПоСНИЛС] = Истина; КонецЕсли; КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамВнутренний.УстановитьДоступностьСпособовЗачисленияПоЗарплатномуПроекту(СпособыЗачисления, ЗарплатныйПроект); КонецПроцедуры // Возвращает новое соответствие со способами зачисления выплат // // Возвращаемое значение: // - Соответствие: // * Ключ - ПеречислениеСсылка.СпособыЗачисленияВыплат. // * Значение - Булево - доступность способа зачисления. // Функция НовоеСоответствиеСпособовЗачисления() Экспорт СоответствиеСпособовЗачисления = Новый Соответствие; Для Каждого СпособЗачисления Из Перечисления.СпособыЗачисленияВыплат Цикл СоответствиеСпособовЗачисления.Вставить(СпособЗачисления, Ложь); КонецЦикла; Возврат СоответствиеСпособовЗачисления; КонецФункции #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс #Область Свойства // См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств. Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт УправлениеСвойствамиБЗК.ЗарегистрироватьНаборСвойств(Наборы, "d42dbf3f-9802-11e9-80cd-4cedfb43b11a", Метаданные.Документы.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников); УправлениеСвойствамиБЗК.ЗарегистрироватьНаборСвойств(Наборы, "d42dbf1a-9802-11e9-80cd-4cedfb43b11a", Метаданные.Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников); УправлениеСвойствамиБЗК.ЗарегистрироватьНаборСвойств(Наборы, "c091b4ce-9802-11e9-80cd-4cedfb43b11a", Метаданные.Документы.ПодтверждениеЗачисленияЗарплаты); УправлениеСвойствамиБЗК.ЗарегистрироватьНаборСвойств(Наборы, "d42dbf57-9802-11e9-80cd-4cedfb43b11a", Метаданные.Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников); УправлениеСвойствамиБЗК.ЗарегистрироватьНаборСвойств(Наборы, "d42dbeea-9802-11e9-80cd-4cedfb43b11a", Метаданные.Справочники.ЗарплатныеПроекты); КонецПроцедуры #КонецОбласти #Область УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт Списки.Вставить(Метаданные.Справочники.ЗарплатныеПроекты, Истина); Списки.Вставить(Метаданные.Документы.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников, Истина); Списки.Вставить(Метаданные.Справочники.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников, Истина); Списки.Вставить(Метаданные.Справочники.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.Документы.ПодтверждениеЗачисленияЗарплаты, Истина); Списки.Вставить(Метаданные.Справочники.ПодтверждениеЗачисленияЗарплатыПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников, Истина); Списки.Вставить(Метаданные.Справочники.ПодтверждениеОткрытияЛицевыхСчетовСотрудниковПрисоединенныеФайлы, Истина); Списки.Вставить(Метаданные.ЖурналыДокументов.ДокументыОбменаСБанкамиПоЗарплатнымПроектам, Истина); Списки.Вставить(Метаданные.РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам, Истина); Списки.Вставить(Метаданные.РегистрыСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников, Истина); Списки.Вставить(Метаданные.РегистрыСведений.СостоянияДокументовЗачисленияЗарплаты, Истина); Списки.Вставить(Метаданные.РегистрыСведений.СостоянияДокументовОткрытияЛицевыхСчетов, Истина); КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных. Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт Описание = Описание + " |Справочник.ЗарплатныеПроекты.Чтение.Организации |Справочник.ЗарплатныеПроекты.Изменение.Организации |Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Чтение.ГруппыФизическихЛиц |Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Чтение.Организации |Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Изменение.ГруппыФизическихЛиц |Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Изменение.Организации |Справочник.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.ГруппыФизическихЛиц |Справочник.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.Организации |Справочник.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.ГруппыФизическихЛиц |Справочник.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.Организации |Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Чтение.ГруппыФизическихЛиц |Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Чтение.Организации |Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Изменение.ГруппыФизическихЛиц |Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Изменение.Организации |Справочник.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.ГруппыФизическихЛиц |Справочник.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.Организации |Справочник.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.ГруппыФизическихЛиц |Справочник.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.Организации |Документ.ПодтверждениеЗачисленияЗарплаты.Чтение.ГруппыФизическихЛиц |Документ.ПодтверждениеЗачисленияЗарплаты.Чтение.Организации |Документ.ПодтверждениеЗачисленияЗарплаты.Изменение.ГруппыФизическихЛиц |Документ.ПодтверждениеЗачисленияЗарплаты.Изменение.Организации |Справочник.ПодтверждениеЗачисленияЗарплатыПрисоединенныеФайлы.Чтение.ГруппыФизическихЛиц |Справочник.ПодтверждениеЗачисленияЗарплатыПрисоединенныеФайлы.Чтение.Организации |Справочник.ПодтверждениеЗачисленияЗарплатыПрисоединенныеФайлы.Изменение.ГруппыФизическихЛиц |Справочник.ПодтверждениеЗачисленияЗарплатыПрисоединенныеФайлы.Изменение.Организации |Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Чтение.ГруппыФизическихЛиц |Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Чтение.Организации |Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Изменение.ГруппыФизическихЛиц |Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Изменение.Организации |Справочник.ПодтверждениеОткрытияЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.ГруппыФизическихЛиц |Справочник.ПодтверждениеОткрытияЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Чтение.Организации |Справочник.ПодтверждениеОткрытияЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.ГруппыФизическихЛиц |Справочник.ПодтверждениеОткрытияЛицевыхСчетовСотрудниковПрисоединенныеФайлы.Изменение.Организации |ЖурналДокументов.ДокументыОбменаСБанкамиПоЗарплатнымПроектам.Чтение.Организации |РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Чтение.ГруппыФизическихЛиц |РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Чтение.Организации |РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Изменение.ГруппыФизическихЛиц |РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Изменение.Организации |РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Чтение.ГруппыФизическихЛиц |РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Чтение.Организации |РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Изменение.ГруппыФизическихЛиц |РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Изменение.Организации |РегистрСведений.СостоянияДокументовЗачисленияЗарплаты.Чтение.Организации |РегистрСведений.СостоянияДокументовЗачисленияЗарплаты.Изменение.Организации |РегистрСведений.СостоянияДокументовОткрытияЛицевыхСчетов.Чтение.Организации |РегистрСведений.СостоянияДокументовОткрытияЛицевыхСчетов.Изменение.Организации"; КонецПроцедуры #КонецОбласти #Область ПодключаемыеКоманды // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт Вид = ВидыПодключаемыхКоманд.Добавить(); Вид.Имя = "ВыгрузкаФайловОбменаСБанком"; Вид.ИмяПодменю = "ПодменюВыгрузкаФайловОбменаСБанком"; Вид.Картинка = БиблиотекаКартинок.ВыгрузитьФайлСертификата; Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; Вид = ВидыПодключаемыхКоманд.Добавить(); Вид.Имя = "ЗагрузкаФайловОбменаСБанками"; Вид.ИмяПодменю = "ПодменюЗагрузкаФайловОбменаСБанком"; Вид.Картинка = БиблиотекаКартинок.ЗагрузитьФайлСертификата; Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; КонецПроцедуры // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт Если Не (ПравоДоступа("Чтение", Метаданные.Справочники.ЗарплатныеПроекты) И (ИсточникиПоЗарплатнымПроектам(Источники) Или ДополнительныеИсточникиДляВыгрузкиФайлов(Источники))) Тогда Возврат; КонецЕсли; Команда = Команды.Добавить(); Команда.Вид = "ВыгрузкаФайловОбменаСБанком"; Команда.Идентификатор = "ВыгрузитьФайлОбменаСБанком"; Команда.Представление = НСтр("ru = 'Выгрузить файл'"); Команда.Важность = "Обычное"; Команда.ОтображениеКнопки = ОтображениеКнопки.КартинкаИТекст; Команда.Картинка = БиблиотекаКартинок.ВыгрузитьФайлСертификата; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыДокументовВыгружаемыхВБанк()); Команда.ФункциональныеОпции = "ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам"; Команда.ИзменяетВыбранныеОбъекты = Ложь; Команда.РежимЗаписи = "Записывать"; Команда.Обработчик = "ОбменСБанкамиПоЗарплатнымПроектамКлиент.ВыгрузитьФайлОбменаСБанком"; Команда.МножественныйВыбор = Истина; Команда.ЕстьУсловияВидимости = Истина; Команда = Команды.Добавить(); Команда.Вид = "ЗагрузкаФайловОбменаСБанками"; Команда.Идентификатор = "ЗагрузитьФайлОбменаСБанком"; Команда.Представление = НСтр("ru = 'Загрузить подтверждения банка'"); Команда.Важность = "Обычное"; Команда.ОтображениеКнопки = ОтображениеКнопки.КартинкаИТекст; Команда.Картинка = БиблиотекаКартинок.ЗагрузитьФайлСертификата; Команда.ТипПараметра = Новый ОписаниеТипов(ТипыДокументовЗагружаемыхИзБанка()); Команда.ФункциональныеОпции = "ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам"; Команда.ИзменяетВыбранныеОбъекты = Ложь; Команда.РежимЗаписи = "Записывать"; Команда.Обработчик = "ОбменСБанкамиПоЗарплатнымПроектамКлиент.ЗагрузитьФайлОбменаСБанком"; Команда.МножественныйВыбор = Истина; Команда.Назначение = "ДляСписка"; КонецПроцедуры #КонецОбласти // Для методов служебного API использование не контролируем // АПК:581-выкл // АПК:299-выкл // Возвращает признак использования электронного обмена информацией с банком по зарплатному проекту. // // Параметры: // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект. // // Возвращаемое значение: // Булево - Истина, если по зарплатному проекту ведется обмен электронными документами с банком // Функция ИспользоватьЭОИСБанком(ЗарплатныйПроект) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ | ЗарплатныеПроекты.ИспользоватьЭлектронныйДокументооборотСБанком КАК ИспользоватьЭОИСБанком |ИЗ | Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты |ГДЕ | ЗарплатныеПроекты.Ссылка = &ЗарплатныйПроект"; Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Возврат Выборка.ИспользоватьЭОИСБанком; КонецЕсли; Возврат Ложь; КонецФункции Функция ИспользоватьТиповойЭОИСБанком(ЗарплатныйПроект) Экспорт ИспользоватьТиповойОбмен = Истина; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ПриОпределенииИспользованияТиповогоЭОИСБанком(ЗарплатныйПроект, ИспользоватьТиповойОбмен); Возврат ИспользоватьТиповойОбмен; КонецФункции // Возвращает первый зарплатный проект по организации. // // Параметры: // Организация - СправочникСсылка.Организации // ПолучитьЕслиЕдинственный - Булево - проверять, чтобы зарплатный проект был единственным в организации. // Если зарплатный проект не единственный, будет возвращена пустая ссылка. // // Возвращаемое значение: // СправочникСсылка.ЗарплатныеПроекты - зарплатный проект организации. // Если для организации нет зарплатного проекта, то возвращается пустая ссылка. // Функция ЗарплатныйПроектПоОрганизации(Организация, ПолучитьЕслиЕдинственный = Ложь) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("Организация", Организация); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КОЛИЧЕСТВО(ЗарплатныеПроекты.Ссылка) КАК Количество |ПОМЕСТИТЬ ВТЗарплатныеПроекты |ИЗ | Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты |ГДЕ | ЗарплатныеПроекты.Организация = &Организация | И НЕ ЗарплатныеПроекты.ВАрхиве | И НЕ ЗарплатныеПроекты.ПометкаУдаления |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ЗарплатныеПроекты.Ссылка КАК ЗарплатныйПроект, | ВТЗарплатныеПроекты.Количество КАК Количество |ИЗ | Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗарплатныеПроекты КАК ВТЗарплатныеПроекты | ПО (ИСТИНА) |ГДЕ | ЗарплатныеПроекты.Организация = &Организация"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Если ПолучитьЕслиЕдинственный Тогда Если Выборка.Количество = 1 Тогда Возврат Выборка.ЗарплатныйПроект; Иначе Возврат Справочники.ЗарплатныеПроекты.ПустаяСсылка(); КонецЕсли; Иначе Возврат Выборка.ЗарплатныйПроект; КонецЕсли; КонецЕсли; Возврат Справочники.ЗарплатныеПроекты.ПустаяСсылка(); КонецФункции // Устанавливает константу использования электронного обмена с банками по зарплатным проектам. // Использование электронного обмена с банками включается, если используется расчет зарплаты // и есть хотя бы один зарплатный проект, для которого используется ЭОИ. // // Параметры: // ИспользоватьНачислениеЗарплаты - Булево, Неопределено // Процедура УстановитьИспользованиеЭлектронногоОбменаСБанками(ИспользоватьНачислениеЗарплаты = Неопределено) Экспорт Если ИспользоватьНачислениеЗарплаты = Неопределено Тогда ИспользоватьНачислениеЗарплаты = Константы.ИспользоватьНачислениеЗарплаты.Получить(); КонецЕсли; УстановитьПривилегированныйРежим(Истина); ИспользованиеЭлектронногоОбменаСБанками = Ложь; Если ИспользоватьНачислениеЗарплаты Тогда Запрос = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК Поле1 |ИЗ | Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты |ГДЕ | ЗарплатныеПроекты.ИспользоватьЭлектронныйДокументооборотСБанком | И НЕ ЗарплатныеПроекты.ПометкаУдаления | И НЕ ЗарплатныеПроекты.ВАрхиве"); ИспользованиеЭлектронногоОбменаСБанками = Не Запрос.Выполнить().Пустой(); КонецЕсли; ТекущееИспользование = Константы.ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам.Получить(); Если ТекущееИспользование <> ИспользованиеЭлектронногоОбменаСБанками Тогда Константы.ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам.Установить(ИспользованиеЭлектронногоОбменаСБанками); КонецЕсли; УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры // Определяет, возможна ли передача в банк отдельных ведомостей, // или же ведомость отправляется в банк только в составе платежного документа. // // Возвращаемое значение: // Булево - Истина, если ведомость может быть самостоятельно отправлена в банк, // Ложь, если ведомость отправляется в банк только в составе платежного документа // Функция РазрешенаОтправкаОтдельнойВедомости() Экспорт Возврат ОбменСБанкамиПоЗарплатнымПроектамПовтИсп.РазрешенаОтправкаОтдельнойВедомости(); КонецФункции #Область ВедомостиВБанк Функция ЭтоВедомостьВБанк(ДокументЗачисленияЗарплаты) Экспорт Возврат Метаданные.ОпределяемыеТипы.ВедомостьВБанкЗарплатаКадры. Тип.СодержитТип(ТипЗнч(ДокументЗачисленияЗарплаты.Ссылка)) КонецФункции Процедура ВедомостьНаВыплатуЗарплатыВБанкПередЗаписью(ВедомостьОбъект) Экспорт Если Не ЗначениеЗаполнено(ВедомостьОбъект.ЗарплатныйПроект) Тогда Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(ВедомостьОбъект.НомерРеестра) Тогда СтруктураВедомостьОбъект = Новый Структура; СтруктураВедомостьОбъект.Вставить("Дата", ВедомостьОбъект.Дата); СтруктураВедомостьОбъект.Вставить("Номер", ВедомостьОбъект.Номер); СтруктураВедомостьОбъект.Вставить("Организация", ВедомостьОбъект.Организация); СтруктураВедомостьОбъект.Вставить("НомерРеестра", ВедомостьОбъект.НомерРеестра); СоответствиеДокументов = Новый Соответствие; СоответствиеДокументов.Вставить(ВедомостьОбъект, СтруктураВедомостьОбъект); ГодыВыгрузки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Год(ВедомостьОбъект.Дата)); НомераРеестров = НомераРеестровДокументов(СоответствиеДокументов, ГодыВыгрузки, Неопределено); ДанныеРеестра = НомераРеестров.Получить(ВедомостьОбъект); Если ДанныеРеестра <> Неопределено Тогда ВедомостьОбъект.НомерРеестра = ДанныеРеестра.НомерРеестра; КонецЕсли; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ведомость", ВедомостьОбъект.Ссылка); Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанк.Организация КАК Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект КАК ЗарплатныйПроект, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | СУММА(ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате) КАК КВыплате, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанк.Проведен |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВедомостьНаВыплатуЗарплатыВБанк КАК ВедомостьНаВыплатуЗарплатыВБанк | ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = ВедомостьНаВыплатуЗарплатыВБанк.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники | ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник = Сотрудники.Ссылка |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = &Ведомость | |СГРУППИРОВАТЬ ПО | ВедомостьНаВыплатуЗарплатыВБанк.Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект, | Сотрудники.ФизическоеЛицо, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанк.Проведен"; ВедомостьОбъект.ДополнительныеСвойства.Вставить("ДанныеВедомостиПередЗаписью", Запрос.Выполнить().Выгрузить()); КонецПроцедуры Процедура ВедомостьНаВыплатуЗарплатыВБанкПриЗаписи(ВедомостьОбъект, Отказ) Экспорт Если Не ЗначениеЗаполнено(ВедомостьОбъект.ЗарплатныйПроект) Или Не ВедомостьОбъект.ДополнительныеСвойства.Свойство("ДанныеВедомостиПередЗаписью") Тогда ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(ВедомостьОбъект.Ссылка, Отказ); Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ведомость", ВедомостьОбъект.Ссылка); Запрос.УстановитьПараметр("ДанныеВедомостиПередЗаписью", ВедомостьОбъект.ДополнительныеСвойства.ДанныеВедомостиПередЗаписью); Запрос.Текст = "ВЫБРАТЬ | ДанныеВедомостиПередЗаписью.Организация КАК Организация, | ДанныеВедомостиПередЗаписью.ЗарплатныйПроект КАК ЗарплатныйПроект, | ДанныеВедомостиПередЗаписью.ФизическоеЛицо КАК ФизическоеЛицо, | ДанныеВедомостиПередЗаписью.КВыплате КАК КВыплате, | ДанныеВедомостиПередЗаписью.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ДанныеВедомостиПередЗаписью.Проведен КАК Проведен |ПОМЕСТИТЬ ВТДанныеВедомостиПередЗаписью |ИЗ | &ДанныеВедомостиПередЗаписью КАК ДанныеВедомостиПередЗаписью |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанк.Организация КАК Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект КАК ЗарплатныйПроект, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | СУММА(ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате) КАК КВыплате, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанк.Проведен КАК Проведен |ПОМЕСТИТЬ ВТДанныеВедомостиПриЗаписи |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВедомостьНаВыплатуЗарплатыВБанк КАК ВедомостьНаВыплатуЗарплатыВБанк | ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = ВедомостьНаВыплатуЗарплатыВБанк.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники | ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник = Сотрудники.Ссылка |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = &Ведомость | |СГРУППИРОВАТЬ ПО | ВедомостьНаВыплатуЗарплатыВБанк.Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект, | Сотрудники.ФизическоеЛицо, | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета, | ВедомостьНаВыплатуЗарплатыВБанк.Проведен |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | 1 КАК Поле |ИЗ | ВТДанныеВедомостиПередЗаписью КАК ДанныеВедомостиПередЗаписью | ПОЛНОЕ СОЕДИНЕНИЕ ВТДанныеВедомостиПриЗаписи КАК ДанныеВедомостиПриЗаписи | ПО ДанныеВедомостиПередЗаписью.Организация = ДанныеВедомостиПриЗаписи.Организация | И ДанныеВедомостиПередЗаписью.ЗарплатныйПроект = ДанныеВедомостиПриЗаписи.ЗарплатныйПроект | И ДанныеВедомостиПередЗаписью.ФизическоеЛицо = ДанныеВедомостиПриЗаписи.ФизическоеЛицо | И ДанныеВедомостиПередЗаписью.КВыплате = ДанныеВедомостиПриЗаписи.КВыплате | И ДанныеВедомостиПередЗаписью.НомерЛицевогоСчета = ДанныеВедомостиПриЗаписи.НомерЛицевогоСчета | И ДанныеВедомостиПередЗаписью.Проведен = ДанныеВедомостиПриЗаписи.Проведен |ГДЕ | (ДанныеВедомостиПередЗаписью.ФизическоеЛицо ЕСТЬ NULL | ИЛИ ДанныеВедомостиПриЗаписи.ФизическоеЛицо ЕСТЬ NULL )"; Если Не Запрос.Выполнить().Пустой() Тогда Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанк.Ссылка КАК Ведомость, | ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент КАК ПлатежныйДокумент |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк КАК ВедомостьНаВыплатуЗарплатыВБанк | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлатежныеДокументыПеречисленияЗарплаты КАК ПлатежныеДокументыПеречисленияЗарплаты | ПО ВедомостьНаВыплатуЗарплатыВБанк.Ссылка = ПлатежныеДокументыПеречисленияЗарплаты.Ведомость |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанк.Ссылка = &Ведомость"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда ДанныеРеестра = Неопределено; Если Не ПустаяСтрока(ВедомостьОбъект.НомерРеестра) Тогда ДанныеРеестра = Новый Структура("Год, НомерРеестра", Год(ВедомостьОбъект.Дата), ВедомостьОбъект.НомерРеестра); КонецЕсли; ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(ВедомостьОбъект.Ссылка, Отказ, , ДанныеРеестра); Иначе Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ДанныеРеестра = Неопределено; МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента.Реквизиты.Найти("НомерРеестра") <> Неопределено Тогда ДанныеПлатежногоДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Выборка.ПлатежныйДокумент, "Дата, НомерРеестра"); Если Не ПустаяСтрока(ДанныеПлатежногоДокумента.НомерРеестра) Тогда ДанныеРеестра = Новый Структура("Год, НомерРеестра", Год(ДанныеПлатежногоДокумента.Дата), ДанныеПлатежногоДокумента.НомерРеестра); КонецЕсли; КонецЕсли; ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(Выборка.ПлатежныйДокумент, Отказ, , ДанныеРеестра); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ЛицевыеСчета // Возвращает структуру, описывающую временную таблицу отборов физических лиц. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц // ИмяВременнойТаблицыОтборов - Строка - имя временной таблицы в менеджере временных таблиц. // ИмяПоляФизическоеЛицо - Строка - имя поля временной таблицы, содержащего ссылку на физическое лицо. // ИмяПоляПериод - Строка - имя поля временной таблицу, содержащее период, // на который предполагается получить лицевые счета. // ДатаПолученияДанных - Дата, Неопределено // Возвращаемое значение: // Структура: // * ИмяВременнойТаблицыОтборов // * ИмяПоляФизическоеЛицо // * ИмяПоляПериод // Функция ОписаниеВременнойТаблицыДляСоздатьВТЛицевыеСчетаСотрудников(МенеджерВременныхТаблиц, ИмяВременнойТаблицыОтборов, ИмяПоляФизическоеЛицо = "ФизическоеЛицо", ИмяПоляПериод = "Период", ДатаПолученияДанных = Неопределено) Экспорт ОписаниеВременнойТаблицы = Новый Структура; ОписаниеВременнойТаблицы.Вставить("МенеджерВременныхТаблиц", МенеджерВременныхТаблиц); Если ДатаПолученияДанных = Неопределено Тогда ОписаниеВременнойТаблицы.Вставить("ИмяВременнойТаблицыОтборов", ИмяВременнойТаблицыОтборов); ОписаниеВременнойТаблицы.Вставить("ИмяПоляФизическоеЛицо", ИмяПоляФизическоеЛицо); ОписаниеВременнойТаблицы.Вставить("ИмяПоляПериод", ИмяПоляПериод); ИначеЕсли МенеджерВременныхТаблиц <> Неопределено Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.Текст = "ВЫБРАТЬ | &ДатаПолученияДанных КАК Период, | Сотрудники.* |ПОМЕСТИТЬ ВТСписокСотрудниковДляПолученияЛицевыхСчетовСотрудников |ИЗ | ВТСотрудники КАК Сотрудники"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТСотрудники", ИмяВременнойТаблицыОтборов); Запрос.Текст = СтрЗаменить(Запрос.Текст, "Сотрудники.ФизическоеЛицо", "Сотрудники." + ИмяПоляФизическоеЛицо); Запрос.Выполнить(); ОписаниеВременнойТаблицы.Вставить("ИмяВременнойТаблицыОтборов", "ВТСписокСотрудниковДляПолученияЛицевыхСчетовСотрудников"); ОписаниеВременнойТаблицы.Вставить("ИмяПоляФизическоеЛицо", "ФизическоеЛицо"); ОписаниеВременнойТаблицы.Вставить("ИмяПоляПериод", "Период"); КонецЕсли; Возврат ОписаниеВременнойТаблицы; КонецФункции Функция ЗапросВТЛицевыеСчетаСотрудниковПоВременнойТаблице(ТолькоРазрешенные, ОписаниеВременнойТаблицы, ПоляОтбораПериодическихДанных, ИмяВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам = "ВТЛицевыеСчетаСотрудников") Экспорт Запрос = ЗапросВТСведенияОЗарплатныхПроектах(ТолькоРазрешенные, ОписаниеВременнойТаблицы, ПоляОтбораПериодическихДанных); ТекстЗапросаУникальныхЗаписей = "ВЫБРАТЬ | СведенияОЗарплатныхПроектах.Период КАК Период, | МАКСИМУМ(СведенияОЗарплатныхПроектах.ДатаОткрытияЛицевогоСчета) КАК ПериодЗаписи, | СведенияОЗарплатныхПроектах.Организация.ГоловнаяОрганизация КАК ГоловнаяОрганизация, | СведенияОЗарплатныхПроектах.ФизическоеЛицо КАК ФизическоеЛицо |ПОМЕСТИТЬ ВТМаксимальныеПериодыЛицевыхСчетов |ИЗ | ВТСведенияОЗарплатныхПроектах КАК СведенияОЗарплатныхПроектах | |СГРУППИРОВАТЬ ПО | СведенияОЗарплатныхПроектах.Период, | СведенияОЗарплатныхПроектах.Организация.ГоловнаяОрганизация, | СведенияОЗарплатныхПроектах.ФизическоеЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | СведенияОЗарплатныхПроектах.Период КАК Период, | СведенияОЗарплатныхПроектах.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета, | СведенияОЗарплатныхПроектах.Организация КАК Организация, | СведенияОЗарплатныхПроектах.ФизическоеЛицо КАК ФизическоеЛицо, | СведенияОЗарплатныхПроектах.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | СведенияОЗарплатныхПроектах.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЗарплатныеПроекты.Банк КАК Банк, | СведенияОЗарплатныхПроектах.ДокументОснование КАК ДокументОснование |ПОМЕСТИТЬ ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам |{ВЫБРАТЬ | Период КАК ПериодПоЗарплатнымПроектам, | ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчетаПоЗарплатнымПроектам, | Организация КАК ОрганизацияПоЗарплатнымПроектам, | ФизическоеЛицо КАК ФизическоеЛицоПоЗарплатнымПроектам, | НомерЛицевогоСчета КАК НомерЛицевогоСчетаПоЗарплатнымПроектам, | ЗарплатныйПроект КАК ЗарплатныйПроектПоЗарплатнымПроектам, | Банк.* КАК БанкПоЗарплатнымПроектам, | ДокументОснование КАК ДокументОснованиеПоЗарплатнымПроектам} |ИЗ | ВТМаксимальныеПериодыЛицевыхСчетов КАК МаксимальныеПериодыЛицевыхСчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСведенияОЗарплатныхПроектах КАК СведенияОЗарплатныхПроектах | ПО МаксимальныеПериодыЛицевыхСчетов.Период = СведенияОЗарплатныхПроектах.Период | И МаксимальныеПериодыЛицевыхСчетов.ПериодЗаписи = СведенияОЗарплатныхПроектах.ДатаОткрытияЛицевогоСчета | И МаксимальныеПериодыЛицевыхСчетов.ГоловнаяОрганизация = СведенияОЗарплатныхПроектах.Организация.ГоловнаяОрганизация | И МаксимальныеПериодыЛицевыхСчетов.ФизическоеЛицо = СведенияОЗарплатныхПроектах.ФизическоеЛицо | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты | ПО (СведенияОЗарплатныхПроектах.ЗарплатныйПроект = ЗарплатныеПроекты.Ссылка) |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТСведенияОЗарплатныхПроектах |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТМаксимальныеПериодыЛицевыхСчетов"; ТекстЗапросаУникальныхЗаписей = СтрЗаменить(ТекстЗапросаУникальныхЗаписей, "ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам", ИмяВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам); Запрос.Текст = Запрос.Текст + ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов() + ТекстЗапросаУникальныхЗаписей; Возврат Запрос; КонецФункции // Формирует временную таблицу ВТЛицевыеСчетаСотрудников сотрудников с номерами лицевых счетов // по переданной организации и временной таблице, в которой находятся сотрудники. // Создает в МенеджерВременныхТаблиц временную таблицу с именем ВТЛицевыеСчетаСотрудников и полями: // МесяцОткрытия // Сотрудник // ФизическоеЛицо // ЗарплатныйПроект // Банк // НомерЛицевогоСчета // Документ - Документ-подтверждение из банка, при получении которого был зарегистрирован номер лицевого счета // Если не указан, то номер лицевого счета введен вручную. // // Параметры: // ОписаниеВременнойТаблицы - см. ОписаниеВременнойТаблицыДляСоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников. // ТолькоРазрешенные - Булево // Организация - СправочникСсылка.Организации - организация, по которой нужно получить лицевые счета. // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // - Неопределено - по всем зарплатным проектам // // Процедура СоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников(ОписаниеВременнойТаблицы, ТолькоРазрешенные, Организация, ЗарплатныйПроект = Неопределено) Экспорт Отбор = Новый Массив; ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отбор, "Организация", "=", Организация); Если ЗарплатныйПроект <> Неопределено Тогда ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отбор, "ЗарплатныйПроект", "=", ЗарплатныйПроект); КонецЕсли; ПоляОтбораПериодическихДанных = Новый Структура; ПоляОтбораПериодическихДанных.Вставить("ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам", Отбор); ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников( ОписаниеВременнойТаблицы.МенеджерВременныхТаблиц, ОписаниеВременнойТаблицы.ИмяВременнойТаблицыОтборов); КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, ТолькоРазрешенные, "ЗарплатныйПроектДатаОткрытияЛицевогоСчета, ЗарплатныйПроект, НомерЛицевогоСчета, ЗарплатныйПроектРегистратор", ПоляОтбораПериодическихДанных); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = ОписаниеВременнойТаблицы.МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | НАЧАЛОПЕРИОДА(КадровыеДанныеСотрудников.ЗарплатныйПроектДатаОткрытияЛицевогоСчета, МЕСЯЦ) КАК МесяцОткрытия, | КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник, | КадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо, | КадровыеДанныеСотрудников.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЗарплатныеПроекты.Банк КАК Банк, | КадровыеДанныеСотрудников.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | КадровыеДанныеСотрудников.ЗарплатныйПроектРегистратор КАК ДокументОснование |ПОМЕСТИТЬ ВТЛицевыеСчетаСотрудников |ИЗ | ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты | ПО КадровыеДанныеСотрудников.ЗарплатныйПроект = ЗарплатныеПроекты.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудников"; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); КонецЕсли; Запрос.Выполнить(); КонецПроцедуры // Возвращает таблицу значений с сотрудниками и их лицевыми счетами. // // Параметры: // СписокСотрудников - Массив из СправочникСсылка.Сотрудники - сотрудники, по которым нужно получить лицевые счета. // ТолькоРазрешенные - Булево // Организация - СправочникСсылка.Организации - организация, по которой нужно получить лицевые счета. // ДатаПолученияДанных - Дата - дата на которую необходимо получить данные о номерах лицевых счетов // - Неопределено - на текущую дату // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // - Неопределено - по всем зарплатным проектам // // Возвращаемое значение: // ТаблицаЗначений: // * МесяцОткрытия // * Сотрудник // * ФизическоеЛицо // * ЗарплатныйПроект // * Банк // * НомерЛицевогоСчета // * Документ // Функция ЛицевыеСчетаСотрудников(СписокСотрудников, ТолькоРазрешенные, Организация, ДатаПолученияДанных = Неопределено, ЗарплатныйПроект = Неопределено) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; СоздатьВТЛицевыеСчетаСотрудников(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, Организация, ДатаПолученияДанных, ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | ВТЛицевыеСчетаСотрудников КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам"; Возврат Запрос.Выполнить().Выгрузить(); КонецФункции // Возвращает таблицу значений с сотрудниками и их способами выплат. // // Параметры: // СписокСотрудников - Массив из СправочникСсылка.Сотрудники - сотрудники, по которым нужно получить способы выплат. // ТолькоРазрешенные - Булево // Организация - СправочникСсылка.Организации - организация, по которой нужно получить способы выплат. // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // - Неопределено - по всем зарплатным проектам // // Возвращаемое значение: // ТаблицаЗначений: // * МесяцОткрытия - Дата // * Сотрудник - СправочникСсылка.Сотрудники // * ФизическоеЛицо - СправочникСсылка.ФизическиеЛица // * ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты // * НомерЛицевогоСчета - Строка // * СпособВыплаты - ПеречислениеСсылка.СпособыЗачисленияВыплат // * БанковскийСчет - ОпределяемыйТип.БанковскиеСчетаФизическихЛиц // * БанковскаяКарта - СправочникСсылка.БанковскиеКартыКонтрагентов // * Телефон - СправочникСсылка.ВидыКонтактнойИнформации // Функция СпособыВыплатыСотрудников(СписокСотрудников, ТолькоРазрешенные, Организация, ЗарплатныйПроект = Неопределено) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; СоздатьВТСпособыВыплатСотрудников(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, Организация, ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | ВТСпособыВыплатСотрудников КАК СпособыВыплатСотрудниковПоЗарплатнымПроектам"; Возврат Запрос.Выполнить().Выгрузить(); КонецФункции // Возвращает таблицу значений с физическими лицами и их способами выплат в указанной организации. // // Параметры: // СписокФизическихЛиц - Массив из СправочникСсылка.ФизическиеЛица // ТолькоРазрешенные - Булево // Организация - СправочникСсылка.Организации - организация, по которой нужно получить лицевые счета. // ДатаПолученияДанных - Дата - дата на которую необходимо получить данные о номерах лицевых счетов // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // // Возвращаемое значение: // ТаблицаЗначений: // * ФизическоеЛицо - СправочникСсылка.ФизическиеЛица // * НомерЛицевогоСчета - Строка // * СпособВыплаты - ПеречислениеСсылка.СпособыЗачисленияВыплат // * БанковскийСчет - ОпределяемыйТип.БанковскиеСчетаФизическихЛиц // * БанковскаяКарта - СправочникСсылка.БанковскиеКартыКонтрагентов // * Телефон - СправочникСсылка.ВидыКонтактнойИнформации // Функция СпособыВыплатыФизическихЛиц(СписокФизическихЛиц, ТолькоРазрешенные, Организация, ДатаПолученияДанных, ЗарплатныйПроект) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ФизическиеЛица", СписокФизическихЛиц); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЛицевыеСчета.ФизическоеЛицо КАК ФизическоеЛицо, | ЛицевыеСчета.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ЛицевыеСчета.СпособЗачисления КАК СпособЗачисления, | ЛицевыеСчета.БанковскийСчет КАК БанковскийСчет, | ЛицевыеСчета.БанковскаяКарта КАК БанковскаяКарта, | ЛицевыеСчета.Телефон КАК Телефон |ИЗ | РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчета |ГДЕ | ЛицевыеСчета.ДатаОткрытияЛицевогоСчета <= &ДатаПолученияДанных | И ЛицевыеСчета.Организация = &Организация | И ЛицевыеСчета.ЗарплатныйПроект = &ЗарплатныйПроект | И ЛицевыеСчета.ФизическоеЛицо В(&ФизическиеЛица)"; ЗарплатаКадрыОбщиеНаборыДанных.УстановитьВыборкуТолькоРазрешенныхДанных(Запрос.Текст, ТолькоРазрешенные); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции // Возвращает таблицу значений с физическими лицами и их лицевыми счетами в указанной организации. // // Параметры: // СписокФизическихЛиц - Массив из СправочникСсылка.ФизическиеЛица // ТолькоРазрешенные - Булево // Организация - СправочникСсылка.Организации - организация, по которой нужно получить лицевые счета. // ДатаПолученияДанных - Дата - дата на которую необходимо получить данные о номерах лицевых счетов // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // // Возвращаемое значение: // ТаблицаЗначений: // * ФизическоеЛицо // * НомерЛицевогоСчета // Функция ЛицевыеСчетаФизическихЛиц(СписокФизическихЛиц, ТолькоРазрешенные, Организация, ДатаПолученияДанных, ЗарплатныйПроект) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ФизическиеЛица", СписокФизическихЛиц); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЛицевыеСчета.ФизическоеЛицо КАК ФизическоеЛицо, | ЛицевыеСчета.НомерЛицевогоСчета КАК НомерЛицевогоСчета |ИЗ | РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчета |ГДЕ | ЛицевыеСчета.ДатаОткрытияЛицевогоСчета <= &ДатаПолученияДанных | И ЛицевыеСчета.Организация = &Организация | И ЛицевыеСчета.ЗарплатныйПроект = &ЗарплатныйПроект | И ЛицевыеСчета.ФизическоеЛицо В(&ФизическиеЛица)"; ЗарплатаКадрыОбщиеНаборыДанных.УстановитьВыборкуТолькоРазрешенныхДанных(Запрос.Текст, ТолькоРазрешенные); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции Процедура СохранитьСведенияОЛицевомСчетеСотрудника(Форма, ДополнительныеСвойства) Экспорт НаборЗаписей = РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо); Если ЗначениеЗаполнено(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета) Или ЗначениеЗаполнено(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СпособЗачисления) Тогда НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект); НаборЗаписей.Отбор.Организация.Установить(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Организация); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда Запись = НаборЗаписей[0]; Иначе Запись = НаборЗаписей.Добавить(); КонецЕсли; ЗаполнитьЗначенияСвойств(Запись, Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам); Иначе НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамПрежняя.ЗарплатныйПроект); НаборЗаписей.Отбор.Организация.Установить(Форма.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектамПрежняя.Организация); КонецЕсли; Если ДополнительныеСвойства <> Неопределено Тогда Для Каждого ОписаниеСвойства Из ДополнительныеСвойства Цикл НаборЗаписей.ДополнительныеСвойства.Вставить(ОписаниеСвойства.Ключ, ОписаниеСвойства.Значение); КонецЦикла; КонецЕсли; НаборЗаписей.Записать(); КонецПроцедуры #КонецОбласти // Возвращает номера реестров для документов. // // Параметры: // СоответствиеДокументов - Соответствие // ГодыВыгрузки - Массив // РеквизитыПлатежногоДокумента - Структура // * ПлатежныйДокумент - ДокументСсылка // * Номер - Число // * Дата - Дата // * Организация - СправочникСсылка.Организации // // Возвращаемое значение: // Соответствие - номера реестров документов. // Функция НомераРеестровДокументов(СоответствиеДокументов, ГодыВыгрузки, РеквизитыПлатежногоДокумента) Экспорт УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ГодыВыгрузки", ГодыВыгрузки); Запрос.Текст = "ВЫБРАТЬ | СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты, | СостоянияДокументовЗачисленияЗарплаты.Год, | СостоянияДокументовЗачисленияЗарплаты.НомерРеестра |ПОМЕСТИТЬ ВТВыгруженныеДокументы |ИЗ | РегистрСведений.СостоянияДокументовЗачисленияЗарплаты КАК СостоянияДокументовЗачисленияЗарплаты |ГДЕ | СостоянияДокументовЗачисленияЗарплаты.Год В(&ГодыВыгрузки)"; Запрос.Выполнить(); ШаблонТекстаЗапроса = "ВЫБРАТЬ | Ведомость.Организация КАК Организация, | ВыгруженныеДокументы.ДокументЗачисленияЗарплаты КАК ДокументЗачисленияЗарплаты, | ВыгруженныеДокументы.Год КАК Год, | ВыгруженныеДокументы.НомерРеестра КАК НомерРеестра |ИЗ | ВТВыгруженныеДокументы КАК ВыгруженныеДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ИмяТаблицы КАК Ведомость | ПО ВыгруженныеДокументы.ДокументЗачисленияЗарплаты = Ведомость.Ссылка"; ТекстыЗапросов = Новый Массив; Для Каждого ТипВедомости Из Метаданные.ОпределяемыеТипы.ВедомостьВБанкЗарплатаКадры.Тип.Типы() Цикл ТекстыЗапросов.Добавить( СтрЗаменить( ШаблонТекстаЗапроса, "#ИмяТаблицы", Метаданные.НайтиПоТипу(ТипВедомости).ПолноеИмя())); КонецЦикла; СхемаЗапроса = Новый СхемаЗапроса(); СхемаЗапроса.УстановитьТекстЗапроса( СтрСоединить( ТекстыЗапросов, " | |ОБЪЕДИНИТЬ ВСЕ | |")); СхемаЗапроса.ПакетЗапросов[0].ТаблицаДляПомещения = "ВТДанныеВедомостей"; Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса(); Запрос.Выполнить(); Запрос.Текст = "ВЫБРАТЬ | РеквизитыПлатежныхДокументовПеречисленияЗарплаты.Организация, | ВыгруженныеДокументы.ДокументЗачисленияЗарплаты, | ВыгруженныеДокументы.Год, | ВыгруженныеДокументы.НомерРеестра |ПОМЕСТИТЬ ВТДокументыПоОрганизациям |ИЗ | ВТВыгруженныеДокументы КАК ВыгруженныеДокументы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РеквизитыПлатежныхДокументовПеречисленияЗарплаты КАК РеквизитыПлатежныхДокументовПеречисленияЗарплаты | ПО ВыгруженныеДокументы.ДокументЗачисленияЗарплаты = РеквизитыПлатежныхДокументовПеречисленияЗарплаты.ПлатежныйДокумент | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВыгруженныеДокументы.Организация, | ВыгруженныеДокументы.ДокументЗачисленияЗарплаты, | ВыгруженныеДокументы.Год, | ВыгруженныеДокументы.НомерРеестра |ИЗ | ВТДанныеВедомостей КАК ВыгруженныеДокументы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДокументыПоОрганизациям.Организация, | ДокументыПоОрганизациям.Год, | МАКСИМУМ(ДокументыПоОрганизациям.НомерРеестра) КАК НомерРеестра |ИЗ | ВТДокументыПоОрганизациям КАК ДокументыПоОрганизациям | |СГРУППИРОВАТЬ ПО | ДокументыПоОрганизациям.Организация, | ДокументыПоОрганизациям.Год"; НомераРеестровОрганизаций = Запрос.Выполнить().Выгрузить(); УстановитьПривилегированныйРежим(Ложь); НомераРеестров = Новый Соответствие; Если РеквизитыПлатежногоДокумента = Неопределено Тогда Для Каждого СтрокаСоответствия Из СоответствиеДокументов Цикл ДанныеДокумента = СтрокаСоответствия.Значение; Год = Год(ДанныеДокумента.Дата); ДанныеРеестра = Новый Структура("Год, НомерРеестра", Год, Неопределено); Если Не ЗначениеЗаполнено(ДанныеДокумента.НомерРеестра) Тогда ДанныеДокумента.Вставить("Год", Год); СтруктураПоиска = Новый Структура("Организация, Год", ДанныеДокумента.Организация, Год); НайденныеСтроки = НомераРеестровОрганизаций.НайтиСтроки(СтруктураПоиска); Если НайденныеСтроки.Количество() = 0 Тогда ДанныеДокумента.Вставить("НомерРеестра", СтрокаВЧисло(ДанныеДокумента.Номер)); Если ДанныеДокумента.НомерРеестра = 0 Тогда ДанныеДокумента.НомерРеестра = 1; КонецЕсли; ЗаполнитьЗначенияСвойств(НомераРеестровОрганизаций.Добавить(), ДанныеДокумента); Иначе ДанныеДокумента.Вставить("НомерРеестра", НайденныеСтроки[0].НомерРеестра + 1); НайденныеСтроки[0].НомерРеестра = ДанныеДокумента.НомерРеестра; КонецЕсли; КонецЕсли; ДанныеРеестра.НомерРеестра = ДанныеДокумента.НомерРеестра; НомераРеестров.Вставить(СтрокаСоответствия.Ключ, ДанныеРеестра); КонецЦикла; Иначе Год = Год(РеквизитыПлатежногоДокумента.Дата); ДанныеРеестра = Новый Структура("Год, НомерРеестра", Год, Неопределено); ДанныеРеестра.НомерРеестра = НомерРеестраПлатежногоДокумента(РеквизитыПлатежногоДокумента.ПлатежныйДокумент); Если Не ЗначениеЗаполнено(ДанныеРеестра.НомерРеестра) Тогда РеквизитыПлатежногоДокумента.Вставить("Год", Год); СтруктураПоиска = Новый Структура("Организация, Год", РеквизитыПлатежногоДокумента.Организация, Год); НайденныеСтроки = НомераРеестровОрганизаций.НайтиСтроки(СтруктураПоиска); Если НайденныеСтроки.Количество() = 0 Тогда РеквизитыПлатежногоДокумента.Вставить("НомерРеестра", СтрокаВЧисло(РеквизитыПлатежногоДокумента.Номер)); Если РеквизитыПлатежногоДокумента.НомерРеестра = 0 Тогда РеквизитыПлатежногоДокумента.НомерРеестра = 1; КонецЕсли; ЗаполнитьЗначенияСвойств(НомераРеестровОрганизаций.Добавить(), РеквизитыПлатежногоДокумента); Иначе РеквизитыПлатежногоДокумента.Вставить("НомерРеестра", НайденныеСтроки[0].НомерРеестра + 1); НайденныеСтроки[0].НомерРеестра = РеквизитыПлатежногоДокумента.НомерРеестра; КонецЕсли; ДанныеРеестра.НомерРеестра = РеквизитыПлатежногоДокумента.НомерРеестра; КонецЕсли; НомераРеестров.Вставить(РеквизитыПлатежногоДокумента.ПлатежныйДокумент, ДанныеРеестра); КонецЕсли; Возврат НомераРеестров; КонецФункции // Формирует и прикрепляет файл обмена к документам с помощью подсистемы "Файлы". // // Параметры: // СтруктураПараметровДляФормированияФайла - Структура: // * МассивДокументов - Массив - ссылки на документы, по которым требуется сформировать файл. // * МассивОписанийФайлов - Массив - описания сформированных файлов. // Процедура ВыгрузитьФайлыОбменаСБанкомПоВедомости(СтруктураПараметровДляФормированияФайла) Экспорт Если Не СтруктураПараметровДляФормированияФайла.Свойство("СтруктураПараметровЭД") Тогда СтруктураПараметровДляФормированияФайла.Вставить("СтруктураПараметровЭД", Неопределено); КонецЕсли; Если Не СтруктураПараметровДляФормированияФайла.Свойство("ПлатежныйДокумент") Тогда СтруктураПараметровДляФормированияФайла.Вставить("ПлатежныйДокумент", Неопределено); КонецЕсли; Отказ = Ложь; Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивДокументов", СтруктураПараметровДляФормированияФайла.МассивДокументов); Запрос.УстановитьПараметр("ПлатежныйДокумент", СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент); ШаблонТекстаЗапроса = "ВЫБРАТЬ | ВедомостьВБанк.Ссылка КАК Ведомость, | ВедомостьВБанк.ЗарплатныйПроект КАК ЗарплатныйПроект, | ВедомостьВБанк.Проведен КАК Проведен, | ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент КАК ПлатежныйДокумент, | СостоянияДокументовЗачисленияЗарплаты.Состояние КАК Состояние |ИЗ | #ИмяТаблицы КАК ВедомостьВБанк | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлатежныеДокументыПеречисленияЗарплаты КАК ПлатежныеДокументыПеречисленияЗарплаты | ПО ВедомостьВБанк.Ссылка = ПлатежныеДокументыПеречисленияЗарплаты.Ведомость | И (ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент <> &ПлатежныйДокумент) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЗачисленияЗарплаты КАК СостоянияДокументовЗачисленияЗарплаты | ПО ВедомостьВБанк.Ссылка = СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты | И (СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоПолностью) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.НеЗачислено)) |ГДЕ | ВедомостьВБанк.Ссылка В(&МассивДокументов)"; ДокументСсылка = СтруктураПараметровДляФормированияФайла.МассивДокументов[0]; ИмяТаблицы = "Документ."+ДокументСсылка.Метаданные().Имя; ТекстЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "#ИмяТаблицы", ИмяТаблицы); Запрос.Текст = ТекстЗапроса; ЗарплатныйПроект = Неопределено; ВДокументахОдинЗарплатныйПроект = Истина; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Выборка.ПлатежныйДокумент) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 уже включена в %2'"), Выборка.Ведомость, Выборка.ПлатежныйДокумент); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.ПлатежныйДокумент, , , Отказ); КонецЕсли; Если ЗначениеЗаполнено(Выборка.Состояние) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'По документу %1 уже получено подтверждение о зачислении зарплаты'"), Выборка.Ведомость); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ведомость, , , Отказ); КонецЕсли; Если Не Выборка.Проведен Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Документ %1 не проведен.'"), Выборка.Ведомость); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ведомость,,, Отказ); КонецЕсли; Если ЗарплатныйПроект = Неопределено Тогда ЗарплатныйПроект = Выборка.ЗарплатныйПроект; ИначеЕсли ЗарплатныйПроект <> Выборка.ЗарплатныйПроект Тогда ВДокументахОдинЗарплатныйПроект = Ложь; КонецЕсли; Если НЕ ИспользоватьЭОИСБанком(Выборка.ЗарплатныйПроект) Тогда Если ЗначениеЗаполнено(Выборка.ЗарплатныйПроект) Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'По зарплатному проекту %1 не используется обмен электронными документами с банком.'"), Выборка.ЗарплатныйПроект); Иначе ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В документе %1 не выбран зарплатный проект.'"), Выборка.Ведомость); КонецЕсли; ОбщегоНазначения.СообщитьПользователю( ТекстСообщения, Выборка.ЗарплатныйПроект, "ИспользоватьЭлектронныйДокументооборотСБанком",,Отказ); КонецЕсли; КонецЦикла; Если СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент <> Неопределено Тогда Если НЕ СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент.Проведен Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Документ %1 не проведен.'"), СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент,,, Отказ); КонецЕсли; Если Не ВДокументахОдинЗарплатныйПроект Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В документе %1 присутствуют ведомости с разными зарплатными проектами. Файл по документу не сформирован.'"), СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.Ведомость,,, Отказ); КонецЕсли; КонецЕсли; Если Отказ Тогда Возврат; КонецЕсли; ВидОперации = "ВедомостьНаВыплатуЗарплатыВБанк"; ДатаПолученияДанных = ТекущаяДатаСеанса(); ДокументМенеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументСсылка); ДанныеДокументов = ДокументМенеджер.ДанныеВедомостиНаВыплатуЗарплатыВБанк(СтруктураПараметровДляФормированияФайла.МассивДокументов, ДатаПолученияДанных, СтруктураПараметровДляФормированияФайла.ПлатежныйДокумент); СтруктураПараметровДляФормированияФайла.Вставить("ВидОперации", ВидОперации); СтруктураПараметровДляФормированияФайла.Вставить("ДанныеДокументов", ДанныеДокументов); СтруктураПараметровДляФормированияФайла.Вставить("КорневыеСвойства", КорневыеСвойства(ВидОперации)); СтруктураПараметровДляФормированияФайла.Вставить("ОбязательныеПоляФайла", ОбязательныеПоляФайла(ВидОперации)); СтруктураПараметровДляФормированияФайла.Вставить("СоответствиеПреобразованияЗначений", СоответствиеПреобразованияЗначений(ВидОперации)); СтруктураПараметровДляФормированияФайла.Вставить("СоответствиеТипов", СоответствиеТипов(ВидОперации)); СоздатьФайлыДляОбменаСБанком(СтруктураПараметровДляФормированияФайла); КонецПроцедуры // Получает наименование файла по переданным параметрам. // // Параметры: // Ссылка - ДокументСсылка - документ, по которому формируется имя файла. // ОтделениеБанка - Строка - номер отделения, в котором открыты счета физических лиц, // на которые должны быть зачислены суммы, указанные в Реестре. // НомерДокумента - Число - порядковый номер Реестра. // ПризнакТипаСписка - признак типа списка // "z" - зачисление заработной платы, // "o" - открытие лицевых счетов, // "y" - результат зачисления заработной платы, // "n" - результат открытия лицевых счетов // "u" - закрытие лицевых счетов. // // Возвращаемое значение: // Строка - сформированное название файла. // Функция ИмяФайлаОбменаСБанкамиПоЗарплатнымПроектам(Ссылка, ОтделениеБанка, НомерДокумента, ПризнакТипаСписка) Экспорт ИмяФайла = СтрШаблон( "%1%2%3.xml", СтроковыеФункцииКлиентСервер.ДополнитьСтроку(ОтделениеБанка, 4), Прав(СтроковыеФункцииКлиентСервер.ДополнитьСтроку(НомерДокумента, 3), 3), ПризнакТипаСписка); ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьИмяФайлаОбменаСБанкамиПоЗарплатнымПроектам(ИмяФайла, Ссылка); Возврат ИмяФайла; КонецФункции #Область РаботаСФормами // Создает элементы формы для группы Подтверждение из банка // Открыть // Загрузить // Параметры: // Форма - ФормаКлиентскогоПриложения // Процедура ГруппаПодтверждениеИзБанкаДополнитьФорму(Форма) Экспорт МетаданныеДокумента = Форма.Объект.Ссылка.Метаданные(); ИспользоватьЭОИ = Ложь; ЕстьРеквизитЗарплатныйПроект = ОбщегоНазначения.ЕстьРеквизитОбъекта("ЗарплатныйПроект", МетаданныеДокумента); Если ЕстьРеквизитЗарплатныйПроект Тогда ИспользоватьЭОИ = ИспользоватьЭОИСБанком(Форма.Объект.ЗарплатныйПроект); Иначе МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента <> Неопределено И МетаданныеПлатежногоДокумента.ПолноеИмя() = МетаданныеДокумента.ПолноеИмя() Тогда ВедомостиПлатежногоДокумента = ВедомостиПлатежногоДокументаПеречисленияЗарплаты(Форма.Объект.Ссылка); Если ВедомостиПлатежногоДокумента.Количество() > 0 Тогда ЗарплатныйПроектПлатежногоДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВедомостиПлатежногоДокумента[0], "ЗарплатныйПроект"); ИспользоватьЭОИ = ИспользоватьЭОИСБанком(ЗарплатныйПроектПлатежногоДокумента); КонецЕсли; КонецЕсли; КонецЕсли; Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам") Или НЕ ИспользоватьЭОИ Тогда Возврат; КонецЕсли; ТипДокумента = ТипЗнч(Форма.Объект.Ссылка); ВыборПодтверждения = Новый Массив; Если Метаданные.Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Реквизиты.ПервичныйДокумент.Тип.СодержитТип(ТипДокумента) Тогда ВыборПодтверждения.Добавить( "ВЫБРАТЬ | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Ссылка КАК ДокументПодтверждение, | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.МоментВремени КАК МоментВремени |ИЗ | Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудников |ГДЕ | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПервичныйДокумент = &Ссылка | И ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Проведен"); КонецЕсли; Если Метаданные.Документы.ПодтверждениеЗачисленияЗарплаты.Реквизиты.ПервичныйДокумент.Тип.СодержитТип(ТипДокумента) Тогда ВыборПодтверждения.Добавить( "ВЫБРАТЬ | ПодтверждениеЗачисленияЗарплаты.Ссылка КАК ДокументПодтверждение, | ПодтверждениеЗачисленияЗарплаты.МоментВремени КАК МоментВремени |ИЗ | Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты |ГДЕ | ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент = &Ссылка | И ПодтверждениеЗачисленияЗарплаты.Проведен"); КонецЕсли; Если Метаданные.РегистрыСведений.ПлатежныеДокументыПеречисленияЗарплаты.Измерения.Ведомость.Тип.СодержитТип(ТипДокумента) Тогда ВыборПодтверждения.Добавить( "ВЫБРАТЬ | ПодтверждениеЗачисленияЗарплаты.Ссылка КАК ДокументПодтверждение, | ПодтверждениеЗачисленияЗарплаты.МоментВремени КАК МоментВремени |ИЗ | РегистрСведений.ПлатежныеДокументыПеречисленияЗарплаты КАК ПлатежныеДокументыПеречисленияЗарплаты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты | ПО ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент = ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент | И (ПодтверждениеЗачисленияЗарплаты.Проведен) |ГДЕ | ПлатежныеДокументыПеречисленияЗарплаты.Ведомость = &Ссылка"); КонецЕсли; Если ВыборПодтверждения.Количество() = 0 Тогда Возврат КонецЕсли; СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса( СтрСоединить( ВыборПодтверждения, " | |ОБЪЕДИНИТЬ ВСЕ | |")); СхемаЗапроса.ПакетЗапросов[0].Порядок.Добавить("МоментВремени").Направление = НаправлениеПорядкаСхемыЗапроса.ПоУбыванию; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Форма.Объект.Ссылка); Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса(); ТипДокументаПодтвержденияИзБанка = Неопределено; СписокДокументовПодтверждений = Новый СписокЗначений; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СписокДокументовПодтверждений.Добавить(Выборка.ДокументПодтверждение); ТипДокументаПодтвержденияИзБанка = Выборка.ДокументПодтверждение.Метаданные().ПолноеИмя(); КонецЦикла; Элементы = Форма.Элементы; ГруппаПодтверждениеИзБанка = Элементы.ГруппаПодтверждениеИзБанка; ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПодтверждениеИнфоНадпись", Новый ОписаниеТипов("Строка"))); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ДокументПодтверждениеИзБанка", Новый ОписаниеТипов("СписокЗначений"))); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ТипДокументаПодтвержденияИзБанка", ОбщегоНазначения.ОписаниеТипаСтрока(150))); МассивИменРеквизитовФормы = Новый Массив; ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(Форма, МассивИменРеквизитовФормы); ЗарплатаКадры.ИзменитьРеквизитыФормы(Форма, ДобавляемыеРеквизиты, МассивИменРеквизитовФормы); Форма.ТипДокументаПодтвержденияИзБанка = ТипДокументаПодтвержденияИзБанка; // Надпись Если Элементы.Найти("ПодтверждениеИнфоНадпись") = Неопределено Тогда Элемент = Элементы.Добавить("ПодтверждениеИнфоНадпись", Тип("ПолеФормы"), ГруппаПодтверждениеИзБанка); Элемент.ПутьКДанным = "ПодтверждениеИнфоНадпись"; Элемент.Вид = ВидПоляФормы.ПолеНадписи; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Элемент.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; Элемент.Высота = 1; Элемент.РастягиватьПоВертикали = Ложь; Элемент.АвтоМаксимальнаяШирина = Ложь; КонецЕсли; Если СписокДокументовПодтверждений.Количество() > 0 Тогда // Команда Открыть ИмяКоманды = "ОткрытьДокументПодтверждение"; Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); КомандаФормы.Заголовок = НСтр("ru = 'Подтверждения из банка'"); КомандаФормы.Действие = "Подключаемый_" + ИмяКоманды; КонецЕсли; Если Элементы.Найти(ИмяКоманды) = Неопределено Тогда Элемент = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодтверждениеИзБанка); Элемент.Вид = ВидКнопкиФормы.Гиперссылка; Элемент.ИмяКоманды = ИмяКоманды; КонецЕсли; Форма.ПодтверждениеИнфоНадпись = НСтр("ru = 'По документу получены подтверждения из банка, редактирование невозможно'"); Форма.ДокументПодтверждениеИзБанка = СписокДокументовПодтверждений; ЭлементЗагрузитьДокументПодтверждение = Элементы.Найти("ЗагрузитьДокументПодтверждение"); Если ЭлементЗагрузитьДокументПодтверждение <> Неопределено Тогда Элементы.Удалить(ЭлементЗагрузитьДокументПодтверждение); КонецЕсли; Иначе // Команда Загрузить ИмяКоманды = "ЗагрузитьДокументПодтверждение"; Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); КомандаФормы.Заголовок = НСтр("ru = 'Загрузить подтверждение из банка'"); КомандаФормы.Действие = "Подключаемый_" + ИмяКоманды; КонецЕсли; Если Элементы.Найти(ИмяКоманды) = Неопределено Тогда Элемент = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ГруппаПодтверждениеИзБанка); Элемент.Вид = ВидКнопкиФормы.Гиперссылка; Элемент.ИмяКоманды = ИмяКоманды; КонецЕсли; Форма.ПодтверждениеИнфоНадпись = НСтр("ru = 'По документу не получены подтверждения из банка'"); Форма.ДокументПодтверждениеИзБанка = Неопределено; ЭлементОткрытьДокументПодтверждение = Элементы.Найти("ОткрытьДокументПодтверждение"); Если ЭлементОткрытьДокументПодтверждение <> Неопределено Тогда Элементы.Удалить(ЭлементОткрытьДокументПодтверждение); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура КомандыОбменаДополнитьФормуРабочегоМеста(Форма) Экспорт КомандыОбменаВыгрузки = Новый Структура; КомандыОбменаВыгрузки.Вставить("ЗачислениеЗарплатыВыгрузить", Новый Массив); КомандыОбменаВыгрузки.Вставить("ОткрытиеЛицевыхСчетовВыгрузить", Новый Массив); КомандыОбменаВыгрузки.Вставить("ЗакрытиеЛицевыхСчетовВыгрузить", Новый Массив); КомандыОбменаВыгрузки.Вставить("ЗагрузитьПодтвержденияБанка", Новый Массив); КомандыОбменаОтправки = Новый Структура; КомандыОбменаОтправки.Вставить("ЗачислениеЗарплатыОтправитьВБанк", Новый Массив); КомандыОбменаОтправки.Вставить("ОткрытиеЛицевыхСчетовОтправитьВБанк", Новый Массив); КомандыОбменаОтправки.Вставить("ЗакрытиеЛицевыхСчетовОтправитьВБанк", Новый Массив); КомандыОбменаОтправки.Вставить("ЗачислениеЗарплатыПоказатьОтправленныйДокумент", Новый Массив); КомандыОбменаОтправки.Вставить("ОткрытиеЛицевыхСчетовПоказатьОтправленныйДокумент", Новый Массив); КомандыОбменаОтправки.Вставить("ВыполнитьСинхронизациюСБанком", Новый Массив); КомандыОбменаДополнитьФормуВедомостиВБанк(Форма, КомандыОбменаВыгрузки, КомандыОбменаОтправки); КонецПроцедуры Процедура КомандыОбменаДополнитьФормуВедомостиВБанк(Форма, КомандыОбменаВыгрузки = Неопределено, КомандыОбменаОтправки = Неопределено) Экспорт КомандыОбменаДополнитьФормуОбъекта(Форма, КомандыОбменаВыгрузки, КомандыОбменаОтправки); ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РазрешенаОтправкаОтдельнойВедомости", Новый ОписаниеТипов("Булево"))); МассивИменРеквизитовФормы = Новый Массив; ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(Форма, МассивИменРеквизитовФормы); ЗарплатаКадры.ИзменитьРеквизитыФормы(Форма, ДобавляемыеРеквизиты, МассивИменРеквизитовФормы); Форма.РазрешенаОтправкаОтдельнойВедомости = РазрешенаОтправкаОтдельнойВедомости(); КонецПроцедуры Процедура КомандыОбменаДополнитьФормуОбъекта(Форма, КомандыОбменаВыгрузки = Неопределено, КомандыОбменаОтправки = Неопределено) Экспорт Если КомандыОбменаВыгрузки = Неопределено Тогда КомандыОбменаВыгрузки = Новый Структура; КомандыОбменаВыгрузки.Вставить("ВыгрузитьФайлДляОбменаСБанком", Новый Массив); КомандыОбменаВыгрузки.Вставить("ЗагрузитьПодтвержденияБанка", Новый Массив); КонецЕсли; Если КомандыОбменаОтправки = Неопределено Тогда КомандыОбменаОтправки = Новый Структура; КомандыОбменаОтправки.Вставить("ОтправитьВБанк", Новый Массив); КомандыОбменаОтправки.Вставить("ВыполнитьСинхронизациюСБанком", Новый Массив); КомандыОбменаОтправки.Вставить("ПоказатьОтправленныйДокумент", Новый Массив); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗарплатныеПроекты.Ссылка КАК ЗарплатныйПроект |ИЗ | Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты |ГДЕ | НЕ ЗарплатныеПроекты.ВАрхиве | И НЕ ЗарплатныеПроекты.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ИспользуетсяПрямойОбмен = ИспользоватьПрямойЭОИСБанком(Выборка.ЗарплатныйПроект); Если ИспользуетсяПрямойОбмен Тогда КомандыОбменаТекущие = КомандыОбменаОтправки; Иначе КомандыОбменаТекущие = КомандыОбменаВыгрузки; КонецЕсли; Для Каждого ЭлементСтруктуры Из КомандыОбменаТекущие Цикл Если ЭлементСтруктуры.Значение.Найти(Выборка.ЗарплатныйПроект) = Неопределено Тогда ЭлементСтруктуры.Значение.Добавить(Выборка.ЗарплатныйПроект); КонецЕсли; КонецЦикла; КонецЦикла; КомандыОбмена = Новый Структура; ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(КомандыОбмена, КомандыОбменаОтправки, Ложь); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(КомандыОбмена, КомандыОбменаВыгрузки, Ложь); ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("КомандыОбмена", Новый ОписаниеТипов(Неопределено))); МассивИменРеквизитовФормы = Новый Массив; ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(Форма, МассивИменРеквизитовФормы); ЗарплатаКадры.ИзменитьРеквизитыФормы(Форма, ДобавляемыеРеквизиты, МассивИменРеквизитовФормы); Форма.КомандыОбмена = КомандыОбмена; КонецПроцедуры Процедура ЗаполнитьСписокСпособовЗачисления(СписокСпособовЗачисления, ЗарплатныйПроект) Экспорт СпособыЗачисления = Новый Массив; СпособыЗачисленияСоответствие = НовоеСоответствиеСпособовЗачисления(); УстановитьДоступностьСпособовЗачисленияПоЗарплатномуПроекту(СпособыЗачисленияСоответствие, ЗарплатныйПроект); Для Каждого СпособЗачисления Из СпособыЗачисленияСоответствие Цикл Если СпособЗачисления.Значение Тогда СпособыЗачисления.Добавить(СпособЗачисления.Ключ); КонецЕсли; КонецЦикла; СписокСпособовЗачисления.СписокВыбора.Очистить(); СписокСпособовЗачисления.СписокВыбора.ЗагрузитьЗначения(СпособыЗачисления); КонецПроцедуры #КонецОбласти #Область ПрямойОбменСБанками // Получает значение использования прямого обмена электронной информацией с банком по зарплатному проекту. // // Параметры: // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - ссылка на зарплатный проект. // // Возвращаемое значение: // Булево - Истина, если по зарплатному проекту ведется прямой обмен электронными документами с банком, // Функция ИспользоватьПрямойЭОИСБанком(ЗарплатныйПроект) Экспорт Если Не ЗначениеЗаполнено(ЗарплатныйПроект) Тогда Возврат Ложь; КонецЕсли; ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗарплатныйПроект, "Банк, ИспользоватьЭлектронныйДокументооборотСБанком"); ИспользоватьПрямойЭОИСБанком = ЗначенияРеквизитов.ИспользоватьЭлектронныйДокументооборотСБанком И ОбменСБанками.ВозможенПрямойОбменСБанком(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначенияРеквизитов.Банк, "Код"), 2) И ПолучитьФункциональнуюОпцию("ИспользоватьОбменСБанками"); Возврат ИспользоватьПрямойЭОИСБанком; КонецФункции // См. ОбменСБанкамиПереопределяемый.ПолучитьАктуальныеВидыЭД Процедура ЗаполнитьАктуальныеВидыЭД(Массив) Экспорт Массив.Добавить(Перечисления.ВидыЭДОбменСБанками.СписокНаОткрытиеСчетовПоЗарплатномуПроекту); Массив.Добавить(Перечисления.ВидыЭДОбменСБанками.СписокУволенныхСотрудников); Массив.Добавить(Перечисления.ВидыЭДОбменСБанками.СписокНаЗачислениеДенежныхСредствНаСчетаСотрудников); Массив.Добавить(Перечисления.ВидыЭДОбменСБанками.ПодтверждениеОткрытияСчетовПоЗарплатномуПроекту); Массив.Добавить(Перечисления.ВидыЭДОбменСБанками.ПодтверждениеЗачисленияДенежныхСредствНаСчетаСотрудников); КонецПроцедуры // См. ОбменСБанкамиПереопределяемый.ЗаполнитьПараметрыЭДПоИсточнику Процедура ЗаполнитьПараметрыЭДПоИсточнику(Источник, ПараметрыЭД) Экспорт ТипИсточника = ТипЗнч(Источник); ВидЭД = Неопределено; Если Метаданные.НайтиПоТипу(ТипИсточника) = Метаданные.Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников Тогда ВидЭД = Перечисления.ВидыЭДОбменСБанками.СписокНаОткрытиеСчетовПоЗарплатномуПроекту; ИначеЕсли ЭтоВедомостьВБанк(Источник) Тогда ВидЭД = Перечисления.ВидыЭДОбменСБанками.СписокНаЗачислениеДенежныхСредствНаСчетаСотрудников; ИначеЕсли Метаданные.НайтиПоТипу(ТипИсточника) = Метаданные.Документы.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников Тогда ВидЭД = Перечисления.ВидыЭДОбменСБанками.СписокУволенныхСотрудников; КонецЕсли; Если ЗначениеЗаполнено(ВидЭД) Тогда РеквизитыИсточника = Новый Структура("Организация, ЗарплатныйПроект"); Если ОбщегоНазначения.ЭтоСсылка(ТипИсточника) Тогда РеквизитыИсточника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник, РеквизитыИсточника) Иначе ЗаполнитьЗначенияСвойств(РеквизитыИсточника, Источник) КонецЕсли; Если ЗначениеЗаполнено(РеквизитыИсточника.Организация) И ЗначениеЗаполнено(РеквизитыИсточника.ЗарплатныйПроект) Тогда ПараметрыЭД.ВидЭД = ВидЭД; ПараметрыЭД.Направление = Перечисления.НаправленияЭДО.Исходящий; ПараметрыЭД.Организация = РеквизитыИсточника.Организация; ПараметрыЭД.Банк = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыИсточника.ЗарплатныйПроект, "Банк"); КонецЕсли; Иначе Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ВнешниеХозяйственныеОперации.ВзаиморасчетыССотрудникамиВХО") Тогда Модуль = ОбщегоНазначения.ОбщийМодуль("ВзаиморасчетыССотрудникамиВХО"); Модуль.ЗаполнитьПараметрыЭДПоИсточнику(Источник, ПараметрыЭД); КонецЕсли; КонецЕсли; КонецПроцедуры // См. ОбменСБанкамиПереопределяемый.ПриФормированииXMLФайла Процедура ПриФормированииXMLФайла(ОбъектДляВыгрузки, ИмяФайла, АдресФайла) Экспорт УникальныйИдентификаторXMLФайла = Новый УникальныйИдентификатор; АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификаторXMLФайла); СтруктураПараметров = Новый Структура("МассивДокументов, УникальныйИдентификаторФормы", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектДляВыгрузки), УникальныйИдентификаторXMLФайла); ОбменСБанкамиПоЗарплатнымПроектамВызовСервера.ВыгрузитьФайлыОбменаСБанком(СтруктураПараметров, АдресХранилища); МассивОписанийПередаваемыхФайлов = МассивОписанийПередаваемыхФайлов(АдресХранилища, УникальныйИдентификаторXMLФайла); Для Каждого Описание Из МассивОписанийПередаваемыхФайлов Цикл ИмяФайла = Описание.Имя; АдресФайла = Описание.Хранение; Прервать; КонецЦикла КонецПроцедуры // См. ОбменСБанкамиПереопределяемый.ЗаполнитьТабличныйДокумент Процедура ЗаполнитьТабличныйДокументПоПрямомуОбменуСБанками(ИмяФайла, ТабличныйДокумент) Экспорт ТабличныйДокумент = Неопределено; Пакет = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.ФорматОбменаСБанкамиПоЗарплатнымПроектам.ПространствоИмен); ТипОбъектаXDTO = Пакет.КорневыеСвойства[0].Тип; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяФайла); Попытка ОбъектXDTOВременный = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); ОбъектXDTO = ФабрикаXDTO.Создать(ТипОбъектаXDTO); ЗаполнитьОбъектXDTO(ОбъектXDTO, ОбъектXDTOВременный); Исключение ТекстСообщенияОбОшибке = НСтр("ru = 'Неверный формат файла.'"); ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке); Возврат; КонецПопытки; ЧтениеXML.Закрыть(); Если ОбъектXDTO.Получить("ЗачислениеЗарплаты") <> Неопределено Тогда // Печать списка перечислений ТабличныйДокумент = Документы.ВедомостьНаВыплатуЗарплатыВБанк.ПечатьСпискаПеречисленийПоXML( ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектXDTO), Новый СписокЗначений); ИначеЕсли ОбъектXDTO.Получить("ОткрытиеСчетов") <> Неопределено Тогда // Печать открытия л/с ТабличныйДокумент = Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ПечатьСпискаНаОткрытиеЛицевыхСчетовПоXML( ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектXDTO), Новый СписокЗначений); ИначеЕсли ОбъектXDTO.Получить("СписокУвольнений") <> Неопределено Тогда // Печать закрытия л/с ИначеЕсли ОбъектXDTO.Получить("РезультатЗачисленияЗарплаты") <> Неопределено Тогда // Печать подтверждения зачисления зарплаты ИначеЕсли ОбъектXDTO.Получить("РезультатОткрытияСчетов") <> Неопределено Тогда // Печать подтверждения открытия лицевых счетов ТабличныйДокумент = Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПечатьПодтвержденияСпискаНаОткрытиеЛицевыхСчетовПоXML( ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОбъектXDTO), Новый СписокЗначений); КонецЕсли; КонецПроцедуры // См. ОбменСБанкамиПереопределяемый.ПриПолученииXMLФайла Процедура ПриПолученииXMLФайла(АдресДанныхФайла, ИмяФайла, ОбъектВладелец, ДанныеОповещения) Экспорт СозданныеДокументы = ОбменСБанкамиПоЗарплатнымПроектамВызовСервера.ЗагрузитьПодтвержденияИзБанка(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(АдресДанныхФайла)); ПриЗагрузкеБылиОшибки = Ложь; ДанныеОповещения = Новый Структура(); Для Каждого СозданныйДокумент Из СозданныеДокументы Цикл Если СозданныйДокумент = Неопределено Или СозданныйДокумент.Ключ = Неопределено Тогда ПриЗагрузкеБылиОшибки = Истина; Продолжить; КонецЕсли; ДанныеОповещения.Вставить(ОбменСБанкамиПоЗарплатнымПроектамКлиентСервер.ПривестиСтрокуКИдентификатору(СозданныйДокумент.Ключ), ТипЗнч(СозданныйДокумент.Ключ)); ДанныеОповещения.Вставить(ОбменСБанкамиПоЗарплатнымПроектамКлиентСервер.ПривестиСтрокуКИдентификатору(СозданныйДокумент.Значение), ТипЗнч(СозданныйДокумент.Значение)); Если ТипЗнч(СозданныйДокумент.Ключ) = Тип("ДокументСсылка.ПодтверждениеОткрытияЛицевыхСчетовСотрудников") Тогда ДанныеОповещения.Вставить("ЗагруженоПодтверждениеОткрытияЛицевыхСчетов", Неопределено); ИначеЕсли ТипЗнч(СозданныйДокумент.Ключ) = Тип("ДокументСсылка.ПодтверждениеЗачисленияЗарплаты") Тогда ДанныеОповещения.Вставить("ЗагруженоПодтверждениеЗачисленияЗарплаты", Неопределено); КонецЕсли; ОбъектВладелец = СозданныйДокумент.Ключ; КонецЦикла; Если ПриЗагрузкеБылиОшибки Тогда ВидОперации = НСтр("ru = 'Загрузка подтверждения из банка'"); ПодробныйТекстОшибки = НСтр("ru = 'Не удалось создать документ подтверждения'"); ТекстСообщения = НСтр("ru = 'При загрузке файлов подтверждений банка были ошибки'"); ЭлектронноеВзаимодействие.ОбработатьОшибку(ВидОперации, ПодробныйТекстОшибки, ТекстСообщения, "ОбменСБанками"); Иначе ТекстСообщения = НСтр("ru = 'Все файлы успешно загружены'"); ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); КонецЕсли; КонецПроцедуры // См. ОбменСБанкамиПереопределяемый.ПодготовитьСтруктуруОбъектовКомандЭДО Процедура ПодготовитьСтруктуруОбъектовКомандЭДО(СоставКомандЭДО) Экспорт СоставКомандЭДО.Добавить("Документ.ВедомостьНаВыплатуЗарплатыВБанк"); СоставКомандЭДО.Добавить("Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников"); СоставКомандЭДО.Добавить("Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников"); ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнитьСоставКомандЭДО(СоставКомандЭДО); МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента <> Неопределено Тогда СоставКомандЭДО.Добавить(МетаданныеПлатежногоДокумента.ПолноеИмя()); КонецЕсли; КонецПроцедуры #КонецОбласти #Область РаботаСПлатежнымДокументом // Возвращает доступность платежного документа для изменения. // // Параметры: // ПлатежныйДокумент - ДокументСсылка - Ссылка на платежный документ. // Функция ДоступностьПлатежногоДокумента(ПлатежныйДокумент) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПлатежныйДокумент", ПлатежныйДокумент); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты |ИЗ | РегистрСведений.СостоянияДокументовЗачисленияЗарплаты КАК СостоянияДокументовЗачисленияЗарплаты |ГДЕ | СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты = &ПлатежныйДокумент | И (СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоПолностью) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.НеЗачислено)) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 1 | СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты |ИЗ | РегистрСведений.ПлатежныеДокументыПеречисленияЗарплаты КАК ПлатежныеДокументыПеречисленияЗарплаты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЗачисленияЗарплаты КАК СостоянияДокументовЗачисленияЗарплаты | ПО ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент = СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты | И (СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоПолностью) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками) | ИЛИ СостоянияДокументовЗачисленияЗарплаты.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.НеЗачислено)) |ГДЕ | ПлатежныеДокументыПеречисленияЗарплаты.Ведомость = &ПлатежныйДокумент"; Возврат Запрос.Выполнить().Пустой(); КонецФункции Функция СведенияОПлатежномДокументе(МассивВедомостей, ЗначенияДляЗаполнения = Неопределено) Экспорт Сведения = Новый Структура(" |Организация, |ЗарплатныйПроект, |Получатель, |РасчетныйСчет, |СуммаПлатежа, |СпособВыплаты, |СпособВыплатыПредставление, |МесяцВыплатыПредставление"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивВедомостей", МассивВедомостей); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВедомостьНаВыплатуЗарплатыВБанк.Организация КАК Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект КАК ЗарплатныйПроект, | ВедомостьНаВыплатуЗарплатыВБанк.СпособВыплаты.Наименование КАК СпособВыплатыНаименование, | ВедомостьНаВыплатуЗарплатыВБанк.СпособВыплаты КАК СпособВыплаты, | ВедомостьНаВыплатуЗарплатыВБанк.ПериодРегистрации КАК МесяцВыплаты |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк КАК ВедомостьНаВыплатуЗарплатыВБанк |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанк.Ссылка В(&МассивВедомостей) | |УПОРЯДОЧИТЬ ПО | СпособВыплатыНаименование"; ТаблицаВедомостей = Запрос.Выполнить().Выгрузить(); ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнитьТаблицуВедомостей(ТаблицаВедомостей, МассивВедомостей); Если ТаблицаВедомостей.Количество() = 0 Тогда Возврат Сведения; КонецЕсли; Сведения.Организация = ТаблицаВедомостей[0].Организация; Сведения.ЗарплатныйПроект = ТаблицаВедомостей[0].ЗарплатныйПроект; Сведения.СпособВыплаты = ?(ТаблицаВедомостей.Количество()>1, Неопределено, ТаблицаВедомостей[0].СпособВыплаты); РеквизитыПолучателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сведения.ЗарплатныйПроект, "Банк,РасчетныйСчет"); Сведения.Получатель = РеквизитыПолучателя.Банк; Сведения.РасчетныйСчет = РеквизитыПолучателя.РасчетныйСчет; СпособыВыплаты = ТаблицаВедомостей.ВыгрузитьКолонку("СпособВыплатыНаименование"); СпособыВыплаты = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СпособыВыплаты); СпособВыплатыПредставление = ""; Для Каждого СпособВыплатыНаименование Из СпособыВыплаты Цикл СпособВыплатыПредставление = СпособВыплатыПредставление + СпособВыплатыНаименование + ", "; КонецЦикла; СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(СпособВыплатыПредставление, 2); Сведения.СпособВыплатыПредставление = СпособВыплатыПредставление; ТаблицаВедомостей.Свернуть("МесяцВыплаты"); ТаблицаВедомостей.Сортировать("МесяцВыплаты"); МесяцВыплатыПредставление = ""; Для Каждого СтрокаТЗ Из ТаблицаВедомостей Цикл МесяцВыплатыПредставление = МесяцВыплатыПредставление + Формат(СтрокаТЗ.МесяцВыплаты, "ДФ='ММММ гггг'") + ", "; КонецЦикла; СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(МесяцВыплатыПредставление, 2); Сведения.МесяцВыплатыПредставление = МесяцВыплатыПредставление; Запрос.Текст = "ВЫБРАТЬ | ЕСТЬNULL(СУММА(ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате + ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КомпенсацияЗаЗадержкуЗарплаты), 0) КАК СуммаПоДокументу |ИЗ | Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата |ГДЕ | ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка В(&МассивВедомостей)"; Выборка = Запрос.Выполнить().Выбрать(); СуммаПоДокументу = 0; Если Выборка.Следующий() Тогда СуммаПоДокументу = Выборка.СуммаПоДокументу; КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнитьСуммуПоДокументу(СуммаПоДокументу, МассивВедомостей); Сведения.СуммаПлатежа = СуммаПоДокументу; Возврат Сведения; КонецФункции Процедура ЗаполнитьРеквизитыНаФормеПлатежногоДокумента(Форма, Организация, ЗначенияДляЗаполнения, МассивВедомостей) Экспорт СведенияОПлатежномДокументе = СведенияОПлатежномДокументе(МассивВедомостей, ЗначенияДляЗаполнения); Если ЗначенияДляЗаполнения.Свойство("Получатель") Тогда Форма[ЗначенияДляЗаполнения.Получатель] = СведенияОПлатежномДокументе.Получатель; КонецЕсли; Если ЗначенияДляЗаполнения.Свойство("РасчетныйСчет") Тогда Форма[ЗначенияДляЗаполнения.РасчетныйСчет] = СведенияОПлатежномДокументе.РасчетныйСчет; КонецЕсли; Если ЗначенияДляЗаполнения.Свойство("СуммаПлатежа") Тогда Форма[ЗначенияДляЗаполнения.СуммаПлатежа] = СведенияОПлатежномДокументе.СуммаПлатежа; КонецЕсли; Если ЗначенияДляЗаполнения.Свойство("ЗарплатныйПроект") Тогда Форма[ЗначенияДляЗаполнения.ЗарплатныйПроект] = СведенияОПлатежномДокументе.ЗарплатныйПроект; КонецЕсли; Если ЗначенияДляЗаполнения.Свойство("ИНН") Или ЗначенияДляЗаполнения.Свойство("КПП") Тогда СведенияОбОрганизации = ЗарплатаКадры.СведенияОбОрганизации(Организация, "ИННЮЛ, КППЮЛ, ТипНП"); Если ЗначенияДляЗаполнения.Свойство("ИНН") Тогда Форма[ЗначенияДляЗаполнения.ИНН] = ?(ЗначениеЗаполнено(СведенияОбОрганизации.ИННЮЛ), СведенияОбОрганизации.ИННЮЛ, НСтр("ru = '<не указан>'")); КонецЕсли; Если ЗначенияДляЗаполнения.Свойство("КПП") Тогда Если СведенияОбОрганизации.ТипНП = 3 Тогда // Физическое лицо Форма[ЗначенияДляЗаполнения.КПП] = НСтр("ru = '<не требуется>'"); Иначе // Юридическое лицо Форма[ЗначенияДляЗаполнения.КПП] = ?(ЗначениеЗаполнено(СведенияОбОрганизации.КППЮЛ), СведенияОбОрганизации.КППЮЛ, НСтр("ru = '<не указан>'")); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры Функция ВедомостиПлатежногоДокументаПеречисленияЗарплаты(ПлатежныйДокумент) Экспорт СтандартнаяОбработка = Истина; Ведомости = Новый Массив; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ВедомостиПлатежногоДокументаПеречисленияЗарплаты( ПлатежныйДокумент, Ведомости, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат Ведомости; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ВнешниеХозяйственныеОперации.ВзаиморасчетыССотрудникамиВХО") Тогда Модуль = ОбщегоНазначения.ОбщийМодуль("ВзаиморасчетыССотрудникамиВХО"); Возврат Модуль.ВедомостиПлатежногоДокументаПеречисленияЗарплаты(ПлатежныйДокумент); КонецЕсли; Возврат Ведомости; КонецФункции Функция ПечатьСпискаПеречисленийПоДокументам(МассивОбъектов, ОбъектыПечати, ПлатежныйДокумент = Неопределено) Экспорт Если МассивОбъектов.Количество() = 0 Тогда ДокументМенеджер = Документы.ВедомостьНаВыплатуЗарплатыВБанк; Иначе ДокументМенеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(МассивОбъектов[0]); КонецЕсли; Возврат ДокументМенеджер.ПечатьСпискаПеречисленийПоДокументам(МассивОбъектов, ОбъектыПечати, ПлатежныйДокумент); КонецФункции Функция ПечатьСпискаПеречисленийПоЗарплатномуПроектуПоДокументам(МассивОбъектов, ОбъектыПечати, ПлатежныйДокумент = Неопределено) Экспорт Если МассивОбъектов.Количество() = 0 Тогда ДокументМенеджер = Документы.ВедомостьНаВыплатуЗарплатыВБанк; Иначе ДокументМенеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(МассивОбъектов[0]); КонецЕсли; Возврат ДокументМенеджер.ПечатьСпискаПеречисленийПоЗарплатномуПроектуПоДокументам(МассивОбъектов, ОбъектыПечати, ПлатежныйДокумент); КонецФункции Процедура ДополнитьПлатежныйДокумент(ПлатежныйДокумент, МассивВедомостей) Экспорт СтандартнаяОбработка = Истина; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ДополнитьПлатежныйДокумент(ПлатежныйДокумент, МассивВедомостей, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ВнешниеХозяйственныеОперации.ВзаиморасчетыССотрудникамиВХО") Тогда Модуль = ОбщегоНазначения.ОбщийМодуль("ВзаиморасчетыССотрудникамиВХО"); Модуль.ДополнитьПлатежныйДокумент(ПлатежныйДокумент, МассивВедомостей); КонецЕсли; КонецПроцедуры // Обработчик ПередЗаписью для платежного документа // // Параметры: // Источник - ДокументОбъект // Отказ - Булево // Процедура ПередЗаписьюПлатежногоДокументаПеречисленияЗарплаты(Источник, Отказ) Экспорт Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(Источник) Тогда Возврат; КонецЕсли; СтандартнаяОбработка = Истина; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ПередЗаписьюПлатежногоДокументаПеречисленияЗарплаты(Источник, Отказ, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат; КонецЕсли; МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента.Реквизиты.Найти("НомерРеестра") <> Неопределено Тогда Если Не ЗначениеЗаполнено(Источник.НомерРеестра) Тогда РеквизитыПлатежногоДокумента = Новый Структура; РеквизитыПлатежногоДокумента.Вставить("ПлатежныйДокумент", Источник); РеквизитыПлатежногоДокумента.Вставить("Номер", Источник.Номер); РеквизитыПлатежногоДокумента.Вставить("Дата", Источник.Дата); РеквизитыПлатежногоДокумента.Вставить("Организация", Источник.Организация); ГодыВыгрузки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Год(Источник.Дата)); НомераРеестров = НомераРеестровДокументов(Неопределено, ГодыВыгрузки, РеквизитыПлатежногоДокумента); ДанныеРеестра = НомераРеестров.Получить(Источник); Если ДанныеРеестра <> Неопределено Тогда Источник.НомерРеестра = ДанныеРеестра.НомерРеестра; КонецЕсли; КонецЕсли; КонецЕсли; Источник.ДополнительныеСвойства.Вставить("МассивВедомостейПередЗаписью", ВедомостиПлатежногоДокументаПеречисленияЗарплаты(Источник.Ссылка)); Источник.ДополнительныеСвойства.Вставить("Проведен", Источник.Проведен); КонецПроцедуры // Обработчик ПриЗаписи для платежного документа // Регистрирует состояние документа. // // Параметры: // Источник - ДокументОбъект // Отказ - Булево // Процедура ПриЗаписиПлатежногоДокументаПеречисленияЗарплаты(Источник, Отказ) Экспорт Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(Источник) Тогда Возврат; КонецЕсли; СтандартнаяОбработка = Истина; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ПриЗаписиПлатежногоДокументаПеречисленияЗарплаты(Источник, Отказ, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат; КонецЕсли; МассивВедомостей = ВедомостиПлатежногоДокументаПеречисленияЗарплаты(Источник.Ссылка); // Заполняем сведения о реквизитах платежного документа и составе включенных в него ведомостей. НаборЗаписей = РегистрыСведений.РеквизитыПлатежныхДокументовПеречисленияЗарплаты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПлатежныйДокумент.Установить(Источник.Ссылка); НаборЗаписей.Записать(); НаборЗаписей = РегистрыСведений.ПлатежныеДокументыПеречисленияЗарплаты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПлатежныйДокумент.Установить(Источник.Ссылка); НаборЗаписей.Записать(); СведенияОПлатежномДокументе = СведенияОПлатежномДокументе(МассивВедомостей); НаборЗаписей = РегистрыСведений.РеквизитыПлатежныхДокументовПеречисленияЗарплаты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПлатежныйДокумент.Установить(Источник.Ссылка); НоваяЗаписьНабора = НаборЗаписей.Добавить(); НоваяЗаписьНабора.Организация = СведенияОПлатежномДокументе.Организация; НоваяЗаписьНабора.ПлатежныйДокумент = Источник.Ссылка; НоваяЗаписьНабора.ЗарплатныйПроект = СведенияОПлатежномДокументе.ЗарплатныйПроект; НоваяЗаписьНабора.СуммаПоДокументу = СведенияОПлатежномДокументе.СуммаПлатежа; НоваяЗаписьНабора.СпособВыплаты = СведенияОПлатежномДокументе.СпособВыплаты; НоваяЗаписьНабора.СпособВыплатыПредставление = СведенияОПлатежномДокументе.СпособВыплатыПредставление; НоваяЗаписьНабора.МесяцВыплатыПредставление = СведенияОПлатежномДокументе.МесяцВыплатыПредставление; ДанныеПлатежногоДокумента = Новый Структура("Дата,Номер"); ЗаполнитьДанныеПлатежногоДокумента(ДанныеПлатежногоДокумента, Источник); НоваяЗаписьНабора.Номер = ДанныеПлатежногоДокумента.Номер; НоваяЗаписьНабора.Дата = ДанныеПлатежногоДокумента.Дата; НаборЗаписей.Записать(); НаборЗаписей = РегистрыСведений.ПлатежныеДокументыПеречисленияЗарплаты.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПлатежныйДокумент.Установить(Источник.Ссылка); Для Каждого Ведомость Из МассивВедомостей Цикл НоваяЗаписьНабора = НаборЗаписей.Добавить(); НоваяЗаписьНабора.Организация = СведенияОПлатежномДокументе.Организация; НоваяЗаписьНабора.ПлатежныйДокумент = Источник.Ссылка; НоваяЗаписьНабора.Ведомость = Ведомость; КонецЦикла; Если Источник.ДополнительныеСвойства.Свойство("ПроверкаВыполнена") И Источник.ДополнительныеСвойства.ПроверкаВыполнена Тогда НаборЗаписей.ДополнительныеСвойства.Вставить("ВыполнятьПроверкуПередЗаписьюНабора", Ложь); КонецЕсли; НаборЗаписей.Записать(); // Проверим - был ли изменен документ в составе ведомостей в банк ВедомостиПриЗаписи = Новый ТаблицаЗначений; ВедомостиПриЗаписи.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы.ВедомостьВБанкЗарплатаКадры.Тип)); ВедомостиПередЗаписью = ВедомостиПриЗаписи.СкопироватьКолонки(); ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ВедомостиПриЗаписи, МассивВедомостей, "Ссылка"); ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ВедомостиПередЗаписью, Источник.ДополнительныеСвойства.МассивВедомостейПередЗаписью, "Ссылка"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ВедомостиПередЗаписью", ВедомостиПередЗаписью); Запрос.УстановитьПараметр("ВедомостиПриЗаписи", ВедомостиПриЗаписи); Запрос.УстановитьПараметр("Проведен", Источник.Проведен); Запрос.УстановитьПараметр("ПроведенПередЗаписью", Источник.ДополнительныеСвойства.Проведен); Запрос.УстановитьПараметр("ПервичныйДокумент", Источник.Ссылка); Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанкПриЗаписи.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВТВедомостиПриЗаписи |ИЗ | &ВедомостиПриЗаписи КАК ВедомостьНаВыплатуЗарплатыВБанкПриЗаписи |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанкПередЗаписью.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВТВедомостиПередЗаписью |ИЗ | &ВедомостиПередЗаписью КАК ВедомостьНаВыплатуЗарплатыВБанкПередЗаписью |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВедомостиПриЗаписи.Ссылка КАК ВедомостьПриЗаписи, | ВедомостиПередЗаписью.Ссылка КАК ВедомостьПередЗаписью, | СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты КАК ДокументЗачисленияЗарплаты |ИЗ | ВТВедомостиПриЗаписи КАК ВедомостиПриЗаписи | ПОЛНОЕ СОЕДИНЕНИЕ ВТВедомостиПередЗаписью КАК ВедомостиПередЗаписью | ПО ВедомостиПриЗаписи.Ссылка = ВедомостиПередЗаписью.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЗачисленияЗарплаты КАК СостоянияДокументовЗачисленияЗарплаты | ПО (&ПервичныйДокумент = СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты) |ГДЕ | (ВедомостиПриЗаписи.Ссылка ЕСТЬ NULL | ИЛИ ВедомостиПередЗаписью.Ссылка ЕСТЬ NULL | ИЛИ &Проведен <> &ПроведенПередЗаписью | И СостоянияДокументовЗачисленияЗарплаты.ДокументЗачисленияЗарплаты ЕСТЬ NULL)"; РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда // Регистрируем состояние платежного документа, если документ был изменен // Платежный документ может быть выгружен, в этом случае не нужно менять состояние, если он не был изменен. ДанныеРеестра = Неопределено; МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента.Реквизиты.Найти("НомерРеестра") <> Неопределено Тогда ДанныеПлатежногоДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник.Ссылка, "Дата, НомерРеестра"); Если Не ПустаяСтрока(ДанныеПлатежногоДокумента.НомерРеестра) Тогда ДанныеРеестра = Новый Структура("Год, НомерРеестра", Год(ДанныеПлатежногоДокумента.Дата), ДанныеПлатежногоДокумента.НомерРеестра); КонецЕсли; КонецЕсли; ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(Источник.Ссылка, Отказ, , ДанныеРеестра); КонецЕсли; КонецПроцедуры // Проверяет правильность заполнения платежного документа. // // Параметры: // ПлатежныйДокумент - ДокументОбъект - ссылка на платежный документ. // МассивВедомостей - Массив из ОпределяемыйТип.ВедомостьВБанкЗарплатаКадры - массив ссылок ведомостей в банк. // МассивОшибок - Массив из Структура: // * ТекстСообщения - Строка - Текст ошибки. // * Ведомость - ДокументСсылка - ссылка на ведомость, к которой относится ошибка, // Если Неопределено, тогда ошибка относится к Платежному документу. // Процедура ПроверитьЗаполнениеПлатежногоДокумента(ПлатежныйДокумент, МассивВедомостей, МассивОшибок) Экспорт Если Не ДоступностьПлатежногоДокумента(ПлатежныйДокумент) Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'По документу %1 приняты файлы подтверждения зачисления зарплаты. Изменение документа невозможно.'"), ПлатежныйДокумент); МассивОшибок.Добавить(Новый Структура("ТекстСообщения, Ведомость", ТекстОшибки, Неопределено)); КонецЕсли; МассивНеПовторяющихсяВедомостей = Новый Массив; МассивПовторяющихсяВедомостей = Новый Массив; Для Каждого Ведомость Из МассивВедомостей Цикл Если МассивНеПовторяющихсяВедомостей.Найти(Ведомость) = Неопределено Тогда МассивНеПовторяющихсяВедомостей.Добавить(Ведомость); Иначе Если МассивПовторяющихсяВедомостей.Найти(Ведомость) = Неопределено Тогда МассивПовторяющихсяВедомостей.Добавить(Ведомость); ТекстОшибки = СтрШаблон( НСтр("ru = '%1 уже включена в %2'"), Ведомость, ПлатежныйДокумент); МассивОшибок.Добавить(Новый Структура("ТекстСообщения, Ведомость", ТекстОшибки, Ведомость)); КонецЕсли; КонецЕсли; КонецЦикла; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Ведомости", МассивВедомостей); Запрос.УстановитьПараметр("Ссылка", ПлатежныйДокумент); Запрос.Текст = "ВЫБРАТЬ | ПлатежныеДокументыПеречисленияЗарплаты.Ведомость, | ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент |ИЗ | РегистрСведений.ПлатежныеДокументыПеречисленияЗарплаты КАК ПлатежныеДокументыПеречисленияЗарплаты |ГДЕ | ПлатежныеДокументыПеречисленияЗарплаты.ПлатежныйДокумент <> &Ссылка | И ПлатежныеДокументыПеречисленияЗарплаты.Ведомость В(&Ведомости)"; УстановитьПривилегированныйРежим(Истина); Выборка = Запрос.Выполнить().Выбрать(); УстановитьПривилегированныйРежим(Ложь); Пока Выборка.Следующий() Цикл ТекстОшибки = СтрШаблон( НСтр("ru = '%1 уже включена в %2'"), Выборка.Ведомость, Выборка.ПлатежныйДокумент); МассивОшибок.Добавить(Новый Структура("ТекстСообщения, Ведомость", ТекстОшибки, Выборка.Ведомость)); КонецЦикла; ВедомостиПоТипамДокументов = Новый Соответствие; Для Каждого Ведомость Из МассивВедомостей Цикл Если Не ЗначениеЗаполнено(Ведомость) Тогда Продолжить; КонецЕсли; ТипВедомости = ТипЗнч(Ведомость); ВедомостиПоТипу = ВедомостиПоТипамДокументов[ТипВедомости]; Если ВедомостиПоТипу = Неопределено Тогда ВедомостиПоТипу = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ведомость); Иначе ВедомостиПоТипу.Добавить(Ведомость); КонецЕсли; ВедомостиПоТипамДокументов[ТипВедомости] = ВедомостиПоТипу; КонецЦикла; ВедомостиТаблица = Новый ТаблицаЗначений; ВедомостиТаблица.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(Метаданные.ОпределяемыеТипы.ВедомостьВБанкЗарплатаКадры.Тип)); ВедомостиТаблица.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации")); ВедомостиТаблица.Колонки.Добавить("ЗарплатныйПроект", Новый ОписаниеТипов("СправочникСсылка.ЗарплатныеПроекты")); ВедомостиТаблица.Колонки.Добавить("Проведен", Новый ОписаниеТипов("Булево")); УстановитьПривилегированныйРежим(Истина); Для Каждого КлючИЗначение Из ВедомостиПоТипамДокументов Цикл ВедомостиПоТипу = КлючИЗначение.Значение; ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ВедомостиПоТипу, "Организация,ЗарплатныйПроект,Проведен"); Для Каждого ЭлементКоллекции Из ЗначенияРеквизитов Цикл НоваяСтрока = ВедомостиТаблица.Добавить(); НоваяСтрока.Ссылка = ЭлементКоллекции.Ключ; ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементКоллекции.Значение); КонецЦикла; КонецЦикла; УстановитьПривилегированныйРежим(Ложь); Запрос.УстановитьПараметр("ВедомостиТаблица", ВедомостиТаблица); Запрос.Текст = "ВЫБРАТЬ | ВедомостьНаВыплатуЗарплатыВБанк.Ссылка КАК Ведомость, | ВедомостьНаВыплатуЗарплатыВБанк.Организация КАК Организация, | ВедомостьНаВыплатуЗарплатыВБанк.ЗарплатныйПроект КАК ЗарплатныйПроект, | ВедомостьНаВыплатуЗарплатыВБанк.Проведен КАК Проведен |ПОМЕСТИТЬ ВТВедомостиПлатежногоДокумента |ИЗ | &ВедомостиТаблица КАК ВедомостьНаВыплатуЗарплатыВБанк |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ВедомостиПлатежногоДокумента.Организация КАК Организация, | ВедомостиПлатежногоДокумента.ЗарплатныйПроект КАК ЗарплатныйПроект |ИЗ | ВТВедомостиПлатежногоДокумента КАК ВедомостиПлатежногоДокумента"; УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить().Выгрузить(); УстановитьПривилегированныйРежим(Ложь); Если Результат.Количество() > 1 Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'В документе %1 должны присутствовать ведомости только из одной организации и зарплатного проекта.'"), ПлатежныйДокумент); МассивОшибок.Добавить(Новый Структура("ТекстСообщения, Ведомость", ТекстОшибки, Неопределено)); КонецЕсли; Запрос.Текст = "ВЫБРАТЬ | ВедомостиПлатежногоДокумента.Ведомость |ИЗ | ВТВедомостиПлатежногоДокумента КАК ВедомостиПлатежногоДокумента |ГДЕ | НЕ ВедомостиПлатежногоДокумента.Проведен"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ТекстОшибки = СтрШаблон(НСтр("ru = 'Ведомость %1 не проведена.'"), Выборка.Ведомость); МассивОшибок.Добавить(Новый Структура("ТекстСообщения, Ведомость", ТекстОшибки, Выборка.Ведомость)); КонецЦикла; КонецПроцедуры #КонецОбласти #Область ДанныеДляПечатиПоXML Функция ДанныеСпискаПеречисленийПоXML(МассивОбъектов) Экспорт ДанныеДокументов = Новый Соответствие; Для Каждого ОбъектПечати Из МассивОбъектов Цикл СуммаПоДокументу = 0; УникальнаяСсылка = Документы.ВедомостьНаВыплатуЗарплатыВБанк.ПолучитьСсылку(Новый УникальныйИдентификатор); ДанныеДокумента = Документы.ВедомостьНаВыплатуЗарплатыВБанк.ДанныеЗаполненияВедомости(); ДанныеДокумента.Документ = УникальнаяСсылка; ДанныеДокумента.ДатаДокумента = ОбъектПечати.ДатаФормирования; ДанныеДокумента.НомерДоговора = ОбъектПечати.НомерДоговора; ДанныеДокумента.ПолноеНаименованиеОрганизации = ОбъектПечати.НаименованиеОрганизации; ДанныеДокумента.НомерРасчетногоСчетаОрганизации = ОбъектПечати.РасчетныйСчетОрганизации; Для Каждого Сотрудник Из ОбъектПечати.ЗачислениеЗарплаты.Сотрудник Цикл СуммаПоДокументу = СуммаПоДокументу + Сотрудник.Сумма; ДанныеСтрокиДокумента = Документы.ВедомостьНаВыплатуЗарплатыВБанк.ДанныеЗаполненияСтрокиВедомости(); ДанныеСтрокиДокумента.НомерЛицевогоСчета = Сотрудник.ЛицевойСчет; ДанныеСтрокиДокумента.Фамилия = Сотрудник.Фамилия; ДанныеСтрокиДокумента.Имя = Сотрудник.Имя; ДанныеСтрокиДокумента.Отчество = Сотрудник.Отчество; ДанныеСтрокиДокумента.СуммаКВыплате = Сотрудник.Сумма; ДанныеДокумента.Сотрудники.Добавить(ДанныеСтрокиДокумента); КонецЦикла; ДанныеДокумента.СуммаПоДокументу = СуммаПоДокументу; ДанныеДокументов.Вставить(УникальнаяСсылка, ДанныеДокумента); КонецЦикла; Возврат ДанныеДокументов; КонецФункции Функция ДанныеСпискаНаОткрытиеЛицевыхСчетовПоXML(МассивОбъектов) Экспорт ДанныеДокументов = Новый Соответствие; Для Каждого ОбъектПечати Из МассивОбъектов Цикл УникальнаяСсылка = Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ПолучитьСсылку(Новый УникальныйИдентификатор); ДанныеДокумента = Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ДанныеЗаполненияОткрытияЛицевыхСчетов(); ДанныеДокумента.Документ = УникальнаяСсылка; ДанныеДокумента.ДатаДокумента = ОбъектПечати.ДатаФормирования; ДанныеДокумента.НомерДоговора = ОбъектПечати.НомерДоговора; ДанныеДокумента.ПолноеНаименованиеОрганизации = ОбъектПечати.НаименованиеОрганизации; ДанныеДокумента.НомерРасчетногоСчетаОрганизации = ОбъектПечати.РасчетныйСчетОрганизации; Для Каждого Сотрудник Из ОбъектПечати.ОткрытиеСчетов.Сотрудник Цикл ДанныеСтрокиДокумента = Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ДанныеЗаполненияСтрокиОткрытияЛицевыхСчетов(); ДанныеСтрокиДокумента.Фамилия = Сотрудник.Фамилия; ДанныеСтрокиДокумента.Имя = Сотрудник.Имя; ДанныеСтрокиДокумента.Отчество = Сотрудник.Отчество; ДанныеСтрокиДокумента.ЭмбоссированныйТекст1 = Сотрудник.ЭмбоссированныйТекст.Поле1; ДанныеСтрокиДокумента.ЭмбоссированныйТекст2 = Сотрудник.ЭмбоссированныйТекст.Поле2; ДанныеСтрокиДокумента.ЭмбоссированныйТекст3 = Сотрудник.ЭмбоссированныйТекст.Поле3; ДанныеСтрокиДокумента.ДатаРождения = Сотрудник.ДатаРождения; ДанныеСтрокиДокумента.Пол = Сотрудник.Пол; ДанныеСтрокиДокумента.ОтделениеБанка = Сотрудник.ОтделениеБанка; ДанныеСтрокиДокумента.ФилиалОтделенияБанка = Сотрудник.ФилиалОтделенияБанка; ДанныеСтрокиДокумента.КодВидаВклада = Сотрудник.ВидВклада.КодВидаВклада; ДанныеСтрокиДокумента.СуммаПервоначальногоПополнения = Сотрудник.Сумма; ДанныеСтрокиДокумента.АдресПоПропискеПредставление = ПредставлениеАдресаИзЭДXML( Сотрудник.АдресПрописки, Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица); ДанныеСтрокиДокумента.АдресМестаПроживанияПредставление = ПредставлениеАдресаИзЭДXML( Сотрудник.АдресПроживания, Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица); ДанныеСтрокиДокумента.АдресМестаРаботыПредставление = ПредставлениеАдресаИзЭДXML( Сотрудник.АдресМестаРаботы, Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица); ДанныеСтрокиДокумента.ТелефонРабочийПредставление = Сотрудник.РабочийТелефон; ДанныеСтрокиДокумента.ДокументПредставление = ПредставлениеУдостоверенияЛичностиИзЭДXML(Сотрудник.УдостоверениеЛичности); ДанныеДокумента.Сотрудники.Добавить(ДанныеСтрокиДокумента); КонецЦикла; ДанныеДокументов.Вставить(УникальнаяСсылка, ДанныеДокумента); КонецЦикла; Возврат ДанныеДокументов; КонецФункции Функция ДанныеПодтвержденияОткрытияЛицевыхСчетовПоXML(МассивОбъектов) Экспорт ДанныеДокументов = Новый Соответствие; Для Каждого ОбъектПечати Из МассивОбъектов Цикл УникальнаяСсылка = Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПолучитьСсылку(Новый УникальныйИдентификатор); ДанныеДокумента = Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ДанныеЗаполненияПодтвержденияОткрытияЛицевыхСчетов(); ДанныеДокумента.Ссылка = УникальнаяСсылка; ДанныеДокумента.Дата = ОбъектПечати.ДатаФормирования; ДанныеДокумента.НомерДоговора = ОбъектПечати.НомерДоговора; ДанныеДокумента.ПолноеНаименованиеОрганизации = ОбъектПечати.НаименованиеОрганизации; ДанныеДокумента.НомерРасчетногоСчетаОрганизации = ОбъектПечати.РасчетныйСчетОрганизации; ИдПервичногоДокумента = Новый УникальныйИдентификатор(ОбъектПечати.ИдПервичногоДокумента); СсылкаНаПервичныйДокумент = Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ПолучитьСсылку(ИдПервичногоДокумента); ДанныеДокумента.ПервичныйДокумент = СсылкаНаПервичныйДокумент; Для Каждого Сотрудник Из ОбъектПечати.РезультатОткрытияСчетов.Сотрудник Цикл ДанныеСтрокиДокумента = Документы.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ДанныеЗаполненияСтрокиПодтвержденияОткрытияЛицевыхСчетов(); ДанныеСтрокиДокумента.Фамилия = Сотрудник.Фамилия; ДанныеСтрокиДокумента.Имя = Сотрудник.Имя; ДанныеСтрокиДокумента.Отчество = Сотрудник.Отчество; ДанныеСтрокиДокумента.НомерЛицевогоСчета = Сотрудник.ЛицевойСчет; ДанныеСтрокиДокумента.Сумма = Сотрудник.Сумма; ДанныеСтрокиДокумента.РезультатОткрытияСчета = Сотрудник.Результат; ДанныеСтрокиДокумента.КомментарийРезультата = Сотрудник.РасшифровкаРезультата; ДанныеДокумента.Сотрудники.Добавить(ДанныеСтрокиДокумента); КонецЦикла; ДанныеДокументов.Вставить(УникальнаяСсылка, ДанныеДокумента); КонецЦикла; Возврат ДанныеДокументов; КонецФункции #КонецОбласти // АПК:299-вкл // АПК:581-вкл # Область КадровыеДанныеСотрудников Функция ДобавитьПолеСведенийОЗарплатныхПроектах(ИмяПоля, ТекстыОписанияПолей, ИсточникиДанных) Экспорт ДобавленоПолеСведений = Ложь; Если НеобходимыСведенияОЗарплатныхПроектах(ИмяПоля) Тогда ДобавленоПолеСведений = Истина; ИсточникиДанных.Вставить("СведенияОЗарплатныхПроектах", Истина); Если ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйУчет") Тогда КадровыйУчет.ДобавитьВКоллекциюИмяКадровыхДанных(ИсточникиДанных, "КадроваяИсторияСотрудников", "Организация"); Иначе КадровыйУчет.ДобавитьВКоллекциюИмяКадровыхДанных(ИсточникиДанных, "ПостоянныеКадровыеДанныеСотрудников", "Организация"); КонецЕсли; ПутьКДанным = ПутьКДаннымСведенийОЗарплатныхПроектах(ИмяПоля); ТекстыОписанияПолей.Добавить(ПутьКДанным + " КАК " + ИмяПоля); КонецЕсли; Возврат ДобавленоПолеСведений; КонецФункции Функция ДобавитьКритерийПоискаПоСведениямОЗарплатныхПроектах(КритерииПоиска, УсловиеПоиска) Экспорт КритерийДобавлен = Ложь; Если НеобходимыСведенияОЗарплатныхПроектах(УсловиеПоиска.ЛевоеЗначение) Тогда ИмяПоля = ВРег(УсловиеПоиска.ЛевоеЗначение); Если ИмяПоля = ВРег("ЗарплатныйПроектДатаОткрытияЛицевогоСчета") Тогда УсловиеПоиска.ЛевоеЗначение = "ДатаОткрытияЛицевогоСчета"; ИначеЕсли ИмяПоля = ВРег("ЗарплатныйПроектРегистратор") Тогда УсловиеПоиска.ЛевоеЗначение = "ДокументОснование"; КонецЕсли; КадровыйУчет.ДобавитьКритерийПоискаСотрудников(КритерииПоиска, "РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам", УсловиеПоиска); КритерийДобавлен = Истина; КонецЕсли; Возврат КритерийДобавлен; КонецФункции Процедура ДобавитьТекстЗапросаВТСведенияОЗарплатныхПроектах(Запрос, ТолькоРазрешенные, ОписательВременнойТаблицыОтборов, ПоляОтбораПериодическихДанных, ИсточникиДанных) Экспорт Если ИсточникиДанных.Получить("СведенияОЗарплатныхПроектах") = Неопределено Тогда Возврат; КонецЕсли; ОписательВременнойТаблицыОтборовЛицевыхСчетов = ОписаниеВременнойТаблицыДляСоздатьВТЛицевыеСчетаСотрудников(Неопределено, ОписательВременнойТаблицыОтборов.ИмяВременнойТаблицыОтборовСотрудников, ОписательВременнойТаблицыОтборов.ИмяПоляСотрудник + ".ФизическоеЛицо", ОписательВременнойТаблицыОтборов.ИмяПоляПериод); ЗапросВТ = ЗапросВТЛицевыеСчетаСотрудниковПоВременнойТаблице( ТолькоРазрешенные, ОписательВременнойТаблицыОтборовЛицевыхСчетов, ПоляОтбораПериодическихДанных, "ВТЛицевыеСчетаСотрудников"); ЗарплатаКадрыОбщиеНаборыДанных.СкопироватьПараметрыЗапроса(Запрос, ЗапросВТ); ЧастиЗапроса = Новый Массив; ЧастиЗапроса.Добавить(ЗапросВТ.Текст); ЧастиЗапроса.Добавить(ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов()); ЧастиЗапроса.Добавить(Запрос.Текст); ЧастиЗапроса.Добавить( " {ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчетаСотрудников КАК ЛицевыеСчетаСотрудников | ПО ВЫРАЗИТЬ(ТаблицаОтборов." + ОписательВременнойТаблицыОтборов.ИмяПоляСотрудник + " КАК Справочник.Сотрудники).ФизическоеЛицо = ЛицевыеСчетаСотрудников.ФизическоеЛицо"); Если ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйУчет") Тогда ЧастиЗапроса.Добавить( " И (ВЫБОР | КОГДА КадроваяИсторияСотрудников.Организация ЕСТЬ NULL | ТОГДА ВЫРАЗИТЬ(ТаблицаОтборов." + ОписательВременнойТаблицыОтборов.ИмяПоляСотрудник + " КАК Справочник.Сотрудники).ГоловнаяОрганизация | ИНАЧЕ КадроваяИсторияСотрудников.Организация | КОНЕЦ = ВЫБОР | КОГДА КадроваяИсторияСотрудников.Организация ЕСТЬ NULL | ТОГДА ЛицевыеСчетаСотрудников.Организация.ГоловнаяОрганизация | ИНАЧЕ ЛицевыеСчетаСотрудников.Организация | КОНЕЦ)"); Иначе ЧастиЗапроса.Добавить( " И (ТекущиеКадровыеДанныеСотрудников.ТекущаяОрганизация = ЛицевыеСчетаСотрудников.Организация)"); КонецЕсли; ЧастиЗапроса.Добавить( " И ТаблицаОтборов." + ОписательВременнойТаблицыОтборов.ИмяПоляПериод + " = ЛицевыеСчетаСотрудников.Период}"); Запрос.Текст = СтрСоединить(ЧастиЗапроса, Символы.ПС); КадровыйУчет.ДобавитьВКоллекциюИмяКадровыхДанных(ИсточникиДанных, "ВТКУничтожению", "ВТЛицевыеСчетаСотрудников"); КонецПроцедуры #КонецОбласти // Возвращает соответствие между форматом файла перечислением и цифрой версии формата // // Возвращаемое значение: // Соответствие из КлючИЗначение: // * Ключ - Перечисление.ФорматыФайловОбменаПоЗарплатномуПроекту // * Значение - Число - Номер версии формата // Функция СоответствиеФорматовФайла() Экспорт СоответствиеФорматаФайла = Новый Соответствие; СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия1, 1); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия3, 3); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия32, 3.2); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия33, 3.3); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия34, 3.4); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия35, 3.5); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия36, 3.6); СоответствиеФорматаФайла.Вставить(Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия37, 3.7); Возврат СоответствиеФорматаФайла; КонецФункции // Возвращает поддерживаются ли разные способы зачисления выплат по зарплатному проекту // // Параметры: // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект. // Функция ЗарплатныйПроектПоддерживаетСпособыЗачисленияВыплат(ЗарплатныйПроект) Экспорт СоответствиеФорматов = СоответствиеФорматовФайла(); ФорматФайлаЗарплатногоПроекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗарплатныйПроект, "ФорматФайла"); ФорматФайла = ?(СоответствиеФорматов[ФорматФайлаЗарплатногоПроекта] = Неопределено, 0, СоответствиеФорматов[ФорматФайлаЗарплатногоПроекта]); Возврат ФорматФайла > 3.6; КонецФункции // Возвращает предназначен ли зарплатный проект для перечислений на карты Мир через Казначейство // // Параметры: // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект. // Функция ЗарплатныйПроектДляПеречисленийНаКартыМир(ЗарплатныйПроект) Экспорт Возврат ?(ЗначениеЗаполнено(ЗарплатныйПроект), ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗарплатныйПроект, "ДляПеречисленийНаКартыМир"), Ложь); КонецФункции // Возвращает номер телефона в виде 10 цифр // // Параметры: // НомерТелефонаПредставление - Строка - полный номер телефона со всеми знаками // // Возвращаемое значение: // Строка // Функция НомерТелефонаДляОбменаСБанками(НомерТелефонаПредставление) Экспорт НомерТелефона = ""; Для Шаг = 1 По СтрДлина(НомерТелефонаПредставление) Цикл НомерТелефона = НомерТелефона + ?(КодСимвола(НомерТелефонаПредставление, Шаг) >= КодСимвола("0") И КодСимвола(НомерТелефонаПредставление, Шаг) <= КодСимвола("9"), Сред(НомерТелефонаПредставление, Шаг, 1), ""); КонецЦикла; Возврат Прав(НомерТелефона, 10); КонецФункции Процедура ПредупредитьЗарплатныйПроектИспользуется(ЗарплатныйПроект) Экспорт ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ПредупредитьЗарплатныйПроектИспользуется(ЗарплатныйПроект); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Формирует временную таблицу сотрудников с номерами лицевых счетов по переданной организации и списку сотрудников. // Создает в МенеджерВременныхТаблиц временную таблицу с именем ВТЛицевыеСчетаСотрудников. // Описание колонок см. СоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц // ТолькоРазрешенные - Булево // СписокСотрудников - Массив из СправочникСсылка.Сотрудники // Организация - СправочникСсылка.Организация // ДатаПолученияДанных - Дата - дата на которую необходимо получить данные о номерах лицевых счетов. // - Неопределено - на текущую дату. // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // - Неопределено - по всем зарплатным проектам. // Процедура СоздатьВТЛицевыеСчетаСотрудников(МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, Организация, ДатаПолученияДанных = Неопределено, ЗарплатныйПроект = Неопределено) Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников); Запрос.УстановитьПараметр("ДатаПолученияДанных", ?(ДатаПолученияДанных = Неопределено, ТекущаяДатаСеанса(), ДатаПолученияДанных)); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | &ДатаПолученияДанных КАК Период, | Сотрудники.Ссылка КАК Сотрудник, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо |ПОМЕСТИТЬ ВТСписокСотрудниковДляПолученияЛицевыхСчетовСотрудников |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.Ссылка В(&СписокСотрудников)"; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); КонецЕсли; Запрос.Выполнить(); ОписаниеВременнойТаблицы = ОписаниеВременнойТаблицыДляСоздатьВТЛицевыеСчетаСотрудников(МенеджерВременныхТаблиц, "ВТСписокСотрудниковДляПолученияЛицевыхСчетовСотрудников"); СоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников(ОписаниеВременнойТаблицы, ТолькоРазрешенные, Организация, ЗарплатныйПроект); Запрос.Текст = "УНИЧТОЖИТЬ ВТСписокСотрудниковДляПолученияЛицевыхСчетовСотрудников"; Запрос.Выполнить(); КонецПроцедуры // Формирует временную таблицу сотрудников со способами выплат по переданной организации и списку сотрудников. // Создает в МенеджерВременныхТаблиц временную таблицу с именем ВТСпособыВыплатСотрудников. // Описание колонок см. СоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц // ТолькоРазрешенные - Булево // СписокСотрудников - Массив из СправочникСсылка.Сотрудники // Организация - СправочникСсылка.Организация // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты - зарплатный проект // - Неопределено - по всем зарплатным проектам. // Процедура СоздатьВТСпособыВыплатСотрудников(МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, Организация, ЗарплатныйПроект = Неопределено) Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников); Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.УстановитьПараметр("Организация", Организация); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Сотрудники.Ссылка КАК Сотрудник, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо |ПОМЕСТИТЬ ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.Ссылка В(&СписокСотрудников) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Организация КАК Организация, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СпособЗачисления КАК СпособЗачисления, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.БанковскийСчет КАК БанковскийСчет, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.БанковскаяКарта КАК БанковскаяКарта, | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Телефон КАК Телефон, | ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников.Сотрудник КАК Сотрудник |ПОМЕСТИТЬ ВТСпособыВыплатСотрудников |ИЗ | ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников КАК ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам | ПО ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников.ФизическоеЛицо = ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо |ГДЕ | ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект = &ЗарплатныйПроект | И ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Организация = &Организация |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТСписокСотрудниковДляПолученияСпособовВыплатСотрудников"; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); КонецЕсли; Если ЗарплатныйПроект = Неопределено Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект = &ЗарплатныйПроект", "ИСТИНА"); КонецЕсли; Запрос.Выполнить(); КонецПроцедуры // Возвращает номер реестра платежного документа, выгружаемого в банк // // Параметры: // ПлатежныйДокумент - ДокументСсылка - Ссылка на платежный документ. // Функция НомерРеестраПлатежногоДокумента(ПлатежныйДокумент) НомерРеестра = Неопределено; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ЗаполнитьНомерРеестраПлатежногоДокумента(ПлатежныйДокумент, НомерРеестра); Если НомерРеестра = Неопределено Тогда МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента.Реквизиты.Найти("НомерРеестра") <> Неопределено Тогда Если ТипЗнч(ПлатежныйДокумент) = Тип("ДокументОбъект." + МетаданныеПлатежногоДокумента.Имя) Тогда НомерРеестра = ПлатежныйДокумент.НомерРеестра; Иначе НомерРеестра = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПлатежныйДокумент, "НомерРеестра"); КонецЕсли; Если ПустаяСтрока(НомерРеестра) Тогда НомерРеестра = Неопределено; КонецЕсли; КонецЕсли; КонецЕсли; Возврат НомерРеестра; КонецФункции Функция СтрокаВЧисло(Знач ИсходнаяСтрока) Экспорт Результат = 0; Длина = СтрДлина(ИсходнаяСтрока); Для НомерСимвола = 1 По Длина Цикл КодСимвола = КодСимвола(ИсходнаяСтрока, НомерСимвола); Если КодСимвола > 47 И КодСимвола < 58 Тогда // Число. Число = КодСимвола - 48; Результат = Результат * 10 + Число; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции // Включает функциональную опцию "ИспользоватьЭлектронныйОбменСБанкамиПоЗарплатнымПроектам", // если хоть в одном зарплатном проекте установлен флаг "ИспользоватьЭлектронныйДокументооборотСБанком", // иначе отключает функциональную опцию. // // Параметры: // Источник - ДокументОбъект // Отказ - Булево // Процедура УстановитьИспользованиеЭлектронногоОбменаСБанкамиПриЗаписи(Источник, Отказ) Экспорт Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(Источник) Тогда Возврат; КонецЕсли; УстановитьИспользованиеЭлектронногоОбменаСБанками(); КонецПроцедуры // Получает первую систему расчетов по банковским картам из зарплатного проекта. // // Параметры: // ЗарплатныйПроект // // Возвращаемое значение: // Строка - Если система расчетов по банковским картам не найдена, то возвращается Неопределено. // Функция СистемаРасчетовПоБанковскимКартам(ЗарплатныйПроект) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.Ссылка КАК ЗарплатныйПроект, | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.СистемаРасчетовПоБанковскимКартам КАК СистемаРасчетовПоБанковскимКартам |ИЗ | Справочник.ЗарплатныеПроекты.СистемыРасчетовПоБанковскимКартам КАК ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам |ГДЕ | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.Ссылка = &ЗарплатныйПроект | |УПОРЯДОЧИТЬ ПО | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.НомерСтроки"; Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.СистемаРасчетовПоБанковскимКартам; Иначе Возврат Неопределено; КонецЕсли; КонецФункции // Возвращает таблицу значений с физическими лицами по документам, удостоверяющим личность. // // Параметры: // ПервичныйДокумент - ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников // ДанныеДокументов - ТаблицаЗначений - данные документов, удостоверяющих личность: // * ДокументВид - Строка - наименование вида документа. // * КодВидаДокумента - Строка - код МВД документа. // * ДокументСерия - Строка - серия документа. // * ДокументНомер - Строка - номер документа. // // Возвращаемое значение: // ТаблицаЗначений: // * ДокументВид - Строка - наименование вида документа. // * КодВидаДокумента - Строка - код МВД документа. // * ДокументСерия - Строка - серия документа. // * ДокументНомер - Строка - номер документа. // * ФизическоеЛицо - СправочникСсылка.ФизическиеЛица - физическое лицо, которому принадлежит документ. // Функция ФизическиеЛицаПоДокументамУдостоверяющимЛичность(ПервичныйДокумент, ДанныеДокументов) Экспорт Если ДанныеДокументов.Колонки.Найти("ДокументНомерСерия") = Неопределено Тогда ДанныеДокументов.Колонки.Добавить("ДокументНомерСерия", ОбщегоНазначения.ОписаниеТипаСтрока(28)); КонецЕсли; Для Каждого СтрокаТаблицы Из ДанныеДокументов Цикл СтрокаТаблицы.ДокументНомерСерия = СтрокаТаблицы.ДокументСерия + СтрокаТаблицы.ДокументНомер; СтрокаТаблицы.ДокументНомерСерия = СтрЗаменить(СтрокаТаблицы.ДокументНомерСерия, " ", ""); КонецЦикла; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДанныеДокументов", ДанныеДокументов); Запрос.УстановитьПараметр("ПервичныйДокумент", ПервичныйДокумент); Запрос.Текст = "ВЫБРАТЬ | ДанныеДокументов.ДокументВид КАК ДокументВид, | ДанныеДокументов.КодВидаДокумента КАК КодВидаДокумента, | ДанныеДокументов.ДокументНомерСерия КАК ДокументНомерСерия, | ДанныеДокументов.ДокументСерия КАК ДокументСерия, | ДанныеДокументов.ДокументНомер КАК ДокументНомер |ПОМЕСТИТЬ ВТДанныеДокументов |ИЗ | &ДанныеДокументов КАК ДанныеДокументов |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеДокументов.ДокументВид КАК ДокументВид, | ДанныеДокументов.КодВидаДокумента КАК КодВидаДокумента, | ДанныеДокументов.ДокументСерия КАК ДокументСерия, | ДанныеДокументов.ДокументНомер КАК ДокументНомер, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо КАК ФизическоеЛицо |ИЗ | ВТДанныеДокументов КАК ДанныеДокументов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц | ПО (ДанныеДокументов.КодВидаДокумента = ВидыДокументовФизическихЛиц.КодМВД | ИЛИ ДанныеДокументов.ДокументВид = ВидыДокументовФизическихЛиц.Наименование) | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников | ПО (ВидыДокументовФизическихЛиц.Ссылка = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ДокументВид) | И ДанныеДокументов.ДокументНомерСерия = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ДокументНомерСерия |ГДЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка = &ПервичныйДокумент | |СГРУППИРОВАТЬ ПО | ДанныеДокументов.ДокументВид, | ДанныеДокументов.КодВидаДокумента, | ДанныеДокументов.ДокументСерия, | ДанныеДокументов.ДокументНомер, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо"; Возврат Запрос.Выполнить().Выгрузить(); КонецФункции // Возвращает массив описаний передаваемых файлов. // // Параметры: // АдресХранилища - Строка - адрес временного хранилища, куда помещен массив документов, по которым выгружаются файлы. // // Возвращаемое значение: // ПолучаемыеФайлы - Массив - описания передаваемых файлов (см. ОписаниеПередаваемогоФайла). // Функция МассивОписанийПередаваемыхФайлов(АдресХранилища, УникальныйИдентификаторФормы) Экспорт ПолучаемыеФайлы = Новый Массив; МассивОписанийФайлов = ПолучитьИзВременногоХранилища(АдресХранилища); Если ТипЗнч(МассивОписанийФайлов) <> Тип("Массив") Или МассивОписанийФайлов.Количество() = 0 Тогда Возврат ПолучаемыеФайлы; КонецЕсли; Для Каждого ОписаниеФайла Из МассивОписанийФайлов Цикл Если ОписаниеФайла = Неопределено Тогда Продолжить; КонецЕсли; АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(ОписаниеФайла.ДвоичныеДанные, УникальныйИдентификаторФормы); ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(ОписаниеФайла.ИмяФайла, АдресФайлаВоВременномХранилище); ПолучаемыеФайлы.Добавить(ПолучаемыйФайл); КонецЦикла; Возврат ПолучаемыеФайлы; КонецФункции // Заполняет список выбора у элемента формы системами расчетов по банковским картам зарплатного проекта. // // Параметры: // ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты // Элементы - ВсеЭлементыФормы // ИмяЭлемента - Строка - имя элемента формы, в котором заполняется список выбора. // Процедура ЗаполнитьСписокСистемРасчетов(ЗарплатныйПроект, Элементы, ИмяЭлемента) Экспорт ЭлементФормы = Элементы.Найти(ИмяЭлемента); Если ЭлементФормы = Неопределено Тогда Возврат; КонецЕсли; СписокВыбора = ЭлементФормы.СписокВыбора; СписокВыбора.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.СистемаРасчетовПоБанковскимКартам КАК СистемаРасчетовПоБанковскимКартам |ИЗ | Справочник.ЗарплатныеПроекты.СистемыРасчетовПоБанковскимКартам КАК ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам |ГДЕ | ЗарплатныеПроектыСистемыРасчетовПоБанковскимКартам.Ссылка = &ЗарплатныйПроект"; Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СписокВыбора.Добавить(Выборка.СистемаРасчетовПоБанковскимКартам); КонецЦикла; КонецПроцедуры // Устанавливает видимость элементов в коллекции по доступности в зарплатном проекте. // // Параметры: // ФорматФайла - Формат файла зарплатного проекта, для которого получаются доступные элементы. // ЭлементыКоллекции - элементы коллекции, которым нужно установить видимость. // НаименованиеКоллекции - наименование коллекции формы, в которой присутствуют доступные элементы. // ДоступныеЭлементыЗарплатногоПроекта - доступные элементы зарплатного проекта. // Процедура УстановитьВидимостьЭлементов(ФорматФайла, ЭлементыКоллекции, НаименованиеКоллекции, ДоступныеЭлементыЗарплатногоПроекта = Неопределено) Экспорт Если НЕ ЗначениеЗаполнено(ФорматФайла) Тогда ФорматФайла = Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия36; КонецЕсли; Если ДоступныеЭлементыЗарплатногоПроекта = Неопределено Тогда ДоступныеЭлементыЗарплатногоПроекта = ДоступныеЭлементыЗарплатногоПроекта(ФорматФайла, НаименованиеКоллекции); КонецЕсли; Для Каждого ЭлементФормы Из ЭлементыКоллекции Цикл Если ТипЗнч(ЭлементФормы) = Тип("КнопкаФормы") Тогда Продолжить; ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы") Или ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда УстановитьВидимостьЭлементов(ФорматФайла, ЭлементФормы.ПодчиненныеЭлементы, НаименованиеКоллекции, ДоступныеЭлементыЗарплатногоПроекта); Продолжить; КонецЕсли; Если ДоступныеЭлементыЗарплатногоПроекта.Найти(ЭлементФормы.Имя) = Неопределено Тогда ЭлементФормы.Видимость = Ложь; Иначе ЭлементФормы.Видимость = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры // Получает доступные элементы для зарплатного проекта. // // Параметры: // ФорматФайла - Формат файла зарплатного проекта, для которого получаются доступные элементы. // НаименованиеКоллекции - наименование коллекции формы, в которой присутствуют доступные элементы. // // Возвращаемое значение // МассивЭлементов - массив с доступными элементами. // Функция ДоступныеЭлементыЗарплатногоПроекта(ФорматФайла, НаименованиеКоллекции) СоответствиеФорматаФайла = СоответствиеФорматовФайла(); МассивЭлементов = Новый Массив; МассивЭлементов.Добавить(НаименованиеКоллекции + "НомерСтроки"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ФизическоеЛицо"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЭмбоссированныйТекст1"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЭмбоссированныйТекст2"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЭмбоссированныйТекст3"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СистемаРасчетовПоБанковскимКартам"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СуммаПервоначальногоПополнения"); МассивЭлементов.Добавить(НаименованиеКоллекции + "КодВидаВклада"); МассивЭлементов.Добавить(НаименованиеКоллекции + "КодПодвидаВклада"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ВалютаВклада"); МассивЭлементов.Добавить("ДокументыФизическихЛицВидДокумента"); МассивЭлементов.Добавить("ДокументыФизическихЛицСерия"); МассивЭлементов.Добавить("ДокументыФизическихЛицНомер"); МассивЭлементов.Добавить("ДокументыФизическихЛицКемВыдан"); МассивЭлементов.Добавить("ДокументыФизическихЛицДатаВыдачи"); МассивЭлементов.Добавить("ДокументыФизическихЛицСрокДействия"); МассивЭлементов.Добавить("ДокументыФизическихЛицКодПодразделения"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДокументУдостоверяющийЛичность"); МассивЭлементов.Добавить(НаименованиеКоллекции + "Пол"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаРождения"); МассивЭлементов.Добавить(НаименованиеКоллекции + "МестоРождения"); МассивЭлементов.Добавить(НаименованиеКоллекции + "АдресМестаРаботы"); МассивЭлементов.Добавить(НаименованиеКоллекции + "АдресПоПрописке"); МассивЭлементов.Добавить(НаименованиеКоллекции + "АдресМестаПроживания"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТелефонДомашний"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТелефонРабочий"); МассивЭлементов.Добавить(НаименованиеКоллекции + "Состояние"); МассивЭлементов.Добавить(НаименованиеКоллекции + "Команда"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СводныеСведенияКартинка"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СводныеСведения"); Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3 Тогда МассивЭлементов.Добавить(НаименованиеКоллекции + "Должность"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЯвляетсяЗарплатнойКартой"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ОплатаЗарплатнойКарты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЯвляетсяРезидентом"); МассивЭлементов.Добавить(НаименованиеКоллекции + "Гражданство"); МассивЭлементов.Добавить(НаименованиеКоллекции + "КатегорияСотрудника"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ИспользуетсяОвердрафт"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЯвляетсяСотрудникомБанка"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЯвляетсяУчастникомБонуснойПрограммы"); МассивЭлементов.Добавить(НаименованиеКоллекции + "БонуснаяПрограмма"); МассивЭлементов.Добавить(НаименованиеКоллекции + "НомерУчастникаБонуснойПрограммы"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТарифСледующийГод"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТарифТекущийГод"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СпособРассылкиОтчета"); МассивЭлементов.Добавить(НаименованиеКоллекции + "АдресЭлектроннойПочты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СчетДебета"); МассивЭлементов.Добавить(НаименованиеКоллекции + "НомерМобильногоТелефона"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ОператорСвязи"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ИспользованиеМобильногоБанка"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТарифМобильногоБанка"); МассивЭлементов.Добавить(НаименованиеКоллекции + "РазрешитьПередачуИнформацииВБКИ"); МассивЭлементов.Добавить(НаименованиеКоллекции + "КонтрольнаяИнформация"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.2 Тогда МассивЭлементов.Добавить(НаименованиеКоллекции + "НомерМиграционнойКарты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаНачалаПребыванияМиграционнойКарты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаОкончанияПребыванияМиграционнойКарты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ВидМиграционногоДокумента"); МассивЭлементов.Добавить(НаименованиеКоллекции + "НомерМиграционногоДокумента"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаНачалаПребыванияМиграционногоДокумента"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаОкончанияПребыванияМиграционногоДокумента"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ТабельныйНомер"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаПриема"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ПрогнозируемыйМесячныйДоход"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДеньВыплатыЗарплаты"); МассивЭлементов.Добавить(НаименованиеКоллекции + "АдресДляИнформирования"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ИспользованиеДоставкиКорреспонденции"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СпособДоставкиЭлектроннойПочтой"); МассивЭлементов.Добавить(НаименованиеКоллекции + "СпособДоставкиПочтой"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.3 Тогда МассивЭлементов.Добавить(НаименованиеКоллекции + "Сотрудник"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ДатаЗакрытия"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ЛицевойСчет"); МассивЭлементов.Добавить(НаименованиеКоллекции + "УволенныхСводныеСведенияКартинка"); МассивЭлементов.Добавить(НаименованиеКоллекции + "УволенныхСводныеСведения"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.4 Тогда МассивЭлементов.Добавить(НаименованиеКоллекции + "ИдентификаторДизайна"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ПВК"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ПриложениеКартаКод"); МассивЭлементов.Добавить(НаименованиеКоллекции + "ПриложениеКартаПараметры"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.5 Тогда МассивЭлементов.Добавить(НаименованиеКоллекции + "СтраховойНомерПФР"); КонецЕсли; Возврат МассивЭлементов; КонецФункции // Регистрирует лицевые счета по физическим лицам. // // Параметры: // ДанныеЛицевыхСчетов - Таблица значений с колонками // МесяцОткрытия // Организация // ФизическоеЛицо // НомерЛицевогоСчета // ЗарплатныйПроект // ДокументОснование // Процедура ЗарегистрироватьЛицевыеСчетаФизическихЛиц(ДанныеЛицевыхСчетов) Экспорт Для Каждого ДанныеФизическогоЛица Из ДанныеЛицевыхСчетов Цикл НаборЗаписей = РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Организация.Установить(ДанныеФизическогоЛица.Организация); НаборЗаписей.Отбор.ФизическоеЛицо.Установить(ДанныеФизическогоЛица.ФизическоеЛицо); НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(ДанныеФизическогоЛица.ЗарплатныйПроект); Если ЗначениеЗаполнено(ДанныеФизическогоЛица.ЗарплатныйПроект) И Не ПустаяСтрока(ДанныеФизическогоЛица.НомерЛицевогоСчета) Тогда НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда Запись = НаборЗаписей.Добавить(); Иначе Запись = НаборЗаписей[НаборЗаписей.Количество() - 1]; КонецЕсли; ЗаполнитьЗначенияСвойств(Запись, ДанныеФизическогоЛица); Запись.ДатаОткрытияЛицевогоСчета = ДанныеФизическогоЛица.МесяцОткрытия; КонецЕсли; НаборЗаписей.Записать(Истина); КонецЦикла; КонецПроцедуры // Отменяет регистрацию лицевых счетов по физическим лицам. // // Параметры: // ДокументОснование - Документ, по которому отменяется регистрация лицевых счетов. // Процедура ОтменитьРегистрациюЛицевыхСчетовФизическихЛиц(ДокументОснование) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование); Запрос.Текст = "ВЫБРАТЬ | ЛицевыеСчетаСотрудников.Организация КАК Организация, | ЛицевыеСчетаСотрудников.ФизическоеЛицо КАК ФизическоеЛицо, | ЛицевыеСчетаСотрудников.ЗарплатныйПроект КАК ЗарплатныйПроект |ИЗ | РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников |ГДЕ | ЛицевыеСчетаСотрудников.ДокументОснование = &ДокументОснование"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НаборЗаписей = РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Организация.Установить(Выборка.Организация); НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(Выборка.ЗарплатныйПроект); НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Выборка.ФизическоеЛицо); НаборЗаписей.ДополнительныеСвойства.Вставить("ОтменаРегистрацииЛицевыхСчетов", Истина); НаборЗаписей.Записать(); КонецЦикла; КонецПроцедуры Процедура ЗарегистрироватьИзмененияЛицевыхСчетов(ЛицевыеСчетаФизическихЛиц, Организация, ДатаНачала) Экспорт ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ЗарегистрироватьИзмененияЛицевыхСчетов(ЛицевыеСчетаФизическихЛиц, Организация, ДатаНачала); КонецПроцедуры Функция ДеньВыплатыЗарплатыВОрганизации(Организация) Возврат ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДеньВыплатыЗарплатыВОрганизации(Организация); КонецФункции // Регистрирует состояние Заявки на открытие лицевых счетов. // // Параметры: // ДокументОткрытияЛицевыхСчетов - Ссылка на Заявку на открытие лицевых счетов, для которой требуется установить состояние. // Отказ - Булево - Истина, если по документу получено подтверждение, иначе Ложь // Состояние - Устанавливаемое состояние по документу // ПодтверждениеОткрытияЛицевыхСчетов - Ссылка на документ-подтверждение. // Процедура ЗарегистрироватьСостояниеОткрытияЛицевыхСчетов(ДокументОткрытияЛицевыхСчетов, Отказ, Состояние = Неопределено, ПодтверждениеОткрытияЛицевыхСчетов = Неопределено) Экспорт МетаданныеЗаявкиНаОткрытиеЛицевыхСчетов = Метаданные.Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников; МетаданныеДокумента = ДокументОткрытияЛицевыхСчетов.Метаданные(); Если МетаданныеДокумента.ПолноеИмя() <> МетаданныеЗаявкиНаОткрытиеЛицевыхСчетов.ПолноеИмя() Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументОткрытияЛицевыхСчетов", ДокументОткрытияЛицевыхСчетов); Запрос.УстановитьПараметр("ПодтверждениеОткрытияЛицевыхСчетов", ПодтверждениеОткрытияЛицевыхСчетов); ХешФайла = ?(ПодтверждениеОткрытияЛицевыхСчетов = Неопределено, "", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодтверждениеОткрытияЛицевыхСчетов, "ХешФайла")); Запрос.УстановитьПараметр("ХешФайла", ХешФайла); Запрос.УстановитьПараметр("Состояние", ?(Состояние = Неопределено, Перечисления.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка(), Состояние)); Запрос.Текст = "ВЫБРАТЬ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка КАК ДокументОткрытияЛицевыхСчетов, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Организация КАК Организация, | ВЫБОР | КОГДА ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Ссылка ЕСТЬ НЕ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПодтверждениеПолучено, | ВЫБОР | КОГДА &Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка) | ТОГДА ВЫБОР | КОГДА ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Проведен | И ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ЗарплатныйПроект <> ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка) | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ГотовКВыгрузке) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка) | КОНЕЦ | ИНАЧЕ &Состояние | КОНЕЦ КАК Состояние |ИЗ | Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудников | ПО (ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПервичныйДокумент = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка) | И (ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Проведен) | И (ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Ссылка <> &ПодтверждениеОткрытияЛицевыхСчетов) | И (ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ХешФайла = &ХешФайла) |ГДЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка = &ДокументОткрытияЛицевыхСчетов"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ПодтверждениеПолучено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'По документу %1 получено подтверждение из банка. Изменение документа невозможно.'"), Выборка.ДокументОткрытияЛицевыхСчетов); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.ДокументОткрытияЛицевыхСчетов, , , Отказ); Прервать; КонецЕсли; МенеджерЗаписи = РегистрыСведений.СостоянияДокументовОткрытияЛицевыхСчетов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ДокументОткрытияЛицевыхСчетов = Выборка.ДокументОткрытияЛицевыхСчетов; МенеджерЗаписи.Прочитать(); Если ЗначениеЗаполнено(Выборка.Состояние) Тогда ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); МенеджерЗаписи.Записать(); Иначе Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Удалить(); КонецЕсли КонецЕсли; КонецЦикла; КонецПроцедуры // Регистрирует состояние ведомости или платежного документа. // // Параметры: // ДокументЗачисленияЗарплаты - Ссылка на ведомость или платежный документ, для которого требуется установить // состояние. // Отказ - Булево - Истина, если по документу получено подтверждение, иначе Ложь // Состояние - Устанавливаемое состояние по документу // ДанныеРеестра - Структура // Год - год даты реестра // НомерРеестра - номер выгружаемого реестра // ПодтверждениеЗачисленияЗарплаты - Ссылка на документ-подтверждение. // Процедура ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(ДокументЗачисленияЗарплаты, Отказ, Состояние = Неопределено, ДанныеРеестра = Неопределено, ПодтверждениеЗачисленияЗарплаты = Неопределено) Экспорт МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); МетаданныеДокумента = ДокументЗачисленияЗарплаты.Метаданные(); Если (МетаданныеПлатежногоДокумента = Неопределено Или МетаданныеДокумента.ПолноеИмя() <> МетаданныеПлатежногоДокумента.ПолноеИмя()) И Не ЭтоВедомостьВБанк(ДокументЗачисленияЗарплаты) Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументЗачисленияЗарплаты", ДокументЗачисленияЗарплаты); Запрос.УстановитьПараметр("ПодтверждениеЗачисленияЗарплаты", ПодтверждениеЗачисленияЗарплаты); ХешФайла = ?(ПодтверждениеЗачисленияЗарплаты = Неопределено, "", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодтверждениеЗачисленияЗарплаты, "ХешФайла")); Запрос.УстановитьПараметр("ХешФайла", ХешФайла); Запрос.УстановитьПараметр("Состояние", ?(Состояние = Неопределено, Перечисления.СостояниеЗачисленияЗарплаты.ПустаяСсылка(), Состояние)); Запрос.Текст = "ВЫБРАТЬ | ДокументЗачисленияЗарплаты.Ссылка КАК ДокументЗачисленияЗарплаты, | ДокументЗачисленияЗарплаты.Организация КАК Организация, | ВЫБОР | КОГДА ПодтверждениеЗачисленияЗарплаты.Ссылка ЕСТЬ НЕ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПодтверждениеПолучено, | ВЫБОР | КОГДА &Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ПустаяСсылка) | ТОГДА ВЫБОР | КОГДА ДокументЗачисленияЗарплаты.Проведен | И ДокументЗачисленияЗарплаты.ЗарплатныйПроект <> ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка) | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ГотовКВыгрузке) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ПустаяСсылка) | КОНЕЦ | ИНАЧЕ &Состояние | КОНЕЦ КАК Состояние |ИЗ | #ДокументЗачисленияЗарплаты КАК ДокументЗачисленияЗарплаты | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты | ПО (ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент = ДокументЗачисленияЗарплаты.Ссылка) | И (ПодтверждениеЗачисленияЗарплаты.Проведен) | И (ПодтверждениеЗачисленияЗарплаты.ХешФайла = &ХешФайла) | И (ПодтверждениеЗачисленияЗарплаты.Ссылка <> &ПодтверждениеЗачисленияЗарплаты) |ГДЕ | ДокументЗачисленияЗарплаты.Ссылка = &ДокументЗачисленияЗарплаты"; ИмяОбъекта = МетаданныеДокумента.ПолноеИмя(); Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ДокументЗачисленияЗарплаты", ИмяОбъекта); Если МетаданныеПлатежногоДокумента <> Неопределено И МетаданныеПлатежногоДокумента.ПолноеИмя() = МетаданныеДокумента.ПолноеИмя() Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокументЗачисленияЗарплаты.ЗарплатныйПроект <> ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка)", "РеквизитыПлатежныхДокументовПеречисленияЗарплаты.ЗарплатныйПроект <> ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка) | И РеквизитыПлатежныхДокументовПеречисленияЗарплаты.ЗарплатныйПроект ЕСТЬ НЕ NULL"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "И (ПодтверждениеЗачисленияЗарплаты.Ссылка <> &ПодтверждениеЗачисленияЗарплаты)", "И (ПодтверждениеЗачисленияЗарплаты.Ссылка <> &ПодтверждениеЗачисленияЗарплаты) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеквизитыПлатежныхДокументовПеречисленияЗарплаты КАК РеквизитыПлатежныхДокументовПеречисленияЗарплаты | ПО ДокументЗачисленияЗарплаты.Ссылка = РеквизитыПлатежныхДокументовПеречисленияЗарплаты.ПлатежныйДокумент"); КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ПодтверждениеПолучено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'По документу %1 получено подтверждение из банка. Изменение документа невозможно.'"), Выборка.ДокументЗачисленияЗарплаты); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, Выборка.ДокументЗачисленияЗарплаты, , , Отказ); Прервать; КонецЕсли; МенеджерЗаписи = РегистрыСведений.СостоянияДокументовЗачисленияЗарплаты.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ДокументЗачисленияЗарплаты = Выборка.ДокументЗачисленияЗарплаты; МенеджерЗаписи.Прочитать(); Если ЗначениеЗаполнено(Выборка.Состояние) Тогда ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); Если ДанныеРеестра <> Неопределено Тогда ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ДанныеРеестра); КонецЕсли; МенеджерЗаписи.Записать(); Иначе Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Удалить(); КонецЕсли КонецЕсли; КонецЦикла; КонецПроцедуры Функция ЗапросВТСведенияОЗарплатныхПроектах(ТолькоРазрешенные, ОписаниеВременнойТаблицы, ПоляОтбораПериодическихДанных, ИмяВТСведенияОЗарплатныхПроектах = "ВТСведенияОЗарплатныхПроектах") ПоляОтбора = Неопределено; Если ПоляОтбораПериодическихДанных <> Неопределено Тогда ПоляОтбораПериодическихДанных.Свойство("ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам", ПоляОтбора); КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("МаксимальнаяДата", ЗарплатаКадрыПериодическиеРегистры.МаксимальнаяДата()); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаОтборов.Период КАК Период, | ЛицевыеСчетаСотрудников.Организация КАК Организация, | ЛицевыеСчетаСотрудников.ФизическоеЛицо КАК ФизическоеЛицо, | ЛицевыеСчетаСотрудников.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЛицевыеСчетаСотрудников.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета, | ЛицевыеСчетаСотрудников.ДокументОснование КАК ДокументОснование |ПОМЕСТИТЬ ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам |{ВЫБРАТЬ | Период КАК ПериодПоЗарплатнымПроектам, | Организация.* КАК ОрганизацияПоЗарплатнымПроектам, | ФизическоеЛицо.* КАК ФизическоеЛицоПоЗарплатнымПроектам, | ЗарплатныйПроект.* КАК ЗарплатныйПроектПоЗарплатнымПроектам, | НомерЛицевогоСчета КАК НомерЛицевогоСчетаПоЗарплатнымПроектам, | ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчетаПоЗарплатнымПроектам, | ДокументОснование.* КАК ДокументОснованиеПоЗарплатнымПроектам} |ИЗ | ВТОтборовСотрудников КАК ТаблицаОтборов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников | ПО ТаблицаОтборов.ФизическоеЛицо = ЛицевыеСчетаСотрудников.ФизическоеЛицо | И (ВЫБОР | КОГДА ТаблицаОтборов.Период = ДАТАВРЕМЯ(1, 1, 1) | ТОГДА &МаксимальнаяДата | ИНАЧЕ ТаблицаОтборов.Период | КОНЕЦ >= ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета) |ГДЕ | &УсловиеОтбора |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЛицевыеСчетаСотрудников.Период КАК Период, | ЛицевыеСчетаСотрудников.Организация КАК Организация, | ЛицевыеСчетаСотрудников.ФизическоеЛицо КАК ФизическоеЛицо, | МАКСИМУМ(ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета |ПОМЕСТИТЬ ВТПоследниеПериодыЗарплатныхПроектов |ИЗ | ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников | |СГРУППИРОВАТЬ ПО | ЛицевыеСчетаСотрудников.Период, | ЛицевыеСчетаСотрудников.Организация, | ЛицевыеСчетаСотрудников.ФизическоеЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПоследниеПериодыЗарплатныхПроектов.Период КАК Период, | ПоследниеПериодыЗарплатныхПроектов.Организация КАК Организация, | ПоследниеПериодыЗарплатныхПроектов.ФизическоеЛицо КАК ФизическоеЛицо, | ПоследниеПериодыЗарплатныхПроектов.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета, | МАКСИМУМ(ЛицевыеСчетаСотрудников.ЗарплатныйПроект) КАК ЗарплатныйПроект |ПОМЕСТИТЬ ВТПоследниеЗарплатныеПроекты |ИЗ | ВТПоследниеПериодыЗарплатныхПроектов КАК ПоследниеПериодыЗарплатныхПроектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников | ПО ПоследниеПериодыЗарплатныхПроектов.ФизическоеЛицо = ЛицевыеСчетаСотрудников.ФизическоеЛицо | И ПоследниеПериодыЗарплатныхПроектов.Организация = ЛицевыеСчетаСотрудников.Организация | И ПоследниеПериодыЗарплатныхПроектов.ДатаОткрытияЛицевогоСчета = ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета | |СГРУППИРОВАТЬ ПО | ПоследниеПериодыЗарплатныхПроектов.Период, | ПоследниеПериодыЗарплатныхПроектов.ФизическоеЛицо, | ПоследниеПериодыЗарплатныхПроектов.ДатаОткрытияЛицевогоСчета, | ПоследниеПериодыЗарплатныхПроектов.Организация |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТПоследниеПериодыЗарплатныхПроектов |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПоследниеЗарплатныеПроекты.Период КАК Период, | ПоследниеЗарплатныеПроекты.Организация КАК Организация, | ПоследниеЗарплатныеПроекты.ФизическоеЛицо КАК ФизическоеЛицо, | ПоследниеЗарплатныеПроекты.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета, | ПоследниеЗарплатныеПроекты.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЛицевыеСчетаСотрудников.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ЛицевыеСчетаСотрудников.ДокументОснование КАК ДокументОснование |ПОМЕСТИТЬ ВТСведенияОЗарплатныхПроектах |{ВЫБРАТЬ | Период КАК ПериодПоЗарплатнымПроектам, | Организация.* КАК ОрганизацияПоЗарплатнымПроектам, | ФизическоеЛицо.* КАК ФизическоеЛицоПоЗарплатнымПроектам, | ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчетаПоЗарплатнымПроектам, | ЗарплатныйПроект.* КАК ЗарплатныйПроектПоЗарплатнымПроектам, | НомерЛицевогоСчета КАК НомерЛицевогоСчетаПоЗарплатнымПроектам, | ДокументОснование.* КАК ДокументОснованиеПоЗарплатнымПроектам} |ИЗ | ВТПоследниеЗарплатныеПроекты КАК ПоследниеЗарплатныеПроекты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников | ПО ПоследниеЗарплатныеПроекты.Организация = ЛицевыеСчетаСотрудников.Организация | И ПоследниеЗарплатныеПроекты.ФизическоеЛицо = ЛицевыеСчетаСотрудников.ФизическоеЛицо | И ПоследниеЗарплатныеПроекты.ДатаОткрытияЛицевогоСчета = ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета | И ПоследниеЗарплатныеПроекты.ЗарплатныйПроект = ЛицевыеСчетаСотрудников.ЗарплатныйПроект |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТЛицевыеСчетаСотрудниковПоЗарплатнымПроектам |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТПоследниеЗарплатныеПроекты"; Если ПоляОтбора <> Неопределено Тогда УсловияОтбора = Новый Массив; СчетчикПараметров = 1; Для Каждого ОписаниеОтбора Из ПоляОтбора Цикл Если ТипЗнч(ОписаниеОтбора.ПравоеЗначение) = Тип("Строка") Тогда ПравоеЗначение = ОписаниеОтбора.ПравоеЗначение; Иначе ИмяПараметра = "ПараметрВТСведенияОЗарплатныхПроектах" + СчетчикПараметров; ПравоеЗначение = "&" + ИмяПараметра; Запрос.УстановитьПараметр(ИмяПараметра, ОписаниеОтбора.ПравоеЗначение); СчетчикПараметров = СчетчикПараметров + 1; КонецЕсли; УсловияОтбора.Добавить( "(ЛицевыеСчетаСотрудников." + ОписаниеОтбора.ЛевоеЗначение + " " + ОписаниеОтбора.ВидСравнения + " (" + ПравоеЗначение + "))"); КонецЦикла; ТекстУсловийОтбора = СтрСоединить(УсловияОтбора, Символы.ПС + "И "); Иначе ТекстУсловийОтбора = "(ИСТИНА)"; КонецЕсли; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", ТекстУсловийОтбора); Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТОтборовСотрудников", ОписаниеВременнойТаблицы.ИмяВременнойТаблицыОтборов); Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТаблицаОтборов.Период", "ТаблицаОтборов." + ОписаниеВременнойТаблицы.ИмяПоляПериод); Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТаблицаОтборов.ФизическоеЛицо", "ТаблицаОтборов." + ОписаниеВременнойТаблицы.ИмяПоляФизическоеЛицо); ЗарплатаКадрыОбщиеНаборыДанных.УстановитьВыборкуТолькоРазрешенныхДанных(Запрос.Текст, ТолькоРазрешенные); ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьИмяСоздаваемойВременнойТаблицы(Запрос.Текст, "ВТСведенияОЗарплатныхПроектах", ИмяВТСведенияОЗарплатныхПроектах); Возврат Запрос; КонецФункции Процедура УточнитьТекстЗапросаДинамическогоСпискаЗачислениеЗарплаты(ЗачислениеЗарплаты) Экспорт ОбменСБанкамиПоЗарплатнымПроектамВнутренний.УточнитьТекстЗапросаДинамическогоСпискаЗачислениеЗарплаты(ЗачислениеЗарплаты); КонецПроцедуры Функция ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковОписаниеФиксацииРеквизитов() Экспорт Возврат ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковОписаниеФиксацииРеквизитов() КонецФункции Процедура СброситьКешУсловийВидимостиКомандОбменаСБанками() Экспорт ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры #Область ДокументыОбменаСБанком Функция МетаданныеПлатежногоДокументаПеречисленияЗарплаты() Экспорт МетаданныеПлатежногоДокумента = Неопределено; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ЗаполнитьМетаданныеПлатежногоДокументаПеречисленияЗарплаты(МетаданныеПлатежногоДокумента); Если МетаданныеПлатежногоДокумента <> Неопределено Тогда Возврат МетаданныеПлатежногоДокумента; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ВнешниеХозяйственныеОперации.ВзаиморасчетыССотрудникамиВХО") Тогда Модуль = ОбщегоНазначения.ОбщийМодуль("ВзаиморасчетыССотрудникамиВХО"); Модуль.ЗаполнитьМетаданныеПлатежногоДокументаПеречисленияЗарплаты(МетаданныеПлатежногоДокумента); КонецЕсли; Возврат МетаданныеПлатежногоДокумента; КонецФункции Функция ТипыДокументовВыгружаемыхВБанк() Типы = Новый Массив; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Типы, Метаданные.ОпределяемыеТипы.ДокументЗачисленияЗарплаты.Тип.Типы()); Типы.Добавить(Тип("ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников")); Типы.Добавить(Тип("ДокументСсылка.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников")); Возврат Типы КонецФункции Функция ТипыДокументовЗагружаемыхИзБанка() Типы = ТипыДокументовВыгружаемыхВБанк(); Типы.Добавить(Тип("ДокументСсылка.ПодтверждениеЗачисленияЗарплаты")); Типы.Добавить(Тип("ДокументСсылка.ПодтверждениеОткрытияЛицевыхСчетовСотрудников")); Типы.Добавить(Тип("ТаблицаФормы")); Возврат Типы КонецФункции #КонецОбласти #Область ПервоначальноеЗаполнениеИОбновлениеИнформационнойБазы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. // // Параметры: // Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления // общего модуля ОбновлениеИнформационнойБазы. // Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.1.9.15"; Обработчик.Процедура = "РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗаполнитьЛицевыеСчета"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.1.9.47"; Обработчик.Процедура = "ОбменСБанкамиПоЗарплатнымПроектам.РазделитьРолиОбменаСБанкамиПоЗарплатнымПроектам"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.1.13.60"; Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления(); Обработчик.Процедура = "Справочники.ЗарплатныеПроекты.ЗаполнитьМаксимальнаяДлинаИмениДержателяКарты"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("0487485c-8243-4dbb-80db-3fe658349b85"); Обработчик.Комментарий = НСтр("ru = 'Начальная установка настройки Максимальная длина имени держателя карты.'"); КонецПроцедуры Процедура РазделитьРолиОбменаСБанкамиПоЗарплатнымПроектам() Экспорт ЗаменяемыеРоли = Новый Соответствие; НовыеРоли = Новый Массив; НовыеРоли.Добавить(Метаданные.Роли.ВыполнениеОбменаСБанкамиПоЗарплатнымПроектам.Имя); НовыеРоли.Добавить(Метаданные.Роли.ДобавлениеИзменениеОбменаСБанкамиПоЛицевымСчетамЗарплатныхПроектов.Имя); НовыеРоли.Добавить(Метаданные.Роли.ДобавлениеИзменениеОбменаСБанкамиПоЗачислениюЗарплаты.Имя); НовыеРоли.Добавить(Метаданные.Роли.ЧтениеЖурналаДокументовОбменаСБанкамиПоЗарплатнымПроектам.Имя); НовыеРоли.Добавить(Метаданные.Роли.ИспользованиеОбработкиОбменСБанкамиПоЗарплатнымПроектам.Имя); ЗаменяемыеРоли.Вставить("? ДобавлениеИзменениеОбменаСБанкамиПоЗарплатнымПроектам", НовыеРоли); НовыеРоли = Новый Массив; НовыеРоли.Добавить(Метаданные.Роли.ЧтениеОбменаСБанкамиПоЛицевымСчетамЗарплатныхПроектов.Имя); НовыеРоли.Добавить(Метаданные.Роли.ЧтениеОбменаСБанкамиПоЗачислениюЗарплаты.Имя); НовыеРоли.Добавить(Метаданные.Роли.ЧтениеЖурналаДокументовОбменаСБанкамиПоЗарплатнымПроектам.Имя); ЗаменяемыеРоли.Вставить("? ЧтениеОбменаСБанкамиПоЗарплатнымПроектам", НовыеРоли); УправлениеДоступом.ЗаменитьРолиВПрофилях(ЗаменяемыеРоли); КонецПроцедуры #КонецОбласти #Область ПроцедурыИФункцииДляФормированияФайла // Создает файлы обмена с банком по переданным документам и присоединяет их к этим документам. // Помещает во временное хранилище массив документов, к которым были присоединены файлы. // // Параметры: // СтруктураПараметровДляФормированияФайла - Структура - должна содержать значения: // * МассивДокументов - Массив - документы, по которым создаются файлы. // * АдресХранилища - адрес временного хранилища, куда будет помещен массив документов с присоединенными файлами. // Процедура ВыгрузитьФайлыОбменаСБанком(СтруктураПараметров, АдресХранилища) Экспорт ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ВыгрузитьФайлыОбменаСБанком(СтруктураПараметров, АдресХранилища); КонецПроцедуры // Формирует и прикрепляет файл обмена к объекту с помощью подсистемы "Файлы". // // Параметры: // МассивДокументов - Массив ссылок на документы, для которых формируются файлы обмена. // МассивОписанийФайлов - Массив описаний сформированных файлов. // СтруктураПараметровДляФормированияФайла - Структура // ВидОперации // ДанныеШапки // ДанныеСтрок // КорневыеСвойства // ОбязательныеПоляФайла // СоответствиеПреобразованияЗначений // СоответствиеТипов. // Процедура СоздатьФайлыДляОбменаСБанком(СтруктураПараметровДляФормированияФайла) Экспорт Для Каждого ВыгружаемыйДокумент Из СтруктураПараметровДляФормированияФайла.ДанныеДокументов Цикл ДанныеШапкиДокумента = ВыгружаемыйДокумент.Значение; ДанныеСтрокДокумента = ВыгружаемыйДокумент.Значение.Сотрудники; ПрисоединитьФайлОбменаСБанкамиКОбъекту(ВыгружаемыйДокумент.Ключ, ДанныеШапкиДокумента, ДанныеСтрокДокумента, СтруктураПараметровДляФормированияФайла); КонецЦикла; КонецПроцедуры // Прикрепляет файл обмена с банками к документу, если к документу уже прикреплен файл, то он будет заменен. // // Параметры: // ВладелецФайла - Ссылка на документ, к которому будет прикреплен файл. // ДанныеШапкиДокумента - коллекция полей шапки документа. // ДанныеСтрокДокумента - коллекция строк документа. // СтруктураПараметровДляФормированияФайла - Структура // ВидОперации // ДанныеШапки // ДанныеСтрок // КорневыеСвойства // ОбязательныеПоляФайла // СоответствиеПреобразованияЗначений // СоответствиеТипов. // МассивОписанийФайлов - Массив описаний сформированных файлов. // Процедура ПрисоединитьФайлОбменаСБанкамиКОбъекту(ВладелецФайла, ДанныеШапкиДокумента, ДанныеСтрокДокумента, СтруктураПараметровДляФормированияФайла) Ошибки = Неопределено; ФайлОбменаСБанками = ФайлОбменаСБанкамиПоЗарплатнымПроектам(ДанныеШапкиДокумента, ДанныеСтрокДокумента, СтруктураПараметровДляФормированияФайла, Ошибки); Если Ошибки <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки); Возврат; КонецЕсли; Отказ = Ложь; ЗарегистрироватьСостояниеЗачисленияЗарплатыПоДокументу(ВладелецФайла, Отказ, Перечисления.СостояниеЗачисленияЗарплаты.ОжидаетПодтверждения, ДанныеШапкиДокумента.ДанныеРеестра); ЗарегистрироватьСостояниеОткрытияЛицевыхСчетов(ВладелецФайла, Отказ, Перечисления.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ОжидаетПодтверждения); Если Отказ Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Номер", СтрШаблон( НСтр("ru = 'По документу %1 получено подтверждение из банка. Изменение документа невозможно'"), ВладелецФайла), ВладелецФайла, , НСтр("ru = 'По документам получены подтверждения из банка. Изменение документов невозможно.'")); Возврат; КонецЕсли; УстановитьПривилегированныйРежим(Истина); ПараметрыФайла = Новый Структура( "Автор, |ВладелецФайлов, |ИмяБезРасширения, |РасширениеБезТочки, |ВремяИзменения, |ВремяИзмененияУниверсальное"); ПараметрыФайла.ВладелецФайлов = ВладелецФайла; ПараметрыФайла.ИмяБезРасширения = Лев(ДанныеШапкиДокумента.ИмяФайла, СтрДлина(ДанныеШапкиДокумента.ИмяФайла) - 4); ПараметрыФайла.РасширениеБезТочки = Прав(ДанныеШапкиДокумента.ИмяФайла, 3); ПрисоединенныйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ФайлОбменаСБанками.АдресФайла); ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); ПараметрыДанныхФайла.ИдентификаторФормы = СтруктураПараметровДляФормированияФайла.УникальныйИдентификаторФормы; ПараметрыДанныхФайла.ПолучатьСсылкуНаДвоичныеДанные = Истина; ОписаниеФайла = РаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл, ПараметрыДанныхФайла); ОписаниеФайла.Вставить("ВладелецФайла", ВладелецФайла); ОписаниеФайла.Вставить("Ссылка", ПрисоединенныйФайл); ОписаниеФайла.Вставить("ДвоичныеДанные", ФайлОбменаСБанками.ДвоичныеДанные); СтруктураПараметровДляФормированияФайла.МассивОписанийФайлов.Добавить(ОписаниеФайла); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Процедура ДополнитьМассивИменСвойствСумм(МассивИменСвойствСумм, ОбъектXDTO, ПолныйПутьСвойства) Для Каждого СвойствоОбъекта Из ОбъектXDTO.Свойства() Цикл Если СвойствоОбъекта.Тип.Имя = "Сумма" И СвойствоОбъекта.Тип.БазовыйТип.Имя = "decimal" Тогда МассивИменСвойствСумм.Добавить(ПолныйПутьСвойства + "\" + СвойствоОбъекта.Имя); КонецЕсли; СвойствоОбъектаXDTO = ФабрикаXDTO.Создать(СвойствоОбъекта.Тип); Если СвойствоОбъектаXDTO <> Неопределено Тогда ДополнитьМассивИменСвойствСумм(МассивИменСвойствСумм, СвойствоОбъектаXDTO, ПолныйПутьСвойства + "\" + СвойствоОбъекта.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры // Удаляет пространство имен из текста xml-файла для совместимости с форматами версии 1.0 и 3.0. // // Параметры: // СтрокаXML - Строка, текст xml-файла. // // Возвращаемое значение: // СтрокаXML - Строка, новый текст xml-файла без пространства имен. // Функция УдалитьПространствоИмен(ТекстXML, ФорматФайла, КодировкаФайла) МассивИменСвойствСумм = Новый Массив; Пакет = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.ФорматОбменаСБанкамиПоЗарплатнымПроектам.ПространствоИмен); Для Каждого КорневоеСвойство Из Пакет.КорневыеСвойства Цикл КорневойОбъектXDTO = ФабрикаXDTO.Создать(КорневоеСвойство.Тип); ДополнитьМассивИменСвойствСумм(МассивИменСвойствСумм, КорневойОбъектXDTO, КорневоеСвойство.Имя); КонецЦикла; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ТекстXML); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(КодировкаФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); ИмяЭлемента = ""; Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяЭлемента = ИмяЭлемента + ?(ИмяЭлемента = "", "", "\") + ЧтениеXML.Имя; ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Если (ЧтениеXML.Имя = "xmlns" Или ЧтениеXML.Имя = "xmlns:xs" Или ЧтениеXML.Имя = "xmlns:xsi" Или ЧтениеXML.Имя = "xsi:type") И (ФорматФайла = Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия1 Или ФорматФайла = Перечисления.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия3)Тогда Продолжить; КонецЕсли; ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение); КонецЦикла; КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда Если МассивИменСвойствСумм.Найти(ИмяЭлемента) = Неопределено Тогда ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение); Иначе ЗаписьXML.ЗаписатьТекст(Формат(Число(ЧтениеXML.Значение), "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧРГ=; ЧГ=0")); КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда ЗаписьXML.ЗаписатьКонецЭлемента(); ИмяЭлемента = Лев(ИмяЭлемента, СтрДлина(ИмяЭлемента) - СтрДлина(ЧтениеXML.Имя) - 1); Иначе ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение); КонецЕсли; КонецЦикла; ЧтениеXML.Закрыть(); Возврат ЗаписьXML.Закрыть(); КонецФункции // Получает адрес временного хранилища записываемого файла. // // Параметры: // ДанныеШапкиДокумента - коллекция полей шапки документа. // ДанныеСтрокДокумента - коллекция строк документа. // СтруктураПараметровДляФормированияФайла - Структура // ВидОперации // ДанныеШапки // ДанныеСтрок // КорневыеСвойства // ОбязательныеПоляФайла // СоответствиеПреобразованияЗначений // СоответствиеТипов. // Ошибки - Структура ошибок, которые будут показаны пользователю. // Добавляются с помощью метода "ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю". // // Возвращаемое значение: // АдресФайла - адрес временного хранилища записываемого файла. // Функция ФайлОбменаСБанкамиПоЗарплатнымПроектам(ДанныеШапкиДокумента, ДанныеСтрокДокумента, СтруктураПараметровДляФормированияФайла, Ошибки) // Соответствие полей файла и данных документа зависит от версии формата, указанного в зарплатном проекте. СоответствиеПолейФайла = СоответствиеПолейФайла(СтруктураПараметровДляФормированияФайла.ВидОперации, ДанныеШапкиДокумента.ФорматФайла); АдресФайла = ""; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьАдресФайлаОбменаСБанкамиПоЗарплатнымПроектам(АдресФайла, ДанныеШапкиДокумента, ДанныеСтрокДокумента, СтруктураПараметровДляФормированияФайла.КорневыеСвойства, СоответствиеПолейФайла, СтруктураПараметровДляФормированияФайла.ОбязательныеПоляФайла, СтруктураПараметровДляФормированияФайла.СоответствиеПреобразованияЗначений); Если ЭтоАдресВременногоХранилища(АдресФайла) Тогда ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла); Возврат Новый Структура("АдресФайла, ДвоичныеДанные", АдресФайла, ДвоичныеДанныеФайла); КонецЕсли; КодировкаФайла = Строка(ДанныеШапкиДокумента.КодировкаФайла); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(КодировкаФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); Пакет = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.ФорматОбменаСБанкамиПоЗарплатнымПроектам.ПространствоИмен); Для Каждого КорневоеСвойство Из СтруктураПараметровДляФормированияФайла.КорневыеСвойства Цикл КорневоеСвойствоXDTO = Пакет.КорневыеСвойства.Получить(КорневоеСвойство); КорневойОбъектXDTO = ФабрикаXDTO.Создать(КорневоеСвойствоXDTO.Тип); ЗаполнитьПоляФормата(КорневойОбъектXDTO, ДанныеШапкиДокумента, ДанныеСтрокДокумента, СоответствиеПолейФайла, СтруктураПараметровДляФормированияФайла.ОбязательныеПоляФайла, СтруктураПараметровДляФормированияФайла.СоответствиеПреобразованияЗначений, Ошибки); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КорневойОбъектXDTO, КорневоеСвойствоXDTO.ЛокальноеИмя, КорневоеСвойствоXDTO.URIПространстваИмен, , НазначениеТипаXML.Явное); КонецЦикла; ТекстXML = ЗаписьXML.Закрыть(); ТекстXML = УдалитьПространствоИмен(ТекстXML, ДанныеШапкиДокумента.ФорматФайла, КодировкаФайла); // Создание временного XML файла. Если СтруктураПараметровДляФормированияФайла.Свойство("СтруктураПараметровЭД") И СтруктураПараметровДляФормированияФайла.СтруктураПараметровЭД <> Неопределено Тогда ИмяВременногоФайла = СтруктураПараметровДляФормированияФайла.СтруктураПараметровЭД.ПолноеИмяФайла; Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); КонецЕсли; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст(ТекстXML); ТекстовыйДокумент.Записать(ИмяВременногоФайла, КодировкаФайла); ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяВременногоФайла); АдресФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла); // Если прямой обмен, то временные файлы будут удалены в БЭД Если Не СтруктураПараметровДляФормированияФайла.Свойство("СтруктураПараметровЭД") Или СтруктураПараметровДляФормированияФайла.СтруктураПараметровЭД = Неопределено Тогда УдалитьФайлы(ИмяВременногоФайла); КонецЕсли; Возврат Новый Структура("АдресФайла, ДвоичныеДанные", АдресФайла, ДвоичныеДанныеФайла); КонецФункции // Заполняет поля ОбъектаXDTO по соответствию полей. // // Параметры: // ОбъектXDTO - заполняемый ОбъектXDTO. // ТекущиеДанные - Коллекция с набором текущих значений. // ДанныеСтрокДокумента - коллекция с набором значений строк документа. // СоответствиеПолей - соответствие между полями формата и полями выгружаемой коллекции. // ОбязательныеПоля - массив обязательных для заполнения полей формата. // СоответствиеПреобразованияЗначений - соответствие полей для преобразования. // Ошибки - Структура ошибок, которые будут показаны пользователю. // Добавляются с помощью метода "ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю". // Процедура ЗаполнитьПоляФормата(ОбъектXDTO, ТекущиеДанные, ДанныеСтрокДокумента, СоответствиеПолей, ОбязательныеПоля, СоответствиеПреобразованияЗначений, Ошибки) Для Каждого СвойствоОбъектаXDTO Из ОбъектXDTO.Свойства() Цикл Если ТипЗнч(ОбъектXDTO[СвойствоОбъектаXDTO.Имя]) = Тип("СписокXDTO") И ТипЗнч(СвойствоОбъектаXDTO.Тип) = Тип("ТипОбъектаXDTO") Тогда СписокXDTO = ОбъектXDTO.ПолучитьСписок(СвойствоОбъектаXDTO.Имя); Для Каждого СтрокаДокумента Из ДанныеСтрокДокумента Цикл ОбъектXDTOизСвойстваXDTO = ФабрикаXDTO.Создать(СвойствоОбъектаXDTO.Тип); ЗаполнитьПоляФормата(ОбъектXDTOизСвойстваXDTO, СтрокаДокумента, ДанныеСтрокДокумента, СоответствиеПолей, ОбязательныеПоля, СоответствиеПреобразованияЗначений, Ошибки); СписокXDTO.Добавить(ОбъектXDTOизСвойстваXDTO); КонецЦикла; Продолжить; КонецЕсли; ЗначениеСоответствияПолей = СоответствиеПолей.Получить(СвойствоОбъектаXDTO.Имя); Если ЗначениеСоответствияПолей = Неопределено Тогда Продолжить; КонецЕсли; ЗначениеОбязательностиЗаполнения = ОбязательныеПоля.Получить(СвойствоОбъектаXDTO.Имя); Если ТипЗнч(ЗначениеОбязательностиЗаполнения) = Тип("Соответствие") Тогда ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения.Получить("ЗначениеОбязательноДляЗаполнения") <> Неопределено; Иначе ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения <> Неопределено; КонецЕсли; ЗначениеКорректно = Истина; Если ТипЗнч(ЗначениеСоответствияПолей) = Тип("Соответствие") Тогда Если Не СвойствоОбъектаXDTO = Неопределено Тогда ЗначениеПоля = ФабрикаXDTO.Создать(СвойствоОбъектаXDTO.Тип); ЗначениеОбязательностиЗаполнения = ?(ЗначениеОбязательностиЗаполнения = Неопределено, Новый Соответствие, ЗначениеОбязательностиЗаполнения); ЗаполнитьПоляФормата(ЗначениеПоля, ТекущиеДанные, ДанныеСтрокДокумента, ЗначениеСоответствияПолей, ЗначениеОбязательностиЗаполнения, СоответствиеПреобразованияЗначений, Ошибки); ЗначениеКорректно = ОбъектXDTOЗаполнен(ЗначениеПоля, ЗначениеПоля.Свойства()); Иначе ЗначениеКорректно = Ложь; КонецЕсли; Иначе ЗначениеПоля = ТекущиеДанные[ЗначениеСоответствияПолей]; КонецЕсли; ЗначениеПоля = ПреобразованноеЗначениеПоСоответствию(ЗначениеПоля, СоответствиеПреобразованияЗначений); Если (Не ЗначениеКорректно И Не ЗначениеОбязательноДляЗаполнения) ИЛИ ((ЗначениеОбязательностиЗаполнения = Неопределено ИЛИ ЗначениеОбязательностиЗаполнения = Ложь) И Не ЗначениеЗаполнено(ЗначениеПоля)) Тогда Продолжить; КонецЕсли; Если СвойствоОбъектаXDTO.Тип.Имя = "string" ИЛИ СвойствоОбъектаXDTO.Тип.БазовыйТип.Имя = "string" Тогда ЗначениеПоля = Строка(ЗначениеПоля); Если СвойствоОбъектаXDTO.Тип.Имя = "СНИЛС" Тогда ЗначениеПоля = СокрЛП(СтрЗаменить(СтрЗаменить(ЗначениеПоля, "-", ""), " ", "")); КонецЕсли; Для Каждого Фасет Из СвойствоОбъектаXDTO.Тип.Фасеты Цикл Если Фасет.Вид = ВидФасетаXDTO.МаксДлина Тогда ЗначениеПоля = Лев(ЗначениеПоля, Число(Фасет.Значение)); ИначеЕсли Фасет.Вид = ВидФасетаXDTO.МинДлина Тогда Если Число(Фасет.Значение) > СтрДлина(ЗначениеПоля) Тогда Для Шаг = СтрДлина(ЗначениеПоля) + 1 По Число(Фасет.Значение) Цикл ЗначениеПоля = " " + ЗначениеПоля; КонецЦикла; КонецЕсли; ИначеЕсли Фасет.Вид = ВидФасетаXDTO.Длина И СтрДлина(ЗначениеПоля) <> Число(Фасет.Значение) Тогда ЗначениеКорректно = Ложь; Если СвойствоОбъектаXDTO.Имя = "НомерСчета" Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Сотрудники[%1]." + ЗначениеСоответствияПолей, СтрШаблон( НСтр("ru = 'У сотрудника %1 неверный номер лицевого счета, он должен содержать 20 цифр - %2.'"), ТекущиеДанные.Сотрудник, ЗначениеПоля), СвойствоОбъектаXDTO.Имя, ТекущиеДанные.НомерСтроки, НСтр("ru = 'В строке %1 неверный номер лицевого счета, он должен содержать 20 цифр.'")); КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли СвойствоОбъектаXDTO.Тип.Имя = "date" ИЛИ СвойствоОбъектаXDTO.Тип.БазовыйТип.Имя = "date" Тогда ЗначениеПоля = Дата(ЗначениеПоля); КонецЕсли; Если ТипЗнч(ЗначениеПоля) = Тип("Строка") Или ТипЗнч(ЗначениеПоля) = Тип("Дата") Или ТипЗнч(ЗначениеПоля) = Тип("Число") Тогда Если Не ЗначениеЗаполнено(ЗначениеПоля) Тогда ЗначениеКорректно = Ложь; КонецЕсли; КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьЗначениеПоля(ЗначениеПоля, СвойствоОбъектаXDTO, ЗначениеКорректно, ОбъектXDTO, ТекущиеДанные, ДанныеСтрокДокумента, СоответствиеПолей, ОбязательныеПоля, СоответствиеПреобразованияЗначений, Ошибки); Если ЗначениеКорректно ИЛИ ЗначениеОбязательноДляЗаполнения Тогда Если СвойствоОбъектаXDTO.Тип.Имя = "Счет" И Не ЗначениеКорректно Тогда Продолжить; КонецЕсли; // Элементы с maxOccurs="unbounded" (рабочий телефон, например) - это список элементов данных XDTO Если ТипЗнч(ОбъектXDTO[СвойствоОбъектаXDTO.Имя]) = Тип("СписокXDTO") Тогда ОбъектXDTO[СвойствоОбъектаXDTO.Имя].Добавить(ЗначениеПоля); Иначе ОбъектXDTO[СвойствоОбъектаXDTO.Имя] = ЗначениеПоля; КонецЕсли КонецЕсли; КонецЦикла; КонецПроцедуры // Проверяет есть ли заполненные свойства в объекте XDTO. // Параметры: // ОбъектXDTO - проверяемый объект XDTO // может иметь тип: // ОбъектXDTO // СвойствоXDTO, у которого тип ТипОбъектаXDTO. // КоллекцияСвойств - коллекция свойств проверяемого объекта XDTO. // // Возвращаемое значение: // Если есть хоть одно заполненное свойство возвращает ИСТИНА, иначе ЛОЖЬ. // Функция ОбъектXDTOЗаполнен(ОбъектXDTO, КоллекцияСвойств) ОбъектЗаполнен = Ложь; Если Не ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда Возврат ОбъектЗаполнен; КонецЕсли; Для Каждого СвойствоОбъектаXDTO Из КоллекцияСвойств Цикл Если ТипЗнч(ОбъектXDTO[СвойствоОбъектаXDTO.Имя]) = Тип("ОбъектXDTO") Тогда ОбъектЗаполнен = ОбъектЗаполнен ИЛИ ОбъектXDTOЗаполнен(ОбъектXDTO[СвойствоОбъектаXDTO.Имя], ОбъектXDTO[СвойствоОбъектаXDTO.Имя].Свойства()); Иначе ОбъектЗаполнен = ОбъектЗаполнен ИЛИ ЗначениеЗаполнено(ОбъектXDTO[СвойствоОбъектаXDTO.Имя]); КонецЕсли; КонецЦикла; Возврат ОбъектЗаполнен; КонецФункции // Преобразует значение коллекции, в соответствии с полем преобразования. // // Параметры: // ЗначениеДляПреобразования - значение для преобразования. // СоответствиеПреобразованияЗначений - соответствие для преобразования значений. // Функция ПреобразованноеЗначениеПоСоответствию(Знач ЗначениеДляПреобразования, СоответствиеПреобразованияЗначений) ЗначениеДляПоиска = ?(ТипЗнч(ЗначениеДляПреобразования) = Тип("Строка"), ВРег(ЗначениеДляПреобразования), ЗначениеДляПреобразования); НайденноеЗначение = СоответствиеПреобразованияЗначений.Получить(ЗначениеДляПоиска); Если Не НайденноеЗначение = Неопределено Тогда ПреобразованноеЗначение = НайденноеЗначение; Иначе ПреобразованноеЗначение = ЗначениеДляПреобразования; КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ПреобразоватьЗначениеПоСоответствию(ПреобразованноеЗначение, СоответствиеПреобразованияЗначений); Возврат ПреобразованноеЗначение; КонецФункции // Получает корневые свойства XDTO-пакета формируемого файла. // // Параметры: // ВидОперации - Вид операции обмена с банками, для которого получаются корневые свойства XDTO-пакета. // // Возвращаемое значение: // КорневыеСвойства - Соответствие - корневые свойства XDTO-пакета, выгружаемые для этого вида документов. // Ключ элемента соответствия идентифицирует название корневого свойства. // В значении элемента указывается массив свойств, которые будут выгружены. // Функция КорневыеСвойства(ВидОперации) Экспорт Если ВидОперации = "ВедомостьНаВыплатуЗарплатыВБанк" Или ВидОперации = "ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников" Или ВидОперации = "ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников" Тогда КорневыеСвойства = Новый Массив; КорневыеСвойства.Добавить("СчетаПК"); ИначеЕсли ВидОперации = "ПодтверждениеЗачисленияЗарплаты" Тогда СчетаПК = Новый Массив; СчетаПК.Добавить("РезультатЗачисленияЗарплаты"); СчетаПК.Добавить("ИдПервичногоДокумента"); СчетаПК.Добавить("КонтрольныеСуммы"); СчетаПК.Добавить("КомиссияРеестра"); КорневыеСвойства = Новый Соответствие; КорневыеСвойства.Вставить("СчетаПК", СчетаПК); ИначеЕсли ВидОперации = "ПодтверждениеОткрытияЛицевыхСчетовСотрудников" Тогда СчетаПК = Новый Массив; СчетаПК.Добавить("РезультатОткрытияСчетов"); СчетаПК.Добавить("КонтрольныеСуммы"); СчетаПК.Добавить("ИдПервичногоДокумента"); КорневыеСвойства = Новый Соответствие; КорневыеСвойства.Вставить("СчетаПК", СчетаПК); КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьКорневыеСвойства(КорневыеСвойства, ВидОперации); Возврат КорневыеСвойства; КонецФункции // Получает соответствие между полями файла и полями выгружаемой коллекции. // // Параметры: // ВидОперации - Вид операции обмена с банками, для которого получается соответствие полей. // ФорматФайла - Версия формата файла для обмена с банками, указанная в зарплатном проекте. // // Возвращаемое значение: // СоответствиеПолей - Соответствие полей файла. // Ключ элемента соответствия идентифицирует название поля в файле. // Значение элемента соответствия идентифицирует название поля в коллекции. // Функция СоответствиеПолейФайла(ВидОперации, Знач ФорматФайла = Неопределено) Если НЕ ЗначениеЗаполнено(ФорматФайла) Тогда ФорматФайла = ПредопределенноеЗначение("Перечисление.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия36"); КонецЕсли; СоответствиеПолей = Новый Соответствие; СоответствиеФорматаФайла = СоответствиеФорматовФайла(); Если ВидОперации = "ВедомостьНаВыплатуЗарплатыВБанк" Тогда СоответствиеПолей.Вставить("ВидЗачисления", "ВидЗачисления"); Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.6 Тогда СоответствиеПолей.Вставить("КодВидаДохода", "ВидДоходаИсполнительногоПроизводства"); КонецЕсли; СоответствиеПолей.Вставить("ПлатежноеПоручение", "НомерПлатежногоПоручения"); СоответствиеПолей.Вставить("ДатаПлатежногоПоручения", "ДатаПлатежногоПоручения"); СоответствиеПолей.Вставить("ДатаФормирования", "ДатаФормирования"); СоответствиеПолей.Вставить("НомерДоговора", "НомерДоговора"); СоответствиеПолей.Вставить("ДатаДоговора", "ДатаДоговора"); СоответствиеПолей.Вставить("НаименованиеОрганизации", "ПолноеНаименованиеОрганизации"); СоответствиеПолей.Вставить("ИНН", "ИННОрганизации"); СоответствиеПолей.Вставить("РасчетныйСчетОрганизации", "НомерРасчетногоСчетаОрганизации"); СоответствиеПолей.Вставить("БИК", "БИКБанка"); СоответствиеПолей.Вставить("ИдПервичногоДокумента", "ИдПервичногоДокумента"); СоответствиеПолей.Вставить("НомерРеестра", "НомерРеестра"); СоответствиеПолей.Вставить("ДатаРеестра", "ДатаДокумента"); СоответствиеЗачислениеЗарплаты = Новый Соответствие; СоответствиеЗачислениеЗарплаты.Вставить("Нпп", "НомерСтроки"); СоответствиеЗачислениеЗарплаты.Вставить("Фамилия", "Фамилия"); СоответствиеЗачислениеЗарплаты.Вставить("Имя", "Имя"); СоответствиеЗачислениеЗарплаты.Вставить("Отчество", "Отчество"); СоответствиеЗачислениеЗарплаты.Вставить("ОтделениеБанка", "ОтделениеБанка"); СоответствиеЗачислениеЗарплаты.Вставить("ФилиалОтделенияБанка", "ФилиалОтделенияБанка"); СоответствиеЗачислениеЗарплаты.Вставить("ЛицевойСчет", "НомерЛицевогоСчета"); СоответствиеЗачислениеЗарплаты.Вставить("Сумма", "СуммаКВыплате"); СоответствиеЗачислениеЗарплаты.Вставить("КодВалюты", "КодВалюты"); Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.6 Тогда СоответствиеЗачислениеЗарплаты.Вставить("ОбщаяСуммаУдержаний", "ВзысканнаяСумма"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.7 Тогда СоответствиеЗачислениеЗарплаты.Вставить("ИдентификаторПлатежа", "ИдентификаторПлатежа"); СоответствиеЗачислениеЗарплаты.Вставить("НомерКарты", "БанковскаяКарта"); СоответствиеЗачислениеЗарплаты.Вставить("СНИЛС", "СНИЛС"); СоответствиеЗачислениеЗарплаты.Вставить("БИК", "БИКБанкаСчета"); СоответствиеЗачислениеЗарплаты.Вставить("НомерТелефона", "НомерТелефона"); КонецЕсли; СоответствиеПолей.Вставить("ЗачислениеЗарплаты", СоответствиеЗачислениеЗарплаты); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", "КоличествоЗаписей"); СоответствиеКонтрольныеСуммы.Вставить("СуммаИтого", "СуммаИтого"); СоответствиеПолей.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников" Тогда СоответствиеПолей.Вставить("ДатаФормирования", "ДатаФормирования"); СоответствиеПолей.Вставить("НомерДоговора", "НомерДоговора"); СоответствиеПолей.Вставить("ДатаДоговора", "ДатаДоговора"); СоответствиеПолей.Вставить("НаименованиеОрганизации", "ПолноеНаименованиеОрганизации"); СоответствиеПолей.Вставить("ИНН", "ИННОрганизации"); СоответствиеПолей.Вставить("РасчетныйСчетОрганизации", "НомерРасчетногоСчетаОрганизации"); СоответствиеПолей.Вставить("БИК", "БИКБанка"); СоответствиеПолей.Вставить("ИдПервичногоДокумента", "ИдПервичногоДокумента"); СоответствиеПолей.Вставить("НомерРеестра", "НомерРеестра"); СоответствиеПолей.Вставить("ДатаРеестра", "ДатаДокумента"); СоответствиеОткрытиеСчетов = Новый Соответствие; СоответствиеОткрытиеСчетов.Вставить("Нпп", "НомерСтроки"); СоответствиеОткрытиеСчетов.Вставить("Фамилия", "Фамилия"); СоответствиеОткрытиеСчетов.Вставить("Имя", "Имя"); СоответствиеОткрытиеСчетов.Вставить("Отчество", "Отчество"); СоответствиеОткрытиеСчетов.Вставить("ОтделениеБанка", "ОтделениеБанка"); СоответствиеОткрытиеСчетов.Вставить("ФилиалОтделенияБанка", "ФилиалОтделенияБанка"); СоответствиеЭмбоссированныйТекст = Новый Соответствие; СоответствиеЭмбоссированныйТекст.Вставить("Поле1", "ЭмбоссированныйТекст1"); СоответствиеЭмбоссированныйТекст.Вставить("Поле2", "ЭмбоссированныйТекст2"); СоответствиеЭмбоссированныйТекст.Вставить("Поле3", "ЭмбоссированныйТекст3"); СоответствиеОткрытиеСчетов.Вставить("ЭмбоссированныйТекст", СоответствиеЭмбоссированныйТекст); СоответствиеВидВклада = Новый Соответствие; СоответствиеВидВклада.Вставить("__content", "СистемаРасчетовПоБанковскимКартам"); СоответствиеВидВклада.Вставить("КодВидаВклада", "КодВидаВклада"); СоответствиеВидВклада.Вставить("КодПодвидаВклада", "КодПодвидаВклада"); СоответствиеВидВклада.Вставить("КодВалюты", "КодВалютыВклада"); СоответствиеОткрытиеСчетов.Вставить("ВидВклада", СоответствиеВидВклада); СоответствиеУдостоверениеЛичности = Новый Соответствие; СоответствиеУдостоверениеЛичности.Вставить("ВидДокумента", "ДокументВид"); СоответствиеУдостоверениеЛичности.Вставить("Серия", "ДокументСерия"); СоответствиеУдостоверениеЛичности.Вставить("Номер", "ДокументНомер"); СоответствиеУдостоверениеЛичности.Вставить("ДатаВыдачи", "ДокументДатаВыдачи"); СоответствиеУдостоверениеЛичности.Вставить("КемВыдан", "ДокументКемВыдан"); СоответствиеУдостоверениеЛичности.Вставить("КодПодразделения", "ДокументКодПодразделения"); СоответствиеУдостоверениеЛичности.Вставить("КодВидаДокумента", "КодВидаДокумента"); СоответствиеОткрытиеСчетов.Вставить("УдостоверениеЛичности", СоответствиеУдостоверениеЛичности); УстановитьСоответствиеМестаРождения(СоответствиеОткрытиеСчетов, "МестоРождения", "МестоРождения"); УстановитьСоответствиеАдреса(СоответствиеОткрытиеСчетов, "АдресМестаРаботы", "АдресМестаРаботы"); УстановитьСоответствиеАдреса(СоответствиеОткрытиеСчетов, "АдресПрописки", "АдресПоПрописке"); УстановитьСоответствиеАдреса(СоответствиеОткрытиеСчетов, "АдресПроживания", "АдресМестаПроживания"); СоответствиеОткрытиеСчетов.Вставить("ДатаРождения", "ДатаРождения"); СоответствиеОткрытиеСчетов.Вставить("Пол", "Пол"); СоответствиеОткрытиеСчетов.Вставить("РабочийТелефон", "ТелефонРабочийПредставление"); СоответствиеОткрытиеСчетов.Вставить("ДомашнийТелефон", "ТелефонДомашнийПредставление"); СоответствиеОткрытиеСчетов.Вставить("Сумма", "СуммаПервоначальногоПополнения"); Если СоответствиеФорматаФайла.Получить(ФорматФайла) > 1 Тогда // версии старше 1 СоответствиеОткрытиеСчетов.Вставить("КодВалюты", "КодВалюты"); СоответствиеОткрытиеСчетов.Вставить("Должность", "Должность"); СоответствиеОткрытиеСчетов.Вставить("ПризнакЗарплатный", "ОплатаЗарплатнойКарты"); СоответствиеОткрытиеСчетов.Вставить("КатегорияНаселения", "КатегорияНаселения"); СоответствиеОткрытиеСчетов.Вставить("БонусПрограмма", "БонуснаяПрограмма"); СоответствиеОткрытиеСчетов.Вставить("БонусУчастника", "НомерУчастникаБонуснойПрограммы"); СоответствиеОткрытиеСчетов.Вставить("ТарифСледующийГод", "ТарифСледующийГод"); СоответствиеОткрытиеСчетов.Вставить("ТарифТекущийГод", "ТарифТекущийГод"); СоответствиеОткрытиеСчетов.Вставить("ПризнакРассылки", "СпособРассылкиОтчета"); СоответствиеОткрытиеСчетов.Вставить("ИнтернетАдрес", "АдресЭлектроннойПочты"); СоответствиеОткрытиеСчетов.Вставить("СчетДебета", "СчетДебета"); СоответствиеОткрытиеСчетов.Вставить("ОператорСвязи", "ОператорСвязи"); СоответствиеОткрытиеСчетов.Вставить("МобильныйТелефон", "НомерМобильногоТелефона"); СоответствиеОткрытиеСчетов.Вставить("МобильныйБанк", "ТарифМобильногоБанка"); СоответствиеОткрытиеСчетов.Вставить("ПередачаБКИ", "РазрешитьПередачуИнформацииВБКИ"); СоответствиеОткрытиеСчетов.Вставить("КонтрольнаяИнформация", "КонтрольнаяИнформация"); СоответствиеОткрытиеСчетов.Вставить("Резидент", "ЯвляетсяРезидентом"); СоответствиеОткрытиеСчетов.Вставить("Гражданство", "Гражданство"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.2 Тогда СоответствиеМиграционнаяКарта = Новый Соответствие; СоответствиеМиграционнаяКарта.Вставить("Номер", "НомерМиграционнойКарты"); СоответствиеМиграционнаяКарта.Вставить("ДатаНачалаПребывания", "ДатаНачалаПребыванияМиграционнойКарты"); СоответствиеМиграционнаяКарта.Вставить("ДатаОкончанияПребывания", "ДатаОкончанияПребыванияМиграционнойКарты"); СоответствиеМиграционныйДокумент = Новый Соответствие; СоответствиеМиграционныйДокумент.Вставить("КодДокумента", "КодМиграционногоДокумента"); СоответствиеМиграционныйДокумент.Вставить("НомерДокумента", "НомерМиграционногоДокумента"); СоответствиеМиграционныйДокумент.Вставить("ДатаНачалаПребывания", "ДатаНачалаПребыванияМиграционногоДокумента"); СоответствиеМиграционныйДокумент.Вставить("ДатаОкончанияПребывания", "ДатаОкончанияПребыванияМиграционногоДокумента"); СоответствиеНерезидент = Новый Соответствие; СоответствиеНерезидент.Вставить("МиграционнаяКарта", СоответствиеМиграционнаяКарта); СоответствиеНерезидент.Вставить("МиграционныйДокумент", СоответствиеМиграционныйДокумент); СоответствиеОткрытиеСчетов.Вставить("Нерезидент", СоответствиеНерезидент); СоответствиеОткрытиеСчетов.Вставить("СуммаЗаработнойПлаты", "ПрогнозируемыйМесячныйДоход"); СоответствиеОткрытиеСчетов.Вставить("ТабельныйНомер", "ТабельныйНомер"); СоответствиеОткрытиеСчетов.Вставить("ДатаОформления", "ДатаПриема"); СоответствиеОткрытиеСчетов.Вставить("ДатаВыплаты", "ДатаВыплатыЗарплаты"); УстановитьСоответствиеАдреса(СоответствиеОткрытиеСчетов, "АдресИнформирования", "АдресДляИнформирования"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.4 Тогда СоответствиеОткрытиеСчетов.Вставить("ИдентификаторДизайна", "ИдентификаторДизайна"); СоответствиеОткрытиеСчетов.Вставить("ПВК", "ПВК"); СоответствиеПриложениеКарта = Новый Соответствие; СоответствиеПриложениеКарта.Вставить("Код", "ПриложениеКартаКод"); СоответствиеПриложениеКарта.Вставить("Параметр", "ПриложениеКартаПараметры"); СоответствиеОткрытиеСчетов.Вставить("ПриложениеКарта", СоответствиеПриложениеКарта); СоответствиеОткрытиеСчетов.Вставить("КонтактныйМобильныйТелефон", "НомерМобильногоТелефонаПредставление"); КонецЕсли; Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.5 Тогда СоответствиеОткрытиеСчетов.Вставить("СНИЛС", "СНИЛС"); КонецЕсли; СоответствиеПолей.Вставить("ОткрытиеСчетов", СоответствиеОткрытиеСчетов); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", "КоличествоЗаписей"); СоответствиеКонтрольныеСуммы.Вставить("СуммаИтого", "СуммаИтого"); СоответствиеПолей.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ПодтверждениеЗачисленияЗарплаты" Тогда СоответствиеПолей.Вставить("Нпп", "НомерСтроки"); СоответствиеПолей.Вставить("ДатаФормирования", "ДатаФормирования"); СоответствиеПолей.Вставить("Фамилия", "Фамилия"); СоответствиеПолей.Вставить("Имя", "Имя"); СоответствиеПолей.Вставить("Отчество", "Отчество"); СоответствиеПолей.Вставить("ЛицевойСчет", "НомерЛицевогоСчета"); СоответствиеПолей.Вставить("Результат", "РезультатЗачисленияЗарплаты"); СоответствиеПолей.Вставить("Сумма", "Сумма"); СоответствиеПолей.Вставить("РасшифровкаРезультата", "КомментарийРезультата"); Если СоответствиеФорматаФайла.Получить(ФорматФайла) >= 3.7 Тогда СоответствиеПолей.Вставить("ИдентификаторПлатежа", "ИдентификаторПлатежа"); СоответствиеПолей.Вставить("Комиссия", "Комиссия"); СоответствиеПолей.Вставить("БИК", "БИКБанкаСчета"); СоответствиеПолей.Вставить("ЛицевойСчетУдовлетворяетТребованиям", "ЛицевойСчетУдовлетворяетТребованиям"); СоответствиеПолей.Вставить("НомерСчетаУдовлетворяющегоТребованиям", "НомерСчетаУдовлетворяющегоТребованиям"); СоответствиеПолей.Вставить("БИКСчетаУдовлетворяющегоТребованиям", "БИКСчетаУдовлетворяющегоТребованиям"); КонецЕсли; ИначеЕсли ВидОперации = "ПодтверждениеОткрытияЛицевыхСчетовСотрудников" Тогда СоответствиеПолей.Вставить("Нпп", "НомерСтроки"); СоответствиеПолей.Вставить("ДатаФормирования", "ДатаФормирования"); СоответствиеПолей.Вставить("Фамилия", "Фамилия"); СоответствиеПолей.Вставить("Имя", "Имя"); СоответствиеПолей.Вставить("Отчество", "Отчество"); СоответствиеПолей.Вставить("ЛицевойСчет", "НомерЛицевогоСчета"); СоответствиеПолей.Вставить("Результат", "РезультатОткрытияСчета"); СоответствиеПолей.Вставить("Сумма", "Сумма"); СоответствиеПолей.Вставить("РасшифровкаРезультата", "КомментарийРезультата"); СоответствиеУдостоверениеЛичности = Новый Соответствие; СоответствиеУдостоверениеЛичности.Вставить("ВидДокумента", "ДокументВид"); СоответствиеУдостоверениеЛичности.Вставить("КодВидаДокумента", "КодВидаДокумента"); СоответствиеУдостоверениеЛичности.Вставить("Серия", "ДокументСерия"); СоответствиеУдостоверениеЛичности.Вставить("Номер", "ДокументНомер"); СоответствиеУдостоверениеЛичности.Вставить("ДатаВыдачи", "ДокументДатаВыдачи"); СоответствиеУдостоверениеЛичности.Вставить("КемВыдан", "ДокументКемВыдан"); СоответствиеУдостоверениеЛичности.Вставить("КодПодразделения", "ДокументКодПодразделения"); СоответствиеПолей.Вставить("УдостоверениеЛичности", СоответствиеУдостоверениеЛичности); ИначеЕсли ВидОперации = "ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников" Тогда СоответствиеПолей.Вставить("ДатаФормирования", "ДатаФормирования"); СоответствиеПолей.Вставить("НомерДоговора", "НомерДоговора"); СоответствиеПолей.Вставить("ДатаДоговора", "ДатаДоговора"); СоответствиеПолей.Вставить("НаименованиеОрганизации", "ПолноеНаименованиеОрганизации"); СоответствиеПолей.Вставить("ИНН", "ИННОрганизации"); СоответствиеПолей.Вставить("РасчетныйСчетОрганизации", "НомерРасчетногоСчетаОрганизации"); СоответствиеПолей.Вставить("БИК", "БИКБанка"); СоответствиеПолей.Вставить("ИдПервичногоДокумента", "ИдПервичногоДокумента"); СоответствиеПолей.Вставить("НомерРеестра", "НомерРеестра"); СоответствиеПолей.Вставить("ДатаРеестра", "ДатаДокумента"); СоответствиеСпискаУвольнений = Новый Соответствие; СоответствиеСпискаУвольнений.Вставить("Нпп", "НомерСтроки"); СоответствиеСпискаУвольнений.Вставить("Фамилия", "Фамилия"); СоответствиеСпискаУвольнений.Вставить("Имя", "Имя"); СоответствиеСпискаУвольнений.Вставить("Отчество", "Отчество"); СоответствиеСпискаУвольнений.Вставить("ОтделениеБанка", "ОтделениеБанка"); СоответствиеСпискаУвольнений.Вставить("ФилиалОтделенияБанка", "ФилиалОтделенияБанка"); СоответствиеСпискаУвольнений.Вставить("ДатаУвольнения", "ДатаЗакрытия"); СоответствиеСпискаУвольнений.Вставить("НомерСчета", "ЛицевойСчет"); СоответствиеПолей.Вставить("СписокУвольнений", СоответствиеСпискаУвольнений); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", "КоличествоЗаписей"); СоответствиеКонтрольныеСуммы.Вставить("СуммаИтого", "СуммаИтого"); СоответствиеПолей.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьСоответствиеПолейФайла(СоответствиеПолей, ВидОперации, ФорматФайла); Возврат СоответствиеПолей; КонецФункции // Получает соответствие обязательных для заполнения полей файла. // // Параметры: // ВидОперации - Вид операции обмена с банками, для которого получаются обязательные для заполнения в файле поля. // // Возвращаемое значение: // ОбязательныеПоля - Соответствие полей файла. // Ключ элемента соответствия идентифицирует название поля, обязательного для заполнения. // В значении указывается Истина,если поле обязательно для заполнения, иначе Ложь. // По умолчанию, если поле не включено в соответствие, используется значение Ложь. // // Для группы используется соответствие обязательных полей, где также можно указать обязательность самой группы // добавив элемент "ЗначениеОбязательноДляЗаполнения". // Функция ОбязательныеПоляФайла(ВидОперации) Экспорт ОбязательныеПоля = Новый Соответствие; Если ВидОперации = "ВедомостьНаВыплатуЗарплатыВБанк" Тогда ОбязательныеПоля.Вставить("ДатаФормирования", Истина); ОбязательныеПоля.Вставить("НомерДоговора", Истина); ОбязательныеПоля.Вставить("НаименованиеОрганизации", Истина); СоответствиеЗачислениеЗарплаты = Новый Соответствие; СоответствиеЗачислениеЗарплаты.Вставить("Фамилия", Истина); СоответствиеЗачислениеЗарплаты.Вставить("Имя", Истина); СоответствиеЗачислениеЗарплаты.Вставить("ЛицевойСчет", Истина); СоответствиеЗачислениеЗарплаты.Вставить("Сумма", Истина); ОбязательныеПоля.Вставить("ЗачислениеЗарплаты", СоответствиеЗачислениеЗарплаты); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", Истина); СоответствиеКонтрольныеСуммы.Вставить("СуммаИтого", Истина); ОбязательныеПоля.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников" Тогда ОбязательныеПоля.Вставить("ДатаФормирования", Истина); ОбязательныеПоля.Вставить("НомерДоговора", Истина); ОбязательныеПоля.Вставить("НаименованиеОрганизации", Истина); СоответствиеОткрытиеСчетов = Новый Соответствие; СоответствиеОткрытиеСчетов.Вставить("Фамилия", Истина); СоответствиеОткрытиеСчетов.Вставить("Имя", Истина); СоответствиеОткрытиеСчетов.Вставить("ДатаРождения", Истина); СоответствиеОткрытиеСчетов.Вставить("Пол", Истина); СоответствиеОткрытиеСчетов.Вставить("ЯвляетсяРезидентом", Истина); СоответствиеВидВклада = Новый Соответствие; СоответствиеВидВклада.Вставить("Название", Истина); СоответствиеВидВклада.Вставить("ЗначениеОбязательноДляЗаполнения", Истина); СоответствиеОткрытиеСчетов.Вставить("ВидВклада", СоответствиеВидВклада); СоответствиеУдостоверениеЛичности = Новый Соответствие; СоответствиеУдостоверениеЛичности.Вставить("ВидДокумента", Истина); СоответствиеУдостоверениеЛичности.Вставить("Номер", Истина); СоответствиеУдостоверениеЛичности.Вставить("ДатаВыдачи", Истина); СоответствиеУдостоверениеЛичности.Вставить("КемВыдан", Истина); СоответствиеУдостоверениеЛичности.Вставить("ЗначениеОбязательноДляЗаполнения", Истина); СоответствиеОткрытиеСчетов.Вставить("УдостоверениеЛичности", СоответствиеУдостоверениеЛичности); СоответствиеЭмбоссированныйТекст = Новый Соответствие; СоответствиеЭмбоссированныйТекст.Вставить("Поле1", Истина); СоответствиеЭмбоссированныйТекст.Вставить("Поле2", Истина); СоответствиеЭмбоссированныйТекст.Вставить("ЗначениеОбязательноДляЗаполнения", Истина); СоответствиеОткрытиеСчетов.Вставить("ЭмбоссированныйТекст", СоответствиеЭмбоссированныйТекст); СоответствиеМиграционнаяКарта = Новый Соответствие; СоответствиеМиграционнаяКарта.Вставить("Номер", Истина); СоответствиеМиграционнаяКарта.Вставить("ДатаНачалаПребывания", Истина); СоответствиеМиграционнаяКарта.Вставить("ДатаОкончанияПребывания", Истина); СоответствиеМиграционныйДокумент = Новый Соответствие; СоответствиеМиграционныйДокумент.Вставить("КодДокумента", Истина); СоответствиеМиграционныйДокумент.Вставить("НомерДокумента", Истина); СоответствиеМиграционныйДокумент.Вставить("ДатаНачалаПребывания", Истина); СоответствиеМиграционныйДокумент.Вставить("ДатаОкончанияПребывания", Истина); СоответствиеНерезидент = Новый Соответствие; СоответствиеНерезидент.Вставить("МиграционнаяКарта", СоответствиеМиграционнаяКарта); СоответствиеНерезидент.Вставить("МиграционныйДокумент", СоответствиеМиграционныйДокумент); СоответствиеОткрытиеСчетов.Вставить("Нерезидент", СоответствиеНерезидент); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", Истина); ОбязательныеПоля.Вставить("ОткрытиеСчетов", СоответствиеОткрытиеСчетов); ОбязательныеПоля.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников" Тогда ОбязательныеПоля.Вставить("ДатаФормирования", Истина); ОбязательныеПоля.Вставить("НомерДоговора", Истина); ОбязательныеПоля.Вставить("НаименованиеОрганизации", Истина); СоответствиеСпискаУвольнений = Новый Соответствие; СоответствиеСпискаУвольнений.Вставить("ДатаУвольнения", Истина); СоответствиеСпискаУвольнений.Вставить("НомерСчета", Истина); ОбязательныеПоля.Вставить("СписокУвольнений", СоответствиеСпискаУвольнений); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", Истина); ОбязательныеПоля.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ПодтверждениеЗачисленияЗарплаты" Тогда ОбязательныеПоля.Вставить("ДатаФормирования", Истина); ОбязательныеПоля.Вставить("ИдПервичногоДокумента", Истина); СоответствиеРезультатЗачисленияЗарплаты = Новый Соответствие; СоответствиеРезультатЗачисленияЗарплаты.Вставить("Фамилия", Истина); СоответствиеРезультатЗачисленияЗарплаты.Вставить("Имя", Истина); СоответствиеРезультатЗачисленияЗарплаты.Вставить("ЛицевойСчет", Истина); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", Истина); ОбязательныеПоля.Вставить("РезультатЗачисленияЗарплаты", СоответствиеРезультатЗачисленияЗарплаты); ОбязательныеПоля.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); ИначеЕсли ВидОперации = "ПодтверждениеОткрытияЛицевыхСчетовСотрудников" Тогда ОбязательныеПоля.Вставить("ДатаФормирования", Истина); ОбязательныеПоля.Вставить("ИдПервичногоДокумента", Истина); СоответствиеРезультатОткрытияСчетов = Новый Соответствие; СоответствиеРезультатОткрытияСчетов.Вставить("Фамилия", Истина); СоответствиеРезультатОткрытияСчетов.Вставить("Имя", Истина); СоответствиеУдостоверениеЛичности = Новый Соответствие; СоответствиеУдостоверениеЛичности.Вставить("ВидДокумента", Истина); СоответствиеУдостоверениеЛичности.Вставить("Номер", Истина); СоответствиеУдостоверениеЛичности.Вставить("ДатаВыдачи", Истина); СоответствиеУдостоверениеЛичности.Вставить("КемВыдан", Истина); СоответствиеУдостоверениеЛичности.Вставить("ЗначениеОбязательноДляЗаполнения", Истина); СоответствиеРезультатОткрытияСчетов.Вставить("УдостоверениеЛичности", СоответствиеУдостоверениеЛичности); СоответствиеКонтрольныеСуммы = Новый Соответствие; СоответствиеКонтрольныеСуммы.Вставить("КоличествоЗаписей", Истина); ОбязательныеПоля.Вставить("РезультатОткрытияСчетов", СоответствиеРезультатОткрытияСчетов); ОбязательныеПоля.Вставить("КонтрольныеСуммы", СоответствиеКонтрольныеСуммы); КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьОбязательныеПоляФайла(ОбязательныеПоля, ВидОперации); Возврат ОбязательныеПоля; КонецФункции // Получает соответствие значений для преобразования. // // Параметры: // ВидОперации - Вид операции обмена с банками, для которого получается соответствие преобразования значений полей. // // Возвращаемое значение: // СоответствиеПреобразованияЗначений - соответствие значений для преобразования. // Ключ элемента соответствия идентифицирует преобразуемое значение. // Значение элемента соответствия идентифицирует преобразованное значение. // Функция СоответствиеПреобразованияЗначений(ВидОперации) Экспорт СоответствиеПреобразованияЗначений = Новый Соответствие; Если ВидОперации = "ВедомостьНаВыплатуЗарплатыВБанк" Тогда СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.ДоходыБезОграниченияВзысканий, ""); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.ЗарплатаВознаграждения, "1"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииНеоблагаемые, "2"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииОблагаемые, "3"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииНеоблагаемыеПериодические, "2"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииОблагаемыеПериодические, "3"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииНеоблагаемыеЕдиновременные,"4"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыДоходовИсполнительногоПроизводства.КомпенсацииОблагаемыеЕдиновременные, "5"); ИначеЕсли ВидОперации = "ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников" Тогда СоответствиеПреобразованияЗначений.Вставить(Истина, "true"); СоответствиеПреобразованияЗначений.Вставить(Ложь, "false"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ПолФизическогоЛица.Женский, "Женский"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ПолФизическогоЛица.Мужской, "Мужской"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыОплатыЗарплатнойКарты.ПустаяСсылка(), "0"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыОплатыЗарплатнойКарты.ОплачиваетсяПредприятием, "1"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыОплатыЗарплатнойКарты.ОплачиваетсяДержателем, "2"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ВидыОплатыЗарплатнойКарты.ОплачиваетсяПредприятиемИДержателемВДолях, "3"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.БонусныеПрограммыБанков.ПустаяСсылка(), Неопределено); СоответствиеПреобразованияЗначений.Вставить(Перечисления.БонусныеПрограммыБанков.AE, "AE"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.БонусныеПрограммыБанков.GM, "GM"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.БонусныеПрограммыБанков.PG, "PG"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.СпособыДоставкиКорреспонденцииБанка.ПустаяСсылка(), Неопределено); СоответствиеПреобразованияЗначений.Вставить(Перечисления.СпособыДоставкиКорреспонденцииБанка.НеРассылать, Неопределено); СоответствиеПреобразованияЗначений.Вставить(Перечисления.СпособыДоставкиКорреспонденцииБанка.Email, "1"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.СпособыДоставкиКорреспонденцииБанка.Почтой, "3"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ТарифыМобильногоБанка.ПустаяСсылка(), "0"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ТарифыМобильногоБанка.Экономный, "1"); СоответствиеПреобразованияЗначений.Вставить(Перечисления.ТарифыМобильногоБанка.Полный, "2"); ИначеЕсли ВидОперации = "ПодтверждениеЗачисленияЗарплаты" Тогда СоответствиеПреобразованияЗначений.Вставить(Истина, "true"); СоответствиеПреобразованияЗначений.Вставить(Ложь, "false"); СоответствиеПреобразованияЗначений.Вставить(ВРег("Зачислено"), Перечисления.РезультатыЗачисленияЗарплаты.Зачислено); СоответствиеПреобразованияЗначений.Вставить(ВРег("ОшибкаФИО"), Перечисления.РезультатыЗачисленияЗарплаты.ОшибкаФИО); СоответствиеПреобразованияЗначений.Вставить(ВРег("ОшибкаВФИО"), Перечисления.РезультатыЗачисленияЗарплаты.ОшибкаФИО); СоответствиеПреобразованияЗначений.Вставить(ВРег("СчетЗакрыт"), Перечисления.РезультатыЗачисленияЗарплаты.СчетЗакрыт); СоответствиеПреобразованияЗначений.Вставить(ВРег("СчетОтсутствует"), Перечисления.РезультатыЗачисленияЗарплаты.СчетОтсутствует); СоответствиеПреобразованияЗначений.Вставить(ВРег("НеЗачислено"), Перечисления.РезультатыЗачисленияЗарплаты.НеЗачислено); ИначеЕсли ВидОперации = "ПодтверждениеОткрытияЛицевыхСчетовСотрудников" Тогда СоответствиеПреобразованияЗначений.Вставить(ВРег("СчетОткрыт"), Перечисления.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетОткрыт); СоответствиеПреобразованияЗначений.Вставить(ВРег("ОшибкаЗаполненияДанных"), Перечисления.РезультатыОткрытияЛицевыхСчетовСотрудников.ОшибкаЗаполненияДанных); СоответствиеПреобразованияЗначений.Вставить(ВРег("СчетНеОткрыт"), Перечисления.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетНеОткрыт); КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьСоответствиеПреобразованияЗначений(СоответствиеПреобразованияЗначений, ВидОперации); Возврат СоответствиеПреобразованияЗначений; КонецФункции // Получает соответствие типов между наименованиями полей файла и колонок коллекции. // // Параметры: // ВидОперации - Вид операции обмена с банками, для которого получается соответствие типов. // // Возвращаемое значение: // СоответствиеПолей - Соответствие типов полей документа. // Ключ элемента соответствия идентифицирует название поля в файле. // Значение элемента соответствия идентифицирует тип поля в коллекции. // Функция СоответствиеТипов(ВидОперации) Экспорт СоответствиеТипов = Новый Соответствие; Если ВидОперации = "ПодтверждениеЗачисленияЗарплаты" Тогда СоответствиеТипов.Вставить("Нпп", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))); СоответствиеТипов.Вставить("ДатаФормирования", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); СоответствиеТипов.Вставить("Фамилия", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("Отчество", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("ЛицевойСчет", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("ИдентификаторПлатежа", Новый ОписаниеТипов("УникальныйИдентификатор")); СоответствиеТипов.Вставить("БИК", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(9))); СоответствиеТипов.Вставить("ЛицевойСчетУдовлетворяетТребованиям", Новый ОписаниеТипов("Булево")); СоответствиеТипов.Вставить("НомерСчетаУдовлетворяющегоТребованиям", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("БИКСчетаУдовлетворяющегоТребованиям", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(9))); СоответствиеТипов.Вставить("Комиссия", Новый ОписаниеТипов("Строка", Новый КвалификаторыЧисла(15, 2))); СоответствиеТипов.Вставить("Результат", Новый ОписаниеТипов("ПеречислениеСсылка.РезультатыЗачисленияЗарплаты")); СоответствиеТипов.Вставить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); СоответствиеТипов.Вставить("РасшифровкаРезультата", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500))); ИначеЕсли ВидОперации = "ПодтверждениеОткрытияЛицевыхСчетовСотрудников" Тогда СоответствиеТипов.Вставить("Нпп", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))); СоответствиеТипов.Вставить("ДатаФормирования", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); СоответствиеТипов.Вставить("Фамилия", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("Отчество", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("ЛицевойСчет", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); СоответствиеТипов.Вставить("Результат", Новый ОписаниеТипов("ПеречислениеСсылка.РезультатыОткрытияЛицевыхСчетовСотрудников")); СоответствиеТипов.Вставить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); СоответствиеТипов.Вставить("РасшифровкаРезультата", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500))); СоответствиеУдостоверениеЛичности = Новый Соответствие; СоответствиеУдостоверениеЛичности.Вставить("ВидДокумента", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(75))); СоответствиеУдостоверениеЛичности.Вставить("КодВидаДокумента", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(2))); СоответствиеУдостоверениеЛичности.Вставить("Серия", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(14))); СоответствиеУдостоверениеЛичности.Вставить("Номер", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(14))); СоответствиеУдостоверениеЛичности.Вставить("ДатаВыдачи", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); СоответствиеУдостоверениеЛичности.Вставить("КемВыдан", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(250))); СоответствиеУдостоверениеЛичности.Вставить("КодПодразделения", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10))); СоответствиеТипов.Вставить("УдостоверениеЛичности", СоответствиеУдостоверениеЛичности); КонецЕсли; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьСоответствиеТипов(СоответствиеТипов, ВидОперации); Возврат СоответствиеТипов; КонецФункции // Устанавливает соответствие полей адреса в файле обмена и полей таблицы значений. // // Параметры: // СоответствиеПолей - соответствие полей формата. // НазваниеПоляПриемника - название поля в файле обмена. // НазваниеПоляИсточника - название поля в таблице значений. // Процедура УстановитьСоответствиеАдреса(СоответствиеПолей, НазваниеПоляПриемника, НазваниеПоляИсточника) Страна = Новый Соответствие; Страна.Вставить("СтранаНазвание", "СтранаНазвание" + НазваниеПоляИсточника); Страна.Вставить("СтранаКод", "СтранаКод" + НазваниеПоляИсточника); Регион = Новый Соответствие; Регион.Вставить("РегионНазвание", "РегионНазвание" + НазваниеПоляИсточника); Регион.Вставить("РегионСокращение", "РегионСокращение" + НазваниеПоляИсточника); Район = Новый Соответствие; Район.Вставить("РайонНазвание", "РайонНазвание" + НазваниеПоляИсточника); Район.Вставить("РайонСокращение", "РайонСокращение" + НазваниеПоляИсточника); Город = Новый Соответствие; Город.Вставить("ГородНазвание", "ГородНазвание" + НазваниеПоляИсточника); Город.Вставить("ГородСокращение", "ГородСокращение" + НазваниеПоляИсточника); НаселенныйПункт = Новый Соответствие; НаселенныйПункт.Вставить("НаселенныйПунктНазвание", "НаселенныйПунктНазвание" + НазваниеПоляИсточника); НаселенныйПункт.Вставить("НаселенныйПунктСокращение", "НаселенныйПунктСокращение" + НазваниеПоляИсточника); Улица = Новый Соответствие; Улица.Вставить("УлицаНазвание", "УлицаНазвание" + НазваниеПоляИсточника); Улица.Вставить("УлицаСокращение", "УлицаСокращение" + НазваниеПоляИсточника); Адрес = Новый Соответствие; Адрес.Вставить("Индекс", "Индекс" + НазваниеПоляИсточника); Адрес.Вставить("Страна", Страна); Адрес.Вставить("Регион", Регион); Адрес.Вставить("Район", Район); Адрес.Вставить("Город", Город); Адрес.Вставить("НаселенныйПункт", НаселенныйПункт); Адрес.Вставить("Улица", Улица); Адрес.Вставить("Дом", "Дом" + НазваниеПоляИсточника); Адрес.Вставить("Корпус", "Корпус" + НазваниеПоляИсточника); Адрес.Вставить("Квартира", "Квартира" + НазваниеПоляИсточника); СоответствиеПолей.Вставить(НазваниеПоляПриемника, Адрес); КонецПроцедуры // Устанавливает соответствие полей места рождения в файле обмена и полей таблицы значений. // // Параметры: // СоответствиеПолей - соответствие полей формата. // НазваниеПоляПриемника - название поля в файле обмена. // НазваниеПоляИсточника - название поля в таблице значений. // Процедура УстановитьСоответствиеМестаРождения(СоответствиеПолей, НазваниеПоляПриемника, НазваниеПоляИсточника) Страна = Новый Соответствие; Страна.Вставить("СтранаНазвание", "СтранаНазвание" + НазваниеПоляИсточника); Регион = Новый Соответствие; Регион.Вставить("РегионНазвание", "РегионНазвание" + НазваниеПоляИсточника); Регион.Вставить("РегионСокращение", "РегионСокращение" + НазваниеПоляИсточника); Район = Новый Соответствие; Район.Вставить("РайонНазвание", "РайонНазвание" + НазваниеПоляИсточника); Район.Вставить("РайонСокращение", "РайонСокращение" + НазваниеПоляИсточника); НаселенныйПункт = Новый Соответствие; НаселенныйПункт.Вставить("НаселенныйПунктНазвание", "НаселенныйПунктНазвание" + НазваниеПоляИсточника); НаселенныйПункт.Вставить("НаселенныйПунктСокращение", "НаселенныйПунктСокращение" + НазваниеПоляИсточника); Адрес = Новый Соответствие; Адрес.Вставить("Страна", Страна); Адрес.Вставить("Регион", Регион); Адрес.Вставить("Район", Район); Адрес.Вставить("НаселенныйПункт", НаселенныйПункт); СоответствиеПолей.Вставить(НазваниеПоляПриемника, Адрес); КонецПроцедуры // Возвращает результат выгрузки файлов для обмена с банком. // // Параметры: // МассивДокументов - массив ссылок на документы, по которым будут выгружены файлы. // // Возвращаемое значение: // Результат - структура // ЗаданиеВыполнено - булево, Истина , если фоновое задание выполнено, иначе Ложь. // ПолучаемыеФайлы - Массив описаний передаваемых файлов. // Функция РезультатВыгрузкиФайловОбменаСБанком(Форма, МассивДокументов) Экспорт НаименованиеЗадания = НСтр("ru = 'Выгрузка файлов для обмена с банком'"); ИмяЭкспортнойПроцедуры = "ОбменСБанкамиПоЗарплатнымПроектам.ВыгрузитьФайлыОбменаСБанком"; Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( Форма.УникальныйИдентификатор, ИмяЭкспортнойПроцедуры, Новый Структура("МассивДокументов, УникальныйИдентификаторФормы", МассивДокументов, Форма.УникальныйИдентификатор), НаименованиеЗадания); Форма.АдресХранилища = Результат.АдресХранилища; ПолучаемыеФайлы = Новый Массив; Если Результат.ЗаданиеВыполнено Тогда ПолучаемыеФайлы = МассивОписанийПередаваемыхФайлов(Форма.АдресХранилища, Форма.УникальныйИдентификатор); КонецЕсли; Результат.Вставить("ПолучаемыеФайлы", ПолучаемыеФайлы); Возврат Результат; КонецФункции // Копирует значения свойств ОбъектXDTO(источник) в свойства ОбъектXDTO(приемник). // Сопоставление производится по именам свойств. // Процедура ЗаполнитьОбъектXDTO(ОбъектXDTOПриемник, ОбъектXDTOИсточник) Экспорт Для Каждого СвойствоОбъектаXDTO Из ОбъектXDTOИсточник.Свойства() Цикл ТипСвойства = ОбъектXDTOПриемник.Свойства().Получить(СвойствоОбъектаXDTO.Имя).Тип; Если ТипЗнч(ТипСвойства) = Тип("ТипОбъектаXDTO") Тогда Если ТипЗнч(ОбъектXDTOПриемник[СвойствоОбъектаXDTO.Имя]) = Тип("СписокXDTO") Тогда СписокXDTOПриемник = ОбъектXDTOПриемник.ПолучитьСписок(СвойствоОбъектаXDTO.Имя); Если ТипЗнч(ОбъектXDTOИсточник[СвойствоОбъектаXDTO.Имя]) = Тип("СписокXDTO") Тогда СписокXDTOИсточник = ОбъектXDTOИсточник.ПолучитьСписок(СвойствоОбъектаXDTO.Имя); Иначе СписокXDTOИсточник = Новый Массив; СписокXDTOИсточник.Добавить(ОбъектXDTOИсточник[СвойствоОбъектаXDTO.Имя]); КонецЕсли; Для Каждого ОбъектXDTOСпискаИсточника Из СписокXDTOИсточник Цикл ОбъектXDTOСпискаПриемника = ФабрикаXDTO.Создать(ОбъектXDTOПриемник.Свойства().Получить(СвойствоОбъектаXDTO.Имя).Тип); ЗаполнитьОбъектXDTO(ОбъектXDTOСпискаПриемника, ОбъектXDTOСпискаИсточника); СписокXDTOПриемник.Добавить(ОбъектXDTOСпискаПриемника); КонецЦикла; Продолжить; КонецЕсли; Если ОбъектXDTOИсточник.ПолучитьXDTO(СвойствоОбъектаXDTO.Имя) <> Неопределено Тогда ОбъектXDTOПриемник[СвойствоОбъектаXDTO.Имя] = ФабрикаXDTO.Создать(ОбъектXDTOПриемник.Свойства().Получить(СвойствоОбъектаXDTO.Имя).Тип); ЗаполнитьОбъектXDTO(ОбъектXDTOПриемник[СвойствоОбъектаXDTO.Имя], ОбъектXDTOИсточник.ПолучитьXDTO(СвойствоОбъектаXDTO.Имя)); КонецЕсли; Иначе Если ТипСвойства.Фасеты <> Неопределено Тогда // Значение может быть указано в различных вариантах заглавных и прописных символов. // Нам нужно получить точное соответствие значения со значениями перечисления из формата обмена. ЗначениеСвойстваXDTO = ОбъектXDTOИсточник.ПолучитьXDTO(СвойствоОбъектаXDTO.Имя); Для Каждого Фасет Из ТипСвойства.Фасеты Цикл Если Фасет.Вид <> ВидФасетаXDTO.Перечисление Тогда Продолжить; КонецЕсли; Если ВРег(Фасет.Значение) = ВРег(ЗначениеСвойстваXDTO.Значение) Тогда ОбъектXDTOИсточник[СвойствоОбъектаXDTO.Имя] = Фасет.Значение; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ЗначениеИсточника = ОбъектXDTOИсточник.ПолучитьXDTO(СвойствоОбъектаXDTO.Имя); // Значение может быть пустым, проверим Если ТипЗнч(ЗначениеИсточника) <> Тип("ОбъектXDTO") И ЗначениеИсточника <> Неопределено Тогда ОбъектXDTOПриемник[СвойствоОбъектаXDTO.Имя] = ЗначениеИсточника; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры #КонецОбласти #Область ПроцедурыИФункцииДляПолученияФайлаПодтверждения // Создает структуру для заполнения документа подтверждения банка. // // Параметры: // ВидПодтверждения - Строка - Вид подтверждения, по которому будет производиться загрузка файла. // ОбъектXDTO - Заполненный ОбъектXDTO, по которому будет заполнена для заполнения документа. // ПервичныйДокумент - Документ, по которому получено подтверждение из банка. // Отказ - Булево - Если Истина, то загрузка файла не будет выполнена. // // Возвращаемое значение: // // Структура, по которой будет заполнен документ подтверждения. // Функция СтруктураДляЗаполненияДокументаПоПодтверждениюБанка(ВидПодтверждения, ОбъектXDTO, ХешСумма, ПервичныйДокумент, Отказ) Экспорт КорневыеСвойства = КорневыеСвойства(ВидПодтверждения); СоответствиеТипов = СоответствиеТипов(ВидПодтверждения); ОбязательныеПоляФайла = ОбязательныеПоляФайла(ВидПодтверждения); СоответствиеПреобразованияЗначений = СоответствиеПреобразованияЗначений(ВидПодтверждения); СтруктураДанныхДляЗаполненияДокумента = Новый Структура("ПервичныйДокумент"); СтруктураДанныхДляЗаполненияДокумента.Вставить("Дата", ОбъектXDTO.ДатаФормирования); СтруктураДанныхДляЗаполненияДокумента.Вставить("МесяцОткрытия", НачалоМесяца(ТекущаяДатаСеанса())); СтруктураДанныхДляЗаполненияДокумента.Вставить("Организация", Справочники.Организации.ПустаяСсылка()); СтруктураДанныхДляЗаполненияДокумента.Вставить("ЗарплатныйПроект", Справочники.ЗарплатныеПроекты.ПустаяСсылка()); СтруктураДанныхДляЗаполненияДокумента.Вставить("Подразделение", Справочники.ПодразделенияОрганизаций.ПустаяСсылка()); СтруктураДанныхДляЗаполненияДокумента.Вставить("ХешФайла", ХешСумма); Пакет = ФабрикаXDTO.Пакеты.Получить(Метаданные.ПакетыXDTO.ФорматОбменаСБанкамиПоЗарплатнымПроектам.ПространствоИмен); Для Каждого КорневоеСвойствоXDTO Из Пакет.КорневыеСвойства Цикл ЗагружаемыеСвойства = КорневыеСвойства.Получить(КорневоеСвойствоXDTO.Имя); Если ЗагружаемыеСвойства = Неопределено Тогда Продолжить; КонецЕсли; Для Каждого ЗагружаемоеСвойство Из ОбъектXDTO.Свойства() Цикл Если ЗагружаемыеСвойства.Найти(ЗагружаемоеСвойство.Имя) = Неопределено Тогда Продолжить; КонецЕсли; ЗначениеОбязательностиЗаполнения = ОбязательныеПоляФайла.Получить(ЗагружаемоеСвойство.Имя); Если ТипЗнч(ЗначениеОбязательностиЗаполнения) = Тип("Соответствие") Тогда ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения.Получить("ЗначениеОбязательноДляЗаполнения") <> Неопределено; Иначе ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения <> Неопределено; КонецЕсли; Если ЗагружаемоеСвойство.Имя = "ИдПервичногоДокумента" И ЗначениеЗаполнено(ПервичныйДокумент) Тогда ПолучаемыеРеквизиты = "Организация"; МетаданныеПервичногоДокумента = ПервичныйДокумент.Метаданные(); ЕстьРеквизитЗарплатныйПроект = МетаданныеПервичногоДокумента.Реквизиты.Найти("ЗарплатныйПроект") <> Неопределено; Если ЕстьРеквизитЗарплатныйПроект Тогда ПолучаемыеРеквизиты = СтрШаблон("%1, ЗарплатныйПроект", ПолучаемыеРеквизиты); КонецЕсли; ЕстьРеквизитПодразделения = МетаданныеПервичногоДокумента.Реквизиты.Найти("Подразделение") <> Неопределено; Если ЕстьРеквизитПодразделения Тогда ПолучаемыеРеквизиты = СтрШаблон("%1, Подразделение", ПолучаемыеРеквизиты); КонецЕсли; СтруктураДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПервичныйДокумент, ПолучаемыеРеквизиты); СтруктураДанныхДляЗаполненияДокумента.Вставить("ПервичныйДокумент", ПервичныйДокумент); СтруктураДанныхДляЗаполненияДокумента.Вставить("Организация", СтруктураДокумента.Организация); Если ЕстьРеквизитЗарплатныйПроект Тогда СтруктураДанныхДляЗаполненияДокумента.Вставить("ЗарплатныйПроект", СтруктураДокумента.ЗарплатныйПроект); Иначе СведенияОПлатежномДокументе = СведенияОПлатежномДокументе( ВедомостиПлатежногоДокументаПеречисленияЗарплаты(ПервичныйДокумент), Новый Структура("ЗарплатныйПроект")); СтруктураДанныхДляЗаполненияДокумента.Вставить("ЗарплатныйПроект", СведенияОПлатежномДокументе.ЗарплатныйПроект); КонецЕсли; Если ЕстьРеквизитПодразделения Тогда СтруктураДанныхДляЗаполненияДокумента.Вставить("Подразделение", СтруктураДокумента.Подразделение); КонецЕсли; ИначеЕсли ЗагружаемоеСвойство.Имя = "КомиссияРеестра" Тогда СтруктураДанныхДляЗаполненияДокумента.Вставить("КомиссияРеестра", ОбъектXDTO.КомиссияРеестра); КонецЕсли; Если ЗначениеЗаполнено(СтруктураДанныхДляЗаполненияДокумента.ЗарплатныйПроект) Тогда ФорматФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураДанныхДляЗаполненияДокумента.ЗарплатныйПроект, "ФорматФайла"); Иначе ФорматФайла = ПредопределенноеЗначение("Перечисление.ФорматыФайловОбменаПоЗарплатномуПроекту.Версия36"); КонецЕсли; СоответствиеПолей = СоответствиеПолейФайла(ВидПодтверждения, ФорматФайла); ЗагружаемоеСвойствоОбъектаXDTO = ОбъектXDTO[ЗагружаемоеСвойство.Имя]; Если ЗначениеОбязательноДляЗаполнения И ЗагружаемоеСвойствоОбъектаXDTO = Неопределено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'В файле подтверждения не указано обязательное значение поля %1.'"), ЗагружаемоеСвойство.Имя); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); КонецЕсли; Если Не ТипЗнч(ЗагружаемоеСвойствоОбъектаXDTO) = Тип("ОбъектXDTO") Тогда Продолжить; КонецЕсли; Для Каждого СвойствоОбъектаXDTO Из ЗагружаемоеСвойствоОбъектаXDTO.Свойства() Цикл Если ТипЗнч(ЗагружаемоеСвойствоОбъектаXDTO[СвойствоОбъектаXDTO.Имя]) = Тип("СписокXDTO") Тогда ДанныеФизическихЛиц = Новый ТаблицаЗначений; СписокXDTO = ЗагружаемоеСвойствоОбъектаXDTO.ПолучитьСписок(СвойствоОбъектаXDTO.Имя); ОбъектXDTOпоТипуСвойстваXDTO = ФабрикаXDTO.Создать(СписокXDTO.ВладеющееСвойство.Тип); ДобавитьКолонкиВТаблицуЗначенийИзСвойствXDTO(ДанныеФизическихЛиц, ОбъектXDTOпоТипуСвойстваXDTO.Свойства(), СоответствиеПолей, СоответствиеТипов); Если ЗначениеОбязательноДляЗаполнения И ОбъектXDTO[СвойствоОбъектаXDTO.Имя] = Неопределено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'В файле подтверждения не указано обязательное значение поля %1.'"), СвойствоОбъектаXDTO.Имя); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); Продолжить; Иначе ЗначениеОбязательностиЗаполнения = ?(ЗначениеОбязательностиЗаполнения = Неопределено, Новый Соответствие, ЗначениеОбязательностиЗаполнения); КонецЕсли; Для Каждого СтрокаСпискаXDTO Из СписокXDTO Цикл ЗаполнитьКоллекциюИзСвойствXDTO(ДанныеФизическихЛиц.Добавить(), СтрокаСпискаXDTO, ОбъектXDTOпоТипуСвойстваXDTO.Свойства(), СоответствиеПолей, СоответствиеПреобразованияЗначений, ЗначениеОбязательностиЗаполнения); КонецЦикла; СтруктураДанныхДляЗаполненияДокумента.Вставить("Сотрудники", ДанныеФизическихЛиц); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьСтруктуруДляЗаполненияДокументаПоПодтверждениюБанка( СтруктураДанныхДляЗаполненияДокумента, ОбъектXDTO, КорневыеСвойства, СоответствиеПолей, СоответствиеПреобразованияЗначений, СоответствиеТипов, ПервичныйДокумент, Отказ); Возврат СтруктураДанныхДляЗаполненияДокумента; КонецФункции // Добавляет колонки в таблицу значений из коллекции свойств по соответствиям типов. // // Параметры: // ДанныеФизическихЛиц - Таблица значений, в которую нужно добавить колонки. // СвойстваXDTO - Коллекция свойств. // СоответствиеПолей - соответствие между полями коллекции и полями файла. // СоответствиеТипов - соответствие типов между наименованиями полей файла и колонок коллекции. // Процедура ДобавитьКолонкиВТаблицуЗначенийИзСвойствXDTO(ДанныеФизическихЛиц, СвойстваXDTO, СоответствиеПолей, СоответствиеТипов) Для Каждого СвойствоXDTO Из СвойстваXDTO Цикл НаименованиеКолонки = СоответствиеПолей.Получить(СвойствоXDTO.Имя); ТипКолонки = СоответствиеТипов.Получить(СвойствоXDTO.Имя); Если ТипЗнч(НаименованиеКолонки) = Тип("Соответствие") И ТипЗнч(ТипКолонки) = Тип("Соответствие") Тогда ОбъектXDTOпоТипуСвойстваXDTO = ФабрикаXDTO.Создать(СвойствоXDTO.Тип); ДобавитьКолонкиВТаблицуЗначенийИзСвойствXDTO(ДанныеФизическихЛиц, ОбъектXDTOпоТипуСвойстваXDTO.Свойства(), НаименованиеКолонки, ТипКолонки); Продолжить; ИначеЕсли НаименованиеКолонки = Неопределено ИЛИ ТипКолонки = Неопределено Тогда Продолжить; КонецЕсли; Если ДанныеФизическихЛиц.Колонки.Найти(НаименованиеКолонки) = Неопределено Тогда ДанныеФизическихЛиц.Колонки.Добавить(НаименованиеКолонки, ТипКолонки); КонецЕсли; КонецЦикла; КонецПроцедуры // Заполняет коллекцию свойствами объекта XDTO по соответствию полей. // Поля преобразуются по соответствию преобразования. // // Параметры: // Коллекция - коллекция значений, которые нужно заполнить. // ОбъектXDTO - заполненный ОбъектXDTO. // СвойстваXDTO - коллекция свойств объекта XDTO. // СоответствиеПолей - соответствие между полями коллекции и полями файла. // СоответствиеПреобразованияЗначений - соответствие значений для преобразования. // Процедура ЗаполнитьКоллекциюИзСвойствXDTO(Коллекция, ОбъектXDTO, СвойстваXDTO, СоответствиеПолей, СоответствиеПреобразованияЗначений, ОбязательныеПоля) Для Каждого СвойствоXDTO Из СвойстваXDTO Цикл ЗначениеОбязательностиЗаполнения = ОбязательныеПоля.Получить(СвойствоXDTO.Имя); Если ТипЗнч(ЗначениеОбязательностиЗаполнения) = Тип("Соответствие") Тогда ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения.Получить("ЗначениеОбязательноДляЗаполнения") <> Неопределено; Иначе ЗначениеОбязательноДляЗаполнения = ЗначениеОбязательностиЗаполнения <> Неопределено; КонецЕсли; НаименованиеКолонки = СоответствиеПолей.Получить(СвойствоXDTO.Имя); Если НаименованиеКолонки = Неопределено Тогда Продолжить; ИначеЕсли ТипЗнч(НаименованиеКолонки) = Тип("Соответствие") Тогда ОбъектXDTOпоТипуСвойстваXDTO = ФабрикаXDTO.Создать(СвойствоXDTO.Тип); Если ЗначениеОбязательноДляЗаполнения И ОбъектXDTO[СвойствоXDTO.Имя] = Неопределено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'В файле подтверждения не указано обязательное значение поля %1.'"), СвойствоXDTO.Имя); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); Продолжить; Иначе ЗначениеОбязательностиЗаполнения = ?(ЗначениеОбязательностиЗаполнения = Неопределено, Новый Соответствие, ЗначениеОбязательностиЗаполнения); КонецЕсли; ЗаполнитьКоллекциюИзСвойствXDTO(Коллекция, ОбъектXDTO[СвойствоXDTO.Имя], ОбъектXDTOпоТипуСвойстваXDTO.Свойства(), НаименованиеКолонки, СоответствиеПреобразованияЗначений, ЗначениеОбязательностиЗаполнения); Продолжить; КонецЕсли; Если ЗначениеОбязательноДляЗаполнения И ОбъектXDTO[СвойствоXDTO.Имя] = Неопределено Тогда ТекстОшибки = СтрШаблон( НСтр("ru = 'В файле подтверждения не указано обязательное значение поля %1.'"), СвойствоXDTO.Имя); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки); Продолжить; КонецЕсли; Если ТипЗнч(Коллекция[НаименованиеКолонки]) = Тип("УникальныйИдентификатор") Тогда Если ОбъектXDTO[СвойствоXDTO.Имя] = Неопределено Тогда Продолжить; Иначе Коллекция[НаименованиеКолонки] = Новый УникальныйИдентификатор(ПреобразованноеЗначениеПоСоответствию(ОбъектXDTO[СвойствоXDTO.Имя], СоответствиеПреобразованияЗначений)); КонецЕсли; Иначе Коллекция[НаименованиеКолонки] = ПреобразованноеЗначениеПоСоответствию(ОбъектXDTO[СвойствоXDTO.Имя], СоответствиеПреобразованияЗначений); КонецЕсли; КонецЦикла; КонецПроцедуры Функция СостояниеОткрытияЛицевыхСчетов(ПодтверждениеОткрытияЛицевыхСчетов) Экспорт ПервичныйДокумент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодтверждениеОткрытияЛицевыхСчетов, "ПервичныйДокумент"); // Получим физических лиц по заявке на открытие л/с и сравним их с физическими лицами в подтверждениях // Состояние заявки "Выгружен в банк" пока не получим подтверждения по всем физическим лицам. Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ПервичныйДокумент", ПервичныйДокумент); Запрос.Текст = "ВЫБРАТЬ | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Ссылка КАК Ссылка, | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПервичныйДокумент КАК ПервичныйДокумент |ПОМЕСТИТЬ ВТПодтвержденияОткрытияЛицевыхСчетов |ИЗ | Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудников |ГДЕ | ПодтверждениеОткрытияЛицевыхСчетовСотрудников.ПервичныйДокумент = &ПервичныйДокумент | И ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Проведен |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ФизическоеЛицо |ПОМЕСТИТЬ ВТДанныеЗаявкиНаОткрытиеЛицевыхСчетов |ИЗ | Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПодтвержденияОткрытияЛицевыхСчетов КАК ПодтвержденияОткрытияЛицевыхСчетов | ПО ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка = ПодтвержденияОткрытияЛицевыхСчетов.ПервичныйДокумент |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПодтвержденияОткрытияЛицевыхСчетов.Ссылка КАК Ссылка, | ПодтвержденияОткрытияЛицевыхСчетов.ПервичныйДокумент КАК ПервичныйДокумент, | ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.ФизическоеЛицо, | ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.РезультатОткрытияСчета |ПОМЕСТИТЬ ВТПодтвержденияОткрытияЛицевыхСчетовСотрудники |ИЗ | ВТПодтвержденияОткрытияЛицевыхСчетов КАК ПодтвержденияОткрытияЛицевыхСчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Сотрудники КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники | ПО ПодтвержденияОткрытияЛицевыхСчетов.Ссылка = ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ПодтвержденияЗагруженыНеПоВсемСотрудникам |ПОМЕСТИТЬ ВТДанныеЗаполненности |ИЗ | ВТДанныеЗаявкиНаОткрытиеЛицевыхСчетов КАК ДанныеЗаявкиНаОткрытиеЛицевыхСчетов | ПОЛНОЕ СОЕДИНЕНИЕ ВТПодтвержденияОткрытияЛицевыхСчетовСотрудники КАК ПодтвержденияОткрытияЛицевыхСчетовСотрудники | ПО ДанныеЗаявкиНаОткрытиеЛицевыхСчетов.ФизическоеЛицо = ПодтвержденияОткрытияЛицевыхСчетовСотрудники.ФизическоеЛицо |ГДЕ | (ДанныеЗаявкиНаОткрытиеЛицевыхСчетов.ФизическоеЛицо ЕСТЬ NULL | ИЛИ ПодтвержденияОткрытияЛицевыхСчетовСотрудники.ФизическоеЛицо ЕСТЬ NULL ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.ПервичныйДокумент КАК ПервичныйДокумент, | МАКСИМУМ(ВЫБОР | КОГДА ДанныеЗаполненности.ПодтвержденияЗагруженыНеПоВсемСотрудникам = ИСТИНА | ТОГДА ЛОЖЬ | КОГДА ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.РезультатОткрытияСчета = ЗНАЧЕНИЕ(Перечисление.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетОткрыт) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК СуществуетРезультатОткрытияСчетаСчетОткрыт, | МАКСИМУМ(ВЫБОР | КОГДА ДанныеЗаполненности.ПодтвержденияЗагруженыНеПоВсемСотрудникам = ИСТИНА | ТОГДА ЛОЖЬ | КОГДА ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.РезультатОткрытияСчета <> ЗНАЧЕНИЕ(Перечисление.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетОткрыт) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК СуществуетРезультатыОткрытияСчетаНеОткрыт |ПОМЕСТИТЬ ВТРезультатыОткрытияСчета |ИЗ | ВТПодтвержденияОткрытияЛицевыхСчетовСотрудники КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники | ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеЗаполненности КАК ДанныеЗаполненности | ПО (ИСТИНА) | |СГРУППИРОВАТЬ ПО | ПодтверждениеОткрытияЛицевыхСчетовСотрудниковСотрудники.ПервичныйДокумент |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР | КОГДА НЕ ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Проведен | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка) | КОГДА РезультатыОткрытияСчета.СуществуетРезультатОткрытияСчетаСчетОткрыт | И РезультатыОткрытияСчета.СуществуетРезультатыОткрытияСчетаНеОткрыт | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ЛицевыеСчетаОткрытыСОшибками) | КОГДА РезультатыОткрытияСчета.СуществуетРезультатыОткрытияСчетаНеОткрыт | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ЛицевыеСчетаНеОткрыты) | КОГДА РезультатыОткрытияСчета.СуществуетРезультатОткрытияСчетаСчетОткрыт | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ЛицевыеСчетаОткрыты) | КОГДА ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Проведен | ТОГДА ВЫБОР | КОГДА НаличиеФайлов.ЕстьФайлы | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ОжидаетПодтверждения) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ГотовКВыгрузке) | КОНЕЦ | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка) | КОНЕЦ КАК Состояние |ИЗ | Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников | ЛЕВОЕ СОЕДИНЕНИЕ ВТРезультатыОткрытияСчета КАК РезультатыОткрытияСчета | ПО ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка = РезультатыОткрытияСчета.ПервичныйДокумент | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов | ПО ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка = НаличиеФайлов.ОбъектСФайлами |ГДЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Ссылка = &ПервичныйДокумент"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Состояние; КонецЕсли; Возврат Перечисления.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ПустаяСсылка(); КонецФункции Функция СостояниеЗачисленияЗарплатыДляПодтверждения(ПодтверждениеЗачисленияЗарплаты) Экспорт ПервичныйДокумент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодтверждениеЗачисленияЗарплаты, "ПервичныйДокумент"); МетаданныеПервичногоДокумента = ПервичныйДокумент.Метаданные(); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ПервичныйДокумент", ПервичныйДокумент); Запрос.Текст = "ВЫБРАТЬ | ПодтверждениеЗачисленияЗарплаты.Ссылка КАК Ссылка, | ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент КАК ПервичныйДокумент |ПОМЕСТИТЬ ВТПодтвержденияЗачисленияЗарплаты |ИЗ | Документ.ПодтверждениеЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты |ГДЕ | ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент = &ПервичныйДокумент | И ПодтверждениеЗачисленияЗарплаты.Проведен |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПодтвержденияЗачисленияЗарплаты.Ссылка, | ПодтвержденияЗачисленияЗарплаты.ПервичныйДокумент |ИЗ | ВТПодтвержденияЗачисленияЗарплаты КАК ПодтвержденияЗачисленияЗарплаты"; ПодтвержденияЗачисленияЗарплаты = Запрос.Выполнить().Выгрузить(); ДокументыПодтверждений = ПодтвержденияЗачисленияЗарплаты.ВыгрузитьКолонку("Ссылка"); ДокументыПодтверждений = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ДокументыПодтверждений); ОплаченныеВедомости = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПервичныйДокумент); МетаданныеПлатежногоДокумента = МетаданныеПлатежногоДокументаПеречисленияЗарплаты(); Если МетаданныеПлатежногоДокумента <> Неопределено И МетаданныеПлатежногоДокумента.ПолноеИмя() = МетаданныеПервичногоДокумента.ПолноеИмя() Тогда ОплаченныеВедомости = ВедомостиПлатежногоДокументаПеречисленияЗарплаты(ПервичныйДокумент); КонецЕсли; // Получим физических лиц по ведомостям и сравним их с физическими лицами в подтверждениях // Если подтверждения получены не по всем физическим лицам, то считаем, что результат "ЗачисленоПолностью" по // неполученным физическим лицам. ВзаиморасчетыССотрудниками.СоздатьВТДанныеВедомостейДляОплатыДокументами( Запрос.МенеджерВременныхТаблиц, Истина, ДокументыПодтверждений, ОплаченныеВедомости, , Неопределено); Запрос.Текст = "ВЫБРАТЬ | ПодтверждениеЗачисленияЗарплаты.Ссылка КАК Ссылка, | ПодтверждениеЗачисленияЗарплаты.ПервичныйДокумент КАК ПервичныйДокумент, | ПодтверждениеЗачисленияЗарплатыСотрудники.ФизическоеЛицо, | ПодтверждениеЗачисленияЗарплатыСотрудники.РезультатЗачисленияЗарплаты |ПОМЕСТИТЬ ВТПодтвержденияЗачисленияЗарплатыСотрудники |ИЗ | ВТПодтвержденияЗачисленияЗарплаты КАК ПодтверждениеЗачисленияЗарплаты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПодтверждениеЗачисленияЗарплаты.Сотрудники КАК ПодтверждениеЗачисленияЗарплатыСотрудники | ПО ПодтверждениеЗачисленияЗарплаты.Ссылка = ПодтверждениеЗачисленияЗарплатыСотрудники.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ПодтвержденияЗагруженыНеПоВсемСотрудникам |ПОМЕСТИТЬ ВТДанныеЗаполненности |ИЗ | ВТДанныеВедомостейДляОплатыДокументами КАК ДанныеВедомостейДляОплатыДокументами | ПОЛНОЕ СОЕДИНЕНИЕ ВТПодтвержденияЗачисленияЗарплатыСотрудники КАК ПодтвержденияЗачисленияЗарплаты | ПО ДанныеВедомостейДляОплатыДокументами.ФизическоеЛицо = ПодтвержденияЗачисленияЗарплаты.ФизическоеЛицо |ГДЕ | (ДанныеВедомостейДляОплатыДокументами.ФизическоеЛицо ЕСТЬ NULL | ИЛИ ПодтвержденияЗачисленияЗарплаты.ФизическоеЛицо ЕСТЬ NULL ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПодтверждениеЗачисленияЗарплатыСотрудники.ПервичныйДокумент КАК ПервичныйДокумент, | МАКСИМУМ(ВЫБОР | КОГДА ДанныеЗаполненности.ПодтвержденияЗагруженыНеПоВсемСотрудникам = ИСТИНА | ТОГДА ИСТИНА | КОГДА ПодтверждениеЗачисленияЗарплатыСотрудники.РезультатЗачисленияЗарплаты = ЗНАЧЕНИЕ(Перечисление.РезультатыЗачисленияЗарплаты.Зачислено) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК СуществуетРезультатЗачисленияЗарплатыЗачислено, | МАКСИМУМ(ВЫБОР | КОГДА ПодтверждениеЗачисленияЗарплатыСотрудники.РезультатЗачисленияЗарплаты <> ЗНАЧЕНИЕ(Перечисление.РезультатыЗачисленияЗарплаты.Зачислено) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК СуществуетРезультатЗачисленияЗарплатыНеЗачислено |ПОМЕСТИТЬ ВТРезультатыЗачисленияЗарплаты |ИЗ | ВТПодтвержденияЗачисленияЗарплатыСотрудники КАК ПодтверждениеЗачисленияЗарплатыСотрудники | ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеЗаполненности КАК ДанныеЗаполненности | ПО (ИСТИНА) | |СГРУППИРОВАТЬ ПО | ПодтверждениеЗачисленияЗарплатыСотрудники.ПервичныйДокумент |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР | КОГДА НЕ ДокументЗачисленияЗарплаты.Проведен | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ПустаяСсылка) | КОГДА РезультатыЗачисленияЗарплаты.СуществуетРезультатЗачисленияЗарплатыЗачислено | И РезультатыЗачисленияЗарплаты.СуществуетРезультатЗачисленияЗарплатыНеЗачислено | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоСОшибками) | КОГДА РезультатыЗачисленияЗарплаты.СуществуетРезультатЗачисленияЗарплатыНеЗачислено | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.НеЗачислено) | КОГДА РезультатыЗачисленияЗарплаты.СуществуетРезультатЗачисленияЗарплатыЗачислено | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ЗачисленоПолностью) | КОГДА ДокументЗачисленияЗарплаты.Проведен | ТОГДА ВЫБОР | КОГДА НаличиеФайлов.ЕстьФайлы | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ОжидаетПодтверждения) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ГотовКВыгрузке) | КОНЕЦ | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостояниеЗачисленияЗарплаты.ПустаяСсылка) | КОНЕЦ КАК Состояние |ИЗ | #ДокументЗачисленияЗарплаты КАК ДокументЗачисленияЗарплаты | ЛЕВОЕ СОЕДИНЕНИЕ ВТРезультатыЗачисленияЗарплаты КАК РезультатыЗачисленияЗарплаты | ПО ДокументЗачисленияЗарплаты.Ссылка = РезультатыЗачисленияЗарплаты.ПервичныйДокумент | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов | ПО ДокументЗачисленияЗарплаты.Ссылка = НаличиеФайлов.ОбъектСФайлами |ГДЕ | ДокументЗачисленияЗарплаты.Ссылка = &ПервичныйДокумент"; ИмяОбъекта = МетаданныеПервичногоДокумента.ПолноеИмя(); Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ДокументЗачисленияЗарплаты", ИмяОбъекта); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Состояние; КонецЕсли; Возврат Перечисления.СостояниеЗачисленияЗарплаты.ПустаяСсылка(); КонецФункции #КонецОбласти #Область ПроцедурыИФункцииЗаполненияЗаявкиНаОткрытиеСчетов // Формирует временную таблицу ВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц, // список физических лиц, с состояниями открытия лицевых счетов. // // Параметры: // МенеджерВременныхТаблиц // Организация // ЗарплатныйПроект // ДатаПолученияДанных - дата получения кадровой информации по физическим лицам. // Подразделение - не обязательно для заполнения. // СписокФизическихЛиц - список физических лиц, по которым нужно получить данные, // если не указан - данные получаются по всем физическим лицам организации и подразделения. // ТолькоРазрешенные - Булево // // Создает в МенеджерВременныхТаблиц временную таблицу с именем ВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц. // Поля временной таблицы // ФизическоеЛицо, // Организация, // ЗарплатныйПроект, // ОткрытиеЛицевогоСчетаОтложено - булево, Истина, если по физическому лицу отложено открытие лицевого счета, иначе // Ложь. // ОжидаетПодтверждения - булево, Истина, если по физическому лицу ожидается подтверждение открытия лицевого счета, // иначе Ложь. // ЛицевойСчетНеОткрыт - булево, Истина, если по физическому лицу получено подтверждение открытия лицевого счета // и результат открытия отрицательный, иначе Ложь. // ЗаявкаНеОформлялась - булево, Истина, если по физическому лицу еще не создавались документы и не откладывалось // открытие лицевого счета, иначе Ложь. // Документ - ссылка на Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников, если документа нет - NULL. // НомерСтрокиДокумента - номер строки в Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников, если документа нет - NULL. // Процедура СоздатьВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц(МенеджерВременныхТаблиц, ТолькоРазрешенные, Организация, ЗарплатныйПроект, ДатаПолученияДанных, Подразделение = Неопределено, СписокФизическихЛиц = Неопределено, ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.УстановитьПараметр("Подразделение", Подразделение); Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.УстановитьПараметр("СписокФизическихЛиц", СписокФизическихЛиц); Запрос.УстановитьПараметр("ПоВсемФизическимЛицам", ?(СписокФизическихЛиц = Неопределено, Истина, Ложь)); Запрос.УстановитьПараметр("ЗаявкаНаОткрытиеЛицевыхСчетов", ЗаявкаНаОткрытиеЛицевыхСчетов); ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = Организация; Если Подразделение <> Неопределено Тогда ПараметрыПолученияСотрудников.Подразделение = Подразделение; КонецЕсли; ПараметрыПолученияСотрудников.ОкончаниеПериода = ДатаПолученияДанных; ПараметрыПолученияСотрудников.КадровыеДанные = "НомерЛицевогоСчета, ВидЗанятости"; ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнитьПараметрыПолученияСотрудников(ПараметрыПолученияСотрудников); Если СписокФизическихЛиц <> Неопределено Тогда ПараметрыПолученияСотрудников.СписокФизическихЛиц = СписокФизическихЛиц; КонецЕсли; КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, ПараметрыПолученияСотрудников, "ВТВсеСотрудникиОрганизации"); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация КАК Организация, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо КАК ФизическоеЛицо |ПОМЕСТИТЬ ВТОтложенноеОткрытиеЛицевыхСчетовСотрудников |ИЗ | РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетовСотрудников |ГДЕ | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация = &Организация | И (&ПоВсемФизическимЛицам | ИЛИ ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо В (&СписокФизическихЛиц)) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка КАК ДокументСсылка, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Дата КАК ДатаДокумента |ПОМЕСТИТЬ ВТЗаявкиФизическихЛиц |ИЗ | Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники |ГДЕ | НЕ ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.ПометкаУдаления | И (&ПоВсемФизическимЛицам | ИЛИ ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.ФизическоеЛицо В (&СписокФизическихЛиц)) | И (ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Организация = &Организация | ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)) | И (ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.ЗарплатныйПроект = &ЗарплатныйПроект | ИЛИ &ЗарплатныйПроект = ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка)) | И (ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Подразделение = &Подразделение | ИЛИ &Подразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) | ИЛИ &Подразделение = НЕОПРЕДЕЛЕНО) | И &ЗаявкаНаОткрытиеЛицевыхСчетов = НЕОПРЕДЕЛЕНО |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаявкиФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо, | МАКСИМУМ(ЗаявкиФизическихЛиц.ДатаДокумента) КАК ДатаДокумента |ПОМЕСТИТЬ ВТДатыПоследнихЗаявок |ИЗ | ВТЗаявкиФизическихЛиц КАК ЗаявкиФизическихЛиц | |СГРУППИРОВАТЬ ПО | ЗаявкиФизическихЛиц.ФизическоеЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаявкиФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо, | МАКСИМУМ(ЗаявкиФизическихЛиц.ДокументСсылка) КАК Документ |ПОМЕСТИТЬ ВТЗаявкиНаОткрытиеЛицевыхСчетов |ИЗ | ВТЗаявкиФизическихЛиц КАК ЗаявкиФизическихЛиц | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДатыПоследнихЗаявок КАК ДатыПоследнихЗаявок | ПО (ДатыПоследнихЗаявок.ФизическоеЛицо = ЗаявкиФизическихЛиц.ФизическоеЛицо) | И (ДатыПоследнихЗаявок.ДатаДокумента = ЗаявкиФизическихЛиц.ДатаДокумента) | |СГРУППИРОВАТЬ ПО | ЗаявкиФизическихЛиц.ФизическоеЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ПодтверждениеОткрытияЛицевыхСчетовСотрудники.Ссылка КАК ДокументПодтверждение, | ПодтверждениеОткрытияЛицевыхСчетовСотрудники.РезультатОткрытияСчета КАК РезультатОткрытияСчета, | ЗаявкиНаОткрытиеЛицевыхСчетов.Документ КАК Документ, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Проведен КАК Проведен, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Организация КАК Организация, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка.Подразделение КАК Подразделение, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.НомерСтроки КАК НомерСтрокиДокумента |ПОМЕСТИТЬ ВТЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам |ИЗ | ВТЗаявкиНаОткрытиеЛицевыхСчетов КАК ЗаявкиНаОткрытиеЛицевыхСчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники | ПО ЗаявкиНаОткрытиеЛицевыхСчетов.ФизическоеЛицо = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.ФизическоеЛицо | И ЗаявкиНаОткрытиеЛицевыхСчетов.Документ = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудники.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников.Сотрудники КАК ПодтверждениеОткрытияЛицевыхСчетовСотрудники | ПО ЗаявкиНаОткрытиеЛицевыхСчетов.ФизическоеЛицо = ПодтверждениеОткрытияЛицевыхСчетовСотрудники.ФизическоеЛицо | И ЗаявкиНаОткрытиеЛицевыхСчетов.Документ = ПодтверждениеОткрытияЛицевыхСчетовСотрудники.Ссылка.ПервичныйДокумент | И (ПодтверждениеОткрытияЛицевыхСчетовСотрудники.Ссылка.Проведен) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ФизическоеЛицо КАК ФизическоеЛицо, | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Организация КАК Организация, | ЛОЖЬ КАК ОткрытиеЛицевогоСчетаОтложено, | ВЫБОР | КОГДА СостоянияДокументовОткрытияЛицевыхСчетов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостояниеЗаявкиНаОткрытиеЛицевогоСчетаСотрудника.ОжидаетПодтверждения) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ОжидаетПодтверждения, | ВЫБОР | КОГДА ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.РезультатОткрытияСчета ЕСТЬ NULL | ИЛИ ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.РезультатОткрытияСчета = ЗНАЧЕНИЕ(Перечисление.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетОткрыт) | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ КАК ЛицевойСчетНеОткрыт, | ЛОЖЬ КАК ЗаявкаНеОформлялась, | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Документ КАК ДокументОткрытияЛицевыхСчетов, | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ЗарплатныйПроект КАК ЗарплатныйПроект, | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Подразделение КАК Подразделение, | ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.НомерСтрокиДокумента КАК НомерСтрокиДокумента |ПОМЕСТИТЬ ВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц |ИЗ | ВТЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам КАК ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудников | ПО ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ФизическоеЛицо = ЛицевыеСчетаСотрудников.ФизическоеЛицо | И ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Организация = ЛицевыеСчетаСотрудников.Организация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовОткрытияЛицевыхСчетов КАК СостоянияДокументовОткрытияЛицевыхСчетов | ПО ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Документ = СостоянияДокументовОткрытияЛицевыхСчетов.ДокументОткрытияЛицевыхСчетов | ЛЕВОЕ СОЕДИНЕНИЕ ВТОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетовСотрудников | ПО ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ФизическоеЛицо = ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо | И ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.Организация = ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация |ГДЕ | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо ЕСТЬ NULL | И ЛицевыеСчетаСотрудников.НомерЛицевогоСчета ЕСТЬ NULL | И (ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ДокументПодтверждение ЕСТЬ NULL | ИЛИ ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ДокументПодтверждение ЕСТЬ НЕ NULL | И ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.РезультатОткрытияСчета <> ЗНАЧЕНИЕ(Перечисление.РезультатыОткрытияЛицевыхСчетовСотрудников.СчетОткрыт)) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация, | ИСТИНА, | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, | NULL, | NULL, | NULL, | NULL |ИЗ | ВТОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетовСотрудников | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | СотрудникиОрганизации.ФизическоеЛицо, | &Организация, | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, | ИСТИНА, | NULL, | NULL, | NULL, | NULL |ИЗ | ВТВсеСотрудникиОрганизации КАК СотрудникиОрганизации | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам КАК ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам | ПО СотрудникиОрганизации.ФизическоеЛицо = ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ФизическоеЛицо | ЛЕВОЕ СОЕДИНЕНИЕ ВТОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетовСотрудников | ПО СотрудникиОрганизации.ФизическоеЛицо = ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо |ГДЕ | СотрудникиОрганизации.НомерЛицевогоСчета ЕСТЬ NULL | И ЗаявкиНаОткрытиеЛицевыхСчетовПоФизическимЛицам.ФизическоеЛицо ЕСТЬ NULL | И ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо ЕСТЬ NULL | И (&ПоВсемФизическимЛицам | ИЛИ СотрудникиОрганизации.ФизическоеЛицо В (&СписокФизическихЛиц)) | |СГРУППИРОВАТЬ ПО | СотрудникиОрганизации.ФизическоеЛицо"; ЗарплатаКадрыОбщиеНаборыДанных.УстановитьВыборкуТолькоРазрешенныхДанных(Запрос.Текст, ТолькоРазрешенные); Запрос.Выполнить(); КонецПроцедуры // Получает данные сотрудников в порядке приоритета. // 1. Данные из документов "Заявка на открытие лицевых счетов", по которым нет подтверждения открытия лицевых счетов. // 2. Данные из регистра сведений "Отложенное открытие лицевых счетов сотрудников". // 3. Кадровые данные сотрудников. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, подготовленный методом // СоздатьВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц. // ДатаПолученияДанных - дата, на которую будут получены периодические значения. // Организация - Организация // ЗарплатныйПроект - зарплатный проект. // СписокФизическихЛиц - список физических лиц, по которым нужно получить данные, // если не указан - кадровые данные получаются по всем физическим лицам организации и подразделения. // // Возвращаемое значение: // Таблица значений с данными сотрудников. // Функция ДанныеСотрудниковДляОткрытияЛицевыхСчетов(МенеджерВременныхТаблиц, ДатаПолученияДанных, Организация, ЗарплатныйПроект, СписокФизическихЛиц = Неопределено, ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено, ПолучитьТолькоЛицевойСчетНеОткрыт = Ложь) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка КАК ДокументЗаявка, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерСтроки КАК НомерСтрокиДокумента, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Фамилия КАК Фамилия, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Имя КАК Имя, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Отчество КАК Отчество, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Должность КАК Должность, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЭмбоссированныйТекст1 КАК ЭмбоссированныйТекст1, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЭмбоссированныйТекст2 КАК ЭмбоссированныйТекст2, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЭмбоссированныйТекст3 КАК ЭмбоссированныйТекст3, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.СистемаРасчетовПоБанковскимКартам КАК СистемаРасчетовПоБанковскимКартам, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.СуммаПервоначальногоПополнения КАК СуммаПервоначальногоПополнения, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЯвляетсяЗарплатнойКартой КАК ЯвляетсяЗарплатнойКартой, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ОплатаЗарплатнойКарты КАК ОплатаЗарплатнойКарты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЯвляетсяСотрудникомБанка КАК ЯвляетсяСотрудникомБанка, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ИспользуетсяОвердрафт КАК ИспользуетсяОвердрафт, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.КатегорияСотрудника КАК КатегорияСотрудника, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЯвляетсяУчастникомБонуснойПрограммы КАК ЯвляетсяУчастникомБонуснойПрограммы, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.БонуснаяПрограмма КАК БонуснаяПрограмма, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерУчастникаБонуснойПрограммы КАК НомерУчастникаБонуснойПрограммы, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТарифСледующийГод КАК ТарифСледующийГод, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТарифТекущийГод КАК ТарифТекущийГод, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.СпособРассылкиОтчета КАК СпособРассылкиОтчета, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.СчетДебета КАК СчетДебета, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерМобильногоТелефона КАК НомерМобильногоТелефона, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерМобильногоТелефонаПредставление КАК НомерМобильногоТелефонаПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ОператорСвязи КАК ОператорСвязи, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ИспользованиеМобильногоБанка КАК ИспользованиеМобильногоБанка, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТарифМобильногоБанка КАК ТарифМобильногоБанка, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.РазрешитьПередачуИнформацииВБКИ КАК РазрешитьПередачуИнформацииВБКИ, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.КонтрольнаяИнформация КАК КонтрольнаяИнформация, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерМиграционнойКарты КАК НомерМиграционнойКарты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаНачалаПребыванияМиграционнойКарты КАК ДатаНачалаПребыванияМиграционнойКарты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаОкончанияПребыванияМиграционнойКарты КАК ДатаОкончанияПребыванияМиграционнойКарты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ВидМиграционногоДокумента КАК ВидМиграционногоДокумента, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерМиграционногоДокумента КАК НомерМиграционногоДокумента, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаНачалаПребыванияМиграционногоДокумента КАК ДатаНачалаПребыванияМиграционногоДокумента, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаОкончанияПребыванияМиграционногоДокумента КАК ДатаОкончанияПребыванияМиграционногоДокумента, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ПрогнозируемыйМесячныйДоход КАК ПрогнозируемыйМесячныйДоход, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТабельныйНомер КАК ТабельныйНомер, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаПриема КАК ДатаПриема, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДеньВыплатыЗарплаты КАК ДеньВыплатыЗарплаты, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.КодВидаВклада КАК КодВидаВклада, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.КодПодвидаВклада КАК КодПодвидаВклада, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ВалютаВклада КАК ВалютаВклада, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументВид КАК ДокументВид, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументСерия КАК ДокументСерия, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументНомер КАК ДокументНомер, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументДатаВыдачи КАК ДокументДатаВыдачи, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументСрокДействия КАК ДокументСрокДействия, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументКемВыдан КАК ДокументКемВыдан, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументКодПодразделения КАК ДокументКодПодразделения, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДокументПредставление КАК ДокументПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Пол КАК Пол, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаРождения КАК ДатаРождения, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.МестоРождения КАК МестоРождения, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.МестоРожденияПредставление КАК МестоРожденияПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресДляИнформирования КАК АдресДляИнформирования, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресДляИнформированияПредставление КАК АдресДляИнформированияПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресМестаРаботы КАК АдресМестаРаботы, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресМестаРаботыПредставление КАК АдресМестаРаботыПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресПоПрописке КАК АдресПоПрописке, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресПоПропискеПредставление КАК АдресПоПропискеПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресМестаПроживания КАК АдресМестаПроживания, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.АдресМестаПроживанияПредставление КАК АдресМестаПроживанияПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТелефонДомашний КАК ТелефонДомашний, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТелефонДомашнийПредставление КАК ТелефонДомашнийПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТелефонРабочий КАК ТелефонРабочий, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ТелефонРабочийПредставление КАК ТелефонРабочийПредставление, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ЯвляетсяРезидентом КАК ЯвляетсяРезидентом, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Гражданство КАК Гражданство, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ИдентификаторДизайна КАК ИдентификаторДизайна, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ПВК КАК ПВК, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ПриложениеКартаКод КАК ПриложениеКартаКод, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ПриложениеКартаПараметры КАК ПриложениеКартаПараметры, | ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.СтраховойНомерПФР КАК СтраховойНомерПФР |ИЗ | ВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц КАК СостоянияФизическихЛиц | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники | ПО СостоянияФизическихЛиц.ДокументОткрытияЛицевыхСчетов = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка | И СостоянияФизическихЛиц.ФизическоеЛицо = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.ФизическоеЛицо | И СостоянияФизическихЛиц.НомерСтрокиДокумента = ЗаявкаНаОткрытиеЛицевыхСчетовСотрудниковСотрудники.НомерСтроки"; Если ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено Тогда ДанныеПоЛицевымСчетамСотрудников = Запрос.Выполнить().Выгрузить(); КонецЕсли; Запрос.Текст = "ВЫБРАТЬ | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Должность, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЭмбоссированныйТекст1, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЭмбоссированныйТекст2, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЭмбоссированныйТекст3, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.СистемаРасчетовПоБанковскимКартам, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.СуммаПервоначальногоПополнения, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЯвляетсяЗарплатнойКартой, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ОплатаЗарплатнойКарты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЯвляетсяСотрудникомБанка, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ИспользуетсяОвердрафт, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.КатегорияСотрудника, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ЯвляетсяУчастникомБонуснойПрограммы, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.БонуснаяПрограмма, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.НомерУчастникаБонуснойПрограммы, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ТарифСледующийГод, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ТарифТекущийГод, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.СпособРассылкиОтчета, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.АдресЭлектроннойПочты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.СчетДебета, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.НомерМобильногоТелефона, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.НомерМобильногоТелефонаПредставление, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ОператорСвязи, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ИспользованиеМобильногоБанка, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ТарифМобильногоБанка, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.РазрешитьПередачуИнформацииВБКИ, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.КонтрольнаяИнформация, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.НомерМиграционнойКарты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ДатаНачалаПребыванияМиграционнойКарты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ДатаОкончанияПребыванияМиграционнойКарты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ВидМиграционногоДокумента, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.НомерМиграционногоДокумента, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ДатаНачалаПребыванияМиграционногоДокумента, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ДатаОкончанияПребыванияМиграционногоДокумента, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ПрогнозируемыйМесячныйДоход, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ДеньВыплатыЗарплаты, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.КодВидаВклада, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.КодПодвидаВклада, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ВалютаВклада, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.АдресДляИнформирования, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.АдресДляИнформированияПредставление, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.АдресМестаРаботы, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.АдресМестаРаботыПредставление, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ИдентификаторДизайна, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ПВК, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ПриложениеКартаКод, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ПриложениеКартаПараметры, | ОтложенноеОткрытиеЛицевыхСчетовСотрудников.СтраховойНомерПФР |ИЗ | ВТОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОтложенноеОткрытиеЛицевыхСчетовСотрудников КАК ОтложенноеОткрытиеЛицевыхСчетовСотрудников | ПО ОтложенноеОткрытиеЛицевыхСчетов.Организация = ОтложенноеОткрытиеЛицевыхСчетовСотрудников.Организация | И ОтложенноеОткрытиеЛицевыхСчетов.ФизическоеЛицо = ОтложенноеОткрытиеЛицевыхСчетовСотрудников.ФизическоеЛицо"; Если ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено Тогда ДанныеПоОтложенномуОткрытиюЛицевыхСчетовСотрудников = Запрос.Выполнить().Выгрузить(); КонецЕсли; Запрос.Текст = "ВЫБРАТЬ | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.Организация КАК Организация, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ОткрытиеЛицевогоСчетаОтложено КАК ОткрытиеЛицевогоСчетаОтложено, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ОжидаетПодтверждения КАК ОжидаетПодтверждения, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ЛицевойСчетНеОткрыт КАК ЛицевойСчетНеОткрыт, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ЗаявкаНеОформлялась КАК ЗаявкаНеОформлялась, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ДокументОткрытияЛицевыхСчетов КАК ДокументОткрытияЛицевыхСчетов, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.ЗарплатныйПроект КАК ЗарплатныйПроект, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.Подразделение КАК Подразделение, | СостоянияОткрытияЛицевыхСчетовФизическихЛиц.НомерСтрокиДокумента КАК НомерСтрокиДокумента |ИЗ | ВТСостоянияОткрытияЛицевыхСчетовФизическихЛиц КАК СостоянияОткрытияЛицевыхСчетовФизическихЛиц"; ДанныеПоСостояниямОткрытияЛицевыхСчетов = Запрос.Выполнить().Выгрузить(); Если СписокФизическихЛиц = Неопределено Тогда СписокФизическихЛиц = ДанныеПоСостояниямОткрытияЛицевыхСчетов.ВыгрузитьКолонку("ФизическоеЛицо"); КонецЕсли; КадровыйУчет.СоздатьВТОсновныеСотрудникиФизическихЛиц(Запрос.МенеджерВременныхТаблиц, Истина, СписокФизическихЛиц, Организация, ДатаПолученияДанных); Запрос.Текст = "ВЫБРАТЬ | ОсновныеСотрудникиФизическихЛиц.Сотрудник |ИЗ | ВТОсновныеСотрудникиФизическихЛиц КАК ОсновныеСотрудникиФизическихЛиц | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | СотрудникиОрганизаций.Сотрудник |ИЗ | ВТВсеСотрудникиОрганизации КАК СотрудникиОрганизаций | ЛЕВОЕ СОЕДИНЕНИЕ ВТОсновныеСотрудникиФизическихЛиц КАК ОсновныеСотрудникиФизическихЛиц | ПО СотрудникиОрганизаций.ФизическоеЛицо = ОсновныеСотрудникиФизическихЛиц.ФизическоеЛицо |ГДЕ | ОсновныеСотрудникиФизическихЛиц.Сотрудник ЕСТЬ NULL | И СотрудникиОрганизаций.ВидЗанятости ЕСТЬ NULL "; СписокСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник"); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; КадровыеДанные = "Фамилия, Имя, Отчество, АдресДляИнформирования, АдресДляИнформированияПредставление," + "АдресМестаПроживания, АдресМестаПроживанияПредставление, АдресПоПрописке, АдресПоПропискеПредставление," + "ТелефонДомашний, ТелефонДомашнийПредставление, ТелефонРабочий, ТелефонРабочийПредставление, Страна," + "СтатусНалогоплательщика, Пол, ДокументПредставление, НомерЛицевогоСчета, EmailПредставление," + "ДокументВид, ДокументСерия, ДокументНомер, ДокументДатаВыдачи, ДокументСрокДействия, ДокументКемВыдан," + "ДокументКодПодразделения, МестоРождения, ДатаРождения, ТабельныйНомер, Должность, ДатаПриема, Подразделение, СтраховойНомерПФР"; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Сотрудник, | КадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо, | КадровыеДанныеСотрудников.Фамилия КАК Фамилия, | КадровыеДанныеСотрудников.Имя КАК Имя, | КадровыеДанныеСотрудников.Отчество КАК Отчество, | КадровыеДанныеСотрудников.АдресДляИнформирования КАК АдресДляИнформирования, | КадровыеДанныеСотрудников.АдресДляИнформированияПредставление КАК АдресДляИнформированияПредставление, | КадровыеДанныеСотрудников.АдресМестаПроживания КАК АдресМестаПроживания, | КадровыеДанныеСотрудников.АдресМестаПроживанияПредставление КАК АдресМестаПроживанияПредставление, | КадровыеДанныеСотрудников.АдресПоПрописке КАК АдресПоПрописке, | КадровыеДанныеСотрудников.АдресПоПропискеПредставление КАК АдресПоПропискеПредставление, | КадровыеДанныеСотрудников.ТелефонДомашний КАК ТелефонДомашний, | КадровыеДанныеСотрудников.ТелефонДомашнийПредставление КАК ТелефонДомашнийПредставление, | КадровыеДанныеСотрудников.ТелефонРабочий КАК ТелефонРабочий, | КадровыеДанныеСотрудников.ТелефонРабочийПредставление КАК ТелефонРабочийПредставление, | КадровыеДанныеСотрудников.EmailПредставление КАК АдресЭлектроннойПочты, | КадровыеДанныеСотрудников.Страна КАК Страна, | КадровыеДанныеСотрудников.СтатусНалогоплательщика КАК СтатусНалогоплательщика, | КадровыеДанныеСотрудников.Пол КАК Пол, | КадровыеДанныеСотрудников.ДокументПредставление КАК ДокументПредставление, | КадровыеДанныеСотрудников.ДокументВид КАК ДокументВид, | КадровыеДанныеСотрудников.ДокументСерия КАК ДокументСерия, | КадровыеДанныеСотрудников.ДокументНомер КАК ДокументНомер, | КадровыеДанныеСотрудников.ДокументДатаВыдачи КАК ДокументДатаВыдачи, | КадровыеДанныеСотрудников.ДокументСрокДействия КАК ДокументСрокДействия, | КадровыеДанныеСотрудников.ДокументКемВыдан КАК ДокументКемВыдан, | КадровыеДанныеСотрудников.ДокументКодПодразделения КАК ДокументКодПодразделения, | КадровыеДанныеСотрудников.МестоРождения КАК МестоРождения, | КадровыеДанныеСотрудников.ДатаРождения КАК ДатаРождения, | КадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер, | КадровыеДанныеСотрудников.Должность КАК Должность, | КадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема, | КадровыеДанныеСотрудников.Подразделение КАК Подразделение, | КадровыеДанныеСотрудников.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | КадровыеДанныеСотрудников.СтраховойНомерПФР КАК СтраховойНомерПФР |ИЗ | ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники | ПО КадровыеДанныеСотрудников.Сотрудник = Сотрудники.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК Подразделения | ПО КадровыеДанныеСотрудников.Подразделение = Подразделения.Ссылка |ГДЕ | (НЕ Подразделения.Ссылка ЕСТЬ NULL | ИЛИ КадровыеДанныеСотрудников.Подразделение ЕСТЬ NULL)"; ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнитьКадровыеДанные(КадровыеДанные, Запрос.Текст); КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных); ПсевдонимыТаблиц = Новый Соответствие; ПсевдонимыТаблиц.Вставить("Справочник.ПодразделенияОрганизаций", "КадровыеДанныеСотрудников"); ПсевдонимыТаблиц.Вставить("Справочник.Должности", "КадровыеДанныеСотрудников"); ПсевдонимыТаблиц.Вставить("Справочник.Сотрудники", "Сотрудники"); ЗарплатаКадры.ДополнитьТекстЗапросаУпорядочиваниемСотрудников(Запрос, ПсевдонимыТаблиц); УстановитьПривилегированныйРежим(Истина); РезультатЗапроса = Запрос.Выполнить(); УстановитьПривилегированныйРежим(Ложь); ДанныеСотрудников = РезультатЗапроса.Выгрузить(); ТаблицаКИ = КонтактнаяИнформацияБЗК.КонтактнаяИнформацияОбъектов( Организация, , Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации, ДатаПолученияДанных); Если ТаблицаКИ.Количество() = 0 Тогда АдресМестаРаботы = Новый Структура("Значение, Представление", "", ""); Иначе АдресМестаРаботы = ТаблицаКИ[0]; КонецЕсли; СистемаРасчетовПоБанковскимКартам = СистемаРасчетовПоБанковскимКартам(ЗарплатныйПроект); ОткрытиеЛицевыхСчетов = Новый ТаблицаЗначений; КолонкиДокумента = Метаданные.Документы.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников.ТабличныеЧасти.Сотрудники.Реквизиты; Для Каждого КолонкаДокумента Из КолонкиДокумента Цикл ОткрытиеЛицевыхСчетов.Колонки.Добавить(КолонкаДокумента.Имя, КолонкаДокумента.Тип); КонецЦикла; ОткрытиеЛицевыхСчетов.Колонки.Добавить("ДокументЗаявка", Новый ОписаниеТипов("ДокументСсылка.ЗаявкаНаОткрытиеЛицевыхСчетовСотрудников")); ОткрытиеЛицевыхСчетов.Колонки.Добавить("ОткрытиеЛицевогоСчетаОтложено", Новый ОписаниеТипов("Булево")); ОткрытиеЛицевыхСчетов.Колонки.Добавить("ОжидаетПодтверждения", Новый ОписаниеТипов("Булево")); ОткрытиеЛицевыхСчетов.Колонки.Добавить("ЛицевойСчетНеОткрыт", Новый ОписаниеТипов("Булево")); ОткрытиеЛицевыхСчетов.Колонки.Добавить("АнкетаЗаполнена", Новый ОписаниеТипов("Булево")); ДеньВыплатыЗарплатыВОрганизации = ДеньВыплатыЗарплатыВОрганизации(Организация); ПараметрыПроверкиАнкеты = Новый Структура; ПараметрыПроверкиАнкеты.Вставить( "МаксимальнаяДлинаИмениДержателяКарты", Справочники.ЗарплатныеПроекты.МаксимальнаяДлинаИмениДержателяКарты(ЗарплатныйПроект)); Для Каждого ДанныеСотрудника Из ДанныеСотрудников Цикл ДанныеПоСостояниюОткрытияЛицевогоСчета = ДанныеПоСостояниямОткрытияЛицевыхСчетов.Найти( ДанныеСотрудника.ФизическоеЛицо, "ФизическоеЛицо"); Если ЗаявкаНаОткрытиеЛицевыхСчетов <> Неопределено И ДанныеПоСостояниюОткрытияЛицевогоСчета <> Неопределено И ДанныеПоСостояниюОткрытияЛицевогоСчета.ОткрытиеЛицевогоСчетаОтложено Тогда // В документ "Заявка на открытие лицевых счетов сотрудников" не заполняем данные по отложенному открытию. Продолжить; КонецЕсли; // У сотрудника уже открыт номер лицевого счета Если ПолучитьТолькоЛицевойСчетНеОткрыт И ЗначениеЗаполнено(ДанныеСотрудника.НомерЛицевогоСчета) Тогда Продолжить; КонецЕсли; СтрокаОткрытиеЛицевыхСчетов = ОткрытиеЛицевыхСчетов.Добавить(); // Установим состояние открытия лицевого счета. Если ДанныеПоСостояниюОткрытияЛицевогоСчета <> Неопределено Тогда СтрокаОткрытиеЛицевыхСчетов.ОткрытиеЛицевогоСчетаОтложено = ДанныеПоСостояниюОткрытияЛицевогоСчета.ОткрытиеЛицевогоСчетаОтложено; СтрокаОткрытиеЛицевыхСчетов.ОжидаетПодтверждения = ДанныеПоСостояниюОткрытияЛицевогоСчета.ОжидаетПодтверждения; СтрокаОткрытиеЛицевыхСчетов.ЛицевойСчетНеОткрыт = ДанныеПоСостояниюОткрытияЛицевогоСчета.ЛицевойСчетНеОткрыт; КонецЕсли; // Заполнение по данным документа "Заявка на открытие лицевых счетов". Если ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено Тогда ДанныеПоЛицевымСчетамСотрудника = ДанныеПоЛицевымСчетамСотрудников.Найти( ДанныеСотрудника.ФизическоеЛицо, "ФизическоеЛицо"); Если ДанныеПоЛицевымСчетамСотрудника <> Неопределено Тогда ЗаполнитьЗначенияСвойств(СтрокаОткрытиеЛицевыхСчетов, ДанныеПоЛицевымСчетамСотрудника); СтрокаОткрытиеЛицевыхСчетов.АнкетаЗаполнена = АнкетаЗаполнена(СтрокаОткрытиеЛицевыхСчетов, ПараметрыПроверкиАнкеты); Продолжить; КонецЕсли; КонецЕсли; // Заполнение по кадровым данным. ЗаполнитьЗначенияСвойств(СтрокаОткрытиеЛицевыхСчетов, ДанныеСотрудника); ИмяЛатиницей = СтроковыеФункции.СтрокаЛатиницей(ДанныеСотрудника.Имя); ФамилияЛатиницей = СтроковыеФункции.СтрокаЛатиницей(ДанныеСотрудника.Фамилия); СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст1 = ВРег(ИмяЛатиницей); СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст2 = ВРег(ФамилияЛатиницей); СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст3 = ?(ДанныеСотрудника.Пол = Перечисления.ПолФизическогоЛица.Женский, "MRS", "MR"); СтрокаОткрытиеЛицевыхСчетов.КатегорияСотрудника = Перечисления.КатегорииСотрудниковОбменаСБанками.Прочие; СтрокаОткрытиеЛицевыхСчетов.СпособРассылкиОтчета = Перечисления.СпособыДоставкиКорреспонденцииБанка.НеРассылать; СтрокаОткрытиеЛицевыхСчетов.Гражданство = ДанныеСотрудника.Страна; СтрокаОткрытиеЛицевыхСчетов.ЯвляетсяРезидентом = ДанныеСотрудника.СтатусНалогоплательщика = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.СтатусыНалогоплательщиковПоНДФЛ.Резидент"); СтрокаОткрытиеЛицевыхСчетов.СистемаРасчетовПоБанковскимКартам = СистемаРасчетовПоБанковскимКартам; СтрокаОткрытиеЛицевыхСчетов.АдресМестаРаботыПредставление = АдресМестаРаботы.Представление; СтрокаОткрытиеЛицевыхСчетов.АдресМестаРаботы = АдресМестаРаботы.Значение; СтрокаОткрытиеЛицевыхСчетов.МестоРожденияПредставление = ПерсонифицированныйУчетКлиентСервер.ПредставлениеМестаРождения(ДанныеСотрудника.МестоРождения); СтрокаОткрытиеЛицевыхСчетов.ДеньВыплатыЗарплаты = ДеньВыплатыЗарплатыВОрганизации; Если ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.НомерМобильногоТелефона) Тогда ПоляТелефона= УправлениеКонтактнойИнформацией.СведенияОТелефоне(СтрокаОткрытиеЛицевыхСчетов.НомерМобильногоТелефона); СтрокаОткрытиеЛицевыхСчетов.ОператорСвязи = ПоляТелефона.КодГорода; КонецЕсли; Если ЗаявкаНаОткрытиеЛицевыхСчетов = Неопределено Тогда ДанныеПоОтложенномуОткрытиюЛицевыхСчетовСотрудника = ДанныеПоОтложенномуОткрытиюЛицевыхСчетовСотрудников.Найти( ДанныеСотрудника.ФизическоеЛицо, "ФизическоеЛицо"); // Заполнение по данным отложенного открытия лицевых счетов сотрудников. Если ДанныеПоОтложенномуОткрытиюЛицевыхСчетовСотрудника <> Неопределено Тогда ЗаполнитьЗначенияСвойств(СтрокаОткрытиеЛицевыхСчетов, ДанныеПоОтложенномуОткрытиюЛицевыхСчетовСотрудника); КонецЕсли; КонецЕсли; СтрокаОткрытиеЛицевыхСчетов.АнкетаЗаполнена = АнкетаЗаполнена(СтрокаОткрытиеЛицевыхСчетов, ПараметрыПроверкиАнкеты); КонецЦикла; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьДанныеСотрудниковДляОткрытияЛицевыхСчетов(ОткрытиеЛицевыхСчетов, СписокФизическихЛиц, СписокСотрудников, ДатаПолученияДанных, Организация, ЗарплатныйПроект); Возврат ОткрытиеЛицевыхСчетов; КонецФункции // Возвращает признак заполненности анкеты открытия лицевого счета // // Параметры: // СтрокаОткрытиеЛицевыхСчетов - Коллекция данных анкеты. // ПараметрыПроверки - Структура // // Возвращаемое значение: // Булево, Истина, если в анкете заполнены все обязательные поля // Ложь, если есть хоть одно не заполненное обязательное поле. // Функция АнкетаЗаполнена(СтрокаОткрытиеЛицевыхСчетов, ПараметрыПроверки) Заполнена = Истина; // Физическое лицо Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ФизическоеЛицо) Тогда Заполнена = Ложь; КонецЕсли; // Эмбоссированный текст Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст1) Тогда Заполнена = Ложь; КонецЕсли; Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст2) Тогда Заполнена = Ложь; КонецЕсли; // Проверка максимальной длины эмбоссированного текста, она не должна превышать указанной в зарплатном проекте. ЭмбоссированныйТекст = ОбщегоНазначенияБЗККлиентСервер.ЗначенияВМассиве( СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст1, СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст2, СтрокаОткрытиеЛицевыхСчетов.ЭмбоссированныйТекст3); ДлинаЭмбоссированногоТекста = СтрДлина(СтрСоединить(ЭмбоссированныйТекст, " ")); Если ДлинаЭмбоссированногоТекста > ПараметрыПроверки.МаксимальнаяДлинаИмениДержателяКарты Тогда Заполнена = Ложь; КонецЕсли; // Дата рождения Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаРождения) Тогда Заполнена = Ложь; КонецЕсли; // Пол Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.Пол) Тогда Заполнена = Ложь; КонецЕсли; // Система расчетов по банковским картам. Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.СистемаРасчетовПоБанковскимКартам) Тогда Заполнена = Ложь; КонецЕсли; // Счет дебета Если НЕ ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.СчетДебета) И СтрДлина(СтрокаОткрытиеЛицевыхСчетов.СчетДебета) <> 20 Тогда Заполнена = Ложь; КонецЕсли; // Вид документа Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДокументВид) Тогда Заполнена = Ложь; КонецЕсли; // Номер документа Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.ДокументНомер) Тогда Заполнена = Ложь; КонецЕсли; // Дата выдачи документа Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДокументДатаВыдачи) Тогда Заполнена = Ложь; КонецЕсли; // Кем выдан документ Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.ДокументКемВыдан) Тогда Заполнена = Ложь; КонецЕсли; // Миграционная карта Если Не ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.НомерМиграционнойКарты) Или ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционнойКарты) Или ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционнойКарты) Тогда Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.НомерМиграционнойКарты) Тогда Заполнена = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционнойКарты) Тогда Заполнена = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционнойКарты) Тогда Заполнена = Ложь; КонецЕсли; Если СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционнойКарты > СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционнойКарты Тогда Заполнена = Ложь; КонецЕсли; КонецЕсли; // Миграционный документ Если ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ВидМиграционногоДокумента) Или Не ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.НомерМиграционногоДокумента) Или ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционногоДокумента) Или ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционногоДокумента) Тогда Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ВидМиграционногоДокумента) Тогда Заполнена = Ложь; КонецЕсли; Если ПустаяСтрока(СтрокаОткрытиеЛицевыхСчетов.НомерМиграционногоДокумента) Тогда Заполнена = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционногоДокумента) Тогда Заполнена = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционногоДокумента) Тогда Заполнена = Ложь; КонецЕсли; Если СтрокаОткрытиеЛицевыхСчетов.ДатаНачалаПребыванияМиграционногоДокумента > СтрокаОткрытиеЛицевыхСчетов.ДатаОкончанияПребыванияМиграционногоДокумента Тогда Заполнена = Ложь; КонецЕсли; КонецЕсли; Возврат Заполнена; КонецФункции #КонецОбласти #Область ПроцедурыИФункцииЗаполненияУведомленияОбУвольненииСотрудников // Формирует временную таблицу ВТЗакрытиеЛицевыхСчетов, // список физических лиц, с состояниями закрытия лицевых счетов. // // Параметры: // МенеджерВременныхТаблиц // Ссылка - Ссылка на документ "Заявка на закрытие лицевых счетов". // Организация // ЗарплатныйПроект // Подразделение // ДатаПолученияДанных - дата получения кадровой информации по физическим лицам. // Сотрудник - Ссылка на сотрудника, для которого требуется получить кадровую информацию. // ТолькоРазрешенные - Булево // // Создает в МенеджерВременныхТаблиц временную таблицу с именем ВТЗакрытиеЛицевыхСчетов. // Поля временной таблицы // Сотрудник, // ФизическоеЛицо, // ДатаЗакрытия - Дата, на которую требуется закрыть лицевой счет сотрудника. // ЛицевойСчет - Строка - Лицевой счет сотрудника. // Процедура СоздатьВТЗакрытиеЛицевыхСчетов(МенеджерВременныхТаблиц, Ссылка, Организация, ЗарплатныйПроект, Подразделение, ДатаПолученияДанных, Сотрудник = Неопределено, ТолькоРазрешенные = Истина) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ДатаПолученияДанных", ДатаПолученияДанных); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ЗарплатныйПроект", ЗарплатныйПроект); Запрос.УстановитьПараметр("Подразделение", Подразделение); Если Сотрудник = Неопределено Тогда ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = Организация; ПараметрыПолученияСотрудников.Подразделение = Подразделение; ПараметрыПолученияСотрудников.ОкончаниеПериода = ДатаПолученияДанных; КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников); Иначе Запрос.УстановитьПараметр("Сотрудник", Сотрудник); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Сотрудники.Ссылка КАК Сотрудник, | &ДатаПолученияДанных КАК Период |ПОМЕСТИТЬ ВТСотрудникиОрганизации |ИЗ | Справочник.Сотрудники КАК Сотрудники |ГДЕ | Сотрудники.Ссылка = &Сотрудник"; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "РАЗРЕШЕННЫЕ", ""); КонецЕсли; Если ТипЗнч(Сотрудник) = Тип("Массив") Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "= &Сотрудник", "В (&Сотрудник)"); КонецЕсли; Запрос.Выполнить(); КонецЕсли; ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиОрганизации"); КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, ТолькоРазрешенные, "ДатаУвольнения, ОсновноеРабочееМестоВОрганизации"); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Сотрудники.Сотрудник КАК Сотрудник, | Сотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | Сотрудники.ДатаУвольнения КАК ДатаЗакрытия, | Сотрудники.ДатаУвольнения КАК Период |ПОМЕСТИТЬ ВТСотрудники |ИЗ | ВТКадровыеДанныеСотрудников КАК Сотрудники | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники | ПО Сотрудники.Сотрудник = ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Сотрудник | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.ЗарплатныйПроект = &ЗарплатныйПроект | ИЛИ &ЗарплатныйПроект = ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка)) | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.Подразделение = &Подразделение | ИЛИ &Подразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.Проведен) | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка <> &Ссылка) |ГДЕ | Сотрудники.ОсновноеРабочееМестоВОрганизации | И ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Сотрудник ЕСТЬ NULL | И Сотрудники.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1) |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТКадровыеДанныеСотрудников"; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "РАЗРЕШЕННЫЕ", ""); КонецЕсли; Запрос.Выполнить(); ОписаниеВременнойТаблицы = ОписаниеВременнойТаблицыДляСоздатьВТЛицевыеСчетаСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники", "ФизическоеЛицо", "ДатаЗакрытия"); СоздатьПоВременнойТаблицеВТЛицевыеСчетаСотрудников(ОписаниеВременнойТаблицы, ТолькоРазрешенные, Организация, ЗарплатныйПроект); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Сотрудники.Сотрудник КАК Сотрудник, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ЕСТЬNULL(ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.ДатаЗакрытия, Сотрудники.ДатаЗакрытия) КАК ДатаЗакрытия, | ЕСТЬNULL(ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.ЛицевойСчет, ЛицевыеСчетаСотрудников.НомерЛицевогоСчета) КАК ЛицевойСчет, | ЕСТЬNULL(ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка, ЗНАЧЕНИЕ(Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.ПустаяСсылка)) КАК ДокументЗаявка, | ЕСТЬNULL(ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.НомерСтроки, НЕОПРЕДЕЛЕНО) КАК НомерСтрокиДокумента |ПОМЕСТИТЬ ВТЗакрытиеЛицевыхСчетов |ИЗ | ВТСотрудники КАК Сотрудники | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудников.Сотрудники КАК ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники | ПО Сотрудники.Сотрудник = ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Сотрудник | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.ЗарплатныйПроект = &ЗарплатныйПроект | ИЛИ &ЗарплатныйПроект = ЗНАЧЕНИЕ(Справочник.ЗарплатныеПроекты.ПустаяСсылка)) | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.Подразделение = &Подразделение | ИЛИ &Подразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) | И (НЕ ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.Проведен) | И (НЕ ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка.ПометкаУдаления) | И (ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.Ссылка <> &Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчетаСотрудников КАК ЛицевыеСчетаСотрудников | ПО Сотрудники.Сотрудник = ЛицевыеСчетаСотрудников.Сотрудник |ГДЕ | ЕСТЬNULL(ЗаявкаНаЗакрытиеЛицевыхСчетовСотрудниковСотрудники.ЛицевойСчет, ЛицевыеСчетаСотрудников.НомерЛицевогоСчета) ЕСТЬ НЕ NULL "; Если Не ТолькоРазрешенные Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "РАЗРЕШЕННЫЕ", ""); КонецЕсли; Запрос.Выполнить(); КонецПроцедуры // Получает данные сотрудников, для которых требуется закрыть лицевой счет. // // Параметры: // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, подготовленный методом СоздатьВТЗакрытиеЛицевыхСчетов. // // Возвращаемое значение: // Выборка с данными сотрудников. // Функция ДанныеСотрудниковДляЗакрытияЛицевыхСчетов(МенеджерВременныхТаблиц) Экспорт Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ВТЗакрытиеЛицевыхСчетов.Сотрудник, | ВТЗакрытиеЛицевыхСчетов.ДатаЗакрытия КАК Период |ПОМЕСТИТЬ ВТСотрудникиПериоды |ИЗ | ВТЗакрытиеЛицевыхСчетов КАК ВТЗакрытиеЛицевыхСчетов"; Запрос.Выполнить(); // Получаем кадровые данные сотрудников с полями для сортировки. ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, "ВТСотрудникиПериоды"); КадровыеДанные = ""; ЗарплатаКадры.ДополнитьКадровымиДаннымиНастройкиПорядкаСписка(КадровыеДанные); КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Истина, КадровыеДанные); Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Сотрудник КАК Сотрудник, | ЗакрытиеЛицевыхСчетов.ФизическоеЛицо КАК ФизическоеЛицо, | ЗакрытиеЛицевыхСчетов.ДатаЗакрытия КАК ДатаЗакрытия, | ЗакрытиеЛицевыхСчетов.ДокументЗаявка КАК ДокументЗаявка, | ЗакрытиеЛицевыхСчетов.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | ЗакрытиеЛицевыхСчетов.ЛицевойСчет КАК ЛицевойСчет |ИЗ | ВТЗакрытиеЛицевыхСчетов КАК ЗакрытиеЛицевыхСчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК Сотрудники | ПО ЗакрытиеЛицевыхСчетов.Сотрудник = Сотрудники.Сотрудник | |УПОРЯДОЧИТЬ ПО | Сотрудник"; ЗарплатаКадры.ДополнитьТекстЗапросаУпорядочиваниемСотрудниковПоВТСДаннымиПорядка(Запрос, "Сотрудники"); ЗакрытиеЛицевыхСчетов = Запрос.Выполнить(); ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ОпределитьДанныеСотрудниковДляЗакрытияЛицевыхСчетов(МенеджерВременныхТаблиц, ЗакрытиеЛицевыхСчетов); Возврат ЗакрытиеЛицевыхСчетов; КонецФункции #КонецОбласти #Область ДанныеДляПечатиПоXML Функция ПредставлениеАдресаИзЭДXML(Адрес, ВидАдреса) Если Адрес = Неопределено Тогда Возврат ""; КонецЕсли; СтруктураАдреса = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу( Перечисления.ТипыКонтактнойИнформации.Адрес); СтруктураАдреса.Страна = Адрес.Страна.СтранаНазвание; СтруктураАдреса.НаименованиеСтраны = Адрес.Страна.СтранаНазвание; СтруктураАдреса.КодСтраны = Адрес.Страна.СтранаКод; СтруктураАдреса.Индекс = Адрес.Индекс; Если Адрес.Регион <> Неопределено Тогда СтруктураАдреса.Регион = Адрес.Регион.РегионНазвание; СтруктураАдреса.РегионСокращение = Адрес.Регион.РегионСокращение; КонецЕсли; Если Адрес.Район <> Неопределено Тогда СтруктураАдреса.Район = Адрес.Район.РайонНазвание; СтруктураАдреса.РайонСокращение = Адрес.Район.РайонСокращение; КонецЕсли; Если Адрес.Город <> Неопределено Тогда СтруктураАдреса.Город = Адрес.Город.ГородНазвание; СтруктураАдреса.ГородСокращение = Адрес.Город.ГородСокращение; КонецЕсли; Если Адрес.НаселенныйПункт <> Неопределено Тогда СтруктураАдреса.НаселенныйПункт = Адрес.НаселенныйПункт.НаселенныйПунктНазвание; СтруктураАдреса.НаселенныйПунктСокращение = Адрес.НаселенныйПункт.НаселенныйПунктСокращение; КонецЕсли; Если Адрес.Улица <> Неопределено Тогда СтруктураАдреса.Улица = Адрес.Улица.УлицаНазвание; СтруктураАдреса.УлицаСокращение = Адрес.Улица.УлицаСокращение; КонецЕсли; СтруктураАдреса.Дом = Адрес.Дом; СтруктураАдреса.Корпус = Адрес.Корпус; СтруктураАдреса.Квартира = Адрес.Квартира; СтруктураАдреса.Вставить("ТипДома","дом"); СтруктураАдреса.Вставить("ТипКорпуса","корпус"); СтруктураАдреса.Вставить("ТипКвартиры","кв."); ПредставлениеАдреса = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(СтруктураАдреса); Возврат ПредставлениеАдреса; КонецФункции Функция ПредставлениеУдостоверенияЛичностиИзЭДXML(УдостоверениеЛичности) Представление = Новый Массив; Представление.Добавить(УдостоверениеЛичности.ВидДокумента); Если ЗначениеЗаполнено(УдостоверениеЛичности.Серия) Тогда Представление.Добавить(СтрШаблон(НСтр("ru = 'серия: %1'"), УдостоверениеЛичности.Серия)) КонецЕсли; Если ЗначениеЗаполнено(УдостоверениеЛичности.Номер) Тогда Представление.Добавить(СтрШаблон(НСтр("ru = '№ %1'"), УдостоверениеЛичности.Номер)) КонецЕсли; Если ЗначениеЗаполнено(УдостоверениеЛичности.ДатаВыдачи) Тогда Представление.Добавить(СтрШаблон(НСтр("ru = 'выдан: %1 года'"), Формат(УдостоверениеЛичности.ДатаВыдачи, "ДЛФ=ДД"))) КонецЕсли; Если ЗначениеЗаполнено(УдостоверениеЛичности.КемВыдан) Тогда Представление.Добавить(УдостоверениеЛичности.КемВыдан) КонецЕсли; Если ЗначениеЗаполнено(УдостоверениеЛичности.КодПодразделения) И УдостоверениеЛичности.КодВидаДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда Представление.Добавить(СтрШаблон(НСтр("ru = '№ подр. %1'"), УдостоверениеЛичности.КодПодразделения)) КонецЕсли; Возврат СтрСоединить(Представление, ", ") КонецФункции #КонецОбласти Функция НеобходимыСведенияОЗарплатныхПроектах(Знач ИмяПоля) ИмяПоля = ВРег(ИмяПоля); Возврат ИмяПоля = ВРег("ЗарплатныйПроектДатаОткрытияЛицевогоСчета") Или ИмяПоля = ВРег("ЗарплатныйПроектРегистратор") Или ИмяПоля = ВРег("ЗарплатныйПроект") Или ИмяПоля = ВРег("НомерЛицевогоСчета"); КонецФункции Функция ПутьКДаннымСведенийОЗарплатныхПроектах(ИмяПоля) Экспорт ИмяПоляВВерхнемРегистре = ВРег(ИмяПоля); ПутьКДанным = ""; Если ИмяПоляВВерхнемРегистре = ВРег("ЗарплатныйПроектДатаОткрытияЛицевогоСчета") Тогда ПутьКДанным = " ЛицевыеСчетаСотрудников.ДатаОткрытияЛицевогоСчета"; ИначеЕсли ИмяПоляВВерхнемРегистре = ВРег("ЗарплатныйПроектРегистратор") Тогда ПутьКДанным = " ЛицевыеСчетаСотрудников.ДокументОснование"; Иначе ПутьКДанным = " ЛицевыеСчетаСотрудников." + ИмяПоля; КонецЕсли; Возврат ПутьКДанным; КонецФункции Функция ИсточникиПоЗарплатнымПроектам(Источники) ТипыДокументовОбменаСБанками = Метаданные.ОпределяемыеТипы.ВладелецОбъектОбменСБанкамиБЗК.Тип.Типы(); Для Каждого ТипИсточника Из ТипыДокументовОбменаСБанками Цикл ДокументОбъект = Новый (ТипИсточника); Если Источники.Строки.Найти(ДокументОбъект.Метаданные(), "Метаданные") <> Неопределено Тогда Возврат Истина; КонецЕсли; КонецЦикла; ЖурналДокументов = Метаданные.ЖурналыДокументов.ДокументыОбменаСБанкамиПоЗарплатнымПроектам; Если Источники.Строки.Найти(ЖурналДокументов, "Метаданные") <> Неопределено Тогда Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции Функция ДополнительныеИсточникиДляВыгрузкиФайлов(Источники) Возврат ОбменСБанкамиПоЗарплатнымПроектамВнутренний.ДополнительныеИсточникиДляВыгрузкиФайлов(Источники); КонецФункции Процедура ЗаполнитьДанныеПлатежногоДокумента(ДанныеПлатежногоДокумента, ПлатежныйДокумент) СтандартнаяОбработка = Истина; ОбменСБанкамиПоЗарплатнымПроектамПереопределяемый.ЗаполнитьДанныеПлатежногоДокумента( ДанныеПлатежногоДокумента, ПлатежныйДокумент, СтандартнаяОбработка); Если Не СтандартнаяОбработка Тогда Возврат; КонецЕсли; ДанныеПлатежногоДокумента.Дата = ПлатежныйДокумент.Дата; ДанныеПлатежногоДокумента.Номер = ПлатежныйДокумент.Номер; КонецПроцедуры #КонецОбласти