Показано с 1 по 1 из 1
Комбинированный просмотр
-
21.01.2014, 11:53 #1Гость форума
- Регистрация
- 03.11.2013
- Сообщений
- 1
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
Перенос справочников с 1С 7.7 в 1С 8.2
Перенес с 1С 7.7 ЗиК 2.3 в 1С 8.2 ЗиКБУ 1.0 через V77Exp.ert(который в справочнике конвертации в ЗиКБУ) три первых пункта(Набор констант, Организация, Кадровые данные)
Некоторых сотрудников, которые увольнялись и заново устраивались, он их задвоил-затроил. Вообще по сути уволенные не нужны, пометил уволенных на удаление, но они не удаляются потому что при переносе перенеслись еще и кадровые документы, прием на работу, кадровые перемещения, записи регистров и т.п. А самих помеченных сотрудников 1300 с лишним получилось, вручную замучаешься удалять
Возможно ли удаление помеченных объектов и всех связанных с ним ссылок, документов разом? Или каким способом лучше переносить справочники?
Может указать это в файле с правилами обмена через конфигурацию "Конвертация Данных"? Как там сделать такой отбор?
Вот код ПВД_КадровыеДанные_ПередОб работкойПравила который вытянул через "Конвертация Данных"
Скрытый текстСостояние(Правило.Наименов ание);
ДатаНачалаУчета = Параметры.ДатаНачалаУчета;
ВыборкаДанных = СоздатьОбъект("СписокЗначе ний");
ВыборкаДанныхРаботникиОрг анизаций = СоздатьТЗРаботникиОрганиз аций();
ВыборкаДанныхЗанятыеШтатн ыеЕдиницы = СоздатьТЗЗанятыеШтатныеЕд иницыОрганизаций();
ВыборкаДанныхВременноПриб ывающиеРаботники = СоздатьОбъект("ТаблицаЗнач ений");
ВыборкаДанныхВременноПриб ывающиеРаботники.НоваяКол� �нка("Физлицо");
ВыборкаДанныхВременноПриб ывающиеРаботники.НоваяКол� �нка("Организация");
ВыборкаДанныхВременноПриб ывающиеРаботники.НоваяКол� �нка("Период");
ВыборкаДанныхВременноПриб ывающиеРаботники.НоваяКол� �нка("ПринятПоДолгосрочном� �Договору");
СпрСотрудники = СоздатьОбъект("Справочник.� �отрудники");
СпрСотрудники.ВыбратьЭлем� �нты();
Пока СпрСотрудники.ПолучитьЭле� �ент() = 1 Цикл
Если СпрСотрудники.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
Сотрудник = СпрСотрудники.ТекущийЭлем� �нт();
Если (ПустоеЗначение(Параметры.� �изическоеЛицоДляОтладкиВ� �грузки) = 0) И (Параметры.ФизическоеЛицоД ляОтладкиВыгрузки <> Сотрудник) Тогда
Продолжить;
КонецЕсли;
Если ПустоеЗначение(глРаботалС� �трудник(Сотрудник, ДатаНачала, ДатаОкончания)) = 1 Тогда
Продолжить;
КонецЕсли;
Состояние("Кадровые данные: " + Сотрудник);
РаботникиОрганизаций = СоздатьТЗРаботникиОрганиз аций();
РаботникиОрганизаций.Нова� �Колонка("ПодразделениеОрг� �низацииБыло");
РаботникиОрганизаций.Нова� �Колонка("ДолжностьБыло");
РаботникиОрганизаций.Нова� �Колонка("ЗанимаемыхСтавок� �ыло");
Если Параметры.РаспределятьПоИ� �точникамФинансирования = 1 Тогда
ВоинскиеИСпециальныеЗвани я = СоздатьОбъект("ТаблицаЗнач ений");
ВоинскиеИСпециальныеЗвани я.НоваяКолонка("Период");
ВоинскиеИСпециальныеЗвани я.НоваяКолонка("Физлицо");
ВоинскиеИСпециальныеЗвани я.НоваяКолонка("Звание");
КлассныеЧиныДипломатическ иеРангиФизлиц = СоздатьОбъект("ТаблицаЗнач ений");
КлассныеЧиныДипломатическ иеРангиФизлиц.НоваяКолонк� �("Период");
КлассныеЧиныДипломатическ иеРангиФизлиц.НоваяКолонк� �("Физлицо");
КлассныеЧиныДипломатическ иеРангиФизлиц.НоваяКолонк� �("КлассныйЧин");
КонецЕсли;
ПерРеквизит = СоздатьОбъект("Периодическ ий");
ПерРеквизит.ИспользоватьО� �ъект("", Сотрудник);
ПерРеквизит.ВыбратьЗначен� �я(, ДатаОкончания);
Пока ПерРеквизит.ПолучитьЗначе� �ие() > 0 Цикл
Если (ПустоеЗначение(ПерРеквизи т.ДатаЗнач) = 1) ИЛИ (ПерРеквизит.ДатаЗнач > ДатаНачалаУчета) Тогда
Продолжить;
КонецЕсли;
Документ = ПерРеквизит.ТекущийДокуме� �т();
Реквизит = ПерРеквизит.ТекущийРеквиз� �т();
Если (ПустоеЗначение(ПерРеквизи т.Значение) = 1) И (Реквизит <> "СостояниеФизлица") Тогда
Продолжить;
КонецЕсли;
Если (ПустоеЗначение(Документ) = 0)
И (Документ.Вид() <> "ПриказОПриемеНаРаботу")
И (Документ.Вид() <> "ПриказОЗачисленииВСписки� �асти")
И (Документ.Вид() <> "КадровоеПеремещение")
И (Документ.Вид() <> "КадровоеПеремещениеВоенн� �служащего")
И (Документ.Вид() <> "ПриказОбУвольнении")
И (Документ.Вид() <> "ПриказОбИсключенииИзСпис� �овЧасти")
И (Документ.Вид() <> "ПерерасчетОкладовПоПредп� �иятию")
И (Документ.Вид() <> "СведенияДляРасчетаСтрахо� �ыхВзносов") Тогда
Продолжить;
КонецЕсли;
Если (Реквизит = "Подразделение")
ИЛИ (Реквизит = "Должность")
ИЛИ (Реквизит = "ГрафикРаботы")
ИЛИ (Реквизит = "Ставка")
ИЛИ (Реквизит = "Оклад")
ИЛИ (Реквизит = "СостояниеФизлица")
ИЛИ (Реквизит = "ДолгосрочныйДоговорСИнос� �ранцем") Тогда
ЭтоПриемНаРаботу = 0;
ЭтоУвольнение = 0;
Если (Документ.Вид() = "ПриказОПриемеНаРаботу") ИЛИ (Документ.Вид() = "ПриказОЗачисленииВСписки� �асти") Тогда
Если Документ.ДатаПриема = ПерРеквизит.ДатаЗнач Тогда
ЭтоПриемНаРаботу = 1;
Иначе
ЭтоУвольнение = 1;
КонецЕсли;
ИначеЕсли (Документ.Вид() = "ПриказОбУвольнении") ИЛИ (Документ.Вид() = "ПриказОбИсключенииИзСпис� �овЧасти") Тогда
ЭтоУвольнение = 1;
КонецЕсли;
ТекущийСотрудник = ЗаполнитьТЗСотрудникаОрга низации(Сотрудник, ПерРеквизит.ДатаЗнач-ЭтоУвольнение);
// Если у сотрудника нет вида договора, значит кадровый документ по нему оформлять не нужно
Если СотрудникБезДоговора(Теку� �ийСотрудник) = 1 Тогда
Продолжить;
КонецЕсли;
Если Реквизит = "ДолгосрочныйДоговорСИнос� �ранцем" Тогда
ВыборкаДанныхВременноПриб ывающиеРаботники.НоваяСтр� �ка();
ВыборкаДанныхВременноПриб ывающиеРаботники.ФизЛицо = ТекущийСотрудник.Получить( "Физлицо");
ВыборкаДанныхВременноПриб ывающиеРаботники.Организа� �ия = ТекущийСотрудник.Получить( "ОбособленноеПодразделени� �");
ВыборкаДанныхВременноПриб ывающиеРаботники.Период = ПерРеквизит.ДатаЗнач;
ВыборкаДанныхВременноПриб ывающиеРаботники.ПринятПо� �олгосрочномуДоговору = ПерРеквизит.Значение;
Продолжить;
КонецЕсли;
СтрокаНайдена = 0;
РаботникиОрганизаций.Выбр� �тьСтроки();
Пока РаботникиОрганизаций.Полу� �итьСтроку() = 1 Цикл
Если РаботникиОрганизаций.Пери� �д <> ПерРеквизит.ДатаЗнач Тогда
Продолжить;
КонецЕсли;
НайденныйСотрудник = РаботникиОрганизаций.Сотр� �дник;
Если (НайденныйСотрудник.Получи ть("ВидДоговора") <> ТекущийСотрудник.Получить( "ВидДоговора"))
ИЛИ (НайденныйСотрудник.Получи ть("ВидЗанятости") <> ТекущийСотрудник.Получить( "ВидЗанятости"))
ИЛИ (НайденныйСотрудник.Получи ть("НомерДоговора") <> ТекущийСотрудник.Получить( "НомерДоговора"))
ИЛИ (НайденныйСотрудник.Получи ть("ДатаДоговора") <> ТекущийСотрудник.Получить( "ДатаДоговора"))
Тогда
Продолжить;
КонецЕсли;
СтрокаНайдена = 1;
Прервать;
КонецЦикла;
Если СтрокаНайдена = 0 Тогда
// Подразделение
Подразделение = ЗначениеПериодическогоРек визитаНаНачало("Подразделе ние", Сотрудник, ПерРеквизит.ДатаЗнач-1);
// Должность
Должность = ЗначениеПериодическогоРек визитаНаНачало("Должность", Сотрудник, ПерРеквизит.ДатаЗнач-1);
// ГрафикРаботы
ГрафикРаботы = ЗначениеПериодическогоРек визитаНаНачало("ГрафикРабо ты", Сотрудник, ПерРеквизит.ДатаЗнач-1);
Если ПустоеЗначение(ГрафикРабо� �ы) = 1 Тогда
ГрафикРаботы = Константа.ОсновнойГрафик;
КонецЕсли;
// Занимаемых ставок
ЗанимаемыхСтавок = ЗначениеПериодическогоРек визитаНаНачало("Ставка", Сотрудник, ПерРеквизит.ДатаЗнач-1);
РаботникиОрганизаций.Нова� �Строка();
РаботникиОрганизаций.Пери� �д = ПерРеквизит.ДатаЗнач;
РаботникиОрганизаций.Сотр� �дник = ТекущийСотрудник;
РаботникиОрганизаций.Орга� �изация = "Наша организация";
РаботникиОрганизаций.Обос� �бленноеПодразделение = ?(ПустоеЗначение(Подраздел� �ние) = 0, Подразделение, "Наша организация");
РаботникиОрганизаций.Подр� �зделениеОрганизации = Подразделение;
РаботникиОрганизаций.Долж� �ость = Должность;
РаботникиОрганизаций.Граф� �кРаботы = ГрафикРаботы;
РаботникиОрганизаций.Зани� �аемыхСтавок = ЗанимаемыхСтавок;
РаботникиОрганизаций.Прич� �наИзмененияСостояния = "Перемещение";
РаботникиОрганизаций.Подр� �зделениеОрганизацииБыло = Подразделение;
РаботникиОрганизаций.Долж� �остьБыло = Должность;
РаботникиОрганизаций.Зани� �аемыхСтавокБыло = ЗанимаемыхСтавок;
РаботникиОрганизаций.Перв� �чныйДокумент = Документ;
КонецЕсли;
Если Реквизит = "Подразделение" Тогда
РаботникиОрганизаций.Подр� �зделениеОрганизации = ПерРеквизит.Значение;
РаботникиОрганизаций.Обос� �бленноеПодразделение = ?(ПустоеЗначение(ПерРеквиз� �т.Значение) = 0, ПерРеквизит.Значение, "Наша организация");
ИначеЕсли Реквизит = "Должность" Тогда
РаботникиОрганизаций.Долж� �ость = ПерРеквизит.Значение;
ИначеЕсли Реквизит = "ГрафикРаботы" Тогда
РаботникиОрганизаций.Граф� �кРаботы = ПерРеквизит.Значение;
ИначеЕсли Реквизит = "Ставка" Тогда
РаботникиОрганизаций.Зани� �аемыхСтавок = ПерРеквизит.Значение;
ИначеЕсли Реквизит = "СостояниеФизлица" Тогда
Если ((ЭтоПриемНаРаботу = 1) И (РаботникиОрганизаций.Прич инаИзмененияСостояния = "Увольнение"))
ИЛИ ((ЭтоУвольнение = 1) И (РаботникиОрганизаций.Прич инаИзмененияСостояния = "ПриемНаРаботу"))
Тогда
// Если было увольнение и прием на работу в один день
// Необходимо создать вторую запись
ТекущийСотрудник = ЗаполнитьТЗСотрудникаОрга низации(Сотрудник, ПерРеквизит.ДатаЗнач);
// Надо создавать еще одну запись
ОбособленноеПодразделение = РаботникиОрганизаций.Обос� �бленноеПодразделение;
ПодразделениеОрганизации = РаботникиОрганизаций.Подр� �зделениеОрганизации;
Должность = РаботникиОрганизаций.Долж� �ость;
ГрафикРаботы = РаботникиОрганизаций.Граф� �кРаботы;
ЗанимаемыхСтавок = РаботникиОрганизаций.Зани� �аемыхСтавок;
РаботникиОрганизаций.Нова� �Строка();
РаботникиОрганизаций.Пери� �д = ПерРеквизит.ДатаЗнач;
РаботникиОрганизаций.Сотр� �дник = ТекущийСотрудник;
РаботникиОрганизаций.Орга� �изация = "Наша организация";
РаботникиОрганизаций.Обос� �бленноеПодразделение = Подразделение;
РаботникиОрганизаций.Подр� �зделениеОрганизации = Подразделение;
РаботникиОрганизаций.Долж� �ость = Должность;
РаботникиОрганизаций.Граф� �кРаботы = ГрафикРаботы;
РаботникиОрганизаций.Зани� �аемыхСтавок = ЗанимаемыхСтавок;
РаботникиОрганизаций.Подр� �зделениеОрганизацииБыло = Подразделение;
РаботникиОрганизаций.Долж� �остьБыло = Должность;
РаботникиОрганизаций.Зани� �аемыхСтавокБыло = ЗанимаемыхСтавок;
РаботникиОрганизаций.Перв� �чныйДокумент = Документ;
КонецЕсли;
Если ЭтоПриемНаРаботу = 1 Тогда
ЗанимаемыхСтавок = ЗначениеПериодическогоРек визитаНаНачало("Ставка", Сотрудник, ПерРеквизит.ДатаЗнач);
РаботникиОрганизаций.Зани� �аемыхСтавок = ЗанимаемыхСтавок;
РаботникиОрганизаций.Прич� �наИзмененияСостояния = "ПриемНаРаботу";
ИначеЕсли ЭтоУвольнение = 1 Тогда
РаботникиОрганизаций.Зани� �аемыхСтавок = 0;
РаботникиОрганизаций.Прич� �наИзмененияСостояния = "Увольнение";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Параметры.РаспределятьПоИ� �точникамФинансирования = 1 Тогда
Если (Реквизит = "РазрядЗваниеЧин") Тогда
ТекущийСотрудник = ЗаполнитьТЗСотрудникаОрга низации(Сотрудник, ПерРеквизит.ДатаЗнач-ЭтоУвольнение);
// Если у сотрудника нет вида договора, значит кадровый документ по нему оформлять не нужно
Если СотрудникБезДоговора(Теку� �ийСотрудник) = 1 Тогда
Продолжить;
КонецЕсли;
ВидДоговора = ТекущийСотрудник.Получить( "ВидДоговора");
Если (ВидДоговора = "ВоеннаяСлужбаПоПризыву" ) ИЛИ (ВидДоговора = "ВоеннаяСлужбаПоКонтракту" ) Тогда
РазрядыЧиныЗвания = ВоинскиеИСпециальныеЗвани я;
Иначе
РазрядыЧиныЗвания = КлассныеЧиныДипломатическ иеРангиФизлиц;
КонецЕсли;
НомерСтроки = 0;
Если РазрядыЧиныЗвания.НайтиЗн� �чение(ПерРеквизит.ДатаЗна� �, НомерСтроки, "Период") = 1 Тогда
РазрядыЧиныЗвания.Получит� �СтрокуПоНомеру(НомерСтрок и);
Иначе
РазрядыЧиныЗвания.НоваяСт� �ока();
РазрядыЧиныЗвания.Период = ПерРеквизит.ДатаЗнач;
РазрядыЧиныЗвания.Физлицо = СпрСотрудники.ОсновнойЭле� �ент;
КонецЕсли;
Если (ВидДоговора = "ВоеннаяСлужбаПоПризыву" ) ИЛИ (ВидДоговора = "ВоеннаяСлужбаПоКонтракту" ) Тогда
РазрядыЧиныЗвания.Звание = ПерРеквизит.Значение;
Иначе
РазрядыЧиныЗвания.Классны� �Чин = ПерРеквизит.Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
РаботникиОрганизаций.Сорт� �ровать("Период");
// Необходимо исправить полученные записи:
// - Удалить "лишние" увольнения
// - Удалить перемещения после увольнения
ИсправлятьЗаписи = 1;
Пока ИсправлятьЗаписи = 1 Цикл
ИсправлятьЗаписи = 0;
НайденоУвольнение = 0;
РаботникиОрганизаций.Выбр� �тьСтроки();
Пока РаботникиОрганизаций.Полу� �итьСтроку() = 1 Цикл
Если НайденоУвольнение = 1 Тогда
НайденоУвольнение = 0;
Если РаботникиОрганизаций.Прич� �наИзмененияСостояния <> "ПриемНаРаботу" Тогда
РаботникиОрганизаций.Удал� �тьСтроку();
ИсправлятьЗаписи = 1;
Прервать;
КонецЕсли;
КонецЕсли;
Если РаботникиОрганизаций.Прич� �наИзмененияСостояния = "Увольнение" Тогда
НайденоУвольнение = 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗанятыеШтатныеЕдиницыОрга низаций = СоздатьТЗЗанятыеШтатныеЕд иницыОрганизаций();
РаботникиОрганизаций.Выбр� �тьСтроки();
Пока РаботникиОрганизаций.Полу� �итьСтроку() = 1 Цикл
Если ПустоеЗначение(РаботникиО� �ганизаций.ЗанимаемыхСтаво кБыло) = 0 Тогда
ЗанятыеШтатныеЕдиницыОрга низаций.НоваяСтрока();
ЗанятыеШтатныеЕдиницыОрга низаций.Период = РаботникиОрганизаций.Пери� �д;
ЗанятыеШтатныеЕдиницыОрга низаций.ВидДвижения = "Расход";
ЗанятыеШтатныеЕдиницыОрга низаций.ПодразделениеОрга� �изации = РаботникиОрганизаций.Подр� �зделениеОрганизацииБыло;
ЗанятыеШтатныеЕдиницыОрга низаций.Должность = РаботникиОрганизаций.Долж� �остьБыло;
ЗанятыеШтатныеЕдиницыОрга низаций.КоличествоСтавок = РаботникиОрганизаций.Зани� �аемыхСтавокБыло;
КонецЕсли;
Если ПустоеЗначение(РаботникиО� �ганизаций.ЗанимаемыхСтаво к) = 0 Тогда
ЗанятыеШтатныеЕдиницыОрга низаций.НоваяСтрока();
ЗанятыеШтатныеЕдиницыОрга низаций.Период = РаботникиОрганизаций.Пери� �д;
ЗанятыеШтатныеЕдиницыОрга низаций.ВидДвижения = "Приход";
ЗанятыеШтатныеЕдиницыОрга низаций.ПодразделениеОрга� �изации = РаботникиОрганизаций.Подр� �зделениеОрганизации;
ЗанятыеШтатныеЕдиницыОрга низаций.Должность = РаботникиОрганизаций.Долж� �ость;
ЗанятыеШтатныеЕдиницыОрга низаций.КоличествоСтавок = РаботникиОрганизаций.Зани� �аемыхСтавок;
КонецЕсли;
КонецЦикла;
ЗанятыеШтатныеЕдиницыОрга низаций.Сортировать("Перио� �");
глПереписатьИзТаблицыВТаб лицу(РаботникиОрганизаций, ВыборкаДанныхРаботникиОрг анизаций);
РаботникиОрганизаций = 0;
глПереписатьИзТаблицыВТаб лицу(ЗанятыеШтатныеЕдиниц� �Организаций, ВыборкаДанныхЗанятыеШтатн ыеЕдиницы);
ЗанятыеШтатныеЕдиницыОрга низаций = 0;
Если Параметры.РаспределятьПоИ� �точникамФинансирования = 1 Тогда
ВоинскиеИСпециальныеЗвани я.ВыбратьСтроки();
Пока ВоинскиеИСпециальныеЗвани я.ПолучитьСтроку() = 1 Цикл
ВыгрузитьПоПравилу(Воинск� �еИСпециальныеЗвания, , , , "ВоинскиеИСпециальныеЗван� �я_Регистр");
КонецЦикла;
КлассныеЧиныДипломатическ иеРангиФизлиц.ВыбратьСтро� �и();
Пока КлассныеЧиныДипломатическ иеРангиФизлиц.ПолучитьСтр� �ку() = 1 Цикл
ВыгрузитьПоПравилу(Классн� �еЧиныДипломатическиеРанг� �Физлиц, , , , "КлассныеЧиныДипломатичес� �иеРангиФизлиц_Регистр");
КонецЦикла;
КонецЕсли;
КонецЦикла;
ВыборкаДанныхВременноПриб ывающиеРаботники.ВыбратьС� �роки();
Пока ВыборкаДанныхВременноПриб ывающиеРаботники.Получить� �троку() = 1 Цикл
ВыгрузитьПоПравилу(Выборк� �ДанныхВременноПрибывающи� �Работники, , , , "ВременноПребывающиеПриня� �ыеПоДолгосрочнымДоговора� �");
КонецЦикла;
КадровыеДанные = СоздатьОбъект("СписокЗначе ний");
КадровыеДанные.Установить( "Дата", ТекущаяДата());
КадровыеДанные.Установить( "ПериодРегистрации", Параметры.ДатаНачалаУчета) ;
КадровыеДанные.Установить( "Номер", "КД");
КадровыеДанные.Установить( "Организация", "Наша организация");
КадровыеДанные.Установить( "Комментарий", "Кадровые данные");
КадровыеДанные.Установить( "РаботникиОрганизаций", ВыборкаДанныхРаботникиОрг анизаций);
КадровыеДанные.Установить( "ЗанятыеШтатныеЕдиницыОрг� �низаций", ВыборкаДанныхЗанятыеШтатн ыеЕдиницы);
Если (ВыборкаДанныхРаботникиОр� �анизаций.КоличествоСтрок() > 0)
ИЛИ (ВыборкаДанныхЗанятыеШтат� �ыеЕдиницы.КоличествоСтрок () > 0) Тогда
ВыборкаДанных.ДобавитьЗна� �ение(КадровыеДанные);
КонецЕсли;
Если ВыборкаДанных.РазмерСписк� �() = 0 Тогда
Отказ = 1;
КонецЕсли;
Быстрый переход
Конфигурирование, программирование 1С - Предприятие
Вверх
- Навигация
- Кабинет
- Личные сообщения
- Подписки
- Кто на сайте
- Поиск по форуму
- Главная страница форума
- Форум
- Литература
- Крипто
- СБИС
- Компьютерные технологии
- Андеграунд
- Мобильная связь
- Отзывы
- Интернет
- FRB Club
- FRB
Похожие темы
-
Значение реквизита справочника из модуля управляемого приложения
от dr_t_j в разделе Конфигурирование, программирование 1С - ПредприятиеОтветов: 0Последнее сообщение: 14.01.2014, 12:53 -
1С 8.3. Тормозит запрос по поиску данных в справочнике с 6 миллионами записей
от fox019 в разделе Конфигурирование, программирование 1С - ПредприятиеОтветов: 1Последнее сообщение: 05.01.2014, 00:25
Социальные закладки