При изменении количества в таблице вызывается форма.Как сделать так, чтобы если эта форма закрыта(когда форма закрывается вызывается вопрос,если пользователь нажимает "да" запись в РС осуществляется) количество возвращалась в значение до изменения?. Думаю, что можно написать в "иначе" что количество в таблице "Товары" равняется переменной, которая сохраняет количеству до изменения(такое количество уже есть "МассивСтрок[0].Количество").Буду благодарен, если сможете пример привести, как сделать.
Да, дальше продолжаю огород городить)
ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
Данные=ЭлементыФормы.Товары.ТекущиеДанные.Количество;
Отбор = Новый Структура("ИдентификаторСтроки", ТекущиеДанные.ИдентификаторСтроки);
МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество <> ТекущиеДанные.Количество Тогда
Форма = ПолучитьФорму("РегистрСведений.ЛогРедактированияДокументов.Форма.Реализация", , ЭлементыФормы.Товары);
Форма.КлючУникальности = ТекущиеДанные.ИдентификаторСтроки;
Форма.Номенклатура = ТекущиеДанные.Номенклатура;
Форма.КоличествоБыло = МассивСтрок[0].Количество;
Форма.КоличествоСтало = ТекущиеДанные.Количество;
СтрокиИзменений = ИзмененияКоличества.НайтиСтроки(Отбор);
КонецЕсли;
Форма.ОткрытьМодально();
ТекстВопроса = "Данные будут записаны в регистр сведений.Продолжить??";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, );
Если Ответ = КодВозвратаДиалога.Да Тогда
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв,
| СУММА(ЕСТЬNULL(ВложенныйЗапрос.КоличествоОстаток, 0)) КАК Остаток,
| РеализацияТоваровУслугТовары.ИдентификаторСтроки,
| РеализацияТоваровУслугТовары.Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ) КАК ТоварыВРезервеНаСкладахОстатки
| ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
| ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
|
| СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток) КАК ВложенныйЗапрос
| ПО РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.ИдентификаторСтроки,
| РеализацияТоваровУслугТовары.Количество";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("НачалоПериода",Ссылка.Дата);
Выборка=Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из ИзмененияКоличества Цикл
МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Новый Структура("ИдентификаторСтроки", Стр.ИдентификаторСтроки));
Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество = Стр.КоличествоСтало Тогда
Продолжить;
КонецЕсли;
КонецЦикла;
ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
Отбор = Новый Структура("ИдентификаторСтроки", ТекущиеДанные.ИдентификаторСтроки);
Отбор2= Новый Структура("ИдентификаторСтроки1", ТекущиеДанные.ИдентификаторСтроки);
МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Отбор);
МассивСтрок2 = Выборка.НайтиСтроки(Отбор);
Если МассивСтрок.Количество() > 0 И МассивСтрок[0].Количество <> ТекущиеДанные.Количество Тогда
Если ТекущиеДанные.Количество<>Стр.КоличествоБыло Тогда
НаборЗаписей = РегистрыСведений.ЛогРедактированияДокументов.СоздатьНаборЗаписей();
НоваяЗапись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, Стр);
НоваяЗапись.Документ = Ссылка;
НоваяЗапись.Товар = МассивСтрок2[0].Номенклатура;
НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
НоваяЗапись.Резерв = МассивСтрок2[0].Резерв;
НоваяЗапись.Остаток = МассивСтрок2[0].Остаток;
НоваяЗапись.Было = МассивСтрок[0].Количество;
НоваяЗапись.Стало = ТекущиеДанные.Количество;
НаборЗаписей.Записать(Ложь);
КонецЕсли;
КонецЕсли;
Иначе
=МассивСтрок[0].Количество;
КонецЕсли;
ПоказатьДа, дальше продолжаю огород городить)
По теме из базы знаний
- Исправление неуникальности текстовых номеров документов изменением количества незначащих нулей
- Простановка суммы в документе «Покупка материалов» при изменении количества от спецификации договора
- Печать ТТН, 1-Т и Торг-12 с весом, упаковкой и количеством мест
- Пересчет материалов в этапе производства при изменении количества выпуска для 1С:ERP 2.5
- Количество данных в метаданных
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)в переменные записываются данные до изменения ПервоначальныеДанные и количество после изменения "Изменения количества".А как лучше сделать?
Предположим пользователю в документе Реализация товаров и услуг нужно изменить количество.Он хотел изменить на 23, но не попал на кнопку и написал 24.Но количество в таблице то уже изменилась и пользователь по невнимательности может сохранить документ, а записи в РС не будет.А так нельзя, чтобы было. Все изменения количества должны записываться в РС.
Как сделать так, чтобы таких случаев не было?
Предположим пользователю в документе Реализация товаров и услуг нужно изменить количество.Он хотел изменить на 23, но не попал на кнопку и написал 24.Но количество в таблице то уже изменилась и пользователь по невнимательности может сохранить документ, а записи в РС не будет.А так нельзя, чтобы было. Все изменения количества должны записываться в РС.
Как сделать так, чтобы таких случаев не было?
(4)
Вообще, пока документ не записан, данные о "старом" количестве и так есть в базе (можно просто взять Ссылка.Товары[НомерСтроки].Количество - там будет старое значение из базы). И если речь идет о подсветке, например, измененных данных, то можно либо перед записью проверять измененные количества (запросом к табличной части по ссылке с табличной частью из объекта) и отображать вопрос на корректность изменений (хоть и в отдельном окне), либо при изменении количества подсвечивать колонку, а строки, в которых количество было изменено, сохранять в, допустим, списке значений. Т.е. есть масса способов для того, чтобы ждать пользователю знать, что он изменил и попросить подтвердить или опровергнуть изменения.
Предположим пользователю в документе Реализация товаров и услуг нужно изменить количество.Он хотел изменить на 23, но не попал на кнопку и написал 24.Но количество в таблице то уже изменилась и пользователь по невнимательности может сохранить документ, а записи в РС не будет.А так нельзя, чтобы было. Все изменения количества должны записываться в РС.
А зачем в регистр записывать все изменения количества? Невнимательный пользователь вообще не будет смотреть, что там и как, а просто сохранит документ. Более того, 23 может оказаться как раз правильным значением - что с этим делать?
Вообще, пока документ не записан, данные о "старом" количестве и так есть в базе (можно просто взять Ссылка.Товары[НомерСтроки].Количество - там будет старое значение из базы). И если речь идет о подсветке, например, измененных данных, то можно либо перед записью проверять измененные количества (запросом к табличной части по ссылке с табличной частью из объекта) и отображать вопрос на корректность изменений (хоть и в отдельном окне), либо при изменении количества подсвечивать колонку, а строки, в которых количество было изменено, сохранять в, допустим, списке значений. Т.е. есть масса способов для того, чтобы ждать пользователю знать, что он изменил и попросить подтвердить или опровергнуть изменения.
(5) А как вообще изменить значение?Чтобы знать вообще.
Сделал так:
Отладка показывает количество до изменения,но почему-то в самой таблицу это значение не изменяется.
МассивСтрок находится нужную строку по идентификатору строки
Почему в самой в таблице не изменятся значение?
Например если просто в цикле сделать, в таблице все значения изменяются.
например вот так:
Сделал так:
Для Каждого ТекСтрока из Товары Цикл
КонецЦикла;
ТекСтрока.Количество =МассивСтрок[0].Количество;
Отладка показывает количество до изменения,но почему-то в самой таблицу это значение не изменяется.
МассивСтрок находится нужную строку по идентификатору строки
Отбор = Новый Структура("ИдентификаторСтроки", ТекущиеДанные.ИдентификаторСтроки);
МассивСтрок = ПервоначальныеДанные.НайтиСтроки(Отбор);
Почему в самой в таблице не изменятся значение?
Например если просто в цикле сделать, в таблице все значения изменяются.
например вот так:
Для Каждого ТекСтрока из Товары Цикл
ТекСтрока.Количество =МассивСтрок[0].Количество;
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот