|
Нужна оценка по плану реализации | ☑ | ||
---|---|---|---|---|
0
СемёнКим
10.09.21
✎
10:56
|
Всем привет. 1С:8.3(.9)
Есть периодический и независимый регистр сведений СведенияОНоменклатуре с измерением Номенклатура (тип ссылка на справочник Номенклатура) и различные ресурсы: Р1,Р2,Р3...Рn. Далее, заполняется макет( это обычная таблица с колонками: Наименование номенклатуры, Р1, Р2) в таб.доке на форме документа по запросу к этому регистру сведений. Задача: Нужно при двойном нажатии в макете по наименованию номенклатуры открыть форму записи регистра сведений СведенияОНоменклатуре с заполненными данными соответствующими выбранной строке в макете. В открывшейся форме что-то изменить (или оставить без изменения) и записать, при чем не должна появиться новая запись, а должна быть отредактирована старая. Реализация: В запросе к регистру сведений во время заполнения полей макета: Наименование номенклатуры, Р1 и Р2. Получать все остальные ресурсы Р3,Р4,...,Рn и период записи Период, и засунуть все это в структуру. Далее, при заполнении макета эту структуру присвоить расшифровке области макета поля наименование номенклатуры, т.е. само наименование номенклатуры идет в значение области таб.дока: ТД.Область("<имя>").значение, а структура в его расшифровку: ТД.Область("<имя>").расшифровка. Далее, двойное нажатие по наименованию номенклатуры обрабатывает событие Выбор и в этой процедуре прописываем получение формы записи регистра сведений и ее заполнение через расшифровку, т.е. ```форма.Период = расшифровка.Период, форма.Номенклатура = расшифровка.Номенклатура, форма.Р1=расшифровка.Р1, форма.Р2=расшифровка.Р2, ... форма.Рn=расшифровка.Рn``` И открываем форму. Пользователь вносит свои изменения, нажимает записать/закрыть. и уже в модуле формы регистра сведений в процедуре ПередЗаписью прописываем, типа: Набор = РегистрСведений.СведенияОНоменклатуре.СоздатьНаборЗаписей(); Набор.отбор.Номенклатура.установить(Запись.Номенклатура); Набор.отбор.Период.установить(Запись.Период); // нашли текущую запись в регистре сведений Набор.Записать(); // удаляем текущую запись По сути, сначала удаляется текущая запись и стандартной обработкой добавляется новая. Вопрос: Не сложно ли это все? В смысле, не чешу ли я зад через голову. |
|||
1
Мультук
гуру
10.09.21
✎
11:08
|
(0)
1) Зачем значения ресурсов хранить в расшифровке? Почему их нельзя получить в самой форме редактирования из регистра по номенклатура + период ? 2) Форма редактирования создается на лету динамически? 3) зачем здесь набор записей ? зачем "Перед записью"? Имхо менеджера записи более чем хватит. |
|||
2
СемёнКим
10.09.21
✎
11:32
|
(1) Спасибо, вот именно такой коммент я и ожидал.
Учитывая 1), в процедуре Выбор после получения формы записи регистра сведений СведенияОНоменклатуре, нужно передать параметрам формы Период и Номенклатура полученные значения из макета, а уже в модуле формы записи регистра в процедуре при открытии запросом подтянуть остальные параметры. Тогда отпадет нагромождение данными области макета. По 2), если я правильно понимаю про динамическое создание формы, то нет. Динамическое создание формы я понимаю так, что элемент Запись/Объект... на форме в верхнем правом окне должен иметь тип Динамический список, а в свойствах должна стоять галка ПроизвольныйЗапрос, а уже в самом запросе берешь что можешь. Сейчас же тип элемента формы (Запись) есть РегистрСведенеийМенеджерЗаписи.СведенияОНоменклатуре. 3) Я помню, что было написано про менеджер записи, что при его использовании в любом случае создается набор записей. Но я еще не глубоко понимаю работу программной записи в регистр сведений, поэтому последняя часть в реализации хромает. Но мне кажется, что должно быть какое то свойство замены текущей записи новой, если обе записи совпадают по измерениям и периоду. Вот это свойство я видел в работе с набором записей. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |