Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задачка Про "идентификатор Журнала"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Alex729
Подскажите кто знает:

как в модуле формы открытого журнала получить его идентификатор (или синоним) ?
Желательно штатными средствами.
MATEVI
Насколько мне помнится встроеным языком никак. Только ч/з явное объявление в форме.
Alex729
Цитата(MATEVI @ 03.03.12, 17:22) необходимо зарегистрироваться для просмотра ссылки
Насколько мне помнится встроеным языком никак. Только ч/з явное объявление в форме.


Для реализации идеи пришлось сделать так (только для обычных журналов):

ИмяЖурнала = Метаданные.Документ(ТекущийДокумент.Вид()).Журнал.Идентификатор;


Минусы: формула не подходит по смыслу для "Полного журнала" и для "Дополнительных".

Всем, спасибо.
MATEVI
В случае отсутствия документов в журнале будет ошибка.
alex040269
Цитата(Alex729 @ 03.03.12, 16:22) необходимо зарегистрироваться для просмотра ссылки
Подскажите кто знает:

как в модуле формы открытого журнала получить его идентификатор (или синоним) ?
Желательно штатными средствами.

Зачем получать? И так известно какой журнал!!!
Метаданные.Журнал("АвансовыеОтчеты").Синоним
MATEVI
Цитата(alex040269 @ 04.03.12, 16:48) необходимо зарегистрироваться для просмотра ссылки
Зачем получать? И так известно какой журнал!!!
Метаданные.Журнал("АвансовыеОтчеты").Синоним

А при открытии этого журнала? Как узнать wink.gif ?
alex040269
Цитата(MATEVI @ 05.03.12, 9:16) необходимо зарегистрироваться для просмотра ссылки
А при открытии этого журнала? Как узнать wink.gif ?


ПриОткрытии разве не в модуле формы конкретного журнала?
MATEVI
Ну я так понимаю что ТС пытался сваять что то глобальное и при открытии любого журнала ему надо было узнать что за журнал открывается.
Alex729
Цитата(MATEVI @ 05.03.12, 9:49) необходимо зарегистрироваться для просмотра ссылки
Ну я так понимаю что ТС пытался сваять что то глобальное и при открытии любого журнала ему надо было узнать что за журнал открывается.


В каждом журнале есть универсальная кнопка с формулой:

глПроверитьВторойЭкземпляр(НачалоИнтервала(),КонецИнтервала(),контекст)


а в глобальном модуле процедура вывода отображаемых в журнале документов с нужными реквизитами и сортировкой:
Процедура глПроверитьВторойЭкземпляр(Дата1,Дата2,конт) экспорт
    
    Если ПустоеЗначение(конт)=0 Тогда
        Если ПустоеЗначение(конт.ТекущийДокумент)=1 Тогда
            Возврат;    
        КонецЕсли;
        ИмяЖурнала=Метаданные.Документ(конт.ТекущийДокумент.Вид()).Журнал.Идентификатор;
        ИмяЖурналаТаб=Метаданные.Документ(конт.ТекущийДокумент.Вид()).Журнал.Синоним;
    Иначе
        ИмяЖурнала="ПолныйЖурнал";
        ИмяЖурналаТаб="Полный журнал";
    КонецЕсли;
    
    ТЗДок=СоздатьОбъект("ТаблицаЗначений");
    ТЗДок.Очистить();
    ТЗДок.НоваяКолонка("СтатусДок","Строка",40,,"Статус",40,,1);
    ТЗДок.НоваяКолонка("Док","Документ",,,"Документ",30,,1);
    ТЗДок.НоваяКолонка("Контрагент","Справочник.Контрагенты",,,"Контрагент",30,,1);
    ТЗДок.НоваяКолонка("ДокВид","Строка",30,,"Вид",30,,1);
    ТЗДок.НоваяКолонка("НомерДок","Строка",13,,"№",15,,1);
    ТЗДок.НоваяКолонка("ДатаДок","Дата",,,"Дата",13,,1);
    ТЗДок.НоваяКолонка("СуммаНДС","Число",19,2,"Сумма",19,,2);
    ТЗДок.НоваяКолонка("СуммаСНДС","Число",19,2,"Сумма",19,,2);
    ТЗДок.НоваяКолонка("Внимание","Число",1,0,"Внимание",1,,1);
    //ТЗДок.ВидимостьКолонки("Внимание",0);  
    

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

            Попытка
                ТЗДок.СуммаСНДС=Док.Итог("СуммаСНДС");    
            Исключение  
                Попытка
                    ТЗДок.СуммаСНДС=Док.СуммаСНДС;    
                Исключение  
                    ТЗДок.СуммаСНДС=0;
                КонецПопытки;
            КонецПопытки;
                
            Если Док.Вернули2экз=0 Тогда
                ТЗДок.СтатусДок = "-";
                ТЗДок.Внимание=1;
            Иначе
                ТЗДок.СтатусДок = "Да";
                ТЗДок.Внимание=2;
            КонецЕсли;  
    
        КонецЦикла;

    КонецЦикла;

    ТЗДок.Сортировать("ДатаДок+,НомерДок+");
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Реестр");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    ТЗДок.ВыбратьСтроки();
    Пока ТЗДок.ПолучитьСтроку()=1 Цикл
        Если ТЗДок.Внимание=1 Тогда
            Таб.ВывестиСекцию("Строка_1");
        Иначе
            Таб.ВывестиСекцию("Строка_2");
        КонецЕсли;
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.ПараметрыСтраницы(1,100,1,10,5,10,10,0,7,1);
    Таб.Показать("Печать Реестр 2-ых экземпляров документов","");
КонецПроцедуры





Понимаю что можно было бы использовать стандартный алгоритм вывода обычного Реестра в каждом журнале, но ведь в принципе должен был быть метод обращения к журналу как и к обычным объектам т.е. Справочнику, Документу, Отчету и т.п. упрощающий сам перебор информации. 64000000.gif
alex040269
глПроверитьВторойЭкземпляр(НачалоИнтервала(),КонецИнтервала(),контекст,"АвансовыеОтчеты")
Alex729
Цитата(alex040269 @ 05.03.12, 13:18) необходимо зарегистрироваться для просмотра ссылки
глПроверитьВторойЭкземпляр(НачалоИнтервала(),КонецИнтервала(),контекст,"АвансовыеОтчеты")


тогда придётся в каждом журнале править формулу кнопки. и так 20-30 раз по количеству журналов...
Стрелок
И это всё для чего? проверить не ввели ли случайно дубль документа? Совпадающий по НДС и сумме с НДС? Зачем? А если надо ввести дубль или совпадение (для разных контрагентов например)? А если открыли общий журнал то что с чем сравниваться будет? В общем мне кажется Вы где то с постановкой задачи "накосячили". Можно дословно сюда запостить то что сказал заказчик?

А не проще ли (т.к. сравнивать документы имеет смысл только одного вида) сделать так

1. в обычных журналах по кнопке этой хитрой выкидывать список видов документов которые надо сравнить (виды документов получаем через метаданные как документы принадлежащие этому журналу)
2. в общем журнале выдаём весь список видов

код на пол экрана. а главное - всё универсально кроме общего журнала.

если нет желания то через формекс можно получить всё практически что угодно
sava1
А где Вы собираетесь проверять идентификатор журнала?
Глобальной обработки-то нет?
Стрелок
Цитата(sava1 @ 05.03.12, 21:01) необходимо зарегистрироваться для просмотра ссылки
А где Вы собираетесь проверять идентификатор журнала?
Глобальной обработки-то нет?


а выше что? на "гл" начинается wink.gif
sava1
Так если в гл..... обрабатывать, тогда спокойно можно передать идентификатор - чего городить?
Стрелок
Цитата(sava1 @ 05.03.12, 21:04) необходимо зарегистрироваться для просмотра ссылки
Так если в гл..... обрабатывать, тогда спокойно можно передать идентификатор - чего городить?


Так не хочет вставлять во все журналы идентификатор. Хочет универсальную на все случаи жизни
sava1
тогда Формекс

ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Сообщить(ФормаРасш.ПолныйТипОбъекта());


возвращает - Журнал.Кассовые.Форма.ФормаСписка

дальше можно разрулить (имхо)
Стрелок
Цитата(sava1 @ 05.03.12, 21:16) необходимо зарегистрироваться для просмотра ссылки
тогда Формекс

ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Сообщить(ФормаРасш.ПолныйТипОбъекта());

возвращает - Журнал.Кассовые.Форма.ФормаСписка

дальше можно разрулить (имхо)


Я выше про формекс писал, но думаю (судя по коду и решению) вряд ли это поможет. хотя..........
MATEVI
Честно сказать мне кажется что там и журнала то не надо. Запрос по документам с использованием Конт.Вид(). И в случае полного (общего) журнала как то придется "послаживать" запрос.
Но я что то все равно задачу до конца не понимаю. Что ищем, что проверяем? 64000000.gif
Alex729
Цитата(Стрелок @ 05.03.12, 19:46) необходимо зарегистрироваться для просмотра ссылки
И это всё для чего? проверить не ввели ли случайно дубль документа? Совпадающий по НДС и сумме с НДС? Зачем? А если надо ввести дубль или совпадение (для разных контрагентов например)? А если открыли общий журнал то что с чем сравниваться будет? В общем мне кажется Вы где то с постановкой задачи "накосячили". Можно дословно сюда запостить то что сказал заказчик?

ТЗ: выводить реестр документов с разными вариантами сортировки только тех документов, которые присутствуют в открытом у пользователя журнале.

Цитата(Стрелок @ 05.03.12, 19:46) необходимо зарегистрироваться для просмотра ссылки
А не проще ли (т.к. сравнивать документы имеет смысл только одного вида) сделать так
1. в обычных журналах по кнопке этой хитрой выкидывать список видов документов которые надо сравнить (виды документов получаем через метаданные как документы принадлежащие этому журналу)
2. в общем журнале выдаём весь список видов


ничего не сравнивается, не придумывайте smile.gif


Цитата(Стрелок @ 05.03.12, 19:46) необходимо зарегистрироваться для просмотра ссылки
если нет желания то через формекс можно получить всё практически что угодно

формекс не подходит так как у большинства клиентов на компах администраторы запретили использование внешних библиотек в целях безопасности.
Данный вариант с формексом не подходит.


Цитата(sava1 @ 05.03.12, 20:01) необходимо зарегистрироваться для просмотра ссылки
А где Вы собираетесь проверять идентификатор журнала?
Глобальной обработки-то нет?


в глобальном модуле естсественно

Цитата(Стрелок @ 05.03.12, 20:05) необходимо зарегистрироваться для просмотра ссылки
Так не хочет вставлять во все журналы идентификатор. Хочет универсальную на все случаи жизни

верно. Эта операция не для одного клиента, и не для одинаковых конфигураций. Скопировать кнопку проще, чем во всех журналах прописывать идентификатор.

По вышевставленному коду задача на практике уже выполняется.
Всё прекрасно работает.
В случае отсутствия документов в журнале данный алгоритм не имеет смысла (ведь реестр в любом случае будет пустой независимо от вида журнала).

P.S. а кого смущает переменная "Вернули2экз", так это пользователь через неё отмечает вернули/отдали ли второй экземпляр документа контрагенту или нет (например Приходная, Расходная, НН, ЗКП, Договор и т.п.)

спасибо форумчанам за проявленное неравнодушие smile.gif !
Стрелок
Цитата(Alex729 @ 06.03.12, 13:42) необходимо зарегистрироваться для просмотра ссылки
формекс не подходит так как у большинства клиентов на компах администраторы запретили использование внешних библиотек в целях безопасности.
Данный вариант с формексом не подходит.



Админ полный даун. КАК использование внешних библиотек влияет на безопасность? А главное - как они (админі) запретили то? или это админы-программисты 1С? бред какой-то. не повезло вам
vadim007
Цитата(Стрелок @ 07.03.12, 8:47) необходимо зарегистрироваться для просмотра ссылки
Админ полный даун. КАК использование внешних библиотек влияет на безопасность? А главное - как они (админі) запретили то? или это админы-программисты 1С? бред какой-то. не повезло вам

Элементарно - через политику безопасности домена.
XBrut
Цитата(Alex729 @ 06.03.12, 12:42) необходимо зарегистрироваться для просмотра ссылки
формекс не подходит так как у большинства клиентов на компах администраторы запретили использование внешних библиотек в целях безопасности.
Данный вариант с формексом не подходит.


Не. Ну если речь идет об автоматизации фальсифицированных выборов. И админ отвечает своей головой... тогда конечно да. Или ... если банк автоматизируем. А в прочих случаях попахивает придурью crazy.gif

P.S.
Любопытно, а , например на 1crcukr.dll админы анафему не накладывают ?
P.P.S
А через vkloader тоже не получится ?
5_kopeek
Зачем нужно использовать внешнюю библиотеку, если можно обойтись штатными средствами? И, вообще, у человека был вопрос, он сам нашел ответ, а на него обрушилось уйма всего...
alex040269
Цитата(5_kopeek @ 08.03.12, 3:03) необходимо зарегистрироваться для просмотра ссылки
Зачем нужно использовать внешнюю библиотеку, если можно обойтись штатными средствами? И, вообще, у человека был вопрос, он сам нашел ответ, а на него обрушилось уйма всего...

офтопп, извините не могу сдержаться smile.gif

еще один совет: не занимайтесь сексом на крассной площади - замучают советами...
5_kopeek
Цитата(alex040269 @ 08.03.12, 8:59) необходимо зарегистрироваться для просмотра ссылки
еще один совет: не занимайтесь сексом на крассной площади - замучают советами...

Ну да, логично.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.