Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 сен 2021, 18:25

Друзья! Помогите с табличной часть.

Автор Алексей_1985_06, 19 дек 2019, 10:58

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Сразу к делу. Имеется справочник с ТЧ "ПослужнойСписок", необходимо чтоб при проведении документа "НазначениеНаДолжность", и соответственно новой записи, ДатаНачала в должности записывалась с предыдущей строки ДатаОкончания, нужна помощь, как постоянно обращаться к ПРЕДЫДУЩЕЙ СТРОКЕ, для получения нужного значения... Для лучшего понимания скрины во вложении.

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ПослужнойСписок.Добавить(); // Добавляем в ТЧ "ПослужнойСписок" новую строку

// ТРУДНОСТИ ЗДЕСЬ !!!
СтараяСтрока = ИзмСправочник.ПослужнойСписок[0];
Если  СтараяСтрока.ДатаОкончания = '00000000000000' Тогда   // ЕСЛИ В ПРЕДЫДУЩЕЙ СТРОКЕ НЕТ "ДАТЫ ОКОНЧАНИЯ"
НоваяСтрока.ДатаНачала = Объект.ДатаПриказа Иначе
НоваяСтрока.ДатаНачала = СтараяСтрока.ДатаОкончания;
КонецЕсли;

// Присваиваем значения (строка/столбец) ТЧ "ПослужнойСписок"
НоваяСтрока.ВоинскаяДолжность = Объект.Должность;
НоваяСтрока.МестоСлужбы = "ВКА";
НоваяСтрока.ЧейПриказ = Объект.Приказ;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
КонецПроцедуры


LexaK

так у вас колонки ДатаОкончания нет, а кто ее заполняет?

а вообще по номеру строки можно получить предыдущую
Если НоваяСтрока.НомерСтроки > 1 Тогда
    ПредСтрока = ВашаТЧ.Получить(НоваяСтрока.НомерСтроки - 1);
КонецЕсли;
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 19 дек 2019, 12:07
так у вас колонки ДатаОкончания нет, а кто ее заполняет?

а вообще по номеру строки можно получить предыдущую
Если НоваяСтрока.НомерСтроки > 1 Тогда
    ПредСтрока = ВашаТЧ.Получить(НоваяСтрока.НомерСтроки - 1);
КонецЕсли;

Доброго времени суток! Название колонок "ДатаНачала" и "ДатаОкончания" изменено на самой форме справочника:(реквизит ДатаНачала - С какого времени) (реквизит ДатаОкончания - По какое время).
Логика работы: сначала при приеме сотрудника, данные заполняет пользователь, последняя дата места его работы (службы) "ДатаОкончания", остается пустой (т.к. он сейчас принят на эту должность). После того, как человек назначается на новую должность, создается документ "НазначениеНаДолжность", который при проведении должен сделать запись новой строки в ТЧ "ПослужнойСписок", где в поле "ДатаНачала" должна записаться "ДатаОкончания" с предыдущей строки, вот это и не получается...
Сделал так, но не работает, в колонке пустые значения... Что не так делаю?

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ПослужнойСписок.Добавить(); // Добавляем в ТЧ "ПослужнойСписок" новую строку

// НАВЕРНОЕ ЧТО ТО ЗДЕСЬ НЕ ПРАВИЛЬНО...
ПредыдущаяСтрока = ИзмСправочник.ПослужнойСписок.Получить(НоваяСтрока.НомерСтроки - 1); // определяем предыдущую строку
Если НоваяСтрока.НомерСтроки > 0 Тогда
НоваяСтрока.ДатаНачала = ПредыдущаяСтрока.ДатаОкончания;
КонецЕсли;

НоваяСтрока.ВоинскаяДолжность = Объект.Должность;
НоваяСтрока.МестоСлужбы = "ВКА А.М.Тихомирова";
НоваяСтрока.ЧейПриказ = Объект.Приказ;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
ИзмСправочник.Владелец = Объект.Подразделение;
ИзмСправочник.Должность = Объект.Должность;
ИзмСправочник.Записать(); // записываем изменения в информационную базу
КонецПроцедуры



Добавлено: 21 дек 2019, 13:51


Цитата: Алексей_1985_06 от 20 дек 2019, 20:33
Цитата: LexaK от 19 дек 2019, 12:07
так у вас колонки ДатаОкончания нет, а кто ее заполняет?

а вообще по номеру строки можно получить предыдущую
Если НоваяСтрока.НомерСтроки > 1 Тогда
    ПредСтрока = ВашаТЧ.Получить(НоваяСтрока.НомерСтроки - 1);
КонецЕсли;

Доброго времени суток! Название колонок "ДатаНачала" и "ДатаОкончания" изменено на самой форме справочника:(реквизит ДатаНачала - С какого времени) (реквизит ДатаОкончания - По какое время).
Логика работы: сначала при приеме сотрудника, данные заполняет пользователь, последняя дата места его работы (службы) "ДатаОкончания", остается пустой (т.к. он сейчас принят на эту должность). После того, как человек назначается на новую должность, создается документ "НазначениеНаДолжность", который при проведении должен сделать запись новой строки в ТЧ "ПослужнойСписок", где в поле "ДатаНачала" должна записаться "ДатаОкончания" с предыдущей строки, вот это и не получается...
Сделал так, но не работает, в колонке пустые значения... Что не так делаю?

&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ПослужнойСписок.Добавить(); // Добавляем в ТЧ "ПослужнойСписок" новую строку

