Регистр сведений и связь его с документом

1. AlexandrDmC 25.03.19 13:47 Сейчас в теме
Доброго времени суток, форумчане
Делаю работу на практику в техникуме и столкнулся с проблемой, решение которой никак не могу найти и понять
У меня существует перечень заявок с реквизитом "Этап", я сделал регистр сведений, который выводит в каком документе и когда был изменен этап, но, во-первых, я не могу в регистре отобразить старый этап, который сменился на новый(новый отображается)
Во-вторых, если я в документе меняю любой другой реквизит, то в регистр сведений всё равно записывается запись, соответственно в ней не меняется ничего, а хотелось бы сделать так: В зависимости от измененного реквизита в документе - менялся бы смысл регистра, например: если изменили этап, то в регистре писалось "Был изменён этап с такого-то на такой-то", если изменили сотрудника, то "Был изменён сотрудник с такого-то на такого-то"
Возможно ли это реализовать и насколько сложно?
Заранее спасибо)
По теме из базы знаний
Найденные решения
2. SedovSU@mail.ru 297 25.03.19 13:57 Сейчас в теме
Можно такое сделать!
Вот такой подход. Выбираете процедуру, например, перед записью в модуле объекта и пишите

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

Если ЭтоНовый() Тогда
// делаете записи и по этапу и сотруднику т.к. это новая запись, на ваше усмотрение можете и не писать
Иначе

// Проверяем отличия реквизита этап
Если Этап <> Ссылка.Этап Тогда
// делаем записи по этапу
КонецЕсли

// Проверяем отличия реквизита Сотрудник
Если Сотрудник <> Ссылка.Сотрудник Тогда
// делаем записи по сотруднику
КонецЕсли

Конецесли

Конецпроцедуры
Показать
AlexandrDmC; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SedovSU@mail.ru 297 25.03.19 13:57 Сейчас в теме
Можно такое сделать!
Вот такой подход. Выбираете процедуру, например, перед записью в модуле объекта и пишите

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

Если ЭтоНовый() Тогда
// делаете записи и по этапу и сотруднику т.к. это новая запись, на ваше усмотрение можете и не писать
Иначе

// Проверяем отличия реквизита этап
Если Этап <> Ссылка.Этап Тогда
// делаем записи по этапу
КонецЕсли

// Проверяем отличия реквизита Сотрудник
Если Сотрудник <> Ссылка.Сотрудник Тогда
// делаем записи по сотруднику
КонецЕсли

Конецесли

Конецпроцедуры
Показать
AlexandrDmC; +1 Ответить
3. AlexandrDmC 25.03.19 14:35 Сейчас в теме
(2)
Если Этап <> Ссылка.Этап Тогда
// делаем записи по этапу
КонецЕсли




Спасибо большое)
Помогло
4. SedovSU@mail.ru 297 25.03.19 14:37 Сейчас в теме
(3) да не зачто, ну это самый такой простой способ. Сравниваете значения объекта до помещения в ссылку и значения ссылки
5. AlexandrDmC 25.03.19 14:50 Сейчас в теме
(4) я был близок к этому и смысл работы понимал, но не мог правильно обратиться к ссылке(новичок в разработке 1С), ещё раз спасибо)
6. AlexandrDmC 25.03.19 14:55 Сейчас в теме
(4) А ещё не подскажите, у меня на главной вкладке находится две формы: список документов и список регистров, и после изменений документа, чтобы появился регистр - нужно нажимать кнопку "обновить" в списке регистров, можно ли как-то автоматизировать этот процесс, не применяя Автообновление(по времени) списка?
Прикрепленные файлы:
7. SedovSU@mail.ru 297 25.03.19 15:00 Сейчас в теме
(6) ну можно вот так написать

Элементы.РегистрСведенийИзмененияЗаявок.Обновить()
8. SedovSU@mail.ru 297 25.03.19 15:09 Сейчас в теме
(6) ну или можно по другому:
В процедуре при записи в модуле объекта делаете оповещение

Процедура ПриЗаписи(Отказ)
Оповестить("ЗаписанДокумент")
КонецПроцедура

