![]() |
|
Корректное отображение табличной части реквизита. Как организовать? ↓ (Волшебник 17.10.2025 20:09) Доминошник, nick86, Beduin, Мультук, Garykom, spiller26, Eiffil123, takefive, dmt, АгентБезопаснойНацио, vicof, ReaLg, vis, maxab72, SleepyHead, Fish, d4rkmesa, Way, zenik, Amra, Kapusha, Gennady, arsik, Hawk_1c, Demeteri, RomanYS, Bad_Aleks, okmail, Ногаминебить, Elf_80_lvl, Ненавижу 1С, МаленькийВопросик, JohnGilbert, AlexKimp, Александр111, bolder, Homer, DiMel_77, kkkanjji, Prog_man, privetik, mgreat, Timon1405, 2S, Волшебник, Ёпрст
| ☑ | ||
---|---|---|---|---|
0
Beduin
17.10.25
✎
07:17
|
Что-то не то делаю похоже.
Проблема простая. Есть 2 справочника. К примеру Справочник1 и Справочник2 В Справочник1 есть табличная часть с произвольными данными. Ну пусть будет также Реквизит1 и Реквизит2, строковые. В Справочник2 есть реквизит "ТестРеквизит" со ссылкой на Справочник1. В Справочник2 я на форму добавил табличную часть из реквизита Справочник1. Справочник 1, программно изменяется в части табличной части по кнопке из Справочника2. Проблема. Данные на форме Справочник2 по табличной части Справочник1 не обновляются даже после переоткрытия формы. Методы Прочитать() и Обновить() у элемента или формы также не помогают. Только полный перезапуск программы. При этом если добавить записи в табличную часть Справочник1 через обычное редактирование, то на форме Справочник2 все отобразится. Упустил какую-то базовую вещь, поясните чтобы понял. Без закидывания тапками. |
|||
1
Маленький Вопросик
17.10.25
✎
07:38
|
Чето много появляется вопросов тех характера от юзеров со стажем от 15-17 лет….. на форуме
Время просиживания штанов прошло? Пытаетесь доказать свою профпригодность? А по вопросу - табличная часть - это часть записи реквизитов… Используй динамический список! |
|||
2
Beduin
17.10.25
✎
07:44
|
(1) Тапок все равно прилетел)
Я знаю, что динамический список нужно. Почему именно я не могу через ОповеститьОбИзменении сделать? |
|||
3
Garykom
гуру
17.10.25
✎
07:46
|
(1) Их просто выгнали с их синекуры
Приходится начинать работать... |
|||
4
Маленький Вопросик
17.10.25
✎
07:47
|
Сделай обработку оповещения на клиенте… но даже вопрос задан не правильно «отображение табличной части реквизита»
Что за зверь??? Напиши простыми словами, что нужно - без привязки к коду? |
|||
5
Beduin
17.10.25
✎
07:48
|
(4) Отобразить табличную часть реквизита другого объекта.
Почему для этого нужно динамический список использовать? |
|||
6
Маленький Вопросик
17.10.25
✎
07:52
|
Тебе в «реальном времени» ? - оповещение тогда, чтобы считывал без «событий»
|
|||
7
Beduin
17.10.25
✎
07:55
|
(6) ОповеститьОбИзменении и потом прочитать на форме. Это работает.
Я просто концепцию этих событий не понимаю. В джавах я расслыю сообщения и потом отлавливаю там, где это необходимо. |
|||
8
Garykom
гуру
17.10.25
✎
07:55
|
Телепатирую... Вероятно речь идет об использовании "ОповеститьОбИзменении"
|
|||
9
Garykom
гуру
17.10.25
✎
07:56
|
(7) Ну вот, теперь осталось только правильные параметры передать внутрь ОповеститьОбИзменении
|
|||
10
Beduin
17.10.25
✎
07:58
|
(9) Там один параметр всего, с двумя разными типами.
|
|||
11
Garykom
гуру
17.10.25
✎
07:59
|
Хотя если ты из формы Справочник2 программно меняешь (записываешь) Справочник1
И хочешь чтобы сразу онлайн на форме обновилось Ну логично что нужен промежуток/пауза между вызовами .Записать и ОповеститьОбИзменении Например через ПодключитьОбработчикОжидания |
|||
12
Маленький Вопросик
17.10.25
✎
08:00
|
(10) у меня нет примеров с обработчиком ожидания... почему-то...
|
|||
13
Beduin
17.10.25
✎
08:01
|
(11) Вот. Тоесть я должен организовать цикл, который будет в определенное время выполнять действия. Это не событийная модель.
|
|||
14
Garykom
гуру
17.10.25
✎
08:01
|
(12) Просто правильная архитектура и алгоритмы
Без лишнего изврата К сожалению не всегда получается красиво и приходится костылить |
|||
15
Garykom
гуру
17.10.25
✎
08:04
|
(13) Не обязательно
|
|||
16
Маленький Вопросик
17.10.25
✎
08:05
|
нет, ну реально стало много таких "пациентов" с большим стажем просиживания штанов... посмотрите темы форума)))))
|
|||
17
Garykom
гуру
17.10.25
✎
08:07
|
(16) Аналогично было с 77, после отказа и переход на 8-ку
Сча походу волна перехода с ОФ на сложный УФ с клиент-сервером и отказом от модальности и синхронности |
|||
18
Beduin
17.10.25
✎
08:10
|
(16) Как итог. Спросил на форуме про 1С, базовую вещь. Вопрос больше теоретический на поговорить о модели.
1.Напомнили про стаж 2.Назвали пациентом 3.Отправили штудировать форум. |
|||
19
Ненавижу 1С
гуру
17.10.25
✎
08:09
|
"Справочник 1, программно изменяется в части табличной части по кнопке из Справочника2." Вот здесь и кроется проблема архитектуры
|
|||
20
Маленький Вопросик
17.10.25
✎
08:10
|
(17) сейчас, скорее всего, фирмы экономят на услугах франчей, если держат своих 1с-ников.... и задачи перекидывают на них... ну и невольно видим результат этих решений
|
|||
21
Маленький Вопросик
17.10.25
✎
08:11
|
(18) тебе дали ответ в (1) и (8)
|
|||
22
Мультук
гуру
17.10.25
✎
08:29
|
(0)
Так ? Тогда всё работает и обновляет "прямо сразу" &НаСервере Процедура ДобавитьСтрокуВСправочник1НаСервере() если ЗначениеЗаполнено(Объект.Справочник1) Тогда об = Объект.Справочник1.ПолучитьОбъект(); НоваяСтрока = об.ТабличнаяЧасть1.Добавить(); НоваяСтрока.ДатаВремя = ТекущаяДата(); об.Записать(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДобавитьСтрокуВСправочник1(Команда) ДобавитьСтрокуВСправочник1НаСервере(); ОповеститьОбИзменении(Объект.Справочник1); КонецПроцедуры (4) "Табличная часть реквизита" см рис 1, 2
|
|||
23
Beduin
17.10.25
✎
08:36
|
(22) Да, все так. А в случае динамического списка с произвольным запросом его отдельно надо обновить.
|
|||
24
Маленький Вопросик
17.10.25
✎
08:36
|
(22) а может так:
ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъекта(Источник.Ссылка) |
|||
25
Ненавижу 1С
гуру
17.10.25
✎
08:41
|
(20) можно подумать все франчи это эталон качества кода и архитектуры
|
|||
26
spiller26
17.10.25
✎
08:52
|
(23) Элементы.ТвойДинамСписок.Обновить();
на клиенте если что. Примерно так... //в модуле формы со списком ... ... ... &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ОбновитьДС" Тогда Элементы.Список.Обновить(); КонецЕсли; .... КонецПроцедуры //оповещение из другого клиентского модуля, где происходит запись или изменения &НаКлиенте Процедура ОбработатьЗадачу() ..... ..... ..... Оповестить("ОбновитьДС"); .... КонецПроцедуры |
|||
27
Garykom
гуру
17.10.25
✎
09:06
|
(23) А у твоего ДС основная таблица задана?
|
|||
28
Мультук
гуру
17.10.25
✎
09:16
|
(23)
Извини бро, в (0) была беда-печаль Я написал код, который показывает что ни беды, ни печали нет. Теперь вы решили играть в ДС. Зачем ? Если и так всё работает. Но тут же уже сами. |
|||
29
Beduin
17.10.25
✎
09:19
|
(28) Все норм. Спасибо. Здесь тема больше рассуждения.
|
|||
30
Beduin
17.10.25
✎
09:26
|
(27)
ВЫБРАТЬ НоменклатураТабличнаяЧасть1.НомерСтроки КАК НомерСтроки, НоменклатураТабличнаяЧасть1.Реквизит1 КАК Реквизит1, НоменклатураТабличнаяЧасть1.Реквизит2 КАК Реквизит2 ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ТабличнаяЧасть1 КАК НоменклатураТабличнаяЧасть1 ПО Номенклатура.Ссылка = НоменклатураТабличнаяЧасть1.Ссылка ГДЕ Номенклатура.Ссылка = &СсылкаПар Основную табличку если указать Справочник.Номенклатура то ругается. На дублирование полей ссылка |
|||
31
Ёпрст
гуру
17.10.25
✎
09:29
|
(30) ясен пень, при левом соединении то с табличной частью..
|
|||
32
Garykom
гуру
17.10.25
✎
09:48
|
(30) Ты походу и в запросах не очень
Ну изврат же В данном случае никакого смысла от левого соединения нет Еще и лишние строки с null получишь для пустых ТЧ |
|||
33
Beduin
17.10.25
✎
11:20
|
(31)(32) Это пример запроса был, чтобы таб.часть в динамический список воткнуть. Переверните соединение наоборот и null не будет. Проблема как указать табчасть в динамическом списке и чтобы основная таблица была спр.номенклатура.
Давайте свое решение. |
|||
34
Мультук
гуру
17.10.25
✎
11:25
|
(33)
Не дадим (с) |
|||
35
Garykom
гуру
17.10.25
✎
11:36
|
(33) внутреннее сделать вместо левого
у тебя всегда если есть строка в ТЧ - значит есть и элемент справочника и вероятно нафик не нужны только элементы справочника без строк ТЧ |
|||
36
Beduin
17.10.25
✎
11:49
|
(35) А теперь этот запрос с указаним основной таблицей, попробуй использовать в динамическом списке
|
|||
37
Garykom
гуру
17.10.25
✎
12:46
|
(36) Ну да ибо в ДС строки связанные с основной таблицей должны быть уникальны
|
|||
38
Garykom
гуру
17.10.25
✎
12:48
|
Так что если ДС с произвольным запросом без основной таблицы то (26)
|
|||
39
Beduin
17.10.25
✎
12:49
|
(37) Тогда про что ты в (27) спрашивал?
|
|||
40
Garykom
гуру
17.10.25
✎
12:57
|
(39) Уточнял
Ибо ОповеститьОбИзменении работает только если задана основная таблица Согласен что в случае ДС с произвольным запросом к ТЧ засада выходит Или дергать/обновлять по таймауту через обработку ожидания Или размещать на форме второй ДС привязанный к справочнику через основную таблицу И у него использовать обработчик ПриПолученииДанныхНаСервере(), из которого делать Элементы.Список.Обновить() Хз можно ли его сделать невидимым и будет ли работать обработчик |
|||
41
Garykom
гуру
17.10.25
✎
12:59
|
(40)+ Т.е. изменение элемента справочника вызывает обновление одного ДС, а его обработчик обновляет нужный тебе ДС
Но по таймауту надежней, ибо изменить ТЧ может другой пользователь в другом сеансе же |
|||
42
Мультук
гуру
17.10.25
✎
13:35
|
Если таб.часть маленькая, то ДС не нужен.
Можно примитивно читать в таблицу значений или (22) Если таб.часть большая (от тысяч строк), то наверное лучше сразу делать РС. Но опять таки нам неизвестно, что за |
|||
43
Fish
гуру
17.10.25
✎
13:41
|
(19) +100500. Не нужно так делать.
|
|||
44
Beduin
17.10.25
✎
13:46
|
(43) А что необычного? Программно поменяли данные, из любого места возможно. И на форме нужно эти данные обновить.
|
|||
45
Garykom
гуру
17.10.25
✎
14:25
|
(44) Архитектура кривая
Обычно делают отдельную обработку аля АРМ |
|||
46
Eiffil123
17.10.25
✎
14:38
|
(45) ну какая разница, обработка поменяет данные, все равно они не перерисуются в форме справочника 2. Изначальная проблема же в этом
|
|||
47
Garykom
гуру
17.10.25
✎
14:46
|
(46) Форму переоткроет и перерисуются
|
|||
48
maxab72
17.10.25
✎
14:51
|
(47) это не интересно... надо добавить план обмена, с подчиненными узлами для каждого пользователя системы. В план обмена будем писать те объекты конфигурации, которые кто-то изменил, и которые должны обновляться автоматически. И у каждого пользователя запустить периодическую проверку. Если форма измененного объекта открыта у текущего пользователя, обновляем ее, и все записи об изменениях в объектах очищаем.
|
|||
49
АгентБезопасной Нацио
17.10.25
✎
15:05
|
(48) >>все записи об изменениях в объектах очищаем
а приоритеты? :-) |
|||
50
Eiffil123
17.10.25
✎
15:05
|
(48) зачем план обмена. давайте регистры расчета лучше
|
|||
51
Beduin
17.10.25
✎
15:05
|
(47) Если сделать оповеститьобизменении для таблицы или обновить для динамического списка.
А так при открытии/закрытии формы не обновляются данные. Если программно менять. |
|||
52
АгентБезопасной Нацио
17.10.25
✎
15:07
|
(50) Правильно! С вытеснением!
|
|||
53
maxab72
17.10.25
✎
15:09
|
(49) приоритеты - это первоочередное!
(50) это слишком тривиально. задача для бизграматных нубов. |
|||
54
Eiffil123
17.10.25
✎
15:28
|
(51) проведите на копии базы эксперимент: при записи справочника 1 из спр.2 меняйте не только табчасть, но и наименование (например точку добавьте). Проверьте, обновиться ли при этом табличная часть на форме спр.2 или также не будет обновляться?
|
|||
55
Beduin
17.10.25
✎
15:36
|
(54) Также не обновляется.
|
|||
56
takefive
17.10.25
✎
16:04
|
&НаСервере
Процедура Команда1НаСервере() ТекущееВремя = Прав(СокрЛП(ТекущаяДата()), 8); СпрОбъект = Объект.ТестРеквизит.ПолучитьОбъект(); СпрОбъект.Наименование = ТекущееВремя; СпрОбъект.ТабличнаяЧасть1[0].Реквизит1 = ТекущееВремя; СпрОбъект.Записать(); КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); ОповеститьОбИзменении(Объект.ТестРеквизит); ЭтаФорма.ОбновитьОтображениеДанных(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |