Позиционирование в журнале на документ   

   

Из формы документа находим его в журнале. По выбору пользователя - либо в журнале документов данного вида, либо в полном журнале. Я расскажу, как сделать это с нуля в новой конфигурации.

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

Для начала изменяем модуль формы документа. Создаем с нуля или дописываем к существующему списку действий два дополнительных действия - открытие документа в полном журнале, либо в простом журнале для данного вида документов.
//Создаем переменную:
Перем СписокДействий;
//модуль формы документа
...
...
...

//В конец модуля добавляем строчки
СписокДействий=СоздатьОбъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("Открыть в общем журнале");
СписокДействий.ДобавитьЗначение("Открыть в своем журнале");

Добавляем в документ кнопку «Действия». В свойствах кнопки в закладке формулы пишем: глДействия(Контекст, СписокДействий) так будет называться наша процедура в глобальном модуле (в стандартных конфигурациях она уже есть).

В глобальном модуле создаем процедуру:
Процедура глДействия(Конт, Список) Экспорт
    Перем Действие, КонтФормы;
    Если Список.ВыбратьЗначение(Действие,,,,1) > 0 Тогда
        Если Действие="Открыть в общем журнале" Тогда
            Если Конт.Выбран()=0 Тогда
                //не записан еще
                Возврат;
            КонецЕсли;
            ОткрытьФорму( "Журнал." + Метаданные.ПолныйЖурнал.Идентификатор + "." +
            Метаданные.ПолныйЖурнал.ОсновнаяФорма.Идентификатор, КонтФормы );
            //Если во втором параметре ОткрытьФорму() передать переменную,
            //то в нее вернется контекст открытой формы журнала.
            КонтФормы.УстановитьИнтервал(Конт.ДатаДок, Конт.ДатаДок);
            //Устанавливаем интервал журнала таким образом,
            //чтобы дата документа была в интервале журнала.
            //Если этого не сделать - ничего не получится, так как
            //в противном случае берется стандартный интервал из параметров,
            //а документ может не попасть в него...
            КонтФормы.АктивизироватьОбъект(Конт.ТекущийДокумент());
        ИначеЕсли Действие="Открыть в своем журнале" Тогда
            Если Конт.Выбран()=0 Тогда
                //не записан еще
                Возврат;
            КонецЕсли;
            ОткрытьФорму("Журнал." +
            Метаданные.Документ(Конт.Вид()).Журнал.Идентификатор + "." +
            Метаданные.Документ(Конт.Вид()).Журнал.ОсновнаяФорма.Идентификатор,
            КонтФормы);
            КонтФормы.УстановитьИнтервал(Конт.ДатаДок, Конт.ДатаДок);
            КонтФормы.АктивизироватьОбъект(Конт.ТекущийДокумент());
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Преимущество этой процедуры в том, что она универсальна. То есть, не требуется вносить какие-либо изменения в модули формы журналов документов.

В стандартной торговле 7.70.902 - документ ищется фиксировано в общем журнале. К тому же часть кода позиционирования документа находится непосредственно в модуле формы журнала, что не очень удобно.

Более подробно узнать о работе с метаданными конфигурации и посмотреть примеры работы можно здесь.

 


 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").

 

Статья: Позиционирование в журнале на документ

Перейти на главную страницу компании "Софтпоинт"