Имя: Пароль:
1C
1C 7.7
v7: Как открыть печатную форму требуемого документа
,
0 Kupogun
 
04.10.13
08:27
Здравствуйте! я вновь себе делаю глупость и задаю такие же вопросы
Как открыть печатные формы одного док-та из формы другого документа при том, чтоб контрагенты и того, и другого док-та совпадали?
так как есть условие, то Док.ВыбратьДокументы() мне не подошел :(
    
Делаю через запрос, но не знаю как открыть форму. мб кто-то что-то подобное уже делал?      
        
        Процедура КнопкаПечать()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с (ТекущаяДата()-30) по (ТекущаяДата()+1);
    |ТекущийДокумент = Документ.ВозвратОтПокупателя.ТекущийДокумент;
    |ДатаДок = Документ.ВозвратОтПокупателя.ДатаДок;
    |НомерДок = Документ.ВозвратОтПокупателя.НомерДок;
    |Контрагент = Документ.ВозвратОтПокупателя.Контрагент;
    |Группировка ТекущийДокумент;
    |Условие(Контрагент = Контрагент);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    Пока Запрос.Группировка(1) = 1 Цикл
        Конт = "";
        Запрос="Печать";
        ОткрытьФорму(Запрос.ТекущийДокумент(),Конт);
    КонецЦикла;
КонецПроцедуры
1 Kupogun
 
04.10.13
10:26
сделал по-другому и все равно не открывает форму(

Процедура КнопкаПечать()
    Счетчик = 0;
    Док2=СоздатьОбъект("Документ.Реализация");
    Док2.ОбратныйПорядок(1);
    Док2.ВыбратьДокументы((ТекущаяДата()-30),(ТекущаяДата()+1));
    
    Док=СоздатьОбъект("Документ.ВозвратОтПокупателя");
    Док.ОбратныйПорядок(1);
    Док.ВыбратьДокументы((ТекущаяДата()-30),(ТекущаяДата()+1));
    
    //************************************************************************
    тз=СоздатьОбъект("ТаблицаЗначений");
    тз.НоваяКолонка("ТекущийДокумент");
    тз.НоваяКолонка("ДатаДок");
    тз.НоваяКолонка("Контрагенты");
    
    
    Пока Док.ПолучитьДокумент() = 1 Цикл  
        тз.ТекущийДокумент(Док.ТекущийДокумент);
        тз.ДатаДок(Док.ДатаДок);
        тз.Контрагенты(Док.Контрагент);
    КонецЦикла;
    //************************************************************************
    
    
    Пока Док2.ПолучитьДокумент() = 1 Цикл  
        тз.ВыбратьСтроки();
        Пока тз.ПолучитьСтроку() = 1 Цикл  
            Если (тз.Контрагенты= Контрагент) И (тз.ДатаДок > Док2.ДатаДок) Тогда
                Конт = "Печать";
                ОткрытьФорму(тз.ТекущийДокумент,Конт);    
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры // ПоКнопкеПечать()
2 chelentano
 
04.10.13
10:34
Запрос="Печать";
ОткрытьФорму(Запрос.ТекущийДокумент(),Конт);

ничего не смущает?
3 chelentano
 
04.10.13
10:36
Пока Док.ПолучитьДокумент() = 1 Цикл  
    тз.ТекущийДокумент(Док.ТекущийДокумент);
    тз.ДатаДок(Док.ДатаДок);
    тз.Контрагенты(Док.Контрагент);
КонецЦикла;

тут тоже ничего не смущает, типа того, что новую строку не добавляешь?
4 Mikeware
 
04.10.13
10:36
(0) в отладчике забанили?
5 VladZ
 
04.10.13
10:37
"Как открыть печатные формы одного док-та из формы другого документа при том, чтоб контрагенты и того, и другого док-та совпадали?". Что за поток сознания? Можно кратко и по-существу?
6 VladZ
 
04.10.13
10:45
(1) Ваще непонятный набор букв.
7 VladZ
 
04.10.13
10:48
Итак, по шагам:
1. Выяснить, что именно нужно сделать. Разработать ТЗ, пусть даже схематично.
2. Разработать словестный алгоритм решения задачи.
3. Положить свой алгоритм на код.
8 Азазель
 
04.10.13
11:10
(0) 1. Если известен идентификатор другого (любого) документа, до получения печатной формы нужно сначала выбрать конкретный документ этого вида.

2.Печатных форм для документа может быть несколько.
Поэтому предварительно нужно получить их список и выбрать значение конкретной печатной формы из списка доступных печатных форм.

3.Затем отрываем форму документа с параметром, который будет обработан процедурой ПриОткрытии(), которая должна понять, что открытие выполнено для вызова процедуры печати конкретной печатной формы (желательно сразу на принтер и без показа пользователю окна диалога документа).

Все эти манипуляции лучше поручить внешней обработке, которую ты и должен вызвать из любого места (в том числе из диалога любого документа).
Удобнее для этих целей иметь кнопку вызова обработки на панели инструментов главного окна программы.
9 Kupogun
 
04.10.13
13:39
Вообщем все норм получилось, что я хотел.
Спасибо за поддержку!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан