Заполнение регистра сведений данными из формы

1. user1202776 08.07.19 16:24 Сейчас в теме
Как сделать так, чтобы запись в регистр сведений осуществлялась после закрытия формы и некоторые колонки заполнялись, полями, которые находятся в этой форме? В данном случае чтобы заполнялась колонка "комментарии". Форма регистра сведений, куда записываются данные.
И как обратится к номенклатуре, количестве и цене, которые находятся в таблице? Обращение осуществляется в той же форме документа, где находится таблица.
	ПриИзмененииКоличестваТовары(Элемент);
	
		КоличествоИзмененоВручную = ИСТИНА;
	Если КоличествоИзмененоВручную Тогда
		 Режим = РежимДиалогаВопрос.ДаНетОтмена;
      

    Ответ = Вопрос("Выполнить?", Режим, 0);

	Если Ответ =КодВозвратаДиалога.Да Тогда
		
	Форма=РегистрыСведений.РедактированияДокументов.ПолучитьФорму("Форма");
	Форма.Открыть();

	 	Движение=Движения.ЛогРедактированияДокументов.Добавить();
	Движение.Документ=ЭтотОбъект.Ссылка;
	Движение.Пользователь=ПараметрыСеанса.ТекущийПользователь;
	Движение.Комментарий=Форма.ПолеВвода1;
	Движение.Период=ТекущаяДата();
	Движение.Товар=Справочники.Номенклатура.НайтиПоКоду("00000046625");
	Движение.Активность=Истина;
	Движения.Записать();	
Показать
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. protexprotex 113 08.07.19 17:43 Сейчас в теме
(1) Добрый день. 1) В глобальную переменную записываете нужные Вам данные с формы
2) Создаете глобальное "ОбработкаОжидания" с периодом секунды две. И после записи формы будет вызвана через две секунды процедура с ОбработкаОжидания - и записываете из этой глобальной переменной в регистр сведений. Еще можно в глобальную переменную (я бы структуру сделал) передал форму - и анализировать на то, уничтожена форма или нет если хотите писать только после уничтожения формы.
3. user1202776 08.07.19 17:55 Сейчас в теме
(2)сможете на примере привести? и желательно на примере моего кода, а то не очень понял)
4. protexprotex 113 08.07.19 18:22 Сейчас в теме
(3)
Процедура ПослеЗаписи()
глПерем = Новый Структура;
глПерем.Вставить("Номенклатура", Номенклатура);
глПерем.Вставить("Чегото1", Чегото1);
глПерем.Вставить("Чегото2", Чегото2);
глПерем.Вставить("Чегото3", Чегото3);
КонецПроцедуры
5. protexprotex 113 08.07.19 18:22 Сейчас в теме
(3)
Процедура ПриЗакрытии()
ПодключитьОбработчикОжидания("ПроцедураГлобальногоМодуля", 2, Истина);
КонецПроцедуры

Процедура ПроцедураГлобальногоМодуля ()
Здесь в регистр сведений и записываем
КонецПроцедуры
6. protexprotex 113 08.07.19 18:22 Сейчас в теме
(3)
где глПерем - это Параметр сеанса (не забедьте разрешения на чтение / запись для роли добавить)
ПроцедураГлобальногоМодуля - это процедура объявленная в глобальном модуле (см. справку)

Как - то, примерно так
7. protexprotex 113 08.07.19 18:23 Сейчас в теме
(3) Процедура ПриЗакрытии и ПослеЗаписи - это процедуры формы
8. user1202776 08.07.19 18:25 Сейчас в теме
(7)это все относится к первому пункту или к второму пункту?
12. protexprotex 113 08.07.19 20:13 Сейчас в теме
(8) Это к первому пункту. По поводу второго пункта - просто создаете менеджер записи и прочитайте данные записи регистра сведений - и отсюда можете их прочитать.
МенеджерЗаписи = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей
МенеджерЗаписи.Отбор.Регистратор = Ссылка
МенеджерЗаписи.Прочитать();
Запись = МенеджерЗаписи.Получить(0);

И из Запись можете читать уже данные реквизитов
9. user1202776 08.07.19 19:05 Сейчас в теме
(7)что дает нам обработка ожидания?для чего используется?
13. protexprotex 113 08.07.19 20:16 Сейчас в теме
(9) Для того, чтобы после записи в форме взять эти данные. Но у Вас все как - то криво. Логику надо сделать другую. Как сделать я Вам написал (согласно Вашей логике) - но я бы так как Вы хотите делать не стал.
14. user1202776 08.07.19 22:24 Сейчас в теме
34. dakork 32 09.07.19 18:55 Сейчас в теме
(1)
как обратится к номенклатуре, количестве и цене, которые находятся в таблице?


