|
Сравнение таблиц ДО и После изменения | ☑ | ||
---|---|---|---|---|
0
kintevy
27.09.22
✎
10:12
|
с 1с знаком чуть больше недели, дали задание в расширении сравнить результат таблицы до изменений и после и вывести результат истина или ложь в зависимости от того менялась таблица или нет. дали подсказку что нужно сравнивать объект и ссылку таблицы значений но как к ним обращаться, что именно делать нужно - нет понимания. если можно подробно объяснить как это делать, откуда брать данные , то был бы признателен
|
|||
1
Ryzeman
27.09.22
✎
10:16
|
(0) Объект - это то, что в оперативной памяти. По ссылке получаешь то, что хранится в базе данных физически на диске в табличке. Как сравнивать - тут уж сам должен определиться с алгоритмом.
В общем случае построчно - получаешь две таблицы, сравниваешь количество строк, если одинаковое - начинаешь каждую строку сверять. В частных случаях могут быть более изящные решения |
|||
2
kintevy
27.09.22
✎
10:24
|
(1) Функция ТаблицаЗначенийСравнить (Продукция)
ТабЗначений = Новый ТаблицаЗначений(); ТабЗначений = Объект.Продукция.Выгрузить(); ТабЗначенийСравниваемое = ТабЗначений.Скопировать(); я просто не понимаю, правильно ли я обращаюсь к таблице значений для данных, просто в моих глазах после этого я пишу цикл для перебора строк |
|||
3
Ногаминебить
27.09.22
✎
10:24
|
Вероятно проверяющие ждут, что будет запрос с объединением двух таблиц по всем полям.
|
|||
4
kintevy
27.09.22
✎
10:46
|
&НаСервере
Функция ТаблицаЗначенийСравнить (Продукция) ТабЗначений = Новый ТаблицаЗначений(); ТабЗначений = Объект.Продукция.Выгрузить(); ТабЗначенийСравниваемое = ТабЗначений.Скопировать(); Для НомерСтроки = 1 По ТабЗначений.КоличествоСтрок() Цикл ТабЗначений.ПолучитьСтрокуПоНомеру(НомерСтроки); КонецЦикла; Для НомерВТаблице = 1 По ТабЗначенийСравниваемое.КоличествоСтрок() Цикл ТабЗначенийСравниваемое.ПолучитьСтрокуПоНомеру(НомерВТаблице); КонецЦикла; Если НомерСтроки <> НомерВТаблице Тогда Результат = Ложь; Иначе Результат = Истина; КонецЕсли; Возврат Результат; КонецФункции не уверен так ли должно выглядеть условие для сравнения строк |
|||
5
Мультук
гуру
27.09.22
✎
11:05
|
(4)
1) В типовых конфигурациях есть куча сравнений ДО и ПОСЛЕ с помощью запросов. 2) В той же УТ есть типовая функция (не использовал) ОбщегоНазначенияУТ.СравнитьТаблицыЗначений(Таблица1, Таблица2, КолонкиДолжныСовпадать = Истина) 3) https://infostart.ru/public/326983/ https://helpf.pro/faq8/view/1888.html 4) Только скорее всего, от вас хотят чего-то другого, а вот чего - в хрустальный шар не очень видно P.S. Я бы (интересно, а Си-шный компилятор бы смог?) сократил этот код до: &НаСервере Функция ТаблицаЗначенийСравнить (Продукция) Возврат Истина; КонецФункции |
|||
6
kintevy
27.09.22
✎
11:19
|
(5) Ну насколько я понял, хотят перебор строк - кол-во строк изменилось = истина
и проверка 4 колонки на изменение содержимого - изменилось = истина |
|||
7
AlvlSpb
27.09.22
✎
15:23
|
(6) Бери первый способ из первой ссылки в (5) п.3. Если кол-во колонок мало, первый цикл для составления списка колонок можно не делать (в Свернуть просто перечислить их)
Делаешь ТаблицаДО = Объект.Продукция.Выгрузить(); выполняются какие -то действия что могут поменять таблицу. По окончанию делаешь ТаблицаПосле = Объект.Продукция.Выгрузить(); Объединяешь обе таблицы в одну в цикле Добавляешь колонку и заполняешь ее единицей (1) Сворачиваешь полученную таблицу по всем колонкам с суммированием по добавленной колонке Ищешь в таблице строки в добавленной колонке имеющие значение 1 НайтиСтроки() (не свернулись, не сплюсовались, значит строки отличаются или добавленные) Если массив пустой - изменений нет, если массив имеет строки - изменения были |
|||
8
kintevy
27.09.22
✎
15:45
|
(7) У меня при выгрузке таблицыДО и после на выходе одинаковые данные, он выгружает одну и ту же таблицу, либо я опять не догоняю
|
|||
9
rudnitskij
28.09.22
✎
00:33
|
(0) если колонки таблиц заведомо одинаковые - можно через запрос ОБЪЕДИНИТЬ прочитать эти две таблицы в одну, только во второй таблице числовые поля умножить на минус один. Если после группировки результата не остается строк - значит содержимое таблиц одинаковое.
Но если вы знакомы с 1С чуть больше недели - у вас такой номер скорее всего не пройдет, так что надежнее будет "позвать программиста"(с) |
|||
10
Bigbro
28.09.22
✎
08:17
|
мне нравится вариант с объединением таблиц и сверткой.
это просто и минимум кода. |
|||
11
Мимохожий Однако
28.09.22
✎
08:56
|
(8) Ты сделал копию таблицы и сравниваешь. Вот и одинаковые данные. Первая строка в функции лишняя. А что ты делаешь с таблицей перед сравнением я не понял.
|
|||
12
Serg_1960
28.09.22
✎
09:05
|
(8) Если учитывать Ваше "сравнить результат таблицы до изменений и после"(0), то Ваш алгоритм должен находиться в обработчике события ПередЗаписью() - там есть возможность обращаться к данным Объект(это Ваше "после") и Объект.Ссылка (это Ваше "до изменений").
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |