Имя: Пароль:
1C
1С v8
Общий реквизит табличных частей?
0 ppa32
 
09.08.19
03:30
Доброго времени суток, уважаемые дамы и господа

Возник вопрос: возможно ли как - то централизованно добавить ГУИД в табличные части документов, что - то вроде общего реквизита в табличную часть? Было бы очень удобно добавить во все ТЧ ГУИД, а в подписке на событие сделать его заполнение там, где он не заполнен.

Можно, конечно, вручную допилить ГУИД в строки, но очень хочется создать красивое универсальное решение.

Суть задачи в том, чтобы при удалении строки (или создании новой) отслеживать, что было в новой строке, или что стало в добавленной.
1 RomaH
 
naïve
09.08.19
07:05
ну так выгрузить конфу в файлы ...
2 Троекратное ура
 
09.08.19
07:14
>Суть задачи в том, чтобы при удалении строки (или создании новой) отслеживать, что было в новой строке, или что стало в добавленной.

Версионирование? Запись изменений в регистр?
Чот не очень понятен финт ушами с гуидом.
3 ppa32
 
09.08.19
07:19
(2) Да, запись изменений в регистр с последующей выгрузкой данных во внешнюю базу данных. У нас просто несколько филиалов, и я хочу централизовать механизм отслеживания изменений.
4 ppa32
 
09.08.19
07:20
(1) не понял? Чем мне поможет выгруженная конфа для того, чтобы идентифицировать строку документа...
5 Троекратное ура
 
09.08.19
07:26
(3) Вопрос - зачем ГУИД?
Запись в регистре, однозначно идентифицирующая строку, не подходит?
6 RomaH
 
naïve
09.08.19
07:27
(4) тебе? - ничем
7 Троекратное ура
 
09.08.19
07:27
Т.е. измерения "НаименованиеБД", "Объект", "НомерСтроки", ресурс "Значение". Всё.
8 RomaH
 
naïve
09.08.19
07:29
(7) ты в курсе, что номер строки меняется при удалении строки выше, при сортировке ?
9 ppa32
 
09.08.19
07:30
(5) Я думал на счёт регистра, но тут вопрос в том, как сопоставить запись регистра и саму строку? Я же не могу в регистре добавить реквизит с типом "Строка табличной части".
10 ppa32
 
09.08.19
07:31
(8) Именно поэтому я и поднял вопрос здесь по поводу централизованного добавления ГУИДа в строки документов...
11 RomaH
 
naïve
09.08.19
07:32
12 ppa32
 
09.08.19
07:37
(11) Ну клёво. А дальше что с этой кучей файлов делать?
13 ppa32
 
09.08.19
07:40
Может быть как - то из SQLя надёргать идентификаторов? как - то же он сопоставляет строки с шапкой, на то она и реляционная база данных...
14 RomaH
 
naïve
09.08.19
07:40
(12) тогда смотри (6)
15 Троекратное ура
 
09.08.19
07:44
(14) Советчик из тебя, канеш...

(13) Как вариант, в принципе.

А что, задача настолько строго стоит прям до строки детализировать? Ну была ТЧ такая, стала после изменения другая, без привязки к строкам.
16 Web00001
 
09.08.19
07:48
(12)Ну мне вернули мою колоду карт таро попробую вангануть и предположить, что ромаАШ(или ромаХ) хочет предложить, но стесняется, распарсить выгруженнуе файлы, добавить программно реквизит строка и загрузить обратно. Зачем? Мб он думает, тчо в этом проблема, мало понятно конечно из этих отрывистых сообщений. Не надо судить строго человека. Вдруг у него на клавиатуре буквы платные.
17 RomaH
 
naïve
09.08.19
07:52
(16) "Возник вопрос: возможно ли как - то централизованно добавить ГУИД в табличные части документов, что - то вроде общего реквизита в табличную часть? Было бы очень удобно добавить во все ТЧ ГУИД,"

.... прикинь, именно это я предлагаю
вот не понятно откуда возник вопрос "Зачем" - потому-что (0) именно это и хочет
18 Мимохожий Однако
 
09.08.19
07:58
(0) Добавь текущую дату в каждую строку и вынеси в регистр сведений с измерениями НомерСтроки, Время, Регистратор , в ресурсы все поля этой строки
..
Но я так и не понял нахрена эта задача в таком виде.
19 Web00001
 
09.08.19
08:01
(17)Там было, что-то еще про подписки на события, то есть тс больше беспокоит факт как заполнять этот реквизит что-бы было написано элегантно и работало всегда правильно. Как систематизировано с меньшими трудозатратами добавить, реквизит в тч, тоже наверное зададча и твой вариант даже неплох, если бы у тебя не были такие дорогие буквы и ты сразу бы сказал, что ты имеешь ввиду.
20 ppa32
 
09.08.19
08:05
(15) Ага, именно так. Один нехороший человек правит строку в документе, или удаляет/добавляет, а потом волчицы из бухгалтерии начинают мне моск компосировать, мол, хто и пошто? "Это жеж сбой в программе был, когда устраните??????!!!!!!111"

А я ХЗ, какой гад это был, и в какой именно базе он это сделал.
21 Троекратное ура
 
09.08.19
08:07
(20) Не, ты не понял.
Кто и пошто - ты увидишь, т.е. было в строке документа одно, стало другое, поменял такой-то.
При изменении порядка строк - ну сместится значение, это тоже видно будет.
Зачем однозначно идентифицировать каждую строку ТЧ?
22 ppa32
 
09.08.19
08:08
(18) Добавить в строки ГУИД или дату или еще всё что угодно - это я смогу. Вопрос в том, чтобы однозначно идентифицировать строку ТЧ. Суть в том, чтобы сделать это добавление не сильно напряжным. Чтобы не добавлять этот реквизит в 100500 табличных частей, а как - то попроще...
23 Троекратное ура
 
09.08.19
08:08
+(21) Просто смысл такой детализации неясен. Без неё задача реализуется просто, быстро и без лишнего геморроя, есть даже готовые решения неплохие.
24 ppa32
 
09.08.19
08:12
(21) Потому что баз - хренова гора. Между ними хренова гора обменов. Кто - то где - то поменял некий документ, не понятно в какую сторону. Когда этому "кому - то" начинают задавать вопросы, он говорит, что строки не трогал, а "только делал всё как обычно, а это всё сбой в программе".
25 ppa32
 
09.08.19
08:14
(21) Суть: в подписке на событие последовательно прохожу все метаданные объекта и ссылки. И если значение из объекта и из ссылки не совпадают, то пишу в регистр, что такой - то (гад) изменил то-то. И всё бы ничего, но когда строка удаляется, то сопоставить, какие строки были, и какие стали, невозможно.
26 Троекратное ура
 
09.08.19
08:15
(24) Ты опять не понял. Базу идентифицировать несложно, объект - тоже, пользователя - вообще без проблем, всё это видно в записи регистра, куда ты будешь сохранять журнал изменений.
Я говорю про уровень детализации с уникальными гуидами строк - он очевидно избыточен для твоей постановки задачи. Ты без этой детализации сможешь видеть детальные изменения в табличной части. Порядок строк вообще не принципиален для получения полной информации по изменениям.
27 Мимохожий Однако
 
09.08.19
08:34
(20) Достаточно запретить пользователю редактировать проведенный и проверенный бухгалтером документ. И не надо городить огород. В одной из контор включил режим запрета редактирования документов не автором. Этого оказалось достаточным. Кто последний записал тот и виноват. А если по сабжу, то данная приблуда только усилит процесс разборок.
28 FIXXXL
 
09.08.19
09:56
(25) можно же запросом сравнить две ТЧ, ссылки и объекта, разницу записать в твой РС...
29 ppa32
 
12.08.19
02:41
(28) Верно. Но по каким критериям сопоставить табличные части? Например было в таблице 3 записи: 1, 2 и 3. Потом какой - то хороший человек взял и удалил строку №2. Соответственно, в объекте бывшая строка 3 получила номер 2.
30 Троекратное ура
 
12.08.19
04:59
(29) Это разве принципиально?
Вот была у нас ТЧ такая, стала такая, разница наглядна, неважно, правили строки или удаляли какие-то.
31 Троекратное ура
 
12.08.19
05:00
Как пример, посмотрите "История изменений" в типовой. Там со строками не заморачиваются, просто выводят все различия, на моей памяти вопросов, кто какую строку удалял или местами их менял, не было.
32 catena
 
12.08.19
07:02
(29)Такие ситуации видно глазами. Или у вас это происходит по 100 раз в день?
33 Мимохожий Однако
 
12.08.19
07:52
(29) Другой "нехороший" человек отсортировал строки. Нет смысла цепляться за строки. Цепляйся за весь блок. Кто,что и как менял-избыточная информация. Достаточно зафиксировать, что в целом было после последнего сохранения документа.
34 APXi
 
12.08.19
08:28
Сейчас же вроде в новых платформах уже есть история.
35 unregistered
 
12.08.19
08:59
(34) Автор хернёй страдает.
Есть платформенный механизм "история данных".
Есть механизм БСП "версионирование объектов", встроенный во все типовые последних версий.
И там и там нглядно видны все изменения - кем и когда сделанные.
Автор не в состоянии сформулировать - чего ему нужно и чем конкретно не устраивают существующие готовые инструменты.
36 ptiz
 
12.08.19
09:42
(0) В 8.3 всё это есть и без костылей - гуидов.
37 aleks_default
 
12.08.19
10:51
У фирмы 1с есть свой велосипедный завод
38 APXi
 
12.08.19
11:01
(35) Возможно просто автор этого не знал. Я в прошлом также делал как и автор, только он для всех ТЧ хочет, а я делал для конкретных.
39 ppa32
 
13.08.19
04:31
(35) Если базы разношёрстные, и некоторые из их никак не обновить до последнего релиза (переписанные до неузнаваемости), то как мне заюзать этот чудесный механизм? Я - то не против использовать уже изобретенный велосипед, но вот как? Отдельно БСП возможно ли как - то обновить, чтобы не трогать всё остальное?
40 Троекратное ура
 
13.08.19
04:55
(39) Не парься, пиши в регистр в отдельную базу через одата, просто без лишних заморочек с гуидами.
41 Троекратное ура
 
13.08.19
04:57
+(40) Вот готовое решение, например: https://help1c.by/hranenie-zhurnala-registratsii-vo-vneshney-baze/
42 ppa32
 
13.08.19
05:14
(41) Такое решение я уже сделал,  но оно без детализации: просто хранение журнала вне 1с.
43 Троекратное ура
 
13.08.19
05:22
(42) Упс, не то. Готовое решение называется вроде бы "Журнал изменений", у одного моего клиента такой стоял, собирал из зоопарка баз изменения с детализацией до реквизита.
44 Сияющий в темноте
 
13.08.19
09:45
ну,для строки важно содержимое,если оно поменялось,то не важно,это новая строка или старая,а если не поменялось,то не важно,где она,и сменила ли позицию,а даже могла быть удалена и снова создана.
выполняем при записи сравнение того,что было с тем,что стало,и различия пишем в регистр. сравнение,желательно,без учета номера строки.

вот и все.
45 ppa32
 
13.08.19
09:48
(44) Видимо, так и придется сделать.

Просто хотел избежать ситуации, когда в документе 100500 строк, первую удалили, вторая стала первой. В регистр запишется, что поменян каждый реквизит каждой строки %)
46 Cyberhawk
 
13.08.19
09:50
"хотел избежать ситуации, когда в документе 100500 строк, первую удалили, вторая стала первой" // А если поменяли какое-нибудь поле ключа строки?
47 Cyberhawk
 
13.08.19
09:51
Или ты хочешь чтоб ключ ("УИД") вобрал в себя все реквизиты ТЧ, кроме номера строки?
48 ppa32
 
14.08.19
04:17
(47) Нет. ГУИД будет рандомно генериться в момент записи документа для тех строк, у которых он не заполнен. Соответственно, у каждой строки он всегда будет уникален. В интерфейсе его, разумеется, нельзя будет поменять.
49 Garykom
 
гуру
14.08.19
04:29
На уровне БД 1С нет отдельных строк в ТЧ объектов, есть только целый объект с которым и манипулируем.
А то что этот объект имеет разные реквизиты и кроме то разные ТЧ в которых так же есть реквизиты это уже мелочи.

Короче приводи задачу к виду "отследить изменение объекта и любого его реквизита в т.ч. в любой строке ТЧ".
50 Garykom
 
гуру
14.08.19
04:32
Имхо нужная хеш-функция (которая правильно обрабатывает перестановку строк в ТЧ как надо), перед записью каждый раз считаем хеш, если не сошелся то пишем куда то различия до записи и после записи.
И пофиг на какие то гуид и общие реквизиты, строки по данным в ним сопоставляем при надобности старые и новые.
51 ppa32
 
14.08.19
05:01
(50) На счет хеша я думал уже, в принципе это может быть альтернативой, но тут вопрос в том, что каждый раз его пересчитывать будет достаточно затратно по ресурсам. А уже посчитанный его негде хранить...
52 ppa32
 
14.08.19
05:03
(50) Если только может быть в отдельный поток выпихивать всё это дело, чтобы все эти пересчёты хэшей работали в асинхронном режиме, и у пользователей не было тормозов при проведении документа...
53 kuzyara
 
14.08.19
06:32
54 ppa32
 
14.08.19
06:43
(53) Мне это ничем не поможет, так как при записи документа он полностью перезаписывает ТЧ. Соответственно, если строка, которая имеет, например, ИД=1, была удалена, то при записи документа после удаления строки ИД=1 присвоится какой - то другой строке, скорее всего той, которая до удаления первой строки имела ИД=2.
55 kuzyara
 
14.08.19
08:03
(54) >после удаления строки ИД=1 присвоится какой - то другой строке
вы про _LineNo а я про _KeyField
56 kuzyara
 
14.08.19
08:16
>при записи документа он полностью перезаписывает ТЧ
вы проверяли?
57 Cyberhawk
 
14.08.19
08:32
(48) Т.е. если пользователь скопировал строку и ничего в ней не изменил, а старую удалил из ТЧ, и пусть даже на тот же номер строки новая встала, что и у удаленной, то это будет считаться изменением ТЧ?
При загрузке данных, например, ТЧ перезаписывается целиком, даже если в ней ничего не поменялось. Такое себе версионирование у тебя выйдет...
58 kuzyara
 
14.08.19
08:56
59 ppa32
 
14.08.19
09:57
(58) Нечто похожее я начал делать. Но тут опять возвращаемся к тому, что необходим некий набор ключевых полей, то есть привязка к конкретной ТЧ. Например, у документа РеализацияТоваровУслуг есть колонка "Номенклатура", а у "СчетФактураВыданный" такой колонки нет. Причем если базы разные (БП, УТ, ЗУП), то и табличные части будут тоже разные. Соответственно, для каждой из них нужно будет задать набор ключевых столбцов. Гораздо проще тогда ГУИД в ТЧ добавить, и работать по единому механизму. А в некоторых документах ключевых столбцов в общем случае может и не быть: в платформе нигде нет проверки, чтобы в документе не было двух одинаковых строк.
60 JeHer
 
14.08.19
10:12
(27) >>>Достаточно запретить пользователю редактировать проведенный и проверенный бухгалтером документ. Этого оказалось достаточным. Кто последний записал тот и виноват.

Я тупо забацал в расширение: кто последний записал объект, тот и редиска. Тому, кто раздаёт штрафы, похрен, что "соседка Оля знает мой пароль или менеджеры подменяют друг друга".
61 ppa32
 
14.08.19
10:29
(55) Кейфилд меняется вместе с номером строки ))

Исходный документ:
https://ibb.co/0VzLS5m

Он же в SQL:
https://ibb.co/Z6yYV7J

Удалил строчку, где количество было 9 шт, сохранил:
https://ibb.co/Tb1f3sP

В скуле все номера строк и ИД поменялись (удаленная строка была под №3, теперь там другая):
https://ibb.co/XxB44j6
62 Вафель
 
14.08.19
10:32
а если строку удалят, а потом снова добавят?
как быть?
63 Мимохожий Однако
 
14.08.19
10:33
В некоторых типовых конфигурациях в табличных частях есть служебный реквизит КлючСтроки.
ИМХО, сохранять историю изменения табличной части практически тупиковый путь.
64 Demasiado
 
14.08.19
11:12
Я может где-то не увидел, но в последних платформах версионирование объектов из коробки есть. Насколько помню, РС тоже логируются
65 ppa32
 
15.08.19
01:56
(60) Это назначение виноватых ))
66 tesseract
 
15.08.19
01:59
(65) Это повышение личной отвественности.
67 ppa32
 
15.08.19
02:52
(66) Странный у тебя ник для 1Сника))
68 breezee
 
15.08.19
06:54
(0) ОФФ Вы же программист, а не заказчик, вы зарезать должны такие бредовые идеи, а не реализовывать их
69 тарам пам пам
 
15.08.19
09:21
(59) В первом приближении можно попробовать автоматически определять - считать измерениями все нечисловые поля, а все числовые - считать ресурсами.

Проблема с дублирующимися строками решается через дополнительное поле "количество строк". Т. е. рассчитываешь колонку "количество строк" и сворачиваешь таблицу по измерениям перед расчетом изменений. Дубли строк будут тогда видны одной строкой с "количество строк" > 1.

Еще вариант - считать вообще все поля измерениями, но тогда любое изменение при сравнении будет выглядеть как "удалили строку - добавили новую строку".

А дальше для сравнения таблиц использовать что-то из http://catalog.mista.ru/public/326983/

(68) Да идея-то не бредовая; просто не нужно слова заказчика воспринимать как техническое решение - заказчику нужно просто УВИДЕТЬ различия в таблицах, а для этого достаточно типовых решений с доработанной формой вывода различий. Ему по барабану, как оно будет храниться - это как раз задача программиста.