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

1. user1202776 19.07.19 11:04 Сейчас в теме
При изменении количества в таблице вызывается форма.Как сделать так, чтобы если эта форма закрыта(когда форма закрывается вызывается вопрос,если пользователь нажимает "да" запись в РС осуществляется) количество возвращалась в значение до изменения?. Думаю, что можно написать в "иначе" что количество в таблице "Товары" равняется переменной, которая сохраняет количеству до изменения(такое количество уже есть "МассивСтрок[0].Количество").Буду благодарен, если сможете пример привести, как сделать.

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

	Запрос=Новый Запрос;
	Запрос.Текст="ВЫБРАТЬ
	             |	РеализацияТоваровУслугТовары.Номенклатура,
	             |	СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв,
	             |	СУММА(ЕСТЬNULL(ВложенныйЗапрос.КоличествоОстаток, 0)) КАК Остаток,
	             |	РеализацияТоваровУслугТовары.ИдентификаторСтроки,
	             |	РеализацияТоваровУслугТовары.Количество
	             |ИЗ
	             |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
	             |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ) КАК ТоварыВРезервеНаСкладахОстатки
	             |		ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
	             |		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	             |			ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
	             |			ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
	             |		ИЗ
	             |			РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
	             |		
	             |		СГРУППИРОВАТЬ ПО
	             |			ТоварыНаСкладахОстатки.Номенклатура,
	             |			ТоварыНаСкладахОстатки.КоличествоОстаток) КАК ВложенныйЗапрос
	             |		ПО РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
	             |ГДЕ
	             |	РеализацияТоваровУслугТовары.Ссылка.Ссылка = &Ссылка
	             |
	             |СГРУППИРОВАТЬ ПО
	             |	РеализацияТоваровУслугТовары.Номенклатура,
	             |	РеализацияТоваровУслугТовары.ИдентификаторСтроки,
	             |	РеализацияТоваровУслугТовары.Количество";
	Запрос.УстановитьПараметр("Ссылка",Ссылка);
	Запрос.УстановитьПараметр("НачалоПериода",Ссылка.Дата);
	Выборка=Запрос.Выполнить().Выгрузить();
	Для Каждого Стр Из ИзмененияКоличества Цикл
		МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Новый Структура("ИдентификаторСтроки", Стр.ИдентификаторСтроки));
		Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество = Стр.КоличествоСтало Тогда
			Продолжить;
		КонецЕсли;
	КонецЦикла;
	
	ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
	Отбор = Новый Структура("ИдентификаторСтроки", ТекущиеДанные.ИдентификаторСтроки);
	Отбор2= Новый Структура("ИдентификаторСтроки1", ТекущиеДанные.ИдентификаторСтроки);
	МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Отбор);
	МассивСтрок2 = Выборка.НайтиСтроки(Отбор);
	Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество <> ТекущиеДанные.Количество Тогда
		Если ТекущиеДанные.Количество<>Стр.КоличествоБыло Тогда
				НаборЗаписей = РегистрыСведений.ЛогРедактированияДокументов.СоздатьНаборЗаписей();		
				НоваяЗапись = НаборЗаписей.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяЗапись, Стр);
				НоваяЗапись.Документ = Ссылка;
				НоваяЗапись.Товар = МассивСтрок2[0].Номенклатура;
				НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
				НоваяЗапись.Резерв = МассивСтрок2[0].Резерв;
				НоваяЗапись.Остаток = МассивСтрок2[0].Остаток;
				НоваяЗапись.Было = МассивСтрок[0].Количество;
				НоваяЗапись.Стало = ТекущиеДанные.Количество;
				НаборЗаписей.Записать(Ложь);
			КонецЕсли;
		КонецЕсли;
	Иначе
		
		=МассивСтрок[0].Количество;
	КонецЕсли;
Показать


Да, дальше продолжаю огород городить)
По теме из базы знаний
Найденные решения
7. user1202776 20.07.19 20:46 Сейчас в теме
вот так сделал:
Переменная=ЭлементыФормы.Товары.ТекущаяСтрока;
Переменная.Количество=Например 22;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1202776 19.07.19 12:08 Сейчас в теме
как вообще изменить количество в таблице в коде?
3. starik-2005 3093 19.07.19 12:10 Сейчас в теме
Не надо так делать. Элементы формы оставь в покое. Ну и если надо что-то "временно изменить" - не надо это менять, достаточно завести временную переменную...
4. user1202776 19.07.19 12:24 Сейчас в теме
(3)в переменные записываются данные до изменения ПервоначальныеДанные и количество после изменения "Изменения количества".А как лучше сделать?
Предположим пользователю в документе Реализация товаров и услуг нужно изменить количество.Он хотел изменить на 23, но не попал на кнопку и написал 24.Но количество в таблице то уже изменилась и пользователь по невнимательности может сохранить документ, а записи в РС не будет.А так нельзя, чтобы было. Все изменения количества должны записываться в РС.
Как сделать так, чтобы таких случаев не было?
5. starik-2005 3093 19.07.19 14:19 Сейчас в теме
(4)
Предположим пользователю в документе Реализация товаров и услуг нужно изменить количество.Он хотел изменить на 23, но не попал на кнопку и написал 24.Но количество в таблице то уже изменилась и пользователь по невнимательности может сохранить документ, а записи в РС не будет.А так нельзя, чтобы было. Все изменения количества должны записываться в РС.
А зачем в регистр записывать все изменения количества? Невнимательный пользователь вообще не будет смотреть, что там и как, а просто сохранит документ. Более того, 23 может оказаться как раз правильным значением - что с этим делать?

Вообще, пока документ не записан, данные о "старом" количестве и так есть в базе (можно просто взять Ссылка.Товары[НомерСтроки].Количество - там будет старое значение из базы). И если речь идет о подсветке, например, измененных данных, то можно либо перед записью проверять измененные количества (запросом к табличной части по ссылке с табличной частью из объекта) и отображать вопрос на корректность изменений (хоть и в отдельном окне), либо при изменении количества подсвечивать колонку, а строки, в которых количество было изменено, сохранять в, допустим, списке значений. Т.е. есть масса способов для того, чтобы ждать пользователю знать, что он изменил и попросить подтвердить или опровергнуть изменения.
6. user1202776 19.07.19 14:50 Сейчас в теме
(5) А как вообще изменить значение?Чтобы знать вообще.
Сделал так:
Для Каждого ТекСтрока из Товары Цикл	
КонецЦикла;
ТекСтрока.Количество =МассивСтрок[0].Количество;


Отладка показывает количество до изменения,но почему-то в самой таблицу это значение не изменяется.
МассивСтрок находится нужную строку по идентификатору строки
Отбор = Новый Структура("ИдентификаторСтроки", ТекущиеДанные.ИдентификаторСтроки);
	МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Отбор);


Почему в самой в таблице не изменятся значение?

Например если просто в цикле сделать, в таблице все значения изменяются.
например вот так:
Для Каждого ТекСтрока из Товары Цикл
			ТекСтрока.Количество =МассивСтрок[0].Количество;
КонецЦикла;
7. user1202776 20.07.19 20:46 Сейчас в теме
вот так сделал:
Переменная=ЭлементыФормы.Товары.ТекущаяСтрока;
Переменная.Количество=Например 22;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот