|   |   | 
| 
 | 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 | 
        Спасибо. Учту.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |