Имя: Пароль:
1C
1C 7.7
v7: Редактирование документа из формы другого документа
,
0 jah1111
 
22.09.21
14:46
Здравствуйте, форумчане!
появилась необходимость открывать документ в форме другого документа. но не только открывать, но и редактировать и сохранять, и проводить.
подробности: еть конфигурация,в которой есть расходные накладные  двух типов: "Расходная накладная" (обычна форма для ПК) и "РасходТач" (адаптированная для планшета форма, все под тач интерфейс).  Так вот задача открывать и редактировать обычные накладные на планшете в шкуре накладных для тач-экранов.
С открытием проблем не возникло,а вот записью начались.
посмотрите что делаю не так:

перем Документ;
//**********************************************************************
Процедура ПриОткрытии()

//.......
    Если ПустоеЗначение(Форма.Параметр)=0 Тогда
        
             команда = форма.параметр.получить("Команда");  
         Документ = Форма.Параметр.Получить("Контекст"); // контекст получаем из общего журнала

    КонецЕсли;

//.....

//********************************************************
Процедура ПриЗаписи()
  Если Команда = "трансф" Тогда // команда, котороя отвечает за открытие документа в "чужой" шкуре
    док = создатьобъект("Документ.РасходТочка");
    док = Документ.ТекущийДокумент;
    
       док.датаДок = датаДок;
       док.НомерДок = НомерДок;
       док.клиент = клиент;
       док.склад  = склад;
       док.касса = касса;
       док.авто = авто;
       док.оплачено = оплачено;
       док.сумаопл = сумаопл;
       док.Записать();             // сдесь ошибка  - Не выбран документ!
       док.Провести();
КонецЕсли;
1 Mikeware
 
22.09.21
14:50
док = создатьобъект("Документ.РасходТочка");
    док = Документ.ТекущийДокумент;

???????
2 jah1111
 
22.09.21
14:53
(1) получаю из контекста журнала документ который хочу редактировать.... Если нельзя так, скажите как правильно, я новичек. в Отладчике значение переменной Док совпадает с нужным документом......
3 Lazy Stranger
 
22.09.21
15:00
док.НайтиДокумент(Документ)
4 Lazy Stranger
 
22.09.21
15:02
или док.НайтиДокумент(Документ.ТекущийДокумент)
5 серый КТУЛХУ
 
22.09.21
15:08
док = создатьобъект("Документ.РасходТочка");
//док = Документ.ТекущийДокумент; // херня какая-то
док.НайтиДокумент(ТекущийДокумент);
6 серый КТУЛХУ
 
22.09.21
15:12
только непонятно - нафига.
и - как ты будешь таким образом записывать новый документ? (подсказка: получишь новую ошибку).
в оьщем - у тебя ысе неправильно с самого начала. если тебе нужны разные формы одного и того же документа для разных рабочих мест - в приоткрытии и привводенового проверяй соответствие текущей открываемой форме требованиям раб.места - и при надобности статусвозврата(0); открытьформу(...нужнаяформатогожесамого)
7 Mikeware
 
22.09.21
15:18
(6) в  клюшках только одна форма дока
8 jah1111
 
22.09.21
15:29
(7) ага...
новый документ на планшете это "РасходТач" и так она и запишется
новый документ на компе это "РасходнаяНакладная" и так она и запишется

но если вдруг на планшете надо посмотреть десктопную версию - то "РасходнаяНакладная" откроется в форме "РасходТач"
но только как правльное ее записать пока недокумекал
9 jah1111
 
22.09.21
15:29
(5) спасибо Вам, а я туплю
10 Mikeware
 
22.09.21
15:33
(8) сделай обработку, открывай в ней.
теоретически можно попытаться подменить контекст через 1с++, но я не пробовал.
11 Ёпрст
 
22.09.21
15:49
(0) формексом можно подменять открываемую форму на свою.
12 jah1111
 
22.09.21
15:50
(10) интересно, даже не знаю что гиморнее переписать всю форму документа  в обработку или разобраться с подменой контекста в ВК
13 Mikeware
 
22.09.21
15:55
(12) а ты думал, что в сказку попал? :-)
14 jah1111
 
22.09.21
15:56
(11) два слова в каком разделе руководства.

на данный секунд идея такая:

