Зачем это было нужно
Документ отражение зарплаты в регламентированном учете нужно выгружать из кадровой ЗУП в бухгалтерскую программу, каковой у нас является УПП. Причем делать это можно не ежечасно, как, допустим, переносим документы приема на работу, а один раз в расчетный период, а точнее, когда бухгалтер на участке расчета зарплаты даст команду. Предложенная схема позволяет бухгалтеру самостоятельно проводить эту операцию.
Выгрузка - Загрузка подключается на кнопку Заполнить табличной части Отражение в учете документа.
Как это выглядит в ЗУП
Первая обработка ЗУП_ВыгузитьВФайлОбмена.epf подключается как внешняя обработка табличной части (Сервис - Дополнительные отчеты и обработки - Дополнительные внешние обработки табличных частей) в конфигурацию Зарплата и управление персоналом. Она выгружает документ ОтражениеЗарплатыВРеглУчете в XML файл по правилам обмена из макета.
Каталог, куда будет выгружен файл, нужно указать в строковом параметре КаталогОбмена подключаемой обработки. У нас это сетевой ресурс, доступный для записи бухгалтеру:
N | Представление объекта | Табличная часть | Представление кнопки | Параметры обработки |
1 | Документ "Отражение зарплаты в регл учете" | Отражение в учете |
параметры
Имя | Значение |
КаталогОбмена | \\nksi . . . Nksi_ExchangeZUP_UPP\ |
Эта обработка содержит макет с правилами обмена, которые можно переписать под себя, используя конфигурацию Конвертация данных
Как это выглядит в УПП
Вторая обработка УПП_ЗагрузитьИзФайлаОбмена.epf подключается в конфигурацию Управление производственным предприятием аналогично, как внешняя обработка табличной части (Сервис - Дополнительные внешние отчеты и обработки - Обработки заполнения табличных частей). Она загружает до документ ОтражениеЗарплатыВРеглУчете из полученного XML файла. Каталог для обмена также нужно указать в строковом параметре КаталогОбмена подключаемой обработки. Это будет каталог, который предложит обработка для выбора файла для загрузки.
N | Представление объекта | Табличная часть | Представление кнопки | Параметры обработки |
1 | Документ "Отражение зарплаты в регл учете" | Отражение в учете |
параметры
Имя | Значение |
КаталогОбмена | \\nksi . . . Nksi_ExchangeZUP_UPP\ |
Для любознательных - коды
ЗУП_ВыгузитьВФайлОбмена.epf
В обработке
Реквизит ДополнительныеПараметры
Макет ПравилаОбмена типа двоичные данные
В модуле объекта
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
Ссылка = Объект.Ссылка;
Если ДополнительныеПараметры = Неопределено Тогда
КаталогОбмена = "\\ . . .\ExchangeZUP_UPP";
Иначе
КаталогОбмена = ДополнительныеПараметры.КаталогОбмена;
КонецЕсли;
ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
ФормаИндикатора.НаименованиеОбработкиДанных = "Выгрузка данных для УПП";
ФормаИндикатора.КомментарийОбработкиДанных = "Загружаются правила обмена";
ФормаИндикатора.КомментарийЗначения = "Обработанно:";
ФормаИндикатора.Открыть();
ФормаИндикатора.МаксимальноеЗначение = 5;
ФормаИндикатора.Значение = 1;
ОбработкаУниверсальныйОбменДаннымиXML = Обработки.УниверсальныйОбменДаннымиXML.Создать();
// Получим из макета правила обмена данными
УникальныйИдентификатор = Новый УникальныйИдентификатор();
ИмяВременногоФайлаПравилОбмена = КаталогВременныхФайлов() + УникальныйИдентификатор + ".xml";
МакетПравилОбмена = ПолучитьМакет("ПравилаОбмена");
МакетПравилОбмена.Записать(ИмяВременногоФайлаПравилОбмена);
ФормаИндикатора.Значение = 2;
// Загрузка в универсальную обработку XML правил обмена
ОбработкаУниверсальныйОбменДаннымиXML.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
ОбработкаУниверсальныйОбменДаннымиXML.ЗагрузитьПравилаОбмена();
ФормаИндикатора.Значение = 3;
// Удаляем временный файл правил и внешней обработки
Попытка
УдалитьФайлы(ИмяВременногоФайлаПравилОбмена);
Исключение
КонецПопытки;
ТаблицаПравилВыгрузки = ОбработкаУниверсальныйОбменДаннымиXML.ТаблицаПравилВыгрузки.Скопировать();
ТекущееПВД = ТаблицаПравилВыгрузки.Строки[0].Строки[0];
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТекущееПВД.ОбъектВыборки);
ИмяМетаданных = СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Имя, ОбъектМетаданных.Представление());
Построитель = ОбработкаУниверсальныйОбменДаннымиXML.ПостроительОтчета;
Построитель.Текст = "ВЫБРАТЬ _.Ссылка КАК Ссылка ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _ "+ "{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
Построитель.Отбор.Сбросить();
Если НЕ ТекущееПВД.НастройкиПостроителя = Неопределено Тогда
Построитель.УстановитьНастройки(ТекущееПВД.НастройкиПостроителя);
КонецЕсли;
Отбор = Построитель.Отбор;
Если Отбор.Найти("Документ_ОтражениеЗарплатыВРеглУчете") = Неопределено Тогда
Отбор.Добавить("Документ_ОтражениеЗарплатыВРеглУчете");
КонецЕсли;
Отбор.Документ_ОтражениеЗарплатыВРеглУчете.Использование = Истина;
Отбор.Документ_ОтражениеЗарплатыВРеглУчете.Значение = Ссылка;
ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
ТекущееПВД.ИспользоватьОтбор = ИСТИНА;
ОбработкаУниверсальныйОбменДаннымиXML.ТаблицаПравилВыгрузки = ТаблицаПравилВыгрузки;
ФормаИндикатора.КомментарийОбработкиДанных = "Выгружаются данные";
ФормаИндикатора.Значение = 4;
ФайлКудаВыгружать = Формат(Ссылка.Дата, "ДФ=""ММММгггг'г'""") + ".xml";
ОбработкаУниверсальныйОбменДаннымиXML.ИмяФайлаОбмена = КаталогОбмена + ФайлКудаВыгружать;
ОбработкаУниверсальныйОбменДаннымиXML.ДатаВыгрузкиДанных = Ссылка.Дата;
ОбработкаУниверсальныйОбменДаннымиXML.ВыполнитьВыгрузку();
Сообщить("Выгружено в файл: " + КаталогОбмена + ФайлКудаВыгружать);
ФормаИндикатора.Значение = 5;
ФормаИндикатора.Закрыть();
КонецПроцедуры
УПП_ЗагрузитьИзФайлаОбмена.epf
В обработке Реквизит ДополнительныеПараметры
В модуле объекта
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
Если ДополнительныеПараметры = Неопределено Тогда
КаталогОбмена = "\\ . . .\ExchangeZUP_UPP";
Иначе
КаталогОбмена = ДополнительныеПараметры.КаталогОбмена;
КонецЕсли;
Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь, КаталогОбмена);
Диалог.Фильтр = "Файл XMLобмена (*.xml)|*.xml";
Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
ФайлОткудаЗагружать = Диалог.ПолноеИмяФайла;
ФормаИндикатора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
ФормаИндикатора.НаименованиеОбработкиДанных = "Загрузка данных из ЗУП";
ФормаИндикатора.КомментарийОбработкиДанных = "Загружаются данные из файла "+ФайлОткудаЗагружать;
ФормаИндикатора.КомментарийЗначения = "Обработанно:";
ФормаИндикатора.Открыть();
ФормаИндикатора.МаксимальноеЗначение = 5;
ФормаИндикатора.Значение = 1;
ОбработкаУниверсальныйОбменДаннымиXML = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаУниверсальныйОбменДаннымиXML.ИмяФайлаОбмена = ФайлОткудаЗагружать;
ОбработкаУниверсальныйОбменДаннымиXML.РежимОбмена = "Загрузка";
ОбработкаУниверсальныйОбменДаннымиXML.ОптимизированнаяЗаписьОбъектов = Истина;
ОбработкаУниверсальныйОбменДаннымиXML.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
ОбработкаУниверсальныйОбменДаннымиXML.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
ОбработкаУниверсальныйОбменДаннымиXML.ЗагружатьДанныеВРежимеОбмена = Истина;
ФормаИндикатора.Значение = 2;
ОбработкаУниверсальныйОбменДаннымиXML.ВыполнитьЗагрузку();
ФормаИндикатора.Значение = 5;
ФормаИндикатора.Закрыть();
Объект.ОбменДанными.Загрузка = Истина ;
ФормаДокумента =Объект.ПолучитьФорму("ФормаДокумента");
ФормаДокумента.Модифицированность = Ложь;
ФормаДокумента.Закрыть();
ФормаДокумента.ДокументОбъект = ОбработкаУниверсальныйОбменДаннымиXML.Параметры.Документ;
ФормаДокумента.Открыть();
КонецПроцедуры