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

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)а как мне в модуле объекта документа правильно эту процедуру прописать?
У меня ведь она в документе должна выполняться только если использовалась обработка, а если обработку не использовали, то и процедура не должна выполняться в самом документе
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)