Имя: Пароль:
1C
1C 7.7
v7: Расшифровка в своем отчете
0 san4ez1008
 
31.07.17
09:14
Добрый день! Конфигурация ТиС 9.2, написал обработку, выбирающую непроведенные документы за опр.период. В табличке все это дело вывожу, в столбце "Номер документа" нужно сделать так, чтобы было как в ОСВ (двойной клик-открылся документ). Подскажите, как это сделать?
1 Масянька
 
31.07.17
09:17
(0) В табличке заполнить поле "Расшифровка". Посмотри, как реализовано в типовых.
2 san4ez1008
 
31.07.17
09:19
(1) я Вашу недавнюю ветку читал, так ничего и не понял(( чем заполнять то? у меня не через запрос табличка заполняется, из ТЗ..
3 Остап Сулейманович
 
31.07.17
09:21
(2) В ТЗ какие есть колонки?
4 san4ez1008
 
31.07.17
09:21
(3) дата документа, номер документа, вид, сумма
5 Остап Сулейманович
 
31.07.17
09:25
(4) Для примера вставь в поле "Расшифровка" выражение типа :
ТЗ.ДатаДок, в предприятии посмотри, как будет отрабатывать.

Потом добавишь в ТЗ поле, куда будешь вставлять док.ТекущийДокумент() и уже его пропишешь в расшифровку. Глядишь - оно и прояснится.
6 Дмитрий
 
31.07.17
09:25
(4) в макете в свойствах ячейки поле Расшифровка, пихай туда ссылку на документ
7 san4ez1008
 
31.07.17
09:27
(6) запихал , док.текущийдокумент(), кликаю-ничего не открывается
8 Остап Сулейманович
 
31.07.17
09:28
(7) Откуда брал "док"? И какого оно типа?
9 san4ez1008
 
31.07.17
09:29
(8) кстати о птичках..если у меня в отчете 3 вида документов?
10 san4ez1008
 
31.07.17
09:30
отчет такой

Процедура Сформировать()
    ТЗ.Очистить();
    ТЗ.НоваяКолонка("Точка",,,,,43);
    ТЗ.НоваяКолонка("Дата",,,,,8);
    ТЗ.НоваяКолонка("N_документа",,,,,10);
    ТЗ.НоваяКолонка("ВидДокумента",,,,,16);
    ТЗ.НоваяКолонка("Сумма",,8,2,,9);
    ТЗ.НоваяКолонка("Склад",,,,,20);
    ТЗ.НоваяКолонка("Комментарий");
    ТЗ.НоваяКолонка("Причина",,,,,1);
    
    Док1=СоздатьОбъект("Документ.ВозвратПоставщику");
    Док2=СоздатьОбъект("Документ.ПереоценкаРозница");    
    Док3=СоздатьОбъект("Документ.СписаниеТМЦ");
    
    Док1.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    Пока Док1.ПолучитьДокумент()=1 цикл
        Если Док1.Проведен()=0 тогда
            ТЗ.НоваяСтрока();
            ТЗ.Точка=Док1.Склад;
            ТЗ.Дата=Док1.ДатаДок;
            ТЗ.N_документа=Док1.НомерДок;
            ТЗ.ВидДокумента="Возврат";
            ТЗ.Сумма=Док1.Итог("Сумма");
            ТЗ.Склад=Док1.Контрагент;
            ТЗ.Комментарий=Док1.Комментарий;
            ТЗ.Причина="";
        КонецЕсли;
    КонецЦикла;
    
    Док2.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    Сум=0;
    СумПереоц=0;
    Пока Док2.ПолучитьДокумент()=1 цикл
        Если Док2.Проведен()=0 тогда
            Док2.ВыбратьСтроки();
            Пока Док2.ПолучитьСтроку()=1 цикл
                Сум=Сум+Док2.Количество*(Док2.ЦенаНовая-Док2.ЦенаСтарая);
            КонецЦикла;
            СумПереоц=СумПереоц+Сум;
            
            ТЗ.НоваяСтрока();
            ТЗ.Точка=Док2.Склад;
            ТЗ.Дата=Док2.ДатаДок;
            ТЗ.N_документа=Док2.НомерДок;
            ТЗ.ВидДокумента="Переоценка";
            ТЗ.Сумма=СумПереоц;
            //ТЗ.Склад=Док.Контрагент;
            ТЗ.Комментарий=Док2.Комментарий;
            ТЗ.Причина="";
        КонецЕсли;
    КонецЦикла;
    
    Док3.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    Пока Док3.ПолучитьДокумент()=1 цикл
        Если Док3.Проведен()=0 тогда
            ТЗ.НоваяСтрока();
            ТЗ.Точка=Док3.Склад;
            ТЗ.Дата=Док3.ДатаДок;
            ТЗ.N_документа=Док3.НомерДок;
            ТЗ.ВидДокумента="Списание";
            ТЗ.Сумма=Док3.Итог("Сумма");
            //ТЗ.Склад=Док.Контрагент;
            ТЗ.Комментарий=Док3.Комментарий;
            ТЗ.Причина="";
        КонецЕсли;
    КонецЦикла;
    
    Если т=1 тогда
        ТЗ.Сортировать("Точка+");
    иначеесли д=1 тогда
        ТЗ.Сортировать("Дата+");
    иначеесли в=1 тогда
        ТЗ.Сортировать("Точка+");
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    // Заполнение полей "Заголовок"
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    
    Таб.ВывестиСекцию("Шапка");
    Номен="";
    
    Для i=1 по ТЗ.КоличествоСтрок() цикл
        Точка            = ТЗ.ПолучитьЗначение(i,"Точка");
        ДатаД            = ТЗ.ПолучитьЗначение(i,"Дата");
        НомДок            = ТЗ.ПолучитьЗначение(i,"N_документа");
        ВидДокумента    = ТЗ.ПолучитьЗначение(i,"ВидДокумента");
        Сумма            = ТЗ.ПолучитьЗначение(i,"Сумма");
        Склад            = ТЗ.ПолучитьЗначение(i,"Склад");
        Комментарий     = ТЗ.ПолучитьЗначение(i,"Комментарий");
        
        Таб.ВывестиСекцию("Строка|Точка");
        Таб.ПрисоединитьСекцию("Строка|Дата");
        Таб.ПрисоединитьСекцию("Строка|НомДок");
        Таб.ПрисоединитьСекцию("Строка|ВидДок");
        Таб.ПрисоединитьСекцию("Строка|СУмма");
        Таб.ПрисоединитьСекцию("Строка|Склад");
        Таб.ПрисоединитьСекцию("Строка|Комментарий");
        Таб.ПрисоединитьСекцию("Строка|Причина");
    КонецЦикла;    
    
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");

    //ExpotToExcel();
    //Форма.ТЗ.Видимость(1);
КонецПроцедуры
11 Fedor-1971
 
31.07.17
09:32
(7) Защита? поиграйся с этим параметром ячейки
Если при 2-ном клике таб.документ входит в режим редактирования ячейки никакая расшифровка не сработает
12 san4ez1008
 
31.07.17
09:33
(11) таблица только на просмотр
13 Остап Сулейманович
 
31.07.17
09:38
(10)
1.
ТЗ.Очистить();
ТЗ.НоваяКолонка("Точка",,,,,43);
ТЗ.НоваяКолонка("Дата",,,,,8);
ТЗ.НоваяКолонка("N_документа",,,,,10);
ТЗ.НоваяКолонка("ВидДокумента",,,,,16);
ТЗ.НоваяКолонка("Сумма",,8,2,,9);
ТЗ.НоваяКолонка("Склад",,,,,20);
ТЗ.НоваяКолонка("Комментарий");
ТЗ.НоваяКолонка("Причина",,,,,1);
//*********************
ТЗ.НоваяКолонка("Док", "Документ");
//**********************
...
Док1.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Пока Док1.ПолучитьДокумент()=1 цикл
    Если Док1.Проведен()=0 тогда
        ТЗ.НоваяСтрока();
        ТЗ.Точка=Док1.Склад;
        ...
        //****************************
        ТЗ.Док = Док1.ТекущийДокумент();
        //****************************
    КонецЕсли;
КонецЦикла;
аналогично Док2 и Док3.
14 Масянька
 
31.07.17
09:39
Однако, какой добрый понедельник :)
15 Fedor-1971
 
31.07.17
09:40
(12) у ячейки таблицы установлены флажок "Защита" и параметр "Расшифровка"?
ОбработкаЯчейкиТаблицы() - где обрабатываешь расшифровку?
(10) где заполняется, то чего вписано в "Расшифровка"?
16 SiAl-chel
 
31.07.17
09:40
(0) В ТЗ добавь колонку Ссылка, тип либо произвольный, либо Документ. Добейся, чтобы эта колонка была заполнена ссылками на документы. Посмотри где происходит создание новой строки, и если там есть что-то типа
ТЗ.ДатаДок = Док.ДатаДок;
то добавь строку
ТЗ.Ссылка = Док.ТекущийДокумент();
В поле Расшифровка свойства ячейки вбей либо ТЗ.Ссылка, либо ТЗ.Ссылка#. Установи программно режим чтения для табличной документа.
17 Slypower
 
31.07.17
09:46
Через запрос уж лучше переделать. И быстрее будет, и в расшифровку кинуть.
А так использовать Процедуру ОбработкаЯчейкиТаблицы(), в которой вы получаете номер документа, а уже по номеру искать в базе НайтиПоНомеру(), получитьпономеру().
Или все же добавить новую колонку в ТЗ - документ и оттуда брать
18 san4ez1008
 
31.07.17
09:48
(13) (16) (17) добавил колонку в ТЗ, в расшифровку прописал "ТЗ.Док" - по всем строкам последняя запись в ТЗ
19 Fedor-1971
 
31.07.17
09:50
(16) не поможет ТЗ.Ссылка, ТС заполняет параметры
Комментарий = ТЗ.ПолучитьЗначение(i,"Комментарий");
тогда уж так: ТоЧтоХочуВРасшифровку = ТЗ.ПолучитьЗначение(i,"Ссылка");

(17) "Что бы продать что-нибудь ненужное, надо сначала купить что-нибуть ненужное. А у нас денег нет". Одна из серий "Простоквашино"
Сначала нечто нужно положить в расшифровку, а потом это нечто обрабатывать в ОбработкаЯчейкиТаблицы(), если ему нет стандартного механизма

(18) заполни для каждой строки из ТЗ
20 Fedor-1971
 
31.07.17
09:53
19+ в "Расшифровка" напиши тебе понятный идентификатор и присвой ему значение для каждой строки.
Будет меньше путаницы и весёлых эффектов
21 Дмитрий
 
31.07.17
10:01
(18) ТЕКДОК = ТЗ.ПолучитьЗначение(i,"ДОК");

в расшифровку напиши ТекДок
22 san4ez1008
 
31.07.17
10:04
(21) сделал,все работает. Спасибо всем за помощь!
23 Дмитрий
 
31.07.17
10:05
(21) и вообще таблицу значений лучше перебирать при помощи

ВыбратьСтроки() и ПолучитьСтроку()
24 Калиостро
 
31.07.17
10:40
+(23) если при переборе не происходит удаления строк
25 san4ez1008
 
31.07.17
10:48
ребят,еще вопрос, есть 4 переключателя,     Если т=1 тогда
        ТЗ.Сортировать("Точка+");
    иначеесли д=1 тогда
        ТЗ.Сортировать("Дата+");
    иначеесли в=1 тогда
        ТЗ.Сортировать("ВидДокумента+");
    иначеесли скл=1 тогда
        ТЗ.Сортировать("Склад+");
    КонецЕсли;
порядок обхода назначил, первый в группе есть, но при выборе 4го переключателя в отладчике он равен 0, как так?
26 san4ez1008
 
31.07.17
10:58
а,все,понял наконец-то как переключатели работают..