| 
    
            
         
         | 
    
    
  | 
v7: Можно ли записать документ, переданный по ссылке... | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        warkan    
     05.03.12 
            ✎
    10:02 
 | 
         
        День добрый!
  
        Задача: сделать процедуру-Экспорт в ГлМодуле, которая будет рассчитывать данные документа и сохранять этот документ с измененными значениями. И чтобы её можно было использовать и в модуле формы этого документа, и в обработке группового проведения таких документов. Т.е., создаём процедуру в глобальном модуле: Процедура ЗасчетДокумента(Док) Экспорт Док.Зарплата = Док.Часы * Док.Сотрудник.Тариф; // Зарплата, Часы, Сотрудник - поля документа "Док" ... //* можно ли в теле этой процедуры созранить изменения в переданном ей, как параметр, документе "Док"? Как? Док.Записать(); не работает :( КонецПроцедуры //* Можно конечно результат расчетов возвращать как набор параметров, а потом присваивать их текущему документу и потом его сохранять.  | 
|||
| 
    1
    
        Rie    
     05.03.12 
            ✎
    10:04 
 | 
         
        (0)
  
        Документ = СоздатьОбъект("Документ."+Док.Вид()); Документ.НайтиДокумент(Док); // и делай с ним что хошь Документ.Записать();  | 
|||
| 
    2
    
        xXeNoNx    
     05.03.12 
            ✎
    10:04 
 | 
         
        Найти документ сначала... НЕ?     
         | 
|||
| 
    3
    
        warkan    
     05.03.12 
            ✎
    10:05 
 | 
         
        А более развёрнуто? Для непосвященных...     
         | 
|||
| 
    4
    
        warkan    
     05.03.12 
            ✎
    10:06 
 | 
         
        Аааааа!!!!!!! :)))))))))))) Вабэни! Шеф, Вы - ГЕНИЙ!!!     
         | 
|||
| 
    5
    
        warkan    
     05.03.12 
            ✎
    10:06 
 | 
         
        спасибо! :)     
         | 
|||
| 
    6
    
        warkan    
     05.03.12 
            ✎
    10:07 
 | 
         
        Тогда попутный - А оно даст записать открытый документ? Если вызвать процедуру ГлМода из модуля формы этого же документа?     
         | 
|||
| 
    8
    
        Rie    
     05.03.12 
            ✎
    10:26 
 | 
         
        (6) Нет.     
         | 
|||
| 
    9
    
        Rie    
     05.03.12 
            ✎
    10:37 
 | 
         
        +(8) Но можно передать ей контекст формы документа.
  
        Можно даже снабдить дополнительным параметром, в зависимости от которого либо СоздатьОбъект и НайтиДокумент - либо в переданном контексте записывать.  | 
|||
| 
    10
    
        warkan    
     05.03.12 
            ✎
    10:42 
 | 
         
        Контекст формы документа и так передаётся. 
  
        Не может выполнить: Конт.НайтиДокумент(ТекДок) То есть не может найти документ ,который на данный момент открыть интерактивно и из его модуля формы вызывается процедура ГлМода с параметром "Контекст", в которой и выполняется Конт.НайтиДокумент(ТекДок) (Пытается выполняться :) )  | 
|||
| 
    11
    
        viktor_vv    
     05.03.12 
            ✎
    10:45 
 | 
         
        (10) Так ты в контекст сразу и пиши.
  
        Конт.Зарплата = Конт.Часы * Конт.Сотрудник.Тариф;  | 
|||
| 
    12
    
        warkan    
     05.03.12 
            ✎
    10:54 
 | 
         
        То есть, проверять, что есть переданный параметр? Если "Контекст" - продолжить работу и писать в контекст: 
  
        Процедура РасчетЗарплаты(Конт) Конт.Зарплата = Конт.Часы * Конт.Сотрудник.Тариф; ... А если Конт.ТипЗначения() = 12 // документ Ищем его ТекДок = СоздатьОбъект("Документ.РасчетЗарплаты"); Тек.Док.НайтиДокумент(Конт); ...и уже после этого считаем всё дальше, как обычно. Так?  | 
|||
| 
    13
    
        warkan    
     05.03.12 
            ✎
    10:58 
 | 
         
        *ТипЗначения(Конт) = 12     
         | 
|||
| 
    14
    
        Rie    
     05.03.12 
            ✎
    11:23 
 | 
         
        (12) Проверять - оно конечно... Но, IMHO, лучше явно укажи.
  
        Поскольку возможно док = СоздатьОбъект("Документ.ЧегоТоТам"); док.НайтиПоНомеру("12345",РабочаяДата()); ТвояПроцедура(док); то есть, передан не контекст формы - но писать всё равно можно.  | 
|||
| 
    15
    
        Rie    
     05.03.12 
            ✎
    11:25 
 | 
         
        (13) 12 - это документ. Который может быть разным - или ссылкой, поля которой изменять нельзя, или объектом (созданным по СоздатьОбъект, к примеру), поля которого можно менять.     
         | 
|||
| 
    16
    
        warkan    
     05.03.12 
            ✎
    11:35 
 | 
         
        Я понял. Спасибо всем большое!!!
  
        Всё получилось лучшим образом (А я хотел со списком значений заморачиваться...) Спасибо за науку.  | 
|||
| 
    17
    
        warkan    
     05.03.12 
            ✎
    11:35 
 | 
         
        Процедура Зарплата_докПутЛистАвто(Конт, Записывать=1, Проводить=0) Экспорт
  
        Если ТипЗначения(Конт) = 12 Тогда ТекДок = Конт; Конт = СоздатьОбъект("Документ.ПутевойЛистАвтомобиля"); Если Конт.НайтиДокумент(ТекДок) = 0 Тогда Сообщить("Позиционирование на "+ТекДок+" не произведено!","!"); Возврат; КонецЕсли; КонецЕсли; ...  | 
|||
| 
    18
    
        Анатоль    
     05.03.12 
            ✎
    11:42 
 | 
         
        (17) не сказал бы я что это лучшим образом
  
        Процедура Зарплата_докПутЛистАвто(Конт, Записывать=1, Проводить=0) Экспорт Если ТипЗначения(Конт) = 12 Тогда Если ТипЗначенияСтр(Конт) <> "ГрупповойКонтекст" Тогда ТекДок = Конт; Конт = СоздатьОбъект("Документ.ПутевойЛистАвтомобиля"); Если Конт.НайтиДокумент(ТекДок) = 0 Тогда Сообщить("Позиционирование на "+ТекДок+" не произведено!","!"); Возврат; КонецЕсли; КонецЕсли; КонецЕсли;  | 
|||
| 
    19
    
        warkan    
     05.03.12 
            ✎
    14:51 
 | 
         
        Спасибо. Учту.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |