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

Подстановка значения в строку ТЧ

Автор Алексей_1985_06, 07 фев 2020, 18:50

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

Алексей_1985_06

Ребят подскажите, как реализовать:
В ТЧ справочника «ПослужнойСписок» необходимо при добавлении новой строки, значение из столбца «ДатаНачала» (на форме «С какого времени») – перенести в предыдущую строку столбца «ДатаОкончания» (на форме «По какое временя») Картинка во вложении.
Попробовал так, но выходит ошибка:
ТекущСтрока = Элементы.ПослужнойСписок.ТекущиеДанные;
ПредыдущаяСтрока = Элементы.ПослужнойСписок.Получить (ТекущСтрока.НомерСтроки - 2); // Получаем предыдущую строку
ПредыдущаяСтрока.ДатаОкончания = ТекущСтрока.ДатаНачала;

Помогите кто знает !!!:):):)

FanFani

Ты пытаешься получить строку у элемента формы, а надо у самого объекта
Примерно так:

ЭтотОбъект.ПослужнойСписок.Получить (ТекущСтрока.НомерСтроки - 2);

Пользуйся чаще Синтаксис-помощником

Алексей_1985_06

Цитата: FanFani от 09 фев 2020, 13:25
Ты пытаешься получить строку у элемента формы, а надо у самого объекта
Примерно так:

ЭтотОбъект.ПослужнойСписок.Получить (ТекущСтрока.НомерСтроки - 2);

Пользуйся чаще Синтаксис-помощником

Подскажите, что то не получается у меня победить!!!
Кто-то может помочь?

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



bsn-chita

Имена менять на свой.

Функция ЭтоПоследняяСтрока(НомерСтроки, ВсегоСтрок)
Возврат НомерСтроки = ВсегоСтрок;
КонецФункции

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
НомерСтроки = ТекущиеДанные.НомерСтроки;
ВсегоСтрок = Объект.Товары.Количество();
Если ЭтоПоследняяСтрока(НомерСтроки, ВсегоСтрок) Тогда
Объект.Товары[НомерСтроки - 2].Сумма = ТекущиеДанные.Количество;
КонецЕсли;
КонецПроцедуры

LexaK

что-ж вы все простыми путями не ходите?
(я бы так учет не вел, но только для вас)
просто в модуле справочника, в процедуре ПередЗаписью() добавьте такой код

Процедура ПередЗаписью(Отказ)
ПослужнойСписок.Сортировать("ДатаНачала");
лкПред = Новый Структура("ДатаОкончания",0); //заглушка, для первой строки
Для каждого лкСтр Из ПослужнойСписок Цикл
лкПред.ДатаОкончания = лкСтр.ДатаНачала;
лкПред = лкСтр;
КонецЦикла;
КонецПроцедуры

Добавлено: 11 фев 2020, 12:42


Упс, еще одну команду забыл

Процедура ПередЗаписью(Отказ)
    ПослужнойСписок.Сортировать("ДатаНачала");
    лкПред = Новый Структура("ДатаОкончания",0); //заглушка, для первой строки
    Для каждого лкСтр Из ПослужнойСписок Цикл
        лкПред.ДатаОкончания = лкСтр.ДатаНачала;
        лкПред = лкСтр;
    КонецЦикла;
    лкСтр.ДатаОкончания = 0; // последняя запись должна быть без даты окончания
КонецПроцедуры
если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 11 фев 2020, 11:01
что-ж вы все простыми путями не ходите?
(я бы так учет не вел, но только для вас)
просто в модуле справочника, в процедуре ПередЗаписью() добавьте такой код

Процедура ПередЗаписью(Отказ)
ПослужнойСписок.Сортировать("ДатаНачала");
лкПред = Новый Структура("ДатаОкончания",0); //заглушка, для первой строки
Для каждого лкСтр Из ПослужнойСписок Цикл
лкПред.ДатаОкончания = лкСтр.ДатаНачала;
лкПред = лкСтр;
КонецЦикла;
КонецПроцедуры

Добавлено: 11 фев 2020, 12:42


Упс, еще одну команду забыл

Процедура ПередЗаписью(Отказ)
    ПослужнойСписок.Сортировать("ДатаНачала");
    лкПред = Новый Структура("ДатаОкончания",0); //заглушка, для первой строки
    Для каждого лкСтр Из ПослужнойСписок Цикл
        лкПред.ДатаОкончания = лкСтр.ДатаНачала;
        лкПред = лкСтр;
    КонецЦикла;
    лкСтр.ДатаОкончания = 0; // последняя запись должна быть без даты окончания
КонецПроцедуры


LexaK Спасибо большое за помощь! Все работает как надо, единственное в случае когда в ТЧ нет записей, возникает ошибка:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Справочник.ЛичныйСостав.МодульОбъекта(41)}: Значение не является значением объектного типа (ДатаОкончания)
    Стр.ДатаОкончания = 0; // последняя запись должна быть без даты окончания

Подскажите пжл, как исправить???



LexaK

да вроде не сложная ошибка

Процедура ПередЗаписью(Отказ)
    ПослужнойСписок.Сортировать("ДатаНачала");
    лкПред = Новый Структура("ДатаОкончания",0); //заглушка, для первой строки
    Для каждого лкСтр Из ПослужнойСписок Цикл
        лкПред.ДатаОкончания = лкСтр.ДатаНачала;
        лкПред = лкСтр;
    КонецЦикла;
    //лкСтр заменить на лкПред
    лкПред.ДатаОкончания = 0; // последняя запись должна быть без даты окончания
КонецПроцедуры
если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 12 фев 2020, 20:31
да вроде не сложная ошибка

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


LexaK Большое Вам спасибо! Все работает как надо!!!

Теги:

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

Рейтинг@Mail.ru

Поиск