Имя: Пароль:
1C
1С v8
Запись данных из документа в справочник
0 VSpicy
 
16.05.23
11:42
Всем доброго дня!
Есть документ "ПланРаботыТС" с табличной частью: Транспортное средство - (справочник "ТС"), Водитель (справочник "Сотрудники"), Телефон (строка).
Есть справочник "ТС" с формой заполнения: НаименованиеТС (строка), Модель (справочник "МоделиТС"), ГосНомер (строка), Телефон (строка) и т.п.
Задача: Нужно при закрытии документа "ПланРаботыТС" записывать в справочник "ТС" в поле "Телефон", все изменённые телефоны из табличной части документа "ПланРаботыТС".

Подскажите пожалуйста каким образом лучше осуществить данную задачу, чтоб при закрытии документа запись в справочник была как можно быстрой, т.к. парк автомобилей порядка 1500 шт.?
Заранее благодарен за ответы!!!
1 Волшебник
 
16.05.23
11:42
Вам не нужно этого делать. Это плохая архитектура, которую надо менять.
2 OldCondom
 
16.05.23
11:43
В типовых смотрите регистры сведений "Адреса контрагентов" и прочее
3 vicof
 
16.05.23
11:45
(1) +1
4 VSpicy
 
16.05.23
11:46
(1) Согласен, в идеале телефоны нужно записывать и редактировать в справочнике "ТС", а уже в документе "ПланРаботыТС" их отображать...
Но вот руководство хочет иначе)
5 Мультук
 
16.05.23
11:49
(1) +1

Но

1) Что мешает выбрать запросом из таб.части только измененные телефоны и записывать только их ?
2) У вас машины делают несколько рейсов в день ?
Если нет -- то ночью запускаем регламентное, которое неспеша обновляет телефоны

или

Создаем регистрСведений "ДокументыПланРаботыТС_ДляОбновленияТелефонов", при проведении добавляем туда ссылку на документ
Регламентное работает по этому регистру раз в n-минут
6 YFedor
 
16.05.23
11:50
(0) А если при закрытии документа один из элементов справочника ТС открыт для редактирования, то что нужно делать в этом случае?
7 OldCondom
 
16.05.23
11:55
(6) писать в журнал, каждые 10 минут его обходить и пытаться снова, так до 3 раз.
Я такое видел...
8 VSpicy
 
16.05.23
11:56
Делал такой вариант, работает, но запись происходит 25-30 сек.
&НаСервере
Процедура ЗаписатьТелефонНаСервере(ПарамТС, ПарамТелефон)
    СпрТС = Справочники.ТС.НайтиПоНаименованию(ПарамТС).Ссылка.ПолучитьОбъект();
    СпрТС.Телефон = ПарамТелефон;
    Попытка
        СпрТС.Записать();
    Исключение
        Сообщить("Не удалось записать!");
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьТелефон(Команда)
    Для Каждого ТекСтрока Из Объект.ПланТС Цикл
        ЗаписатьТелефонНаСервере(ТекСтрока.НаименованиеТС, ТекСтрока.Телефон);
КонецЦикла;
Сообщить("Телефон записан в справочник - ТС!");
КонецПроцедуры
9 АНДР
 
16.05.23
12:00
СпрТС = Справочники.ТС.НайтиПоНаименованию(ПарамТС).Ссылка.ПолучитьОбъект(); - Это 5!
10 VSpicy
 
16.05.23
12:02
(5) Рейсы могут быть как разовые, так и несколько раз в сутки.
Я кстати тоже задумался о Регистре сведений.
11 VSpicy
 
16.05.23
12:03
(6) Вопрос конечно интересный, но скорее всего с этим не будет проблем, т.к. справочником пользуются крайне редко.
12 АНДР
 
16.05.23
12:05
(10) Передавай на сервер массив ссылок на ТС и Телефоны. При заполнении формы желательно (будет медленно работать в процессе заполнения, но не будет пиковой нагрузки при записи) иметь признак изменения номера телефона.
13 Мультук
 