На форме списка создаете процедуру формы ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ЗаписанДокумент" Тогда
Элементы.РегистрСведенийИзмененияЗаявок.Обновить();
Конецесли
AlexandrDmC; +1 Ответить
9. AlexandrDmC 25.03.19 15:28 Сейчас в теме
(8) пробую по этому примеру - выводит ошибку "{Документ.Задание.МодульОбъекта(29,2)}: Процедура или функция с указанным именем не определена (Оповестить)" и уточнить хочу: в форму списка документа или Регистра писать Процедуру ОбработкаОповещения?
10. AlexandrDmC 25.03.19 15:48 Сейчас в теме
(8)Всё, справился, спасибо ещё раз)
11. AlexandrDmC 25.03.19 18:07 Сейчас в теме
(2) я дико извиняюсь, но у меня ещё вопрос: у меня в регистр выводятся названия документов(ЭтотОбъект.Ссылка), но при создании нового документа, у меня это поле остаётся пустым, логично, что это из-за того, что процедура происходит ПередЗаписью(все другие не подходят, ибо сбивается ссылка на реквизиты), можно ли как-то присвоить новому документу в регистре название этого документа?
Выглядит это следующим образом:
Прикрепленные файлы:
12. SedovSU@mail.ru 297 26.03.19 06:10 Сейчас в теме
(11) я так понимаю это поле Заявка! Но до тех пор пока вы документ не запишите у вас там не появится ни чего. Чтобы оно более опертивно появилось вам туда нужно поместить ссылку. Но в процедуре перед записью ссылка еще не известа. Тут выбрать другое событие когда записывать данные в регистр, например, после записи. А с другой стороны если Заявка - это документ - объект 1С Документ, то разместите в специализированной процедуре ОбработкаПроведения и в ней уже делайте записи (Поле заявка заполняйте ссылкой на документ)
13. AlexandrDmC 26.03.19 10:24 Сейчас в теме
(12) А можно в условии как-то обратиться к процедуре другой?
Т.е. допустим так:
Если ЭтоНовый() Тогда
     ОбработкаПроведения(Отказ, Режим);
КонецЕсли;

Процедура ОбработкаПроведения(Отказ, Режим)
    *Тут Записи*
КонецПроцедуры


Просто я так попробовал - у меня не получилось как-то ничего)
14. SedovSU@mail.ru 297 26.03.19 10:34 Сейчас в теме
(13) Да так можно сделать но в данном случае вы два раза будете обращаться к данной процедуре - ОбработкаПроведения. Один раз вы явно к ней обращаетесь в процедуре при записи, а второй раз программа сама в нее зайдет.

Если вам нужно какой то признак новый или не новый это объект в процедуре ОбработкаПроведения, то просто определите общую переменную в модуле объекта и обращайтесь к ней.

Вот модуль объекта

Перем ЭтоНовыйОбъект;

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтоНовый() Тогда
ЭтоНовыйОбъект = Истина;
Иначе
ЭтоНовыйОбъект = Ложь
Конецесли
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, Режим)
Если ЭтоНовыйОбъект Тогда
// тут уже делаете записи
Конецесли
КонецПроцедуры
Показать
AlexandrDmC; +1 Ответить
15. AlexandrDmC 26.03.19 11:13 Сейчас в теме
(14) Спасибо ещё раз огромное, всё работает вроде)
Если появятся вдруг вопросы, можно ещё к вам обращаться через комменты в этой теме?)
16. SedovSU@mail.ru 297 26.03.19 11:18 Сейчас в теме
(15) Да не зачто! да конечно обращайтесь!
17. AlexandrDmC 23.04.19 20:09 Сейчас в теме
(16) Ещё раз здравствуйте)
Появился вопросик
Я сделал обработку, в которой заполняю ТЗ данными из Excel-файла
Не подскажите, как мне передать данные из заполненной ТЗ в модуле формы обработки в объекты модуля формы документа?
18. SedovSU@mail.ru 297 24.04.19 11:07 Сейчас в теме
(17) Ну вот смотрите, если вам нужно ТЗ передать в модуль объекта, при этом сама ТЗ не доступна там. То делаете вот так.

1. В модуле обработке делаете процедуру с префиксом Экспорт и параметров ТЗ, например, Процедура ОбработатьТЗВМодулеОбъекта(ТЗ)Экспорт
2. Далее на форме просто вызываете данную процедуру и передаете в нее вашу таблицу значений
19. AlexandrDmC 24.04.19 13:34 Сейчас в теме
(18)а как мне в модуле объекта документа правильно эту процедуру прописать?
У меня ведь она в документе должна выполняться только если использовалась обработка, а если обработку не использовали, то и процедура не должна выполняться в самом документе
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот