1. user1202776 11.08.19 22:02 Сейчас в теме

Изменение количества в таблице

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

		
		Отбор = Новый Структура;
	Отбор.Вставить("НомерСтроки",ЭтаФорма.ВладелецФормы.ТекущийЭлемент.ТекущиеДанные.НомерСтроки);
	МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);

	
Для Каждого Регистр Из Дан Цикл
	
	Если Регистр.Товар<>Номенклатура Тогда
	
ПервоначальноеКоличество=ЭтаФорма.ВладелецФормы.ТекущийЭлемент.ТекущаяСтрока;
		ПервоначальноеКоличество.Количество=МассивСтрок[0].Количество;

	Иначе
	ПервоначальноеКоличество=ЭтаФорма.ВладелецФормы.ТекущийЭлемент.ТекущаяСтрока;
		ПервоначальноеКоличество.Количество=0;	
Показать

Как можно сделать.Может кто-то более лучший вариант предложит,как это сделать.Буде рад, если сможете привести пример.Или может кто-то подскажет, как правильно сделать так, как я пытаюсь сделать?
Ответы
Избранное Подписка Сортировка: Древо
2. chemezov 19 12.08.19 07:11 Сейчас в теме
Ничего не понятно. Но очень интересно.
Давай по порядку.
При изменении количества в таблице вызывается форма.

Кликаем в строке табличной части в колонке "Количество", заполняем какое-то значение, жмем Ентер. Срабатывает событие "ПриИзменении", открываем форму в модальном режиме, в этой форме чего то кликаем, и если не нажимаем "ОК", то должно быть заполнено так как было до того как мы начали редактировать значение в строке табличной части в колонке "Количество"?
Так?
4. user1202776 12.08.19 07:41 Сейчас в теме
6. chemezov 19 12.08.19 08:40 Сейчас в теме
(4)Если так, то надо открывать форму не ПриИзменении, а в событии НачалоВыбора. Таким образом как только нажали для редактирования на Количество, открылась форма, а по результатам обработки этого количество в открытой формы уже либо писать значение в колонку либо нет. Хотя возможно я не совсем понимаю всю суть задачи.

Нужно ограничить возможность пользователю как-то неправильно устанавливать количество?
8. user1202776 12.08.19 08:43 Сейчас в теме
(6) нужно сделать так, чтобы пользователь не мог изменить количество, без регистрации этого изменения в регистре сведений. В вызываемой форме пользователь выбирает причину изменения
10. user1202776 12.08.19 08:47 Сейчас в теме
(6)если добавить в Начало выбора, то вроде будет срабатывать , когда он нужно тоже
3. chemezov 19 12.08.19 07:12 Сейчас в теме
Далее. В коде, что такое "Данные"? Это переменная открытой формы, или это код обработчика "ПриИзменении"?
5. user1202776 12.08.19 07:43 Сейчас в теме
(3) данные-это таблица, в котором изменяется количество. Весь код находится в вызываемой форме
7. chemezov 19 12.08.19 08:41 Сейчас в теме
Формы управляемые или обычные?
9. user1202776 12.08.19 08:43 Сейчас в теме
11. chemezov 19 12.08.19 08:56 Сейчас в теме
Обычные формы уже начинаю забывать. Но я сделал бы примерно так:
1. В событии "НачалоВыбора" открыл бы пользователю форму редактирования количества.
2. Форму редактирования количества сделал бы с реквизитом формы "Количество", "Описание причины".
3. Если описание не заполнено и нажатие на Ок, выдал бы предупреждение, если заполнено тогда регистрировал бы изменение.
4. При открытии формы, указал бы в качестве владельца для формы таблицуФормы с количеством которая, чтобы при закрытии вызванной формы обработчик вернулся в обработчик этой таблицы "ОбработкаВыбора". И в обработке выбора уже определил будет ли изменено значение количества по данным выбора.
12. user1202776 12.08.19 09:10 Сейчас в теме
(11)сможете привести пример кода, где вы определяете будет количество изменено или нет?
13. user1202776 12.08.19 09:33 Сейчас в теме
(11)не надо приводить пример)
14. chemezov 19 12.08.19 10:27 Сейчас в теме
Код при НачалоВыбора
СтандартнаяОбработка = Ложь;
	ТекущиеДанные = ЭлементыФормы.продукция.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ФормаРедактированияКоличеста = ПолучитьФорму("Форма");
	ФормаРедактированияКоличеста.ВладелецФормы = ЭлементыФормы.продукция;	
	ФормаРедактированияКоличеста.Количество = ТекущиеДанные.Количество;	
	
	РезултатФормы = ФормаРедактированияКоличеста.ОткрытьМодально();
	
	Если РезултатФормы <> Неопределено Тогда
		ТекущиеДанные.Количество = РезултатФормы;
	КонецЕсли;
Показать


В самой форме при нажатии кнопки:
Процедура Кнопка1Нажатие(Элемент)
	Если ПолеВвода1 = "" Тогда
		Закрыть(Неопределено);
	Иначе
		Закрыть(Количество);
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

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

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

Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день