16.05.23
12:09
(8)
В данном случае таки есть разница между

&НаСервере

и  

&НаСервереБезКонтекста

P.S.
В остальном: Беда-печаль-огорчение (с)
14 VSpicy
 
16.05.23
12:12
(13) Интересно в чём?
15 VSpicy
 
16.05.23
12:14
(14) Чуть быстрее будет, т.к. исключаем обращение к форме...
16 Мультук
 
16.05.23
12:29
(15)

Почему бы:
1) Делать всё это где-нибудь в  "ПослеЗаписиНаСервере" (например)
Все данные уже на сервере, никуда ходить на надо.

2)

тз = Объект.ПланТС.Выгрузить();

Далее пишем запрос
а) засовываем туда тз, делаем соединение со справочником по  НаименованиеТС, модельТС  (вам виднее)
Делаем отбор, что телефон в справочнике <> телефон в тз

Дальше выборка и в цикле по выборке

СпрТС = выборка.Ссылка.ПолучитьОбъект();
СпрТС.Телефон = ПарамТелефон;
СпрТС.Записать();


P.S.

Будет веселуха, если кто-нибудь перепроведет документ за 2020 год и обновит все телефоны.
Вот операторы рады будут.
17 VSpicy
 
16.05.23
12:46
(16) Спасибо за отличный вариант, можно будет реализовать...
P.S. Не будет) т.к. запрет на изменение документов в закрытом периоде.
18 Волшебник
 
16.05.23
13:05
(17) Вы не обратили внимание на пункт "веселуха"
19 Волшебник
 
16.05.23
13:06
(17) Все Ваши "запреты" обходятся с помощью Загрузка = Истина или простой сменой даты запрета
20 Злопчинский
 
16.05.23
13:30
Правильно написано в (1). У ТС - нет телефона. Телефон - это параметр сделки-рейса с использованием этого ТС.
Соответственно, чтобы получать актуальные телефоны (например), надо работать не со справочником ТС, а (условно) с регистром "незакрытые рейсы".
21 VSpicy
 
16.05.23
14:35
(19) У нас хакеров нет)
22 Волшебник
 
16.05.23
14:36
(21) А есть дураки?
23 VSpicy
 
16.05.23
14:51
(22) Где их только нет...
24 Волшебник
 
16.05.23
14:53
(23) При Вашей архитектуре найдётся дурак, который проведёт вчерашний документ. Телефон в справочнике будет переписан. Потом другой дурак проведёт сегодняшний документ. Телефон опять будет переписан. Так и будете выяснять, какой дурак был последним.
25 KJlag
 
16.05.23
15:10
(24) если им уж настооолько нужен этот подход (хз зачем), тогда можно сравнивать перед записью таблицы в объекте и в ссылке (если объект не новый). и работать только с измененными.
26 VSpicy
 
16.05.23
15:10
(24) Это всё понятно, руководство не всегда прислушивается к рекомендациям IT.
Хотя можно конечно эту задачу выполнить иначе, учитывая их пожелания и предусмотреть вышеуказанные нюансы.
В любом случае спасибо за предостережения!
27 Волшебник
 
16.05.23
15:15
(26) Если руководство скажет прыгать с крыши, Вы прыгнете? Заведите промежуточный регистр сведений. Не пишите в справочник при проведении документов.
28 VSpicy
 
16.05.23
15:29
(27)Короче с этим вопросом всё ясно! Спасибо! Совместно с регистром сведений и будет сделано...
29 Мимохожий Однако
 
16.05.23
15:31
(26) Назови регистр сведений"Справочник ТС" и пусть куроводство радуется.
30 mikecool
 
16.05.23
17:05
(28) наймите архитектора, чтобы грамотно структуру продумывал, и РП, чтобы руководство ставил на место
31 VSpicy
 
16.05.23
20:56
(30) Хорошая идея)
Программист всегда исправляет последнюю ошибку.