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

14.02.24

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

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

Скачать файл

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

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

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

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

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

Файл 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! 20%

Перенос данных 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 22338 руб.

12.06.2017    141529    798    297    

419

Перенос данных 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). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    24028    169    51    

127

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 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    147150    649    360    

235

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

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 руб.

23.07.2020    51273    228    69    

185

SALE! 10%

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56210    59    105    

61

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171178    303    257    

378

SALE! 15%

Перенос данных 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 13005 руб.

18.02.2016    186886    589    509    

526

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    36595    94    66    

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

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

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

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

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

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

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