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