|   |   | 
| 
 | Связь между сервером и клиентом | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |