Если в таблице изменяется количество, вызывается форма, в котором нужно указать причину изменения количества,сколько было до изменения и сколько стало после изменения и еще комментарий. И эти данные должны записываться в регистр сведений РедактированияДокументов. Как это реализовать?
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Ссылка,
| РеализацияТоваровУслугТовары.Ссылка.Ссылка КАК Ссылка1,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",ЭтотОбъект.Ссылка);
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;
КоличествоИзмененоВручную = ИСТИНА;
Если КоличествоИзмененоВручную Тогда
Форма=РегистрыСведений.ЛогРедактированияДокументов.ПолучитьФорму("ФормаРеализации");
Форма.Открыть();
Движение = РегистрыСведений.ЛогРедактированияДокументов.СоздатьМенеджерЗаписи();
Движение.Документ=Выборка.Ссылка;
Движение.Пользователь=ПараметрыСеанса.ТекущийПользователь;
Движение.Было=Выборка.Количество;
Движение.Стало=Выборка.Количество;
Движение.Резерв=Выборка.Количество;
Движение.Комментарий=Форма.ПолеВвода1;
Движение.Период=ТекущаяДата();
Движение.Резерв=Выборка.Количество;
Движение.Регистратор=Выборка.Ссылка;
Движение.Товар=Выборка.Номенклатура;
Движение.Активность=Истина;
Движение.Записать();
КонецЕсли;
КонецПроцедуры // ПередЗаписью()
ПоказатьПо теме из базы знаний
- Под капотом управляемых форм
- Дополнительные реквизиты и сведения в управляемом приложении - это просто... с БДРС
- Данные формы и оптимизация обмена с сервером
- Слияние баз ERP (формирование остатков и перенос данных)
- Обмен по правилам Конвертации данных 2.1 для ERP, КА, УТ 11, БП 3, ЗУП 3, Розница 2.3
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вижу Вы уже несколько дней пытаетесь то записать при закрытии формы, то про100 записать в РС из формы.
Случайно нет версионирования в конфигурации, может будет проще его включить?
Как по мне, то такую задачку необходимо решать например через какой-то признак в строке ТЧ (булево) - типа Пусто (Ложь) если его никто не трогал и как только кто-то что-либо изменил в колонке кол-во сразу стал "Истина", ну и колонку для запоминания старого значения. тип(Число(15,3)) в которое пишеться Кол-во до изменения.
Затем "перед записью" в цикле смотреть, какая строка изменена и только после этого писать в РС. ну можно и сразу отобрать массив строк по этому признаку и записать набор.
Случайно нет версионирования в конфигурации, может будет проще его включить?
Как по мне, то такую задачку необходимо решать например через какой-то признак в строке ТЧ (булево) - типа Пусто (Ложь) если его никто не трогал и как только кто-то что-либо изменил в колонке кол-во сразу стал "Истина", ну и колонку для запоминания старого значения. тип(Число(15,3)) в которое пишеться Кол-во до изменения.
Затем "перед записью" в цикле смотреть, какая строка изменена и только после этого писать в РС. ну можно и сразу отобрать массив строк по этому признаку и записать набор.
Ну во-первых это бред, что пользователь будет вписывать количество старое и новое. Во-вторых я бы сделал так, я бы запоминал всю таблицу до изменения, затем перед проведением сравнивал таблицы и если разницу записывал в третью таблицу, потом выбиваю окошко с комментарием и пишу в регистр данные из 3-ей таблицы
Форма документа:
Модуль Объекта:
Перем ТаблицаДоИзменения Экспорт;
Процедура ПриОткрытии()
Если ЭтоНовый() Тогда
//
Иначе
ТаблицаДоИзменения = ТабЧасть.Выгрузить();
КонецЕсли;
КонецЕсли;
ПоказатьМодуль Объекта:
Перем ТаблицаИзменений;
Процедура передЗаписью()
ТаблицаИзменений = Новый ТаблицаЗначений;
КопияТаблицы = табЧасть.Скопировать();
КопиТаблицы.Свернуть("номенклатура", "Количество");
Для Каждого Строка Из КопияТаблицы Цикл
//сравнить 2 поля
//загрузить в таблицу изменений
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаПроведения()
Если ТаблицаИзменений.Количество() = 0 Тогда
//
Иначе
//движения по регистру сведений
КонецЕсли;
КонецПроцедуры
Показать
(22)
Для Каждого Строка Из табЧасть Цикл
НайденныеСтроки = ТаблицаДоИзменений.НайтиСтроки("Номенклатура", Строка.Номенклатура);
Если НайденныеСтроки <> 0 Тогда
Если НайденнаяСтроки.Количество <> Строка.Количество Тогда
НоваяСтрока = ТаблицаИзменений.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
//поля которые нужны
конецЕсли;
КонецЕсли;
КонецЦикла;
Показать
(21)
КопияТаблицы = Товары.Скопировать();
КопияТаблицы.Свернуть("Номенклатура", "Количество");
Для Каждого Строка Из КопияТаблицы Цикл
СравнитьТаблицыНаборовЗаписей(ТаблицаДоИзменения , ТаблицаИзменений, ИменаПолейЧерезЗапятую);
ТаблицаДоИзменения.Сортировать().ЗначениеВСтрокуВнутр() = ТаблицаИзменений.Сортировать(ИменаПолейЧерезЗапятую).ЗначениеВСтрокуВнутр()
//загрузить в таблицу изменений
КонецЦикла;
(23) И посмотрите что вы делаете вообще. запускаете цикл, и сравниваете совершенно другие таблицы, зачем вам цикл, если его перебор вам не нужен. Вам нужно сравнить ТаблицуДоИзменений и ТабЧасть, по идеи где-то так должно быть
Я просто не знаю что делает ваша функция
ТаблицаСравнения = СравнитьТаблицыНаборовЗаписей(ТаблицаДоИзменения , ТабЧасть.Выгрузить(), ИменаПолейЧерезЗапятую);
ТаблицаСравнения .Сортировать("Номенклатура Возр")
Я просто не знаю что делает ваша функция
ПередЗаписью документ еще не записан после модификации, но он записан в базу, он же не новый? Получить старый вариант можно через Ссылка.
Т.е. в Ссылка.Товары будет старый вариант, до текущего редактирования.
В Товары - текущий вариант после редактирования.
Поскольку 1С по каким-то до сих пор загадочным причинам ссылки на строки ТЧ не хранит, то остается проблема найти строку из нового в старом. Если в ТЧ не повторяются товары, или например товар+серия, то это несложно. Если могут повторяться, то проще свернуть по товарам и смотреть общее изменение. И его записывать куда-то.
Искать различия можно простым перебором, только их нужно два: сначала перебрать новый вариант и найти аналоги в старом, потом наоборот, т.к. иначе можно потерять полностью удаленные или вновь добавленные строки.
Т.е. в Ссылка.Товары будет старый вариант, до текущего редактирования.
В Товары - текущий вариант после редактирования.
Поскольку 1С по каким-то до сих пор загадочным причинам ссылки на строки ТЧ не хранит, то остается проблема найти строку из нового в старом. Если в ТЧ не повторяются товары, или например товар+серия, то это несложно. Если могут повторяться, то проще свернуть по товарам и смотреть общее изменение. И его записывать куда-то.
Искать различия можно простым перебором, только их нужно два: сначала перебрать новый вариант и найти аналоги в старом, потом наоборот, т.к. иначе можно потерять полностью удаленные или вновь добавленные строки.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот