|
Программно присвоить таб.номер новому сотруднику | ☑ | ||
---|---|---|---|---|
0
листопад
27.04.14
✎
12:16
|
ЗУП
Пишу внешнюю обработку, которая из имеющихся физ лиц справочника "ФизЛица" создает сотрудников. Проблема - сотрудники создаются без табельных номеров. Как это побороть? Вот код: Процедура Кнопка1Нажатие(Элемент) НаимГруппы = "Договорники"; ГруппаФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НаимГруппы); ГруппаСотр = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(НаимГруппы); Запрос= Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СотрудникиОрганизаций.Ссылка, | СотрудникиОрганизаций.Физлицо, | СотрудникиОрганизаций.Наименование |ПОМЕСТИТЬ ВТ_Сотрудники |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК СсылкаФизлица, | ВТ_Сотрудники.Ссылка КАК СсылкаСотрудники, | ФизическиеЛица.Родитель, | ФизическиеЛица.Наименование, | ФизическиеЛица.Комментарий |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Сотрудники КАК ВТ_Сотрудники | ПО (ВТ_Сотрудники.Физлицо.Ссылка = ФизическиеЛица.Ссылка) |ГДЕ | НЕ ФизическиеЛица.ЭтоГруппа | И ФизическиеЛица.Родитель = &Группа"; Запрос.УстановитьПараметр("Группа",ГруппаФЛ); Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Строка ИЗ Результат Цикл Если Строка.СсылкаСотрудники = NULL Тогда // если нет ссылка на то что это физ лицо сотрудник то создаем нового ЭлементСправочника= Справочники.СотрудникиОрганизаций.СоздатьЭлемент(); Иначе ЭлементСправочника = Строка.СсылкаСотрудники.ПолучитьОбъект(); // если сотрудник существует перезаписываем его с новыми реквизитами КонецЕсли; ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); //вот здесь пытаюсь создать таб.номер ЭлементСправочника.Физлицо=Строка.СсылкаФизлица; ЭлементСправочника.Родитель = ГруппаСотр; ЭлементСправочника.Организация=Справочники.Организации.НайтиПоКоду("000000001"); ЭлементСправочника.ВидДоговора=Перечисления.ВидыДоговоровСФизЛицами.Подряда; ЭлементСправочника.ВидЗанятости=Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы; ЭлементСправочника.Актуальность=Истина; ЭлементСправочника.Наименование=Строка.Наименование; ЭлементСправочника.Записать(); КонецЦикла; КонецПроцедуры |
|||
1
Wobland
27.04.14
✎
12:45
|
а какие варианты ответа?
|
|||
2
листопад
27.04.14
✎
13:17
|
Ап!
|
|||
3
User_Agronom
27.04.14
✎
13:22
|
Нет команды:
ЭлементСправочника.Код = <Несколько непонятно как он должен формироваться>. Но с ЗУП общался года полтора назад, могу спутать имя реквизита. |
|||
4
User_Agronom
27.04.14
✎
13:23
|
Попрбуй так
ЭлементСправочника.Код = ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); Или посмотри события ПриЗаписи в типовых. |
|||
5
SeraFim
27.04.14
✎
13:25
|
Посмотри функцию
Следовательно, сначала все реквизиты заполни, а потом - табельный номер установи |
|||
6
листопад
27.04.14
✎
13:32
|
(4) не помогло
(5) перенесла в самый конец запись кода - не помогло... |
|||
7
Wobland
27.04.14
✎
13:40
|
автор - молодец, восхищаюсь. не имея возможности применить откладчик, пыхтит, упорно движется к цели
|
|||
8
User_Agronom
27.04.14
✎
13:42
|
(4) >>посмотри события ПриЗаписи в типовых
Попробуй создать сотрудника и найди то место, где ему формируется табельный номер. |
|||
9
листопад
27.04.14
✎
13:52
|
Вот эта функция в типовых:
// Функция формирует очередной табельный номер сотрудника // уникальность в пределах организации и вида договора // Возвращаемое значение: // Строка – табельный номер // Функция ПолучитьОчереднойТабельныйНомер() Экспорт Если Не ЗначениеЗаполнено(ВидДоговора) Тогда Возврат ""; КонецЕсли; Префикс = ""; Запрос = Новый Запрос; Запрос.УстановитьПараметр("парамОрганизация",Организация); парамВидДоговора = Новый Массив; СотрудникиОрганизацийПереопределяемый.ЗаполнитьПараметрыВидовДоговоров(парамВидДоговора, ВидДоговора, Префикс); Запрос.УстановитьПараметр("парамВидДоговора",парамВидДоговора); Запрос.УстановитьПараметр("Ссылка",Ссылка); ТекстЗапроса = "ВЫБРАТЬ | МАКСИМУМ(СотрудникиОрганизаций.Код) КАК Код |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ГДЕ | СотрудникиОрганизаций.Организация = &парамОрганизация | И СотрудникиОрганизаций.ВидДоговора В(&парамВидДоговора) | И СотрудникиОрганизаций.Ссылка <> &Ссылка"; Запрос.Текст = ТекстЗапроса; РезультатаЗапроса = Запрос.Выполнить(); Если РезультатаЗапроса.Пустой() Тогда Возврат ?(ЗначениеЗаполнено(Префикс), Префикс + "000000001", "0000000001"); Иначе СтрокаРезультата = РезультатаЗапроса.Выгрузить()[0]; Если НЕ ЗначениеЗаполнено(СтрокаРезультата.Код) Тогда Возврат ?(ЗначениеЗаполнено(Префикс), Префикс + "000000001", "0000000001"); Иначе Возврат ПроцедурыУправленияПерсоналом.ПолучитьСледующийНомер(СокрП(СтрокаРезультата.Код)); КонецЕсли; КонецЕсли; КонецФункции // ПолучитьОчереднойТабельныйНомер() |
|||
10
SeraFim
27.04.14
✎
14:15
|
(6) не верю =)
|
|||
11
листопад
27.04.14
✎
14:16
|
(10) Вот мсправленный код, не срабатывает:
Процедура Кнопка1Нажатие(Элемент) НаимГруппы = "Договорники"; ГруппаФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НаимГруппы); ГруппаСотр = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(НаимГруппы); Запрос= Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СотрудникиОрганизаций.Ссылка, | СотрудникиОрганизаций.Физлицо, | СотрудникиОрганизаций.Наименование |ПОМЕСТИТЬ ВТ_Сотрудники |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК СсылкаФизлица, | ВТ_Сотрудники.Ссылка КАК СсылкаСотрудники, | ФизическиеЛица.Родитель, | ФизическиеЛица.Наименование, | ФизическиеЛица.Комментарий |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Сотрудники КАК ВТ_Сотрудники | ПО (ВТ_Сотрудники.Физлицо.Ссылка = ФизическиеЛица.Ссылка) |ГДЕ | НЕ ФизическиеЛица.ЭтоГруппа | И ФизическиеЛица.Родитель = &Группа"; Запрос.УстановитьПараметр("Группа",ГруппаФЛ); Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Строка ИЗ Результат Цикл Если Строка.СсылкаСотрудники = NULL Тогда // если нет ссылка на то что это физ лицо сотрудник то создаем нового ЭлементСправочника= Справочники.СотрудникиОрганизаций.СоздатьЭлемент(); Иначе ЭлементСправочника = Строка.СсылкаСотрудники.ПолучитьОбъект(); // если сотрудник существует перезаписываем его с новыми реквизитами КонецЕсли; // ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); //вот здесь пытаюсь создать таб.номер ЭлементСправочника.Физлицо=Строка.СсылкаФизлица; ЭлементСправочника.Родитель = ГруппаСотр; ЭлементСправочника.Организация=Справочники.Организации.НайтиПоКоду("000000001"); ЭлементСправочника.ВидДоговора=Перечисления.ВидыДоговоровСФизЛицами.Подряда; ЭлементСправочника.ВидЗанятости=Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы; ЭлементСправочника.Актуальность=Истина; ЭлементСправочника.Наименование=Строка.Наименование; ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); // сюда перенесла, после заполнения всех реквизитов ЭлементСправочника.Записать(); КонецЦикла; КонецПроцедуры |
|||
12
Wobland
27.04.14
✎
14:18
|
(11) спорим, возвращает, что надо?
|
|||
13
Wobland
27.04.14
✎
14:18
|
(12) я про ПолучитьОчереднойТабельныйНомер
|
|||
14
SeraFim
27.04.14
✎
14:23
|
ЭлементСправочника.Код=ЭлементСправочника.ПолучитьОчереднойТабельныйНомер();
|
|||
15
листопад
27.04.14
✎
14:24
|
Wobland, вы всегда только ехидничаете. Реальной помощи от Вас никогда не было.
|
|||
16
Wobland
27.04.14
✎
14:25
|
(15) или просто не осилил
//я вообще сейчас злой, как последняя сволочь |
|||
17
листопад
27.04.14
✎
14:26
|
(14) Да, в (11) опечатка, там у меня вместо:
ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); Написано: ЭлементСправочника.Код=ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); И все равно таб.номер не присваивается... |
|||
18
листопад
27.04.14
✎
14:41
|
Ап!
|
|||
19
Любопытная
27.04.14
✎
14:48
|
(18)Отладчик что показывает?
|
|||
20
neo_matrix_123
27.04.14
✎
15:12
|
// Функция формирует уникальный номер трудового договора
// уникальность в пределах года // Функция ПолучитьНомерТрудовогоДоговора(Организация, ВидДоговора, ДатаДоговора, НомерДоговора) Экспорт Если Организация.Пустая() Тогда Возврат НомерДоговора; КонецЕсли; ВидыДоговоров = Новый Массив; ВидыДоговоров.Добавить(Перечисления.ВидыДоговоровСФизЛицами.ТрудовойДоговор); СотрудникиОрганизацийПереопределяемый.ДополнитьВидыДоговоровДляПолученияНомера(ВидыДоговоров); Если ВидыДоговоров.Найти(ВидДоговора) = Неопределено Тогда Возврат НомерДоговора; КонецЕсли; Запрос = Новый Запрос; ДатаДоговораДляЗапроса = ?(ЗначениеЗаполнено(ДатаДоговора), ДатаДоговора, ОбщегоНазначенияЗК.ПолучитьРабочуюДату()); Запрос.УстановитьПараметр("парамОрганизация",Организация); Запрос.УстановитьПараметр("парамНачалоГода" ,НачалоГода(НачалоДня(ДатаДоговораДляЗапроса))); Запрос.УстановитьПараметр("парамКонецГода" ,КонецГода(КонецДня(ДатаДоговораДляЗапроса))); Запрос.УстановитьПараметр("парамВидДоговора" ,ВидДоговора); ТекстЗапроса = "ВЫБРАТЬ | МАКСИМУМ(СотрудникиОрганизаций.НомерДоговора) КАК НомерДок |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ГДЕ | СотрудникиОрганизаций.Организация = &парамОрганизация | И СотрудникиОрганизаций.ВидДоговора = &парамВидДоговора | И СотрудникиОрганизаций.ДатаДоговора МЕЖДУ &парамНачалоГода И &парамКонецГода"; Запрос.Текст = ТекстЗапроса; Если Запрос.Выполнить().Пустой() Тогда Возврат Организация.Префикс + "0000001"; Иначе СтрокаРезультата = Запрос.Выполнить().Выгрузить()[0]; Если НЕ ЗначениеЗаполнено(СтрокаРезультата.НомерДок) Тогда Возврат Организация.Префикс + "0000001"; Иначе Возврат ПроцедурыУправленияПерсоналом.ПолучитьСледующийНомер(СокрП(СтрокаРезультата.НомерДок)); КонецЕсли; КонецЕсли; КонецФункции // ПолучитьНомерТрудовогоДоговора() // Увеличивает номер в переданной строке на 1 // // Параметры // ПоследнийНомер - строка - представляет собой номер (документа, табельный и т.п.) // // Возвращаемое значение: // строка - следующий по порядку номер // Функция ПолучитьСледующийНомер(ПоследнийНомер, Знач ДлинаНомера = 0) Экспорт Если ДлинаНомера = 0 Тогда ДлинаНомера = СтрДлина(ПоследнийНомер); КонецЕсли; Если ДлинаНомера = 0 Тогда Возврат "1" КонецЕсли; СчетчикСимв = ДлинаНомера; Пока СчетчикСимв > 0 Цикл Если Не ПустаяСтрока(Сред(ПоследнийНомер, СчетчикСимв, 1)) и ОбщегоНазначенияЗК.ТолькоЦифрыВСтроке(Сред(ПоследнийНомер, СчетчикСимв, 1)) Тогда СчетчикСимв = СчетчикСимв - 1; Иначе Прервать; КонецЕсли; КонецЦикла; Если СчетчикСимв = ДлинаНомера Тогда НомерЧисловой = 1 Иначе НомерЧисловой = Число(Сред(ПоследнийНомер, СчетчикСимв + 1)); КонецЕсли; Если НомерЧисловой < Pow(10, ДлинаНомера - СчетчикСимв) - 1 Тогда СледующийНомер = НомерЧисловой + 1; Иначе СледующийНомер = НомерЧисловой; КонецЕсли; НовыйНомер = Лев(ПоследнийНомер, СчетчикСимв) + Формат(СледующийНомер,"ЧЦ=" + (ДлинаНомера - СчетчикСимв) + "; ЧВН=; ЧГ=0"); Возврат НовыйНомер КонецФункции // ПолучитьСледующийНомер() |
|||
21
листопад
27.04.14
✎
15:12
|
(19) В отладчике вообще ничего не пойму...
|
|||
22
листопад
27.04.14
✎
15:14
|
(20) Это Вы скопировали из типовых. А как теперь их применить?
|
|||
23
Любопытная
27.04.14
✎
15:16
|
(21) Что не поймешь?
ЭлементСправочника.Код=ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); После выполнения этой строки Код элемента заполняется? |
|||
24
Torquader
27.04.14
✎
15:57
|
(23) И как у вас тут успехи с девочкой-дятлом ?
|
|||
25
Torquader
27.04.14
✎
15:58
|
У меня возник вопрос - а, случайно, Листопад и Мисти - это не одно и то же ?
|
|||
26
neo_matrix_123
27.04.14
✎
16:04
|
(24) да уже из мрамора одна труха... а-н все не выходит каменный цветок!
|
|||
27
neo_matrix_123
27.04.14
✎
16:13
|
(22) ну, например, напрямую обратившись к процедурам глобального контекста из модуля вашей обработки заполнения. но только молча
|
|||
28
SeraFim
27.04.14
✎
16:27
|
(24)сидим, любуемся фотографией
|
|||
29
Wobland
27.04.14
✎
17:04
|
(28) вот бы на фотографию Михаила Иванова ещё взглянуть
|
|||
30
листопад
27.04.14
✎
17:17
|
Up!
|
|||
31
zak555
27.04.14
✎
17:20
|
(30) фотку сменишь ?
|
|||
32
листопад
27.04.14
✎
17:24
|
Вот так, табельный номер присваивается. Но нумерация почему-то идет без лидирующих нулей. Т.е. присваивает таб.номер 91, а должен быть 0000000091. Почему так происходит?
Процедура Кнопка1Нажатие(Элемент) НаимГруппы = "Договорники"; ГруппаФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НаимГруппы); ГруппаСотр = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(НаимГруппы); Запрос= Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СотрудникиОрганизаций.Ссылка, | СотрудникиОрганизаций.Физлицо, | СотрудникиОрганизаций.Наименование |ПОМЕСТИТЬ ВТ_Сотрудники |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК СсылкаФизлица, | ВТ_Сотрудники.Ссылка КАК СсылкаСотрудники, | ФизическиеЛица.Родитель, | ФизическиеЛица.Наименование, | ФизическиеЛица.Комментарий |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Сотрудники КАК ВТ_Сотрудники | ПО (ВТ_Сотрудники.Физлицо.Ссылка = ФизическиеЛица.Ссылка) |ГДЕ | НЕ ФизическиеЛица.ЭтоГруппа | И ФизическиеЛица.Родитель = &Группа"; Запрос.УстановитьПараметр("Группа",ГруппаФЛ); Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Строка ИЗ Результат Цикл Если Строка.СсылкаСотрудники = NULL Тогда // если нет ссылка на то что это физ лицо сотрудник то создаем нового ЭлементСправочника= Справочники.СотрудникиОрганизаций.СоздатьЭлемент(); Иначе ЭлементСправочника = Строка.СсылкаСотрудники.ПолучитьОбъект(); // если сотрудник существует перезаписываем его с новыми реквизитами КонецЕсли; ЭлементСправочника.Физлицо=Строка.СсылкаФизлица; ЭлементСправочника.Родитель = ГруппаСотр; //ЭлементСправочника.Организация=Организация; ЭлементСправочника.Организация=Справочники.Организации.НайтиПоКоду("000000001"); ЭлементСправочника.ВидДоговора=Перечисления.ВидыДоговоровСФизЛицами.Подряда; ЭлементСправочника.ВидЗанятости=Перечисления.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы; ЭлементСправочника.Актуальность=Истина; //ЭлементСправочника.Код=Строка.Комментарий; ЭлементСправочника.Наименование=Строка.Наименование; ЭлементСправочника.Код = ЭлементСправочника.ПолучитьОчереднойТабельныйНомер(); ЭлементСправочника.Записать(); КонецЦикла; КонецПроцедуры |
|||
33
ДенисЧ
27.04.14
✎
17:28
|
(32) продать тебе описание функции Формат()
|
|||
34
ДенисЧ
27.04.14
✎
17:28
|
?
|
|||
35
Torquader
27.04.14
✎
17:30
|
(32) Господин "тук-тук по дереву", если вы к номеру добавить нули не в состоянии, то тут 1С ничем не поможет.
Просто, табельный номер - всё-таки - число и нулей у числа в начале быть не должно. |
|||
36
SeraFim
27.04.14
✎
17:52
|
(32)рискну предположить, что это зависит от того, какие табельные номера уже есть в базе.
То есть если у Иванова табельный номер "90", то Петрову присвоится - "91", А если у Иванова - "0000000090", то у Петрова будет "0000000091" |
|||
37
ДенисЧ
27.04.14
✎
17:56
|
(35) Госпожа, пrостите...
|
|||
38
Wobland
27.04.14
✎
17:57
|
(37) полной уверенности нет у многих
|
|||
39
ДенисЧ
27.04.14
✎
18:02
|
(38) А вас это так сильно беспокоит? Ну хочет господин представиться белой госпожой, почему бы и не потакнуть...
|
|||
40
Torquader
27.04.14
✎
18:03
|
(37) У "птиц с большим клювом" пол очень сложно определяется и на основные функции по превращению деревьев в щепки - никак не влияет.
Потом это "чудо" с ником, которому любой дятел позавидует было обнаружено на инфросрате, как мальчик. |
|||
41
zak555
27.04.14
✎
18:07
|
те м, которые скрываются под ж -- кто они ?
|
|||
42
Torquader
27.04.14
✎
18:09
|
(41) Это ты у них спроси.
Хотя, в некоторых странах они даже этим гордятся. |
|||
43
zak555
27.04.14
✎
18:10
|
это же отклонение
|
|||
44
Wobland
27.04.14
✎
18:12
|
(40) в слове "инфросрат" одна Р лишняя, по-моему
|
|||
45
Torquader
27.04.14
✎
18:20
|
(43) Если мальчику отрезать "хвостик", а девочке - зашить "дырочку", то различий между ними не останется, однако, программировать они от этого не станут.
|
|||
46
Torquader
27.04.14
✎
18:20
|
(44) Ну, извиняюсь, может быть и лишняя, но "инфосрат" как-то не очень хорошо звучит.
|
|||
47
Wobland
27.04.14
✎
18:35
|
(45) правильно. программинг высшего уровня осуществляется непосредственно 22 см.
|
|||
48
Torquader
27.04.14
✎
18:38
|
(47) То есть, если к (0) пришить "22 см", то у него больше не будет нерешённых проблем.
|
|||
49
Wobland
27.04.14
✎
18:39
|
(48) меня мама родила с один-двумя. всё остальное - годы учёбы и опыта. ну если пришить, может, хоть девчонки потянутся
|
|||
50
Любопытная
27.04.14
✎
18:41
|
Чего вы злые-то такие? Девушка за помощью обратилась, а вы сразу "дятел". А потом удивляются, чего это их козлами считают... Добрее бы надо быть к окружающим
|
|||
51
Wobland
27.04.14
✎
18:45
|
(50) была б девушка, я б ещё поудержался. но не уметь заюзать обкладчик на каких-то мелочах и продолжать тыкаться лобом в ворота.. это достойно либо презрения либо профессии гуманитарной направленности
|
|||
52
Torquader
27.04.14
✎
18:45
|
(50) В общем смотри
v8: Формат даты И найди ещё несколько таких же тем от этого же "чуда", которое вы назвали "девушка". P.S. девушка - она только в первый раз, а если несколько раз - то уже и не девушка. |
|||
53
Torquader
27.04.14
✎
18:46
|
(51) Так я уже подозреваю, что это очередная реинкарнация Мисти
|
|||
54
Wobland
27.04.14
✎
18:47
|
+(52) v8: Формат даты в виде "__" ______ _____ г., пост 55
|
|||
55
Любопытная
27.04.14
✎
18:48
|
Ну и прошли бы мимо
|
|||
56
Torquader
27.04.14
✎
18:49
|
(55) Мимо такого не проходят.
Я лучше мимо девочки пройду - пусть другие помогут, но мимо такого пройти сложно. |
|||
57
Wobland
27.04.14
✎
18:50
|
(55) есть призрачная надежда когда-нибудь взрастить в товарище признаки самостоятельности
|
|||
58
Torquader
27.04.14
✎
18:50
|
(57) Хотя, с большей вероятности это "чудо" замкнётся в себе.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |