Загрузка из файла JSON в документы Перенос данных сведений о доходах сотрудников

14.02.24

Учетные задачи - Зарплата

Предлагаю простенькую обработку для загрузки из файлов JSON сведений для расчета среднего заработка (для расчета больничных). Данные записываются в документы Переносы данных с номерами ЗП_СЗО (регистр накопления "Данные о начислениях для расчета среднего заработка общий).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?]
Загрузка из файла JSON в документы Перенос данных (ЗП_СЗО) сведений о доходах сотрудников:
.epf 9,40Kb
15
15 Скачать бесплатно

Здравствуйте, при внедрении ЗУП у меня возникла необходимость переноса данных для расчета больничных листов. Для решения задачи была написана простая внешняя обработка.

Данные записываются в документы Переносы данных с номерами ЗП_СЗО (регистр накопления "ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий).

Для чего данная обработка может понадобиться: при внедрении ЗУП, если приходится переносить большой объем данных вручную.

Файл JSON должен быть в следующем формате:

{
    "Фамилия1 Имя1 Отчество1": {
        "Подразделение": "Подразделение 1",
        "01.09.2023 0:00:00": "11111,11",
        "01.08.2023 0:00:00": "11111,11",
        "01.07.2023 0:00:00": "11111,11",
        "01.06.2023 0:00:00": "11111,11",
        "01.12.2023 0:00:00": "11111,11",
        "01.11.2023 0:00:00": "11111,11",
        "01.05.2023 0:00:00": "11111,11",
        "01.04.2023 0:00:00": "11111,11",
        "01.10.2023 0:00:00": "11111,11",
        "01.03.2023 0:00:00": "11111,11",
        "01.02.2023 0:00:00": "11111,11",
        "01.01.2023 0:00:00": "11111,11"
    },
    "Фамилия2 Имя2 Отчество2": {
        "Подразделение": "Подразделение 2",
        "01.09.2023 0:00:00": "22222,22",
        "01.08.2023 0:00:00": "22222,22",
        "01.07.2023 0:00:00": "22222,22",
        "01.06.2023 0:00:00": "22222,22",
        "01.12.2023 0:00:00": "22222,22",
        "01.11.2023 0:00:00": "22222,22",
        "01.05.2023 0:00:00": "22222,22",
        "01.04.2023 0:00:00": "22222,22",
        "01.10.2023 0:00:00": "22222,22",
        "01.03.2023 0:00:00": "22222,22",
        "01.02.2023 0:00:00": "22222,22",
        "01.01.2023 0:00:00": "22222,22"
    }
}

 

Как работает алгоритм заполнения:

1. в цикле происходит перебор всех документов ЗП_СЗО

2. во вложенном цикле перебираются все сотрудники

3. создается временная таблица, куда попадают данные из файла при совпадении даты документа ЗП_СЗО и ключа из файла JSON

4. таблица записывается в регистр

 

Исходный код обработки:


&НаКлиенте
Процедура ИмяФайлаJSONНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
	Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайлаJSON", ЭтотОбъект);
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл JSON с доходами сотрудников";
	Диалог.Фильтр = НСтр("ru='json';en='json'") + "(*.json)|*.json";
	Диалог.Показать(Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораФайлаJSON(ВыбранныеФайлы, Параметры) Экспорт
	Если ВыбранныеФайлы = Неопределено Тогда
		Сообщить("Не выбран файл json");
		Возврат;
	КонецЕсли;
	ПутьКФайлу = ВыбранныеФайлы[0];
	ИмяФайлаJSON = ПутьКФайлу;
КонецПроцедуры

&НаСервере
Функция ПоискДокументовЗП_СЗО()
	ЗапросЗПСЗО = Новый Запрос;
	ЗапросЗПСЗО.Текст = "
		|ВЫБРАТЬ 
		|ПереносДанных.Ссылка,
		|ПереносДанных.ПериодРегистрации
		|ИЗ
		|	Документ.ПереносДанных КАК ПереносДанных
		|ГДЕ
		|	НЕ ПереносДанных.ПометкаУдаления И
		|	ПереносДанных.Номер = ""ЗП_СЗО""
		|УПОРЯДОЧИТЬ ПО ПереносДанных.ПериодРегистрации
	|";
	РезультатЗапроса = ЗапросЗПСЗО.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Неопределено;
	КонецЕсли;
	ВыборкаЗПСЗО = РезультатЗапроса.Выбрать();
	Соответствие1 = Новый Соответствие;
	Пока ВыборкаЗПСЗО.Следующий() Цикл
		ПериодРегистрации = ВыборкаЗПСЗО.ПериодРегистрации;
		Ссылка = ВыборкаЗПСЗО.Ссылка;
		Если ПериодРегистрации <> Неопределено И Ссылка <> Неопределено Тогда
			Соответствие1.Вставить(ПериодРегистрации,Ссылка);
		КонецЕсли;
	КонецЦикла;
	Возврат Соответствие1;	
КонецФункции

&НаКлиенте
Процедура ВыполнитьИмпорт(Команда)
	// проверить, что выбрана организация
	Если НЕ ЗначениеЗаполнено(ВыборОрганизации) Тогда
		Сообщить("Не выбрана организация");
		Возврат;
	КонецЕсли;
	
	// проверить, что файл выбран
	Если НЕ ЗначениеЗаполнено(ИмяФайлаJSON) Тогда
		Сообщить("Не выбран файл для импорта");
		Возврат;
	КонецЕсли;
	
	// десериализация JSON
	Попытка
		чтениеJSON = Новый ЧтениеJSON();
		чтениеJSON.ОткрытьФайл(ИмяФайлаJSON);
		Сотрудники = ПрочитатьJSON(чтениеJSON, Истина);
		чтениеJSON.Закрыть();
	Исключение
		Сообщить("Десериализация JSON .......... ОШИБКА");
		Возврат;
	КонецПопытки;
	
	// поиск документов типа ЗП_СЗО
	РезультатПоискаДокументовЗПСЗО = ПоискДокументовЗП_СЗО();
	Если РезультатПоискаДокументовЗПСЗО = Неопределено Тогда
		Сообщить("Не найдены документы ЗП_СЗО. Продолжение невозможно");		
		Возврат;
	КонецЕсли;  
	
	// Передать найденные документы ЗП_СЗО
	ПодготовитьТаблицу(РезультатПоискаДокументовЗПСЗО, Сотрудники, ВыборОрганизации);
	
КонецПроцедуры

&НаСервере
Процедура ПодготовитьТаблицу(РезультатПоискаДокументовЗПСЗО, Сотрудники, ВыбраннаяОрганизация)
	МассивОшибок = Новый Массив;
	// перебрать все документы ЗП_СЗО
	Для Каждого Элемент Из РезультатПоискаДокументовЗПСЗО Цикл
		ПериодРегистрации = Дата(Элемент.Ключ);
		СсылкаДокументЗПСЗО = Элемент.Значение;
		// создать и подготовить таблицу значений
		Таблица = Новый ТаблицаЗначений;
		Таблица.Колонки.Добавить("Регистратор", Новый ОписаниеТипов("ДокументСсылка.ПереносДанных"));
		Таблица.Колонки.Добавить("Активность", Новый ОписаниеТипов("Булево"));
		Таблица.Колонки.Добавить("ОблагаетсяЕНВД", Новый ОписаниеТипов("Булево"));
		Таблица.Колонки.Добавить("Индексируется", Новый ОписаниеТипов("Булево"));
		Таблица.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
		Таблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
		Таблица.Колонки.Добавить("ФизическоеЛицо", Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
		Таблица.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
		Таблица.Колонки.Добавить("ПорядокРасчета", Новый ОписаниеТипов("ПеречислениеСсылка.ПорядокРасчетаСреднегоЗаработкаОбщий"));
		Таблица.Колонки.Добавить("СоставнаяЧасть", Новый ОписаниеТипов("ПеречислениеСсылка.УчетНачисленийВСреднемЗаработкеОбщий"));
		Таблица.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
		Таблица.Колонки.Добавить("Сторно", Новый ОписаниеТипов("Булево"));
		// необязательные колонки
		Таблица.Колонки.Добавить("Год", Новый ОписаниеТипов("Число"));
		Таблица.Колонки.Добавить("ДатаНачалаБазовогоПериода", Новый ОписаниеТипов("Дата"));
		Таблица.Колонки.Добавить("КоличествоМесяцев", Новый ОписаниеТипов("Число"));
		// перебрать всех сотрудников 
		Для Каждого Сотрудник Из Сотрудники Цикл
			ФИО = Сотрудник.Ключ;
			Соответствие1 = Сотрудник.Значение; // здесь все доходы по сотруднику
			Подразделение = Соответствие1["Подразделение"]; 
			СсылкаНаСотрудника = Неопределено;
			ФизическоеЛицо = Неопределено;	
			Если ФИО=Неопределено ИЛИ Подразделение=Неопределено Тогда
				Сообщить("Ошибка в файле JSON: отсутствуют ФИО и(или) подразделение");
				Возврат;
			КонецЕсли;
			// получить ссылку на сотрудника
		    запросПоискСотрудника = Новый Запрос;
			запросПоискСотрудника.Текст = "
				|ВЫБРАТЬ
				|Сотрудники.Ссылка КАК Сотрудник,
				|Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
				|КадроваяИстория.Подразделение КАК Подразделение
				|ИЗ
				|	Справочник.Сотрудники КАК Сотрудники
				|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ
				|		РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Дата) КАК КадроваяИстория
				|	ПО
				|		КадроваяИстория.Сотрудник = Сотрудники.Ссылка 	
				|ГДЕ
				|	НЕ Сотрудники.ПометкаУдаления И
				|	НЕ Сотрудники.Код Есть NULL	И
				|	НЕ Сотрудники.Код = """" И
				|	Сотрудник.Наименование = &ФИО И
				|	КадроваяИстория.Подразделение.Наименование = &Подразделение	
				|УПОРЯДОЧИТЬ ПО Сотрудник
			|";
			запросПоискСотрудника.УстановитьПараметр("Дата",ТекущаяДата());
			запросПоискСотрудника.УстановитьПараметр("ФИО",ФИО);
			запросПоискСотрудника.УстановитьПараметр("Подразделение",Подразделение);			
			РезультатЗапроса = запросПоискСотрудника.Выполнить();
			// если сотрудник найден в базе ЗУП
			Если НЕ РезультатЗапроса.Пустой() Тогда	
				ВыборкаПоискСотрудника = РезультатЗапроса.Выбрать();			
				Пока ВыборкаПоискСотрудника.Следующий() Цикл
					СсылкаНаСотрудника = ВыборкаПоискСотрудника.Сотрудник;
					ФизическоеЛицо = ВыборкаПоискСотрудника.ФизическоеЛицо;
				КонецЦикла;			
				// перебрать все итоги по зарплате у сотрудника
				Для Каждого Элемент Из Соответствие1 Цикл
					Если Элемент.Ключ <> "Подразделение" Тогда
						ПериодДохода = Дата(Элемент.Ключ);
						СуммаДохода = Число(Элемент.Значение);
						// Если дата документа ЗП_СЗО и дата дохода сотрудника совпадают, то записать в таблицу значений
						Если ПериодДохода = ПериодРегистрации Тогда
							НоваяСтрока = Таблица.Добавить();
							НоваяСтрока.Регистратор = СсылкаДокументЗПСЗО;
							НоваяСтрока.Активность = Истина;
							НоваяСтрока.ОблагаетсяЕНВД = Ложь;
							НоваяСтрока.Индексируется = Ложь;
							НоваяСтрока.Период = ПериодДохода;
							НоваяСтрока.Сумма = СуммаДохода;
							НоваяСтрока.ФизическоеЛицо = ФизическоеЛицо;
							НоваяСтрока.Сотрудник = СсылкаНаСотрудника;
							НоваяСтрока.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
							НоваяСтрока.СоставнаяЧасть = Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ОбщийЗаработок;
							НоваяСтрока.Организация = ВыбраннаяОрганизация;
							НоваяСтрока.Сторно = Ложь;
							// необязательные данные
							НоваяСтрока.Год = Год(ПериодРегистрации);
							НоваяСтрока.ДатаНачалаБазовогоПериода = ПериодРегистрации;
							НоваяСтрока.КоличествоМесяцев = 1;
							//Сообщить("Документ:" + Строка(СсылкаДокументСПСЗО) + ", Сотрудник:" + Строка(СсылкаНаСотрудника) + ", Период дохода:" +Строка(ПериодДохода) + ", Сумма дохода:" +Строка(СуммаДохода));
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
			Иначе
				Если МассивОшибок.Найти("Сотрудник " + ФИО + " есть в файле выгрузки, но не найден в базе ЗУП") = Неопределено Тогда
					//Сообщить("Сотрудник " + ФИО + " есть в файле выгрузки, но не найден в базе ЗУП");
					МассивОшибок.Добавить("Сотрудник " + ФИО + " есть в файле выгрузки, но не найден в базе ЗУП");
				КонецЕсли;
				//Прервать;
			КонецЕсли;	
		КонецЦикла;	
		// если в таблице есть данные, записать в регистр
		Если Таблица.Количество() >0 Тогда
			НаборЗаписей = РегистрыНакопления.ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Сбросить();
			НаборЗаписей.Отбор.Регистратор.Установить(СсылкаДокументЗПСЗО);
			НаборЗаписей.Загрузить(Таблица);
			НаборЗаписей.Записать();
		Иначе
			Сообщить("Есть документ ЗП_СЗО с периодом " + Строка(ПериодРегистрации) + ", но данных нет");
		КонецЕсли;
	КонецЦикла;
	Для Каждого Ошибка Из МассивОшибок Цикл
		Сообщить(Ошибка);
	КонецЦикла;
	Сообщить("Выполнено");
КонецПроцедуры	


 

Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.11

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 23652 руб.

12.06.2017    140296    784    295    

410

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    23221    161    48    

118

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    24505    23    1    

25

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    145928    645    358    

235

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

50722 45650 руб.

15.04.2019    71617    180    149    

121

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    194289    149    242    

279

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    36093    90    63    

87

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 руб.

18.02.2016    186242    581    509    

521
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. laperuz 47 15.02.24 05:34 Сейчас в теме
Я конечно понимаю, что бесплатно даете, но:

1. Для расчета больничных в ЗУП используется регистр ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаФСС.
А регистр, в который пишете Вы(ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий) используется для расчета среднего для отпуска и командировок.

2. Запрос в цикле - не надо так(я про поиск сотрудника). Ну и в целом, ФИО не является уникальным идентификатором, поэтому на полных тезках сломается. Надо чтобы в исходном файле не ФИО было, а табельный номер и по нему искать.
4. Vinzor 107 02.03.24 19:30 Сейчас в теме
(1) Чуть поправлю.
Сведения о доходах для "больничных" ведутся по физлицам. Значит, нужен нормальный уникальный реквизит физлица. Например, СНИЛС.

Здесь не всё учитывается. Например, дни болезней, которые вычитаются при расчете среднего для БИР или ОПУЗР.

Самый "безгеморойный" способ - через входящую справку для расчета пособий
2. user1892597 13 15.02.24 07:23 Сейчас в теме
Спасибо большое за советы.

Отмечу, что данная обработка запускается разово и оптимизация работы - вопрос даже не второй, а 22-рой. Нужно было просто "залить" данные.

Табельный номер - да, это верно. Но в моем случае при миграции табельные номера не перенеслись, а полных тезок в одном подразделении нет, по этому было принято решение использовать ФИО.
3. Vinzor 107 02.03.24 19:26 Сейчас в теме
Проактивно можно получить данные в СФР.
Оставьте свое сообщение