Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> ОброботкаПроведения          
bodka Подменю пользователя
сообщение 19.05.11, 8:15
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

Здравствуйте. Мне нужна помощь.
Я создал "Простейший кадровый учет"
[необходимо зарегистрироваться для просмотра ссылки]
Но у меня есть еще одна задача: Мне нужно что бы при проведении "ПриемНаРаботу" проверяло по ИНН (Реквизит "ИНН" я добавил и в спр. и в док. ) Тоесть если ИНН=ИНН, то не проводить... Если ИНН<>ИНН, то проводить.

Процедура ОбработкаПроведения(Отказ, Режим)
      

СпрСотр = Справочники.Сотрудники.СоздатьЭлемент();
Если СпрСотр.ИНН=Инн Тогда     
    Отказ = Истина;
    Сообщить ("Ошибка");
Иначе
    
    СпрСотр.Наименование = ФИО;
    СпрСотр.Должность = Должность;
    СпрСотр.Оклад = Оклад;
    СпрСотр.ДатаПриема = ДатаПриема;
    СпрСотр.ИНН = ИНН;
    СпрСотр.Записать();
            
КонецЕсли;


КонецПроцедуры

Вот так я написал. Синтакс ошибки не находит. В 1С 8 предприятии у Меня всеравно проводится документ.. где ошибка?
Причина редактирования: Выделяйте код!

Vofka Подменю пользователя
сообщение 19.05.11, 8:22
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Неправильно.

Как-то так попробуйте:

Процедура ОбработкаПроведения(Отказ, Режим)
      
Сотр = Справочники.Сотрудники.НайтиПоРеквизиту("ИНН", ИНН);

Если Сотр <> Справочники.Сотрудники.ПустаяСсылка() Тогда    
    Отказ = Истина;
    Сообщить ("Ошибка");
Иначе
    СпрСотр = Справочники.Сотрудники.СоздатьЭлемент();
    СпрСотр.Наименование = ФИО;
    СпрСотр.Должность = Должность;
    СпрСотр.Оклад = Оклад;
    СпрСотр.ДатаПриема = ДатаПриема;
    СпрСотр.ИНН = ИНН;
    СпрСотр.Записать();
КонецЕсли;

КонецПроцедуры

Спасибо сказали: bodka,

bodka Подменю пользователя
сообщение 19.05.11, 8:45
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

Если Сотр <> Справочники.Сотрудники.ПустаяСсылка() Не пойму логики. Не можете подробнее по каждому слову объяснить?

DartRomanius Подменю пользователя
сообщение 19.05.11, 8:56
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(bodka @ 19.05.11, 9:45) *
Если Сотр <> Справочники.Сотрудники.ПустаяСсылка() Не пойму логики. Не можете подробнее по каждому слову объяснить?


В вашей задаче надо найти сотрудника по ИНН.

Сотр = Справочники.Сотрудники.НайтиПоРеквизиту("ИНН", ИНН);


Так вот если найдет то будет ссылка на Элемент
Если не найдет то будет пустая ссылка

Это собственно и есть проверка.

По русски это как-то так:
Найти в справочнике элемент с таким ИНН и вернуть ссылку на него в переменную "Сотр"
если мы нашли такого сотрудника то идем в отказ, а проверяем мы сравнением переменной "Сотр" со значением пустой ссылки на элемент справочника сотрудники
Если такого сотрудника не нашли, значит то что нам надо и выполняем действия по созданию нового элемента справочника....




Да еще можно так:
Если Не Сотр.Пустая() Тогда
.....
PROFIT


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Спасибо сказали: bodka,

Batchir Подменю пользователя
сообщение 19.05.11, 9:15
Сообщение #5

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

И вообще всегда было правильным сначала создать элемент справочника, а потом его подставлять в строку документа.
Поэтому предлагаю переделать всё к стандартному алгоритму

1. Создаем документ
2. добавляем строку
3. выбираем сотрудника, если нет то создаем

Если хотите водить ИНН в табличной части, то только для автоматического поиска сотрудника и его подстановки. т.е. вводите ИНН, нажимаете "энтер" и автоматом должен заполниться реквизит с сотрудником, если найден. Если не найден, то уже можете программно открыть форму создания нового сотрудника и после записи подставлять в строку табличной части.

а при проведении реализовать проверку на заполненность именно сотрудника в табличных частях

Vofka Подменю пользователя
сообщение 19.05.11, 9:45
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Я в задачу особо не вникал, смотрел только на код. Как я понял, в документе нет табл. части и туда в строковые реквизиты вводтся ФИО, должность, оклад, Дата приёма, ИНН и при проведении автоматом заполняется справочник. И справочник заполняется только программно и новый сотрудник там может появиться только после приёма его на работу.

bodka Подменю пользователя
сообщение 19.05.11, 10:42
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

А вот допустим я принял чел. с ИНН = 1111111111, потом его уволил. Через некоторое время мне нужно будет принять его обратно... То у меня не проведется док. так как он есть в сотрудн.
Получается что надо разделить сотр. на принятые и уволенные. Как это сделать?


Можно даже не расделять на группы, а просто дописать в код (если есть ДатаУвольнения, то не проверять ИНН).

DartRomanius Подменю пользователя
сообщение 19.05.11, 10:45
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(bodka @ 19.05.11, 11:37) *
А вот допустим я принял чел. с ИНН = 1111111111, потом его уволил. Через некоторое время мне нужно будет принять его обратно... То у меня не проведется док. так как он есть в сотрудн.
Получается что надо разделить сотр. на принятые и уволенные. Как это сделать?


А вот здесь проблема не программного характера, а организация данных хромает.
Собственно:
есть Справочник "Сотрудники"
нет информации принят он или уволен.

Собственно решение простое.
Как делали еще в 7.7 в разных конфигурациях. Что встречал.
У сотрудника была 2 реквизита дата приема и дата увольнения.
Соответственно по наличии записей в этих реквизитов система ориентировалась принят/уволен/не принят и т.п.

в случае 8.2 есть вкусная штука "Регистры Сведений"
собственно через них ориентироваться.
собственно сделать регистр сотрудники
периодическим
Измерение - сотрудник
Ресурс - принят типа перечисление или булево

так как регистр периодический то по дате делать выборку по сотруднику.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

bodka Подменю пользователя
сообщение 19.05.11, 10:50
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 76
Спасибо сказали: 36 раз
Рейтинг: 0

а можно подробнее инструкцию.........ПОЖАЛУЙСТА

Vofka Подменю пользователя
сообщение 19.05.11, 11:53
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

По-моему задача начинает выходить за рамки изначально поставленной. Поэтому тему закрываю.

bodka, поищите сами, что такое регистр сведений, почитайте какую-то литературу, в конце концов. Если будут конкретные вопросы - задавайте в новых темах.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Тема закрыта Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 6:41
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!