|
Выборка | ☑ | ||
---|---|---|---|---|
0
Swetlana521911
19.08.13
✎
07:59
|
Здравствуйте!!! Столкнулась с проблемой.. Существует некая внешняя обработка, которая печатает бейджики. Т.е. она берет людей из справочника физ лиц и их должности. В этом же справочнике есть раздел заметки, в котором присваивается индивидуальный номер(номер бэйджа) каждому физ.лицу. Данные заметок хранятся в регистре сведений. Была поставлена задача: выбрать из физ.лиц только водителей, проверить уволены они или нет, если уволены, то освободить их индивидуальный номер и присвоить его к новым водителям. Таким образом на форме есть кнопки: "Заполнить физ.лица" - заполняет данные в таблицу(фио, должность, номер бэйджа) и "Сформировать номера ФЛ" - эта кнопка и формирует номера по порядку (от 1 до ....). Я уже сделала выборку уволенных водителей и их номера. Теперь необходимо взять эти номера и присваивать водителям, которые поступили на работу. А если номеров нет, то присваивать как обычно по порядку.
Вот код выборки: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |СотрудникиОрганизаций.Физлицо.Наименование КАК ФизлицоНаименование, |СотрудникиОрганизаций.Должность.Наименование КАК ДолжностьНаименование, |СотрудникиОрганизаций.ДатаУвольнения КАК ДатаУвольнения, |Заметки.Содержание | ИЗ |Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.Заметки КАК Заметки |ПО Заметки.Объект = СотрудникиОрганизаций.ФизЛицо |ГДЕ |СотрудникиОрганизаций.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) |И СотрудникиОрганизаций.Должность.Наименование ПОДОБНО "%водитель%" |"; Код кнопки "Сформировать номера ФЛ": Процедура КоманднаяПанель2ЗаписатьНомераФЛ(Кнопка) //Проверим уществование таких значений заметок, как в справочнике виды заметок Значение = Справочники.ВидыЗаметок.НайтиПоНаименованию("НомерБэйджа"); Если Значение = Справочники.ВидыЗаметок.ПустаяСсылка() Тогда Сообщить("Не существует вид заметки НомерБэйджа в справочнике Виды заметок !"); Возврат; КонецЕсли; //Проверим есть ли префикс жд в форме. Если ЭтаФорма.ЭлементыФормы.Префикс.Значение="" Тогда Сообщить("Не заполнен префикс железной дороги!"); Возврат; КонецЕсли; //Определим последний номер в базе фл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Заметки.Содержание |ИЗ | РегистрСведений.Заметки КАК Заметки |ГДЕ | Заметки.ВидЗаметки.Ссылка = &ВидЗаметки | |УПОРЯДОЧИТЬ ПО | Заметки.Дата УБЫВ"; Запрос.УстановитьПараметр("ВидЗаметки",Значение); Выборка = Запрос.Выполнить().Выбрать(); //проверим, если таких номеров нет, то начнем с 1го. Если Выборка.Количество()=0 Тогда ПоследнийНомер = 1; Иначе ДлинаНомера = СтрДлина(Выборка.Содержание); ПоследнийНомер = Прав(Выборка.Содержание,ДлинаНомера-4); Попытка ПоследнийНомер = Число(ПоследнийНомер); Исключение ПоследнийНомер = 1; КонецПопытки; КонецЕсли; //Сделаем отбор на галочки по номерам Для каждого Строка из ЭтотОбъект.Товары Цикл Если Строка.ФлагN Тогда //Для каждого элемента запишем. ФизЛицо = Строка.ФизЛицо; НаборЗаписей = РегистрыСведений.Заметки.СоздатьНаборЗаписей(); НаборЗаписей.Записывать = Истина; ТекДата = ТекущаяДата(); НаборЗаписей.Отбор.Объект.Установить(ФизЛицо); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Дата = ТекДата; НоваяЗапись.ВидЗаметки = Справочники.ВидыЗаметок.НайтиПоНаименованию("НомерБэйджа"); НоваяЗапись.Содержание = ЭтаФорма.Префикс+ПоследнийНомер; НоваяЗапись.Объект = ФизЛицо; //Получаем префикс дороги ПоследнийНомер=ПоследнийНомер+1; //Создаем запись в регистре сведений НаборЗаписей.Записать(); НаборЗаписей.Записывать = Ложь; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
Starhan
19.08.13
✎
08:09
|
(0)>>Я уже сделала выборку уволенных водителей и их номера. Теперь необходимо взять эти номера и присваивать водителям...
Продолжайте описывать свои действия, нам очень интересно. ------------------- ... |СотрудникиОрганизаций.Должность.Наименование КАК ДолжностьНаименование, ... ужс если это ЗиУП. Сообщите вышестоящему начальству о проф. не пригодности. |
|||
2
Wobland
19.08.13
✎
08:11
|
так уж очень хочется старые номера заюзать?
|
|||
3
Cube
19.08.13
✎
08:35
|
(0) Почему бы вам не заполнить фото в личной карточке, глядишь и люди бы к вам потянулись... Намёк понятен? :)
|
|||
4
Jonny_Khomich
19.08.13
✎
08:38
|
(2) цифр и так мало осталось, надо думать об рациональном использовании.
|
|||
5
Swetlana521911
19.08.13
✎
08:40
|
вот вот именно их надо использовать.... причем это касается только должности "Водитель"
|
|||
6
Jonny_Khomich
19.08.13
✎
08:40
|
(0) что обозначают цифры в нике?
|
|||
7
Swetlana521911
19.08.13
✎
08:41
|
Получается водитель уволен его номер надо взять и присвоить к вновь прибывшему водителю, а старого удалить
|
|||
8
Swetlana521911
19.08.13
✎
08:49
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ |СотрудникиОрганизаций.Физлицо.Наименование КАК ФизлицоНаименование, |СотрудникиОрганизаций.Должность.Наименование КАК ДолжностьНаименование, |СотрудникиОрганизаций.ДатаУвольнения КАК ДатаУвольнения, |Заметки.Содержание | ИЗ |Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.Заметки КАК Заметки |ПО Заметки.Объект = СотрудникиОрганизаций.ФизЛицо |ГДЕ |СотрудникиОрганизаций.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) |И СотрудникиОрганизаций.Должность.Наименование ПОДОБНО ""%водитель%"" |"; ТЗ = Запрос.Выполнить().Выгрузить(); вот запрос... как из его результата взять номера и поместить их в массив, а самих владельцев удалить?????????????? |
|||
9
Jonny_Khomich
19.08.13
✎
08:52
|
(8) я думаю, удалять сотрудников из справочника дурная затея. Проще номер у этого сотрудника затереть и присвоить его другому.
|
|||
10
Starhan
19.08.13
✎
09:01
|
(9) номер хранится в регистре сведений заметки.
Там же его надо и почистить и присвоить другим. Не понимаю какой конкретно шаг у ТС вызывает трудности. |
|||
11
Peltzer
19.08.13
✎
09:04
|
(7) А если понадобится посмотреть кто под этим беджиком ездил два года назад?
|
|||
12
Starhan
19.08.13
✎
09:05
|
(11) да просто повешают недостачу на водителя принятого неделю назад. :) Номер то тот же :)
|
|||
13
Swetlana521911
19.08.13
✎
09:26
|
))))) ну так то да))) ну это уже не мое дело.... мне главное сделать)
|
|||
14
Swetlana521911
19.08.13
✎
09:27
|
(9) номер хранится в регистре сведений заметки.
Там же его надо и почистить и присвоить другим. Это и вызывает))) как программно прописать... ? |
|||
15
Starhan
19.08.13
✎
09:35
|
http://www.google.ru/#bav=on.2,or.r_qf.&fp=47fbe83b7ce2a8a6&newwindow=1&q=регистр+сведений+удалить+записи
|
|||
16
Starhan
19.08.13
✎
09:35
|
еще раз
http://www.google.ru/#bav=on.2,or.r_qf.&fp=47fbe83b7ce2a8a6&newwindow=1&q=регистр+сведений+удалить+записи |
|||
17
Cyberhawk
19.08.13
✎
09:36
|
Без фото не взлетит уже говорили?
|
|||
18
Cyberhawk
19.08.13
✎
09:36
|
||||
19
Swetlana521911
19.08.13
✎
09:44
|
1с Предприятие 8.2 (8.2.13.219), Конф ЗУП 2.5
|
|||
20
Swetlana521911
19.08.13
✎
10:59
|
Результат = Запрос.Выполнить().Выбрать();
МассивНомеров = Новый Массив; Пока Результат.Следующий() Цикл МассивНомеров.Добавить(Результат.Содержание); МенеджерЗаписи = РегистрыСведений.Заметки.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = Результат.ФизЛицо; МенеджерЗаписи.ВидЗаметки = Результат.ВидЗаметки; МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Удалить(); КонецЕсли; КонецЦикла; |
|||
21
Swetlana521911
19.08.13
✎
10:59
|
Вот.. посмотрите все правильно???
|
|||
22
Cube
19.08.13
✎
11:25
|
(21) Фото на паспорт... Ну, уже что-то, конечно, но по-веселее нет?))
|
|||
23
Swetlana521911
19.08.13
✎
11:45
|
на работе я)))) нормальной нету)))
|
|||
24
Cube
19.08.13
✎
11:49
|
(23) В контакте/одноклассниках сто пудова есть, можно оттуда взять и сюда вставить))
|
|||
25
Cyberhawk
19.08.13
✎
11:54
|
(22) перед тем как просить фото из соцсети, подумай, что нынешнее фото может быть многолетней давности :) Подозрения закрались по циферкам в нике
|
|||
26
Swetlana521911
19.08.13
✎
11:57
|
А тут вся фишка в фотке или все таки в помощи???
|
|||
27
Cube
19.08.13
✎
12:01
|
(26) Смотря какое фото)))
К девушкам с удачными фотками желающих помочь набегает больше))) |
|||
28
Swetlana521911
19.08.13
✎
12:10
|
АААААА ну вечером поменяю))
|
|||
29
Swetlana521911
19.08.13
✎
13:21
|
И все-таки кто-нибудь сможет мне помочь????
|
|||
30
Starhan
19.08.13
✎
13:27
|
(29)Конечно, в чем проблема?
|
|||
31
Swetlana521911
19.08.13
✎
13:32
|
Выше написана задача...
Думаю идти по такой логике: 1. Находим первого водителя без номера. 2. Находим первую запись со "свободным" номером 3. Если таковой нету, генерим новый номер, Если такая запись есть, то удаляем эту запись со старого водителя, и присваиваем этот номер новому водителю. 4. Переходим к п.1 |
|||
32
Swetlana521911
19.08.13
✎
13:34
|
Выборку по новым водителям (т.е. без номера) сделала:
ВЫБРАТЬ СотрудникиОрганизаций.Ссылка, Заметки.Содержание ИЗ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Заметки КАК Заметки ПО (Заметки.Объект = СотрудникиОрганизаций.Физлицо) ГДЕ СотрудникиОрганизаций.Должность.Наименование ПОДОБНО "%водитель%" И Заметки.Содержание ЕСТЬ NULL Выборка уволенных водителей тоже есть: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |СотрудникиОрганизаций.Физлицо.Наименование КАК ФизлицоНаименование, |СотрудникиОрганизаций.Должность.Наименование КАК ДолжностьНаименование, |СотрудникиОрганизаций.ДатаУвольнения КАК ДатаУвольнения, |Заметки.Содержание | ИЗ |Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.Заметки КАК Заметки |ПО Заметки.Объект = СотрудникиОрганизаций.ФизЛицо |ГДЕ |СотрудникиОрганизаций.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) |И СотрудникиОрганизаций.Должность.Наименование ПОДОБНО ""%водитель%"" |"; |
|||
33
Starhan
19.08.13
✎
13:35
|
ну норм.
За исключением того номер может уже ни принадлежать ни текущему водителю, ни уволенному водителю. Номера лучше освобождать сразу при увольнении. И текущую должность надо брать не из справочника, а рс кадровая история сотрудников. |
|||
34
Swetlana521911
19.08.13
✎
13:35
|
Как теперь связать все это? То есть взять у уволенных водителей номера и присваивать их к новым, а у уволенных водителей их удалять??
|
|||
35
Swetlana521911
19.08.13
✎
13:37
|
Пыталась удалить номера...Он ругается(((
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |СотрудникиОрганизаций.Физлицо.Наименование КАК ФизлицоНаименование, |СотрудникиОрганизаций.Должность.Наименование КАК ДолжностьНаименование, |СотрудникиОрганизаций.ДатаУвольнения КАК ДатаУвольнения, |Заметки.Содержание | ИЗ |Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | РегистрСведений.Заметки КАК Заметки |ПО Заметки.Объект = СотрудникиОрганизаций.ФизЛицо |ГДЕ |СотрудникиОрганизаций.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) |И СотрудникиОрганизаций.Должность.Наименование ПОДОБНО ""%водитель%"" |"; Результат = Запрос.Выполнить().Выбрать(); МассивНомеров = Новый Массив; Пока Результат.Следующий() Цикл // Добавим в массив номер, для дальнейшей его обработки МассивНомеров.Добавить(Результат.Содержание); МенеджерЗаписи = МенеджерЗаписи = РегистрыСведений.Заметки.СоздатьМенеджерЗаписи(); // освобождение номера, путем удалениедений.Заметки.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = Результат.ФизЛицо; // д.б. ключевым полем МенеджерЗаписи.ВидЗаметки = Результат.ВидЗаметки; // д.б. ключевым полем МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.Удалить(); КонецЕсли; |
|||
36
Swetlana521911
19.08.13
✎
13:38
|
Ругается на эти 2 строчки :
МенеджерЗаписи.Объект = Результат.ФизЛицо; МенеджерЗаписи.ВидЗаметки = Результат.ВидЗаметки; {Форма.Форма.Форма(950)}: Значение не является значением объектного типа (Объект) |
|||
37
Cube
19.08.13
✎
13:39
|
(34) У меня вопрос на засыпку: зачем УДАЛЯТЬ номера у уволенных?
|
|||
38
Swetlana521911
19.08.13
✎
13:41
|
ну их же надо взять и присвоить к новым
|
|||
39
Cube
19.08.13
✎
13:42
|
(38) Ну и присваивай. Удалять-то зачем? Пусть будут для истории...
|
|||
40
Wobland
19.08.13
✎
13:43
|
как вариант.
1. работать при необходимости выдать новый номер; 2. брать любой уволенный, переназначать владельца; 3. нет уволенных - брать макс(0, максимальный из имеющихся)+1; |
|||
41
Starhan
19.08.13
✎
13:45
|
(38) а сколько номеров максимум может быть на бейдже?
|
|||
42
Swetlana521911
19.08.13
✎
13:47
|
(40) ну по сути так и надо. правда все это касается только водителей. Вот один уволился у него был номер, теперь этот номер надо обозначить как свободный. И вот тут новый водитель поступил на работу ему нужен номер. Если есть свободные, то ему присваивается наименьший, а если свободных нет, то мах + 1
|
|||
43
Swetlana521911
19.08.13
✎
13:48
|
сколько сотрудников столько и номеров. у каждого он индивидуален
|
|||
44
Wobland
19.08.13
✎
13:48
|
(42) обозначение свободности - в уволенности. в чём затык?
|
|||
45
Wobland
19.08.13
✎
13:49
|
и я вообще молчу про сомнительность необходимости освобождения номеров
|
|||
46
Cube
19.08.13
✎
13:50
|
(44) А если договор срочный?))
|
|||
47
Cube
19.08.13
✎
13:50
|
(45) Вот это +100. Не, ну можно ещё освобождать через месяц после увольнения, но сразу... Будут коллизии 100%.
|
|||
48
Swetlana521911
19.08.13
✎
13:52
|
ну вот надо сразу...... Уволен - все номер свободен. Его можно отдать другому
|
|||
49
Swetlana521911
19.08.13
✎
13:52
|
это же бейджики они будут редко меняться
|
|||
50
Cube
19.08.13
✎
13:53
|
(48) Уволен случайно (ну кадровик после корпоратива не туда тыкнула) - меняй бейджик...
|
|||
51
Wobland
19.08.13
✎
13:55
|
автор так и не ответила ажно ещё на (2)
|
|||
52
Swetlana521911
19.08.13
✎
13:56
|
)))))))))) ну получается да)))))
|
|||
53
Swetlana521911
19.08.13
✎
13:57
|
на что не ответила??))
|
|||
54
Starhan
19.08.13
✎
13:57
|
(43)Кривая структура хранения данных. Высокая вероятность вылезти какому-нибудь глюку. В любом случае будет копрокод.
Вот тебе вариант. Удаленных водителей выгружаешь в ТЗ. (сортируешь по номеру) Обходишь выборку новых водителей. Внутри проверяешь пустая ли таблица с удаленными водителями. Если нет. Берешь номер с первой строки. Запись в регистре и ТЗ по водиле удаляешь. |
|||
55
Swetlana521911
19.08.13
✎
13:59
|
это понятно на словах...... а вот программно ;((((((((((((((((((((((((((((((((((((((((((((((
|
|||
56
Starhan
19.08.13
✎
13:59
|
(48)(49) чо-то ты запутала. Когда номер освобожалется при увольнении сразу или редко во время печати бейджев?
|
|||
57
Wobland
19.08.13
✎
14:01
|
(53) на кой ляд нужна вся эта эротика?
|
|||
58
mistеr
19.08.13
✎
14:03
|
(42) Сколько у вас водителей? Сколько меняется каждый день?
Есть ли вообще смысл в автоматизации этого процесса? Моожет проще человеку ручками номер перебить. Только отчет ему в помощь, у кого какой номер. И отметить уволенных. |
|||
59
Swetlana521911
19.08.13
✎
14:03
|
в общем вот в чем суть....... это все внешняя обработка и за добавление нового номера отвечает кнопка. То есть вот пришел новый водитель надо ему бейджик. Зашли они в обработку нажали кнопку "Заполнить номера" и тогда тут пошел процесс: ищет уволенных, берет их номера, присваивает первый номер ему, если нет номеров свободных то генерируется стандартно, т.е. мах +1
|
|||
60
Wobland
19.08.13
✎
14:04
|
(59) То есть вот пришел новый водитель надо ему бейджик, генерируется стандартно, т.е. мах +1
ТЧК |
|||
61
Swetlana521911
19.08.13
✎
14:05
|
водителей 79. Меняться думаю будут редко. Вот первый раз распечатали всем бейджики и все. Теперь в следующий раз будут печатать только новому сотруднику.
|
|||
62
Swetlana521911
19.08.13
✎
14:05
|
ну так если есть уволенный водитель и номер у него тогда пропадет...
|
|||
63
Swetlana521911
19.08.13
✎
14:06
|
а генерировать можно до бесконечности
|
|||
64
Wobland
19.08.13
✎
14:06
|
(62) светлая память. ты ничего не сказала на эту тему
|
|||
65
Wobland
19.08.13
✎
14:07
|
(63) не до бесконечности, а до переполнения счётчика
|
|||
66
Swetlana521911
19.08.13
✎
14:07
|
в общем задача была поставлена брать у уволенных и ставить новым
|
|||
67
Wobland
19.08.13
✎
14:08
|
(66) слабый аргумент
|
|||
68
Swetlana521911
19.08.13
✎
14:10
|
например если сотрудников 300, а номеров больше 1000 это тоже не корректно
|
|||
69
Swetlana521911
19.08.13
✎
14:10
|
а у уволенных номера все равно никак не используются
|
|||
70
Wobland
19.08.13
✎
14:10
|
(68) почему?
кстати, табельные номера сотрудников освобождаются при увольнении? |
|||
71
Wobland
19.08.13
✎
14:11
|
(69) ты уже целый день сидишь над задачей, которая упрощается до безобразия, если не вымудриваться
|
|||
72
Swetlana521911
19.08.13
✎
14:13
|
ну.... голову ломаю...((
|
|||
73
Swetlana521911
19.08.13
✎
14:14
|
тем более с 1с я ооочень мало знакома...
|
|||
74
Wobland
19.08.13
✎
14:16
|
(73) в общем, ты меня не убедила в том, что нужно делать именно так. реализовывать или участвовать в реализации такого алгоритма я не хочу
|
|||
75
Starhan
19.08.13
✎
14:19
|
(73) ааа. видимо им так важна 1ска раз они ставят такого человека на нее :(
|
|||
76
Starhan
19.08.13
✎
14:22
|
Если бы мне заплатили за копрокод сделал бы так.
//Уволенные Запрос = //твой запрос уволенные. УволенныеТЗ = Запрос.Выполнить().Выгрузить(); Запрос = //твой запрос новые ВыборкаНовые = Запрос.Выполнить.Выбрать(); Пока ВыборкаНовые.Следующий() Цикл Если УволенныеТЗ.Количество() >0 Тогда УдалитьЗаписьРС(УволенныеТЗ[0].Водитель); номер = УволенныеТЗ.Номер; УволенныеТЗ.Удалить(0); ДобавитьЗаписьРС(ВыборкаНовые.Водитель,номер); Иначе ДобавитьЗаписьРС(ВыборкаНовые.Водитель); КонецЦикла; -- А если бы заплатили хорошо переделал бы структуру нормально :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |