Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ОброботкаПроведения
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bodka
Здравствуйте. Мне нужна помощь.
Я создал "Простейший кадровый учет"
необходимо зарегистрироваться для просмотра ссылки
Но у меня есть еще одна задача: Мне нужно что бы при проведении "ПриемНаРаботу" проверяло по ИНН (Реквизит "ИНН" я добавил и в спр. и в док. ) Тоесть если ИНН=ИНН, то не проводить... Если ИНН<>ИНН, то проводить.

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

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


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

Вот так я написал. Синтакс ошибки не находит. В 1С 8 предприятии у Меня всеравно проводится документ.. где ошибка?
Vofka
Неправильно.

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

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

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

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


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

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


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

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

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




Да еще можно так:
Если Не Сотр.Пустая() Тогда
.....
PROFIT
Batchir
И вообще всегда было правильным сначала создать элемент справочника, а потом его подставлять в строку документа.
Поэтому предлагаю переделать всё к стандартному алгоритму

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

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

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


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


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

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

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

так как регистр периодический то по дате делать выборку по сотруднику.
bodka
а можно подробнее инструкцию.........ПОЖАЛУЙСТА
Vofka
По-моему задача начинает выходить за рамки изначально поставленной. Поэтому тему закрываю.

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