- сохранение и проводка чужого документа будет в специальной процедуре ЗаписьЧужого();
- если приоткрытии  вид.документа во внешнем контексте  не будет совпадать видом открытой формы тогда   стандартная кнопка ОК(#Записать?Провести?Закрыть) видимость = 0, а на ее место другая кнопка ОК с процедурой ЗаписьЧужого()
15 Mikeware
 
22.09.21
15:59
(11) чот долго думал, даже спросил у мужика в кепке - не понял как.
16 Mikeware
 
22.09.21
16:07
(14) видимо, надо ковырять ПолучитьБазовыйКласс и ЗаменитьБазовыйОбъект
17 Ёпрст
 
22.09.21
16:37
(15)

Процедура ПриЗагрузкеФормы(<?>) КонецПроцедуры
Синтаксис:
Процедура ПриЗагрузкеФормы(<ИмяОбъекта>)КонецПроцедуры
Назначение:
Предопределенная процедура вызывается при загрузке диалога формы.
Параметры:
<ИмяОбъекта> - (Строка) полный путь к объекту, для которого загружается форма
ЗАМЕЧАНИЕ:
В качестве параметра в процедуру передается полный путь к загружаемому объекту внутри md ( список всех форм можно получить с помощью метода СписокВсехФорм / AllFormsList ). Если внутри процедуры изменить значение параметра ИмяОбъекта, то загрузится диалог в соответствии с этим новым путем. Если новый путь задан неверно, то будет загружен тот диалог, который предполагался изначально
18 HawkEye
 
22.09.21
16:43
(12) правильнее сначала оторвать руки тому кто создал в метаданных "РасходТач"... потом забыть про этот тач, как страшный сон, а для планшета написать обработку которая будет создавать обычную Расходную накладную....
19 jah1111
 
22.09.21
18:20
(18) очень даже с Вами согласен, но без рук я как без рук :)
пока будет так,
в будущем перепишу конфу так чтобы из обработки для планшета создавать и редактировать доки.
когда начинал ваять это творчество банально не умел толком работать с ТЗ, даже не то чтобы не умел, а просто з ТЧ намного мне удобней было. Поэтому писал тач-интерфейс не с нуля, а переделывал простые доки под тач.
а в общем это даже очень неправильно, фундаментально неправильно, согласен, учтю.
20 jah1111
 
22.09.21
18:20
пс. хотя какая разница  - создам я расходную накладную из формы дока или из формы обработки? главное - результат
21 Злопчинский
 
22.09.21
18:58
Какой ужас... Хоть бы в (0) написал этот код в форме обычного или планшетного дока. В написанном ужос и в коде аналогично.
22 Злопчинский
 
22.09.21
19:01
Вдобавок к этому ахеренная мегабомба в этом ужасном коде. Т. К. "документ" Это контекст журнала то в при записи документ. Текущийдокуиент может оказаться совсем не тем что в приоткрытии
23 jah1111
 
22.09.21
22:53
(22) почему? я беру контекст приоткрытии, документ - глобальная перем, сохраняется такой же до конца исполнения кода

//****************************************
Процедура ЗакрытиеЧужого()

Если Команда = "трансф" Тогда

Док = создатьобъект("Документ.РасходнаяНакладная");
Док.НайтиДокумент(Документ.ТекущийДокумент);
пров = ?(док.проведен()=1,1,0);

    док.Удалить(0);
    док.СнятьПометкуУдаления();
    док.датаДок = датаДок;
    док.НомерДок = НомерДок;
    док.клиент = клиент;
    док.склад  = склад;
    док.касса = касса;
    док.авто = авто;
    док.оплачено = оплачено;
    док.суммаопл = суммаопл; //досюда работает
    
  
    док.УдалитьСтроки(); // а тут уже нет

//короче немогу перезаполнить ТЧ документа     из открытой формы
      
        ВыбратьСтроки();
    
    Пока ПолучитьСтроку()=1 цикл
            док.НоваяСтрока();    
            док.товар = товар;
            док.партия = партия;
            док.брутто = брутто;
            док.КолЯщ = КолЯщ;
            док.тара = тара;
            док.Поддон = Поддон;
            док.кол = кол;
            док.вим = вим;
            док.цена = цена;
            док.сумма = сумма;
    конеццикла;        
    Если пров=0 Тогда
        вопр= Вопрос("Сохранить документ?",3);
        Если вопр= 6 Тогда
            док.Записать();
            форма.закрыть(0);
        ИначеЕсли вопр= 7 Тогда
            форма.закрыть(0);
        КонецЕсли;    
    ИначеЕсли пров = 1 Тогда
        вопр= Вопрос("Сохранить документ? Документ будет перепроведен!",3);
        Если вопр= 6 Тогда
            док.записать();
            док.провести();
            форма.Закрыть(0);
        ИначеЕсли вопр= 7 Тогда
            форма.закрыть(0);
        КонецЕсли;    

    
    КонецЕсли
    КонецЕсли;
  КонецПроцедуры

поможете - буду признателен
24 jah1111
 
22.09.21
23:29
(22) тоесть ловить Док.НайтиДокумент(Документ.ТекущийДокумент) надо еще в приоткрытии и док - глоб. перем? Правильно дошло?