Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработка проведения()
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Пользователю 1С 7.7 > 1С Зарплата и Кадры 7.7 для Украины
Time dont wait
Помогите разобраться !!
Есть документ приема на работу сотрудника и справочник с сотрудниками,разбитый на работающих и уволеных, в каждой группе есть несколько подразделений (подгруппы).
В документе при указании о подразделения должна производится запись в соответствующюю подгруппу.
Я написал цикл в обработке проведения, но он не работает!?
Вот код:



Если (Отделение.Выбран()="MAGNA") тогда
СпрСтр = СоздатьОбъект("Справочник.Сотрудники");
Родитель = СоздатьОбъект("Справочник.Сотрудники");
Родитель.НайтиПоНаименованию("MAGNA");
СпрСтр.ИспользоватьРодителя("MAGNA");
СпрСтр.ИспользоватьДату(ДатаДок);
СпрСтр.Новый();
СпрСтр.Родитель = "MAGNA";
СпрСтр.Код = НомерДок;
СпрСтр.ДатаДок = ДатаДок;
СпрСтр.Сотрудник = Співробітник;
...
СпрСтр.Записать();

КонецЕсли;
MATEVI
1. Ошибка № 1
Если (Отделение.Выбран()="MAGNA") тогда

Выбран()
Синтаксис:
Выбран()
Назначение:
Возвращает флаг выбора элемента справочника: 1 - если элемент справочника выбран, 0 - если не выбран.

Вы скажите Вы бухгалтер? Проще написать код готовый... Так как у Вас все неправильно
Time dont wait
Я начинаю изучать 1с, две недели только сижу, ну а как правильно написать?Подскажи если не трудно
типа :
Если (Отделение.Выбран()=1) тогда

но тогда как мне определить подгруппу?
Time dont wait
надо написать цикл в цикле?
MATEVI
Цитата(Time dont wait @ 28.10.09, 10:20) необходимо зарегистрироваться для просмотра ссылки
надо написать цикл в цикле?

Цикл тут не причем.
Начне с того что я не до конца понимаю задачу. Что Вы хотите сделать. При приеме на работу не заходя в справочники создать нового сотрудника и физ лицо?
MATEVI
Цитата(Time dont wait @ 28.10.09, 10:20) необходимо зарегистрироваться для просмотра ссылки
Я начинаю изучать 1с, две недели только сижу, ну а как правильно написать?Подскажи если не трудно
типа :
Если (Отделение.Выбран()=1) тогда

но тогда как мне определить подгруппу?

Что такое отделение? Такого реквизита в документе нет.
Определить группу ЭтоГруппа()
Time dont wait
Да. И при выборе отделения в которое я хочу его записать, запись должна происходить в группу Работающие, которая разбита на подгруппы - отделения, в выбранное пользователем отделение.
MATEVI
Цитата(Time dont wait @ 28.10.09, 10:38) необходимо зарегистрироваться для просмотра ссылки
Да. И при выборе отделения в которое я хочу его записать, запись должна происходить в группу Работающие, которая разбита на подгруппы - отделения, в выбранное пользователем отделение.

А как Вы собираетесь записывать необходимые значения ревизитов справочника ФизЛица и Сотрудники.
ФИО дату приема и многое другое? Ведь насколько я знаю при приеме сначала заводятся эти справочники.
Time dont wait
Ето все есть, отделение выбираю со справочника Отделения и тд.тп.
Конфигурация самописная, просто сначала я производил запись непосредственно в грРаботающие, а
теперь возникла потребность в том чтобы разбить грРаботающие на подгруппы (отделения) , типа :
Админперсонал;
Отдел Кадров;
...

Но не знаю как ето сделать?
Тоесть заполняю данные в поля документа, и записываю в подгруппу, которую указываю сотруднику в документе..
Понятно?
Time dont wait
И зпись происходит в выбраное отделение(подгруппу), которое находится в грРаботающие.
MATEVI
Цитата(Time dont wait @ 28.10.09, 10:52) необходимо зарегистрироваться для просмотра ссылки
Ето все есть, отделение выбираю со справочника Отделения и тд.тп.
Конфигурация самописная, просто сначала я производил запись непосредственно в грРаботающие, а
теперь возникла потребность в том чтобы разбить грРаботающие на подгруппы (отделения) , типа :
Админперсонал;
Отдел Кадров;
...

Но не знаю как ето сделать?
Тоесть заполняю данные в поля документа, и записываю в подгруппу, которую указываю сотруднику в документе..
Понятно?

А написали в ветке зарплата икадры. Относящейся к типой конфе.
Тогда примерно Вот так


Если Отделение.Выбран() = 1 Тогда
Если Отделение.Наименование ="MAGNA" тогда

СпрСтр = СоздатьОбъект("Справочник.Сотрудники");
Род = СоздатьОбъект("Справочник.Сотрудники");
Если Род.НайтиПоНаименованию("MAGNA",0,1)=1 Тогда
ТекРод = Род.ТекущийЭлемент();
Иначе
ТекРод = "";
Сообщить("Не найден родитель!");
КонецЕсли;
//СпрСтр.ИспользоватьРодителя("MAGNA"); //это надо если Вы ищете в группе
СпрСтр.ИспользоватьДату(ДатаДок);
СпрСтр.Новый();

СпрСтр.Родитель = ТекРод;//"MAGNA";

Time dont wait
Род.НайтиПоНаименованию("MAGNA",0,1)=1

0 - ето группа
1- подгруппа
тоесть в данном случае поиск производится в подгруппах
А если две группы то ищет и в то и в другой?
Time dont wait
И если не тяжело, напишите код для докУвольнение.
чтобы с грРаботающие и например подгрMAGNA кидало в грУволенные в ту же подгруппу
MATEVI
Цитата(Time dont wait @ 28.10.09, 11:04) необходимо зарегистрироваться для просмотра ссылки
Род.НайтиПоНаименованию("MAGNA",0,1)=1

0 - ето группа
1- подгруппа
тоесть в данном случае поиск производится в подгруппах
А если две группы то ищет и в то и в другой?

нет =1 возвращет если найдено искомое наименование. А ...,0,1) 0 - искать внутри установленого подчинения

НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.



//Если Отделение.Наименование ="MAGNA" тогда

// для любых отделений
НаименованиеОтделения = СокрЛП(Отделение.Наименование);

СпрСтр = СоздатьОбъект("Справочник.Сотрудники");
Род = СоздатьОбъект("Справочник.Сотрудники");
Если Род.НайтиПоНаименованию(НаименованиеОтделения,0,1)=1 Тогда
ТекРод = Род.ТекущийЭлемент();
Иначе
ТекРод = "";
Сообщить("Не найден родитель!");
КонецЕсли;

Time dont wait
А если брать к примеру документ Увольнение, тогда етот циклможно заключить сюда:
Процедура ОбработкаПроведения()

СпрСпв = СоздатьОбъект("Справочник.Співробітники");
СпрСпв.ИспользоватьДату(ДатаЗвільнення);
СпрСпв.НайтиЭлемент(Співробітник);
СпрСпв.ДатаЗвільнення = ДатаЗвільнення;
// Цикл
СпрСпв.Родитель = Звільнені;
СпрСпв.Записать();


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

//------------------------------------------------------------------------
Процедура ОбработкаУдаленияПроведения()

СпрСпв = СоздатьОбъект("Справочник.Співробітники");
СпрСпв.НайтиЭлемент(Співробітник);
СпрСпв.Родитель = Працюючі;
СпрСпв.ДатаЗвільнення = 0;
СпрСпв.Записать();
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.