СтрТовары = Элементы.Товары.ТекущиеДанные;
Товар = СтрТовары.Номенклатура;
Количество = СтрТовары.Количество;
Цена = СтрТовары.Цена;
36. user1202776 09.07.19 19:05 Сейчас в теме
(34)это только в форме документа работает?
38. dakork 32 10.07.19 14:57 Сейчас в теме
39. user1202776 10.07.19 15:01 Сейчас в теме
10. SlavaKron 08.07.19 19:22 Сейчас в теме
У вас вся архитектура решения неправильная. Насколько я понял, пользователь работает с документом, меняет количество в ТЧ, при этом он должен написать комментарий/объяснение зачем он изменяет это количество. Далее эти комментарии должны писаться в РС. Если так, то РС следовало выбирать независимый, так как отмена проведения может удалить накопленную информацию об изменениях. Также, запись в РС не должна происходить во время работы пользователя, так как если пользователь откажется от изменений документа, РС будет содержать неактуальные данные.
Логичнее накапливать информацию в переменных формы пока пользователь работает с документом. При закрытии формы передавать эти данные в модуль объекта через ДокументОбъект.ДополнительныеСвойства и в процедуре ПередЗаписью модуля объекта (либо в подписке) записывать эти данные в РС.
11. user1202776 08.07.19 19:29 Сейчас в теме
(10)Да, правильно поняли.Сможете пример привести, желательно на моем коде.Я сейчас очень расплывчато понимаю, как реализовать то, о чем вы говорите
17. user1202776 09.07.19 09:34 Сейчас в теме
(10)
Логичнее накапливать информацию в переменных формы пока пользователь работает с документом. При закрытии формы передавать эти данные в модуль объекта через ДокументОбъект.ДополнительныеСвойства и в процедуре ПередЗаписью модуля объекта (либо в подписке) записывать эти данные в РС.

объясните это подробнее пожалуйста. И было бы хорошо,если код пример кода смогли бы привести
Для чего передавать данные в модуль объекта? И куда именно передавать?
Как нужно правильно использовать ДополнительныеСвойства ?
18. SlavaKron 09.07.19 10:23 Сейчас в теме
(17)
Для чего передавать данные в модуль объекта

Для того чтобы не зависеть от формы, так как ДополнительныеСвойства принадлежат ДокументОбъекту, а значит они будут доступны в модуле объекта или модуле подписки ПередЗаписью.
Я не очень все таки понял, что вы хотите видеть в итоге, поэтому смутно понимаю решение. Может быть вообще проще эти комментарии хранить в новой табличной части, связанной с ТЧ Товары по какому-нибудь идентификатору строки.
19. user1202776 09.07.19 10:26 Сейчас в теме
(18)там еще нужно будет выбрать причину изменения количества, из справочника.Я просто для пример создал комментарий. И может быть, пользователю нужно будет указывать количество сколько было и стало
20. user1202776 09.07.19 10:28 Сейчас в теме
(18)Основное, что нужно-это возможность выбирать причину изменения количества из справочника. И чтобы эта причина указывалась в РС
21. SlavaKron 09.07.19 10:33 Сейчас в теме
(20) А как идентифицируются строки ТЧ Товары? Это может быть Номенклатура или связка полей, например, Номенклатура + Серия + Характеристика. Если идентификация по полям, тогда необходимо вести контроль уникальности этих полей в ТЧ. Либо, что проще, добавить реквизит в ТЧ ИдентификаторСтроки типа УникальныйИдентификатор и заполнять его при добавлении новой строки.
Вопрос идентификации необходимо решить, чтобы понять структуру РС.
22. user1202776 09.07.19 10:34 Сейчас в теме
(21)это тоже проблема.Никак не идентифицируются. Сейчас в РС записывается рандомная номенклатура из таблицы.
15. protexprotex 113 08.07.19 23:17 Сейчас в теме
Вам уже SlavaKron в комментарии написал как сделать. Или Вы спрашиваете как это технически реализовать? - там, вроде бы все понятно...
16. user1202776 09.07.19 08:56 Сейчас в теме
(15)не понятно как с ДокументОбъект.ДополнительныеСвойства сделать
23. protexprotex 113 09.07.19 12:30 Сейчас в теме
(16) Это реквизит документа. Туда можете перед записью документа - объекта записать нужные Вам поля
24. user1202776 09.07.19 12:41 Сейчас в теме
25. SlavaKron 09.07.19 13:06 Сейчас в теме
В прикреплении минимальный пример.
Прикрепленные файлы:
1Cv8.dt
26. user1202776 09.07.19 15:10 Сейчас в теме
(25)то есть вы предлагаете в таблицу Товары добавить еще одну колонку с уникальным идентификатором?
27. SlavaKron 09.07.19 15:59 Сейчас в теме
(26) Да, но если вы разобрались с идентификацией строки по полям, сделайте через поля. В (21) я об этом уже писал.
28. user1202776 09.07.19 17:01 Сейчас в теме
(27)в саму форму документа и в таблицу ничего не нужно добавлять,да?
29. SlavaKron 09.07.19 17:26 Сейчас в теме
(28) Добавлять нужно реквизит ТЧ ИдентификаторСтроки, обработчики в форме документа, общую форму, подписку и модуль подписки. В примере только то, что необходимо. Это всего лишь пример, в частности работы с ДополнительныеСведения.
30. user1202776 09.07.19 17:54 Сейчас в теме
(29)в обычной форме как добавить это? В "Вставить элемент управления" нету
Прикрепленные файлы:
31. user1202776 09.07.19 18:35 Сейчас в теме
32. SlavaKron 09.07.19 18:39 Сейчас в теме
(31) Да скопируйте просто форму (Ctrl + С / Ctrl + V) из одной конфы в другую.
33. user1202776 09.07.19 18:41 Сейчас в теме
(32)а так вообще где найти?)в управляемой форме все понятнее)
35. user1202776 09.07.19 19:04 Сейчас в теме
(32)вроде сделал все также, но почему-то в РС не записываются данные
37. user1202776 10.07.19 14:17 Сейчас в теме
(32)спасибо большое.Получилось внедрить то, что вы прислали
40. user1202776 11.07.19 18:38 Сейчас в теме
(25)Можно не добавлять подписку на события, а просто сделать глобальную переменную и передать по "Экспорт"?
Если да,то все будет работать также?
41. SlavaKron 11.07.19 19:44 Сейчас в теме
(40) Вместо подписки можно прямо в модуле объекта в процедуре ПередЗаписью. Выносить в подписку - хорошая практика, чтобы не мешать типовой код и доработки. Про глобальную переменную не понял.
user1202776; +1 Ответить
42. user1202776 11.07.19 20:03 Сейчас в теме
(41)да, это хорошо , что не мешает. Подписки на события слабо нагружают 1с?
43. SlavaKron 11.07.19 20:07 Сейчас в теме
(42) Как таковые - нет, не нагружают.
44. user1202776 11.07.19 20:08 Сейчас в теме
(41) Сейчас компьютера нету под рукой и не знаю как объяснить.
В " Перем НашПараметр Экспорт;"
И "НашПараметр" передать в глобальный модуль "Подписки". А не передавать НашПараметр в подписки на события, в потом в общий модуль "Подписки".
Или я не понимаю для чего и как работают подписки на события?
45. SlavaKron 11.07.19 20:18 Сейчас в теме
(44) Если с подписками сложно, можно вообще ограничиться модулем формы документа без всяких подписок, общих модулей и модулей объекта, без передачи таблиц значений куда-либо. Пишите в РС сделанные изменения прямо в модуле формы документа в процедуре ПередЗаписью.
46. user1202776 11.07.19 20:30 Сейчас в теме
(45)также как сделали вы, но в самой форме документа?
47. SlavaKron 12.07.19 08:49 Сейчас в теме
(46) Да, вместо:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	ЭтотОбъект.ДополнительныеСвойства.Вставить("ИзмененияКоличества", ИзмененияКоличества);
КонецПроцедуры

Вставить:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	НаборЗаписей = РегистрыСведений.ЛогРедактированияДокументов.СоздатьНаборЗаписей();
	
	Для Каждого Стр Из ИзмененияКоличества Цикл
		МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Новый Структура("ИдентификаторСтроки", Стр.ИдентификаторСтроки));
		Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество = Стр.КоличествоСтало Тогда
			Продолжить;
		КонецЕсли;
			
		НоваяЗапись = НаборЗаписей.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяЗапись, Стр);
		НоваяЗапись.Документ = Ссылка;
		НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;		
	КонецЦикла;
	
	НаборЗаписей.Записать(Ложь);

КонецПроцедуры
Показать
И не забудьте в таком случае удалить подписку.
48. user1202776 12.07.19 10:36 Сейчас в теме
(47)спасибо.В форму изменения количества нужно добавить таблицу, в котором должна быть таблица "Товары", документа. Добавил колонки, но данные этих колонок не заполняются. Как заполнить данные этих колонок? И вообще как скопировать таблицу "Товары" в форму изменения количества?
Колонки добавил так:
ЭлементыФормы.ТабТовары.Значение=ИзмененияКоличества;
ЭлементыФормы.ТабТовары.СоздатьКолонки();
49. SlavaKron 12.07.19 11:30 Сейчас в теме
(48) Достаточно так:
Форма.ТабТовары= ИзмененияКоличества;
Форма.ЭлементыФормы.ТабТовары.СоздатьКолонки();

В ТЗ ИзмененияКоличества хранятся только текущие изменения проделанные с открытым документом. Зачем выводить эту ТЗ в форму изменения количества?
Вывести таблицу Товары на общую форму:
Форма.ТабТовары= Товары.Выгрузить(, "НомерСтроки,Номенклатура,Количество");
Форма.ЭлементыФормы.ТабТовары.СоздатьКолонки();
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

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