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

Запись значения реквизита справочника в табличную часть

Автор HelloImNew, 29 авг 2023, 15:41

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

HelloImNew

Здравствуйте.
Постигаю самые азы 1С, пытаюсь при изменении реквизита справочника записать значение в таблицу. Немного запутался, нужно ли передавать что-то процедуре на сервере... Да и вообще запутался, если честно. Очень стараюсь понять, но пока тяжело укладывается в голове все обращения к реквизитам, к таблице, текущие данные и пр.

&НаСервере
Процедура ПередЗаписьюНаСервере()

КоличествоСтрок = ТекущийЭлемент.ТабИсторияСтатусов.Количество();
Если КоличествоСтрок = 0 Тогда 
НоваяСтрока = ТекущийЭлемент.ТабИсторияСтатусов.Добавить();
НоваяСтрока.Статус = ТекущийЭлемент.Статус;
НоваяСтрока.Дата = ТекущаяДата();
Иначе
Если ТекущийЭлемент.ТабИсторияСтатусов[КоличествоСтрок].Статус = ТекущийЭлемент.Статус Тогда Возврат;
Иначе НоваяСтрока = ТекущийЭлемент.ТабИсторияСтатусов.Добавить();
НоваяСтрока.Статус = ТекущийЭлемент.Статус;
НоваяСтрока.Дата = ТекущаяДата();
КонецЕсли
КонецЕсли


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

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
ПередЗаписьюНаСервере();     
КонецПроцедуры

LexaK

пытаетесь вести историю статусов?

так как элементы справочника могут создаваться и меняться программно (без форм)
то ваш код в этом случае не сработает.

что бы статус всегда проверялся и при необходимости записывался в ТЧ перенесите свой код
в модуль справочника в обработчик события ПередЗаписью(...)
если помогло нажмите: Спасибо!

HelloImNew

LexaK, да, историю статусов.

В модуле объекта тогда надо по-другому обращаться? На "ТекущийЭлемент" ругается.

Спасибо большое за отклик!

LexaK

Цитата: HelloImNew от 29 авг 2023, 16:05тогда надо по-другому обращаться?
да, разные контексты (модуль и форма), получаются разные обращения к данным.

как получится, выложите сюда свой код, посмотрим...
если помогло нажмите: Спасибо!

Максим75

HelloImNew, да, ТекущийЭлемент доступен из формы.
а в модуле документа надо объект получить, а потом уже с ним работать. потому как модуль Вы можете вызвать из разных мест и необходимо будет передавать допустим ссылку на элемент справочника.

LexaK

Цитата: Максим75 от 29 авг 2023, 16:17а в модуле документа надо объект получить,
эээ, не надо путать Модуль объекта с Менеджером!  :befhbt: 
если помогло нажмите: Спасибо!

HelloImNew

LexaK, вроде работает. Смущает, что добавляю новую строку дважды, не знаю, стоит это как-то отпимизировать?

Процедура ПередЗаписью(Отказ)

КоличествоСтрок = ТабИсторияСтатусов.Количество();
Если КоличествоСтрок = 0 Тогда 
НоваяСтрока = ТабИсторияСтатусов.Добавить();
НоваяСтрока.Статус = Статус;
НоваяСтрока.ДатаУстановки = ТекущаяДата();
Иначе
Если ТабИсторияСтатусов[КоличествоСтрок-1].Статус = Статус Тогда Возврат;
Иначе НоваяСтрока = ТабИсторияСтатусов.Добавить();
НоваяСтрока.Статус = Статус;
НоваяСтрока.ДатаУстановки = ТекущаяДата();
КонецЕсли
КонецЕсли


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

antoneus

Так можно попробовать

КоличествоСтрок = ТабИсторияСтатусов.Количество();   
Если КоличествоСтрок = 0 или ТабИсторияСтатусов[КоличествоСтрок - 1].Статус <> Статус Тогда 
    НоваяСтрока = ТабИсторияСтатусов.Добавить();
    НоваяСтрока.Статус = Статус;
    НоваяСтрока.ДатаУстановки = ТекущаяДата();
КонецЕсли;

HelloImNew


Теги:

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

Рейтинг@Mail.ru

Поиск