Имя: Пароль:
1C
1C 7.7
v7: Создание Нового Журнала Документов
0 Popkorm
 
23.04.12
10:40
Создаю новый журнал с отбором по одной фирме.При открытие вываливаются все документы,хотя условие наложенно по одной фирме,вот процедуры:

Процедура ПриОткрытии()  
   
   ПриОткрытииИЛИПереоткрытииЖурнала("Открытие");
   
   // будем отслеживать только реальные изменения этих реквизитов
   Форма.ВидОтбора.ВыполнятьФормулуТолькоПриИзменении(1);
   
   
КонецПроцедуры

Процедура ПриОткрытииИЛИПереоткрытииЖурнала(Режим)
   
   // запомним документ основание для формы журнала подчиненных документов
   ДокументОснованиеЖурнала = ПодчинениеДокументу();
   
   Если Режим="Открытие" Тогда  
       
       ТекДок = ВосстановитьЗначение("ТекДок");
       
       // Позиционируемся на последнем документе  
       Если ПустоеЗначение(ТекДок)=0 Тогда
           Если ТекДок.Фирма.Код = "00003" Тогда
               
               ТекДок = ?(ПустоеЗначение(ТекДок)=1, ПолучитьПустоеЗначение("Документ"), ТекДок);
               
               //Заполним список действий по кнопке "Действия"
               СписокДействий.УдалитьВсе();
               СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
               СписокДействий.ДобавитьЗначение("Отчет о бухгалтерских проводках");
               СписокДействий.ДобавитьЗначение("Структура подчиненности");
               СписокДействий.ДобавитьЗначение("Ввести на основании");
               
               Если ТипЗначенияСтр(ДокументОснованиеЖурнала) = "Документ" Тогда // форма журнала подчиненных документов
                   Форма.Заголовок("Журнал подчиненных документов к документу " + глПредставлениеДокумента(ДокументОснованиеЖурнала));
                   
                   // Погасим реквизиты отбора
                   Форма.ТекстБыстрыйОтбор.  Видимость(0);
                   Форма.ВидОтбора.          Видимость(0);
                   Форма.кнЗначение.         Видимость(0);
                   Форма.ТекстЗначенияОтбора.Видимость(0);    
                   
                   // менять время документов и распечатывать реестр в журнале подчиненных считаем не нужным
                   Форма.кнВремя. Доступность(0);
                   Форма.кнРеестр.Доступность(0);
                   
               Иначе    // Обычная форма журнала                        
                   
                   СписокДействий.ДобавитьЗначение("Скопировать в...");
                   Форма.Заголовок("",1);
                   // Определение был ли быстрый отбор
                   ТекСтр = ВосстановитьЗначение("ВидОтбораЖурнала");
                   ТекСтр = ?(ПустоеЗначение(ТекСтр)=1, 1, ТекСтр);
                   ВидОтбора.ТекущаяСтрока(ТекСтр);
                   
                   ПриОбычномОткрытииЖурнала();
               КонецЕсли;
               
           КонецЕсли;
       КонецЕсли;
   ИначеЕсли Режим="Переоткрытие" Тогда    
       ТекДок = ТекущийДокумент;
   КонецЕсли;    
   
   Если ПустоеЗначение(Форма.Параметр)=0 Тогда
       Если ВРег(ТипЗначенияСтр(Форма.Параметр))="ДОКУМЕНТ" Тогда
           // НАДО ПОЗИЦИОНИРОВАТЬСЯ НА ЭТОМ ДОКУМЕНТЕ
           Док = Форма.Параметр.ТекущийДокумент();
           Если Док.Выбран()>0 Тогда
               ТекДок = Док;
               
               // Если документ не попадает в текущий интервал журнала, то изменим интервал
               ДатаНач = Мин(НачалоИнтервала(), Док.ДатаДок);
               ДатаКон = Макс(КонецИнтервала(), Док.ДатаДок);
               УстановитьИнтервал(ДатаНач,ДатаКон);
               
               // Надо сделать так, чтобы условия отбора удовлетворяли данному документу
               ОтборПо  = ВидОтбора.ПолучитьЗначение(ВидОтбора.ТекущаяСтрока());
               
               Если ВидОтбора.ТекущаяСтрока() > 1 Тогда    // есть быстрый отбор
                   
                   Если ОтборПо = "по контрагенту" Тогда  
                       Если глЕстьРеквизитШапки("Контрагент", ТекДок.Вид()) = 1 Тогда
                           КонтрагентДляОтбора = ТекДок.Контрагент;
                       Иначе                
                           ВидОтбора.ТекущаяСтрока(1); // снимаем быстрый отбор
                       КонецЕсли;
                   ИначеЕсли ОтборПо  = "по виду документов" Тогда      
                       ВидДокументаДляОтбора = СписокВидовДокументов.НайтиЗначение(ТекДок.Вид());
                       СписокВидовДокументов.ТекущаяСтрока(ВидДокументаДляОтбора);
                   ИначеЕсли ОтборПо  = "по автору" Тогда
                       АвторДляОтбора = ТекДок.Автор;  // общий реквизит документов
                   ИначеЕсли ОтборПо  = "по фирме" Тогда
                       ФирмаДляОтбора = ТекДок.Фирма;  // общий реквизит документов
                   ИначеЕсли ОтборПо  = "по юр. лицу" Тогда
                       ЮрЛицоДляОтбора= ТекДок.ЮрЛицо; // общий реквизит документов
                   ИначеЕсли ОтборПо = "по складу" Тогда
                       Если глЕстьРеквизитШапки("Склад", ТекДок.Вид()) = 1 Тогда
                           СкладДляОтбора = ТекДок.Склад;
                       Иначе                
                           ВидОтбора.ТекущаяСтрока(1); // снимаем быстрый отбор
                       КонецЕсли;
                   ИначеЕсли ОтборПо = "по проекту" Тогда
                       ПроектДляОтбора = ТекДок.Проект;// общий реквизит документов
                       
                   КонецЕсли; // ОтборПо
               КонецЕсли; // ВидОтбора.ТекущаяСтрока() > 1
           КонецЕсли; // Док.Выбран()>0    
       КонецЕсли; // ВРег(ТипЗначенияСтр(Форма.Параметр))="ДОКУМЕНТ"      
   КонецЕсли; // ПустоеЗначение(Форма.Параметр)=0
   
   
   
   Попытка
       Если ПустоеЗначение(ТекДок)=0 Тогда
           Если ТекДок.Фирма.Код = "00003" Тогда
               ПриУстановкеБыстрогоОтбора();
               АктивизироватьОбъект(ТекДок);            
           Конецесли;
       Конецесли;
   Исключение    
       Сообщить(ОписаниеОшибки(),"!");
   КонецПопытки;    
             
КонецПроцедуры
1 Mikeware
 
23.04.12
10:49
СП читал?
2 ДенисЧ
 
23.04.12
10:51
(1) Нет, я его у него украл...
3 Popkorm
 
23.04.12
10:51
(1)про это имеешь виду:
ПодчинениеДокументу();
АктивизироватьОбъект(ТекДок);
4 Popkorm
 
23.04.12
10:54
в данном случаи АктивизироватьОбъект не отрабатывает,но где то еще механизм отрабатывает,не знаю где:
АктивизироватьОбъект(ТекДок);
АктивизироватьОбъект(<?>);
Синтаксис:
АктивизироватьОбъект(<Объект>)
Назначение:
Активизировать объект в форме списка.
Параметры:
<Объект> - выражение, содержащее документ.
Замечание:
Доступ к методу возможен только в контексте Модуля формы.
5 Popkorm
 
23.04.12
10:55
+4 "АктивизироватьОбъект" подобный механизм имеею виду
6 Popkorm
 
23.04.12
10:57
ПриОткрытииИЛИПереоткрытииЖурнала("Открытие");
   
   // будем отслеживать только реальные изменения этих реквизитов
   Форма.ВидОтбора.ВыполнятьФормулуТолькоПриИзменении(1);
   
   
КонецПроцедуры // ПриОткрытии()

Это тоже не причем:

ВыполнятьФормулуТолькоПриИзменении(<?>);
Синтаксис:
ВыполнятьФормулуТолькоПриИзменении(<Режим>)
Назначение:
Установка режима выполнения формулы выбранного поля табличной части документа.
Параметры:
<Режим> - число: 1 - формула вызывается только при изменении значения поля, 0 - вызывается и при переходе между полями.
7 Popkorm
 
23.04.12
11:24
что не понятно,справшивайте