// НАВЕРНОЕ ЧТО ТО ЗДЕСЬ НЕ ПРАВИЛЬНО...
ПредыдущаяСтрока = ИзмСправочник.ПослужнойСписок.Получить(НоваяСтрока.НомерСтроки - 1); // определяем предыдущую строку
Если НоваяСтрока.НомерСтроки > 0 Тогда
НоваяСтрока.ДатаНачала = ПредыдущаяСтрока.ДатаОкончания;
КонецЕсли;

НоваяСтрока.ВоинскаяДолжность = Объект.Должность;
НоваяСтрока.МестоСлужбы = "ВКА А.М.Тихомирова";
НоваяСтрока.ЧейПриказ = Объект.Приказ;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
ИзмСправочник.Владелец = Объект.Подразделение;
ИзмСправочник.Должность = Объект.Должность;
ИзмСправочник.Записать(); // записываем изменения в информационную базу
КонецПроцедуры



Спасибо, может кому пригодится, реализовал так:

// ПОЛУЧАЕМ ЗНАЧЕНИЕ РЕКВИЗИТА В КОЛОНКЕ ТЧ "ПОСЛУЖНОЙ СПИСОК" СПРАВОЧНИКА "ЛИЧНЫЙ СОСТАВ"
&НаСерверебезКонтекста
Функция ПолучитьСтрокуТЧнаСервере(СсылкаНаЭлемент, ИмяТабличнойЧасти, ИмяКолонки, НомерСтроки = 0)//СсылкаНаЭлемент ссылка на созданный элемент справочника ЛичныйСостав (например: Иванов Иван Иванович) тот кого вы выбрали в документе
   ТабличнаяЧасть = СсылкаНаЭлемент[ИмяТабличнойЧасти]; //указатель на таб.часть = ЛичныйСостав.ПослужнойСписок
   КоличествоСтрок = ТабличнаяЧасть.Количество();//количество строк в ТЧ "ПослужнойСписок"
   Если КоличествоСтрок = 0 Тогда //ТЧ пустая, должностей пока нет
   Значение = Неопределено;
   Иначе
   Строка = Мин(НомерСтроки, КоличествоСтрок - 1); //определяем последнюю или указанную строку в таблице
   Значение = ТабличнаяЧасть[Строка][ИмяКолонки]; //получаем значение: из указанной строки берем значение нужной колонки
   КонецЕсли;
   Возврат Значение; //возвращаем результат
КонецФункции


// ИЗМЕНЕНИЯ В ДАННЫЕ СПРАВОЧНИКА "ЛИЧНЫЙ СОСТАВ"
&НаСервере
Процедура ИзменитьДанныеСправочникаНаСервере()
ИзмСправочник = Объект.ФамилияИмяОтчество.ПолучитьОбъект();
НоваяСтрока = ИзмСправочник.ПослужнойСписок.Добавить(); // Добавляем в ТЧ "ПослужнойСписок" новую строку

ПредыдущаяСтрока = ИзмСправочник.ПослужнойСписок.Получить(НоваяСтрока.НомерСтроки - 2); // определяем предыдущую строку

Если ПредыдущаяСтрока.ДатаОкончания = '00000000000000' Тогда // Нет даты увольнения

// При проедении документа, датой увольнения будет считатся дата приказа о назначении на другую должность
ПредыдущаяСтрока.ДатаОкончания = Объект.ДатаПриказа;

// в новой строке датой начала работы, считается - дата приказа о назначении на должность
НоваяСтрока.ДатаНачала = Объект.ДатаПриказа Иначе

// Если дата увольнения стоит, тогда датой начала работы считается дата увольнения с предыдущей должности
НоваяСтрока.ДатаНачала = ПолучитьСтрокуТЧнаСервере(Объект.ФамилияИмяОтчество, "ПослужнойСписок", "ДатаОкончания", 100);
КонецЕсли;

// Присваиваем значения (строка/столбец) ТЧ "ПослужнойСписок"
НоваяСтрока.ВоинскаяДолжность = Объект.Должность;
НоваяСтрока.МестоСлужбы = "ВКА им.А.М.Тихомирова";
НоваяСтрока.ЧейПриказ = Объект.Приказ;
НоваяСтрока.НомерПриказа = Объект.НомерПриказа;
НоваяСтрока.ДатаПриказа = Объект.ДатаПриказа;
ИзмСправочник.Владелец = Объект.Подразделение;
ИзмСправочник.Должность = Объект.Должность;
ИзмСправочник.Записать(); // записываем изменения в информационную базу
КонецПроцедуры


ПОДСКАЖИТЕ ПОЖАЛУЙСТА, КАКУЮ ПРОЦЕДУРЫ ВЫБРАТЬ ЧТОБ ПРИ ПРОВЕДЕНИИ ДОКУМЕНТА "НАЗНАЧЕНИЕ НА ДОЛЖНОСТЬ" В ТАБЛИЧНОЙ ЧАСТИ "ПОСЛУЖНОЙ СПИСОК" (СПРАВОЧНИКА "ЛИЧНЫЙ СОСТАВ")- ПРИ ЗАПИСИ ДАТЫ НАЧАЛА И ДАТЫ ОКОНЧАНИЯ, ПРОИСХОДИЛ РАСЧЕТ СРОКА НАХОЖДЕНИЯ В ДОЛЖНОСТИ??? СЕЙЧАС ДАТЫ ПРИ ПРОВЕДЕНИИ ДОКУМЕНТА ЗАПИСЫВАЮТСЯ, НО РАСЧЕТА НЕ ПРОИСХОДИТ :dfbsdfbsdf::dfbsdfbsdf::dfbsdfbsdf: 

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск