1. user1202776 08.07.19 16:24 Сейчас в теме

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

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

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

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

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

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

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

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


СтрТовары = Элементы.Товары.ТекущиеДанные;
Товар = СтрТовары.Номенклатура;
Количество = СтрТовары.Количество;
Цена = СтрТовары.Цена;
36. user1202776 09.07.19 19:05 Сейчас в теме
(34)это только в форме документа работает?
38. dakork 14 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 169 08.07.19 23:17 Сейчас в теме
Вам уже SlavaKron в комментарии написал как сделать. Или Вы спрашиваете как это технически реализовать? - там, вроде бы все понятно...
16. user1202776 09.07.19 08:56 Сейчас в теме
(15)не понятно как с ДокументОбъект.ДополнительныеСвойства сделать
23. protexprotex 169 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С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Москва
Полный день

Консультант-аналитик 1С
Москва
Полный день

Консультант ERP-систем
Москва
Временный (на проект)

Бизнес-аналитик 1С
Москва
зарплата от 90 000 руб. до 150 000 руб.
Полный день