|
Связь между сервером и клиентом | ☑ | ||
---|---|---|---|---|
0
Arzu
17.07.13
✎
13:47
|
Есть документ с табличной частью. Перед удалением хочу все данные записать в Регистр сведений.
&НаКлиенте Процедура ВзаиморасчетыПередУдалением(Элемент, Отказ) ТекущаяСтрока = Элементы.Взаиморасчеты.ТекущиеДанные; Режим = РежимДиалогаВопрос.ОКОтмена; Текст = "-------"; Ответ = Вопрос(Текст, Режим, 0); Если Ответ = КодВозвратаДиалога.Отмена Тогда Отказ = Истина; Иначе ЗаписьУдаленныхСтрок(Объект.Номер); КонецЕсли; КонецПроцедуры &НаСервере Функция ЗаписьУдаленныхСтрок() МенеджерЗаписи = РегистрыСведений.УдаленныеСтрокиВзаиморасчетов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Организация = Документы.ВзаиморасчетыСКлиентами.НайтиПоРеквизиту(Объект.Номер); МенеджерЗаписи.ДеньМесяца = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.ДеньМесяца; МенеджерЗаписи.Контрагент = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Контрагент; МенеджерЗаписи.Цена = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Цена; МенеджерЗаписи.СуммаВрача = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.СуммаВрача; МенеджерЗаписи.Касса = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Касса; МенеджерЗаписи.Записать(); КонецФункции Подскажите пожалуйста как правильней? |
|||
1
Arzu
17.07.13
✎
13:47
|
Перед удалением строки имел ввиду
|
|||
2
1Сергей
17.07.13
✎
13:48
|
СуммаВрача - это сильно!
|
|||
3
kosts
17.07.13
✎
13:48
|
Записывать скорее всего нужно в "призаписи". Для чего это нужно, то?
|
|||
4
Maxus43
17.07.13
✎
13:49
|
зачем?
|
|||
5
Maxus43
17.07.13
✎
13:49
|
(2) ладно хоть не ПациентОрганы
|
|||
6
kosts
17.07.13
✎
13:51
|
Сделайте лучше отбор, что бы старые документы не маячили и ничего удалять не нужно.
|
|||
7
Arzu
17.07.13
✎
13:51
|
(3) Строки добавляются в течении месяца, вдруг если оператор случайно или намеренно удалил какую-то строку записать эту строку в регистр сведений, потом когда я смотрел знать что он удалил. Если все верно очищу эту строку из регистра сведений
|
|||
8
Arzu
17.07.13
✎
13:52
|
(6) один документ один месяц
|
|||
9
kosts
17.07.13
✎
13:55
|
(7) Как-то всё сложно.
|
|||
10
drcrasher
17.07.13
✎
13:56
|
кури передЗаписью()
|
|||
11
Maxus43
17.07.13
✎
13:58
|
Запросом, Передзаписью.
Вытаскиваешь различия между ТЧ ИБ и Объекта, пишешь разницу в регистр. Опираться на интерактивные действия юзера не надо |
|||
12
kosts
17.07.13
✎
14:03
|
Если документов вводится мало, то сделай в метаданных копию документа (версии). При каждой записи своего документа делай полную копию документа, т.е. новую версию. Сделать просто, в подписке можно.
Только в документе версии нужно будет отключить уникальность. Либо из БСП версионирование подтянуть... |
|||
13
Maxus43
17.07.13
✎
14:04
|
(12) тут надо для анализа это, а анализировать версионирование неблагодарное дело...
|
|||
14
1Сергей
17.07.13
✎
14:07
|
У строки табличной части нет собственной ссылки
|
|||
15
hhhh
17.07.13
✎
14:18
|
(7) вот это - очень странная строка.
Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.ДеньМесяца похоже не 1совская. Откуда-то вклинилась. |
|||
16
Arzu
17.07.13
✎
14:23
|
Вообще-то мне нужно в этой процедуре
&НаКлиенте Процедура ВзаиморасчетыПередУдалением(Элемент, Отказ) ТекущаяСтрока = Элементы.Взаиморасчеты.ТекущиеДанные; Режим = РежимДиалогаВопрос.ОКОтмена; Текст = "-------"; Ответ = Вопрос(Текст, Режим, 0); Если Ответ = КодВозвратаДиалога.Отмена Тогда Отказ = Истина; Иначе // При нажатии ок записать эту строку в Регистр сведений. В тонком клиенте не получается, надо операцию выполнить на сервере и как-то передать сюда. Как это сделать? КонецЕсли; КонецПроцедуры |
|||
17
Maxus43
17.07.13
✎
14:25
|
(16) а если юзер из ТЧ удалит, потом передумает и не запишет документ? Не надо ориентироваться на его действия
|
|||
18
1Сергей
17.07.13
✎
14:44
|
вообще, вот этот кусок накладывает отпечаток на сознание:
МенеджерЗаписи.Организация = Документы.ВзаиморасчетыСКлиентами.НайтиПоРеквизиту(Объект.Номер); МенеджерЗаписи.ДеньМесяца = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.ДеньМесяца; МенеджерЗаписи.Контрагент = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Контрагент; МенеджерЗаписи.Цена = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Цена; МенеджерЗаписи.СуммаВрача = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.СуммаВрача; МенеджерЗаписи.Касса = Документы.ВзаиморасчетыСКлиентами.Взаиморасчеты.Касса; |
|||
19
Arzu
17.07.13
✎
14:49
|
(17) Дело в том что на кнопку удалить есть процедура которая выдает диалоговое окно Ок или Отмена, если отмена то возврат, если Ок то сразу идет запись в регистр сведений. Т.е. нет необходимости записывать документ.
|
|||
20
Maxus43
17.07.13
✎
14:53
|
(19) я не к тому, а к тому что если юзер не запишет документ - то по факту документ старый со всеми записями, и в регистре тоже запись
|
|||
21
Arzu
17.07.13
✎
15:01
|
(20) А если после записи в регистр вызову запись самого документа?
|
|||
22
Maxus43
17.07.13
✎
15:06
|
(21) а если пользователь не туда нажал и документ записывать не хотел?) это просто непривычное поведение документа, и лучше не надо имхо
|
|||
23
kosts
17.07.13
✎
15:09
|
(21) Я все же за версионирование. Что будет, если сотр возьмет и каждую ячейку строки изменит - вроде строку не удаляли, а вот не стало данных...
|
|||
24
Arzu
17.07.13
✎
15:10
|
(22) Понятно. Спасибо за внимание.
|
|||
25
Arzu
17.07.13
✎
15:11
|
(23) Надо бы посмотреть как устроен механизм версионирования.
|
|||
26
kosts
17.07.13
✎
15:13
|
(25) Можно по простому - просто копия документа.
|
|||
27
kosts
17.07.13
✎
15:17
|
Если строк в документе сильно много, то можно дополнительно скрытый реквизит в ТЧ завести, так сказать ИД, что бы можно было автоанализ делать - какие строки удалены, какие изменены, какие исправлены...
|
|||
28
Arzu
17.07.13
✎
15:24
|
А как мне запретить удаления оператору? Делаю так
&НаКлиенте Процедура ВзаиморасчетыПередУдалением(Элемент, Отказ) Если РольДоступна("Оператор") Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры В тонком клиенте не идет, как из сервера передать? |
|||
29
kosts
17.07.13
✎
15:28
|
(28) Вызвать серверную функцию, там проверить, назад вернуть отказ или нет.
|
|||
30
Arzu
17.07.13
✎
15:30
|
(29) Это-то я знаю, а вот как реализовать, вот в чем вопрос)
|
|||
31
AaNnDdRrEeYy
17.07.13
✎
15:52
|
(30) реализовать так:
1. написать функция серверную &НаСервере РольДоступнаСервер() 2. вернуть значение Возврат РольДоступна("Оператор"); |
|||
32
Arzu
17.07.13
✎
16:09
|
(31)
&НаСервере Функция ПроверкаДоступа() Если РольДоступна("Оператор") Тогда Отказ = Истина; КонецЕсли; Возврат РольДоступна("Оператор"); КонецФункции &НаКлиенте Процедура ВзаиморасчетыПередУдалением(Элемент, Отказ) ПроверкаДоступа(); КонецПроцедуры |
|||
33
Arzu
17.07.13
✎
16:15
|
Замучился не знаю
|
|||
34
НЕА123
17.07.13
✎
16:18
|
&НаСервере
Функция ПроверкаДоступа() Возврат РольДоступна("Оператор"); КонецФункции &НаКлиенте Процедура ВзаиморасчетыПередУдалением(Элемент, Отказ) Отказ = ПроверкаДоступа(); КонецПроцедуры |
|||
35
Жан Пердежон
17.07.13
✎
16:21
|
+1 к версионированию
|
|||
36
Arzu
17.07.13
✎
16:22
|
&НаСервере
Функция ПроверкаРоли() Оператор = РольДоступна("Оператор"); Возврат Оператор; КонецФункции ///////////////////////////// Оператор = ПроверкаРоли(); Если Оператор Тогда Отказ = Истина; КонецЕсли; Работает! |
|||
37
EvgeniuXP
17.07.13
✎
16:23
|
(36) код надо проще писать :)
|
|||
38
Arzu
17.07.13
✎
16:23
|
(34) Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |