Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 фев 2023, 18:01

убрать дубли в строках при выгрузке в exel

Автор кто-то где-то, 12 сен 2022, 09:43

0 Пользователей и 1 гость просматривают эту тему.

кто-то где-то

Всем привет, написал обработку чтобы выгружало в CVS, конфигурация ЗУП (8.3.20.1789)
По сотрудникам выгружается информация и иногда дублируются строки, если сотрудник например два раза устраивался на работу и увольнялся.
Пример:
Сидоров Роман Николаевич,Сидоров,Роман,Николаевич,ООО "Ромашка",Столовая,Кассир,001-111-222 33,03.05.2005,29.12.2021,п. 5 ч. 1 ст. 77,Увольнение
Иванов Иван Иванович,Иванов,Иван,Иванович,ООО "Ромашка"Столовая,Повар,001-111-222 33,30.12.2021,,п. 5 ч. 1 ст. 77,Увольнение
Иванов Иван Иванович,Иванов,Иван,Иванович,ООО "Ромашка",Столовая,Повар,001-111-222 33,31.05.2016,29.12.2021,п. 5 ч. 1 ст. 77,Увольнение
Петров Петр Петрович,Петров,Петр,Петрович,ООО "Ромашка",Столовая,Официант,001-111-222 33,30.12.2021,,п. 5 ч. 1 ст. 77,Увольнение
Петров Петр Петрович,Петров,Петр,Петрович,ООО "Ромашка",Столовая,Официант,001-111-222 33,26.12.2019,29.12.2021,п. 5 ч. 1 ст. 77,Увольнение

Подскажите как при одинаковом ФИО убирать ПЕРВУЮ строку, а вторую оставлять

КОД:ИспользуемыйРазделитель = ",";
   ФайлCSV="\\server\1c\ZUP_" + ДатаВНазвании + ".csv";

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

   ТекстCSV=""; // Текст с учетом заголовков, разделителей и переноса строк
   Для Каждого СтрокаТЗ Из ТЗ Цикл
   Если Строка(СтрокаТЗ.Подразделение) <> "" Тогда
   //Если ТекстCSV="" Тогда

   //    СтрокаКол="";
   //    КолонкиТЗ=ТЗ.Колонки;
   //    Для Каждого Колонка Из КолонкиТЗ Цикл
   //        СтрокаКол = "" + СтрокаКол + Колонка.Имя + ИспользуемыйРазделитель ;
   //    КонецЦикла;
   //    ТекстCSV = СтрокаКол + Символы.ПС;

   //КонецЕсли;
       ТекстCSV1 = "Full_Name,Surname,First_Name,Patronymic,Organization,Division,Position,Snils,Date_Of_Admission,Date_Of_Dismissal,Reason_For_Dismissal,Employee_Status";
       ТекстCSV = ТекстCSV + СтрокаТЗ.ФизическоеЛицо + ИспользуемыйРазделитель + СтрокаТЗ.ФизическоеЛицоФамилия + ИспользуемыйРазделитель + СтрокаТЗ.ФизическоеЛицоИмя
       + ИспользуемыйРазделитель + СтрокаТЗ.ФизическоеЛицоОтчество + ИспользуемыйРазделитель + СтрокаТЗ.ГоловнаяОрганизация
       + ИспользуемыйРазделитель + СтрокаТЗ.Подразделение + ИспользуемыйРазделитель + СтрокаТЗ.Должность
   + ИспользуемыйРазделитель + СтрокаТЗ.ФизическоеЛицоСтраховойНомерПФР + ИспользуемыйРазделитель + Лев(Строка(СтрокаТЗ.ДатаПриема),10) + ИспользуемыйРазделитель
   + Лев(Формат(СтрокаТЗ.ДатаУвольнения, "ггггММддЧЧмм"),10) + ИспользуемыйРазделитель + СтрокаТЗ.СтатьяТКРФ + ИспользуемыйРазделитель + СтрокаТЗ.Состояние + Символы.ПС;
    КонецЕсли;
   КонецЦикла;

   КодANSI = КодировкаТекста.ANSI;
   ТекстовыйФайлЗапись = Новый ЗаписьТекста(ФайлCSV, КодANSI); // Создание файла CSV
   ТекстовыйФайлЗапись.ЗаписатьСтроку(ТекстCSV1);
   ТекстовыйФайлЗапись.ЗаписатьСтроку(ТекстCSV); // Запись информации в файл
   ТекстовыйФайлЗапись.Закрыть(); // Обязательно закрываем, иначе зависает в процессе

LexaK

плохое определение первую строчку убрать вторую оставить,
у вас там разные состояния сотрудника, в одной строке он активный (работающий) есть дата приема и нет увольнения
в другой строке принят и уволен!

например по условию увольненности можно отсеять лишние, вам какие нужны? работающие или уволенные?
если работающие то проверяйте ДатуУвольнения на Пусто
если нужны уволенные то ДатуУвольнения на Заполненность

если много раз принимали и увольняли и из этих записей нужна только одна, то сначала выбираете Минимальную или  максимальную дату увольнения по этой дате получаете детальные реквизиты.
если помогло нажмите: Спасибо!

Теги: ЗУП 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск