Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Задачка Про "идентификатор Журнала" 2 страниц V   1 2 >          
Alex729 Подменю пользователя
сообщение 03.03.12, 16:22
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 134
Из: Ukraine
Спасибо сказали: 187 раз
Рейтинг: 127.8

Подскажите кто знает:

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

MATEVI Подменю пользователя
сообщение 03.03.12, 17:22
Сообщение #2

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Насколько мне помнится встроеным языком никак. Только ч/з явное объявление в форме.

Спасибо сказали: Alex729,

Alex729 Подменю пользователя
сообщение 03.03.12, 20:15
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 134
Из: Ukraine
Спасибо сказали: 187 раз
Рейтинг: 127.8

Цитата(MATEVI @ 03.03.12, 17:22) *
Насколько мне помнится встроеным языком никак. Только ч/з явное объявление в форме.


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

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


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

Всем, спасибо.

MATEVI Подменю пользователя
сообщение 03.03.12, 20:47
Сообщение #4

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

В случае отсутствия документов в журнале будет ошибка.

alex040269 Подменю пользователя
сообщение 04.03.12, 16:48
Сообщение #5

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Alex729 @ 03.03.12, 16:22) *
Подскажите кто знает:

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

Зачем получать? И так известно какой журнал!!!
Метаданные.Журнал("АвансовыеОтчеты").Синоним


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

MATEVI Подменю пользователя
сообщение 05.03.12, 9:16
Сообщение #6

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

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

А при открытии этого журнала? Как узнать wink.gif ?

alex040269 Подменю пользователя
сообщение 05.03.12, 9:43
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(MATEVI @ 05.03.12, 9:16) *
А при открытии этого журнала? Как узнать wink.gif ?


ПриОткрытии разве не в модуле формы конкретного журнала?


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

MATEVI Подменю пользователя
сообщение 05.03.12, 9:49
Сообщение #8

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Ну я так понимаю что ТС пытался сваять что то глобальное и при открытии любого журнала ему надо было узнать что за журнал открывается.

Alex729 Подменю пользователя
сообщение 05.03.12, 10:21
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 134
Из: Ukraine
Спасибо сказали: 187 раз
Рейтинг: 127.8

Цитата(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 Подменю пользователя
сообщение 05.03.12, 13:18
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

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


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Alex729 Подменю пользователя
сообщение 05.03.12, 15:17
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 134
Из: Ukraine
Спасибо сказали: 187 раз
Рейтинг: 127.8

Цитата(alex040269 @ 05.03.12, 13:18) *
глПроверитьВторойЭкземпляр(НачалоИнтервала(),КонецИнтервала(),контекст,"АвансовыеОтчеты")


тогда придётся в каждом журнале править формулу кнопки. и так 20-30 раз по количеству журналов...

Стрелок Подменю пользователя
сообщение 05.03.12, 19:46
Сообщение #12

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

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

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

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

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

если нет желания то через формекс можно получить всё практически что угодно


Signature
Программист 1С - любимчик бухгалтеров

sava1 Подменю пользователя
сообщение 05.03.12, 20:01
Сообщение #13

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

А где Вы собираетесь проверять идентификатор журнала?
Глобальной обработки-то нет?

Стрелок Подменю пользователя
сообщение 05.03.12, 20:02
Сообщение #14

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

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


а выше что? на "гл" начинается wink.gif


Signature
Программист 1С - любимчик бухгалтеров

sava1 Подменю пользователя
сообщение 05.03.12, 20:04
Сообщение #15

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Так если в гл..... обрабатывать, тогда спокойно можно передать идентификатор - чего городить?

Стрелок Подменю пользователя
сообщение 05.03.12, 20:05
Сообщение #16

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

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


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


Signature
Программист 1С - любимчик бухгалтеров

sava1 Подменю пользователя
сообщение 05.03.12, 20:16
Сообщение #17

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

тогда Формекс

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


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

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

Сообщение отредактировал Vofka - 06.03.12, 9:26

Стрелок Подменю пользователя
сообщение 05.03.12, 20:33
Сообщение #18

Говорящий
***
Группа: Пользователи
Сообщений: 96
Спасибо сказали: 8 раз
Рейтинг: 0

Цитата(sava1 @ 05.03.12, 21:16) *
тогда Формекс

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

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

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


Я выше про формекс писал, но думаю (судя по коду и решению) вряд ли это поможет. хотя..........


Signature
Программист 1С - любимчик бухгалтеров

MATEVI Подменю пользователя
сообщение 05.03.12, 21:15
Сообщение #19

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

Честно сказать мне кажется что там и журнала то не надо. Запрос по документам с использованием Конт.Вид(). И в случае полного (общего) журнала как то придется "послаживать" запрос.
Но я что то все равно задачу до конца не понимаю. Что ищем, что проверяем? 64000000.gif

Alex729 Подменю пользователя
сообщение 06.03.12, 12:42
Сообщение #20

Завсегдатай
****
Группа: Пользователи
Сообщений: 134
Из: Ukraine
Спасибо сказали: 187 раз
Рейтинг: 127.8

Цитата(Стрелок @ 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 !

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.04.24, 5:47
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!