Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Редактирование документа из формы другого документа

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

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

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

    КонецЕсли;

//.....

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

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

док.НайтиДокумент(ТекущийДокумент);
   серый КТУЛХУ
 
6 - 22.09.21 - 15:12
только непонятно - нафига.
и - как ты будешь таким образом записывать новый документ? (подсказка: получишь новую ошибку).
в оьщем - у тебя ысе неправильно с самого начала. если тебе нужны разные формы одного и того же документа для разных рабочих мест - в приоткрытии и привводенового проверяй соответствие текущей открываемой форме требованиям раб.места - и при надобности статусвозврата(0); открытьформу(...нужнаяформатогожесамого)
   Mikeware
 
7 - 22.09.21 - 15:18
(6) в  клюшках только одна форма дока
   jah1111
 
8 - 22.09.21 - 15:29
(7) ага...
новый документ на планшете это "РасходТач" и так она и запишется
новый документ на компе это "РасходнаяНакладная" и так она и запишется

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

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

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

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

//****************************************

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

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

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

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

    
  
    док.УдалитьСтроки();// а тут уже нет


//короче немогу перезаполнить ТЧ документа     из открытой формы

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.