Имя: Пароль:
1C
1C 7.7
v7: Значение области ячейки таблицы
,
0 Slypower
 
09.11.16
12:54
Добрый день. Вывел отчет. Таблица имеет строки: выражения. Как при нажатии на ячейку вывести ее значение?
Например:
1
3
5
37
78
При нажатии возвращало на 37, возвращало 37. Если это текст, то проблем нет: таб.Область("Показ").Текст. А если это выражение? Данные берутся из ТЗ.
Это затрудняется тем, что есть процедура  ОбработкаЯчейкиТаблицы(). В ней вбиты своим разные значения для др ячеек-шапки с разными расшифровками-построителями отчетов. Но вот просто вывести данные выражения не могу понять как.
1 aka AMIGO
 
09.11.16
12:55
(0) Приведи пример твоего выражения.
2 aka AMIGO
 
09.11.16
12:58
А вообще-то это КэП..

Пример:
Процедура ОбработкаЯчейкиТаблицы(Зн,ФСО,Табл,Адрес)
    ФСО = 1;
    Если Зн.Вид()="Товары" Тогда
            ФСО=0;
//и дальше обработка.

Распознавай вид() или ТипЗначенияСтр() для полученного Значения - и выполняй, что тебе требуется
3 Ёпрст
 
09.11.16
13:01
(0) ты не поверишь, но там всегда текст.
4 Ёпрст
 
09.11.16
13:03
+3 В ОбработкаЯчейкиТаблицы, ловится то, что в расшифровке запихано, а не то что в ячейке выведено.
5 HawkEye
 
09.11.16
13:05
(0) в расшифровку запиши то-же самое, что и в ячейку... при двойном клике будет тебе и 37 и 78...
6 Slypower
 
09.11.16
13:10
(2) возможно использовать несколько процедур ОбработкаЯчейкиТаблицы()?
7 aka AMIGO
 
09.11.16
13:11
(6) Только 2: одна в отчете, вторая - в ГМ :)
8 aka AMIGO
 
09.11.16
13:12
(6) Анализ значения, поступающего из поля расшифровки, делается в одной процедуре условными операторами.
9 aka AMIGO
 
09.11.16
13:14
Книг - документации нет что-ли? Описание внешнего языка бери, во втором томе в конце увидишь примеры
10 Slypower
 
09.11.16
13:17
(1) https://cloud.mail.ru/public/3xZm/gZYop4cQs - это таблица.
Стрелочки имеют расшифровку:"ТекстЯчейкиДокументВверх","ТекстЯчейкиДокументВниз" и т.д. Каждая свою.
А вот ТЗ.Документ - тут загвоздка. Нужно открыть соответствующий документ. Вот и хочу попытаться считать его. Код:

Процедура ОбработкаЯчейкиТаблицы(ЧтоВыводить) //рабочая по сортировке
    Сортировка="";

    Если ЧтоВыводить="ТекстЯчейкиДокументВверх" Тогда
        Сортировка="Документ+";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиДокументВниз" Тогда
        Сортировка="Документ-";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиНомерЭСЧФВверх" Тогда
        Сортировка="НомерЭСЧФ+";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиНомерЭСЧФВниз" Тогда
        Сортировка="НомерЭСЧФ-";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиДатаВыставленияЭСЧФВверх" Тогда
        Сортировка="ДатаВыставленияЭСЧФ+";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиДатаВыставленияЭСЧФВниз" Тогда
        Сортировка="ДатаВыставленияЭСЧФ-";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиСтатусЭСЧФВверх" Тогда
        Сортировка="СтатусЭСЧФ+";
    ИначеЕсли ЧтоВыводить="ТекстЯчейкиСтатусЭСЧФВниз" Тогда
        Сортировка="СтатусЭСЧФ-";
    ИначеЕсли ЧтоВыводить="ОткрытьДокумент" Тогда
    //хз как
        ОткрытьФормуМодально(ТЗ.Документ);
        Возврат;
    КонецЕсли;
    ВывестиНаЭкран();
КонецПроцедуры // ОбработкаЯчейкиТаблицы()
11 aka AMIGO
 
09.11.16
13:28
Чтобы вывести документ, помести его в Расшифровку:
http://pastenow.ru/Upload/Paste/16QCN.png
12 aka AMIGO
 
09.11.16
13:35
Чтобы распознать, что тебе вернулось в расшифровке из ячейки - примени ТипЗначенияСтр(Зн)
Это может быть всё, Документ, Справочник, строка, СЗ, ТЗ и т.д.
13 Slypower
 
09.11.16
13:35
(11) не катит. Пробовал, он выполняет  ОбработкаЯчейкиТаблицы(), т.е. просто сортирует мне таблицу по первому столбцу, но не открывает док. Если бы было так просто, я бы это еще на той неделе сделал
14 Ёпрст
 
09.11.16
13:37
(13) ну п..ц
15 Ёпрст
 
09.11.16
13:38
проверь ЧтоВыводить на типзнчстр, если это документ, то нихрена не делать, в расшифровку положить ссылку на документ.
УсЁ, наслаждаться, кушать печенки
16 Slypower
 
09.11.16
13:40
(15) а если ничего не выводит? Добавил в (10)
  
ИначеЕсли ЧтоВыводить="ОткрытьДокумент" Тогда
    //хз как
    Сообщить(ТипЗначенияСтр(ТЗ.Документ));
        Возврат;
    КонецЕсли;

ничего не выводит. Пусто
17 Ёпрст
 
09.11.16
13:41
(16) п..ц

еще раз, читай (15)
18 Slypower
 
09.11.16
13:44
(17) строка
19 Это_mike
 
09.11.16
13:45
опыляют их чем-то....
20 Ёпрст
 
09.11.16
13:45
(18) положи в расшифровку ссылку на документ, а не строку
21 aka AMIGO
 
09.11.16
13:46
(18) Ты эта.. по чему щелкаешь мышой в своей таблице?
У тебя процесс ждет значения ЧтоВыводить="ОткрытьДокумент", где это твоё "ОткрытьДокумент"??
22 aka AMIGO
 
09.11.16
13:47
+21 в таблице (10) не видно
23 Slypower
 
09.11.16
13:47
(20) положил. Выводит: Документ.
Изменил. Добавил: Иначе, и в расшифровку положил ТЗ.Документ. Теперь Документ, но не открывается, ссылки нет
24 Ёпрст
 
09.11.16
13:48
Для тех, кто в танке

Процедура ОбработкаЯчейкиТаблицы(ЧтоВыводить)//рабочая по сортировке

    Сортировка="";

    Если ТипЗначенияСтр(ЧтоВыводить)= "Документ" Тогда
       Возврат;
    ИначеЕсли ...
25 aka AMIGO
 
09.11.16
13:49
Ладушки.. я перестал что-либо понимать :)
Успехов, мужики :)
26 Ёпрст
 
09.11.16
13:53
(23) в самом ТЗ.Документ что хоть ?
27 Злопчинский
 
09.11.16
13:55
Тест
28 Злопчинский
 
09.11.16
13:55
В обработке яч табл доступны две сущности
29 Злопчинский
 
09.11.16
13:56
Значение расшифровки
Текст ячейкт
30 Злопчинский
 
09.11.16
13:56
Для тупых
Если ни в одной из этих сущностей
31 Злопчинский
 
09.11.16
13:56
Нет нужных тебе данных
32 Злопчинский
 
09.11.16
13:57
Иди данных по которым ты можешь получить нужные данные
33 Злопчинский
 
09.11.16
13:57
То тебе путь в Маши гадалки и прорицптели
34 Злопчинский
 
09.11.16
13:58
В текст ячейки клади то что должен видеть подьзоватедь
35 Злопчинский
 
09.11.16
13:59
В расшифровку клади то что надо обработать чтобы получить нужный эффект при жмаке на ячейку
36 Злопчинский
 
09.11.16
13:59
В расшифровку можно положить ЛЮБОЕ значение
37 aka AMIGO
 
09.11.16
13:59
:-))
38 Slypower
 
09.11.16
13:59
(26)     ТЗ.НоваяКолонка("Документ","Документ.Реализация");
    

Иначе
ОткрытьФормуМодально(ТЗ.Документ.ТекущийДокумент());
Возврат;
КонецЕсли;

Так оно открывает документ, но почему-то с ошибкой:
Значение не представляет агрегатный объект (ТекущийДокумент). Если убрать ТекущийДокумент(), то не открывает его
39 Sserj
 
09.11.16
14:00
(0) Вообще то в ОбработкаЯчейкиТаблицы есть еще параметры Таблица и Ардес и все что тебе нужно можно спокойно достать получив область по которой щелкнули мышкой:

Процедура ОбработкаЯчейкиТаблицы(Расшифровка, СтандартнаяОбработка, Таблица, АдресЯчейки)

ОблТаб = Таблица.Область(АдресЯчейки);
Сообщить("Текст ячейки: " + ОблТаб.Текст);

КонецПроцедуры
40 Злопчинский
 
09.11.16
14:00
Число
Строку
Дату
Любой агрегатный тип
Можно положить даже список значений и таблицу значений
41 aka AMIGO
 
09.11.16
14:02
(38) Потому, что документ не может открываться модально.
Для открытия документа тебе достаточно выставить условие ФСО=1 и ничего больше.
42 Злопчинский
 
09.11.16
14:03
Для очень тупых показывают
При формировании печформы для чётных строк надо выводимой печатной таблицы надо открывать документ, для нечетных печатать документ
43 aka AMIGO
 
09.11.16
14:03
(42) Высший пилотаж? :)
44 aka AMIGO
 
09.11.16
14:04
+(41) если в расшифровке лежит документ, то он и будет открыт.
45 Ёпрст
 
09.11.16
14:06
(38) Покажи, как и чем заполняешь эту колонку.
И ответ в (24). Больше ничего не надо. А модальность - зло
46 Злопчинский
 
09.11.16
14:07
Покажем извращенно
Цикл вывода печформы
  Если чётной тогда
    Текрасшиыровка="открыть модальной#"+значениевстрокувнутр(хрен знает какой документ произвольный);
  Иначе
     Текрасшифровка="гапечатать#"+значениевстрокувнутр (совсем другой документ)
Конец если;
47 Злопчинский
 
09.11.16
14:08
Текрасшифровку помещаещь в расшифровку
Если непонятно как это сделать напиши
48 Ёпрст
 
09.11.16
14:10
(46) ну ты точно извращенец. Всё делается проще. Достаточно пихать СЗ с параметрами, чем объект в строку помещать и обратно извлекать
:)
49 Злопчинский
 
09.11.16
14:11
В обработкеячейкитаблицы
Сз=глРазложить(расшифровка,"#");
Команда=сз.получить значение(1);
Объект=сз.получитьзначение(2);

Дальше анслизируешь команду и делаешь с объектом что надо
50 Злопчинский
 
09.11.16
14:11
(48) яж написал покажем извращенно
Именно чтобы показать
51 aka AMIGO
 
09.11.16
14:12
(49) Ужас, конечно.. Но это ему не нужно..
52 Ёпрст
 
09.11.16
14:12
(49) еще и глРазложить, ну, вы понели.. :)
53 Злопчинский
 
09.11.16
14:13
В расшифровку можно положить номер строки тз
В обработкеячеки по номеру строки тз получать строку тз и в зависимости от того что там лежит делать вообще что хочешь
54 Slypower
 
09.11.16
14:13
(45) ТЗ.Документ = Запрос.ТекущийДокумент;, где ТекущийДокумент - это  Документ.Реализация.ТекущийДокумент;
Пробую как в (24), то ничего. В расшифровке: ТЗ.Документ
55 Злопчинский
 
09.11.16
14:14
(52) чж ему выше написал что в расшифровку можно и тз положить и сз

Дальше если не тупой сообразит
56 Sserj
 
09.11.16
14:14
(49)
А зачем так все усложнять?
Не проще при выводе сразу делать понятно, типа:
спсРасшифровка = СоздатьОбъект("СписокЗначений");
спсРасшифровка.Установить("Команда", "КрутаяКоманда");
спсРасшифровка.Установить("Документ", НужныйДокумент);

А в обработке ячейки получать без всяких разложений:

Команда = Расшифровка.Получить("Команда");
Если Команда = ... Тогда
...
57 Это_mike
 
09.11.16
14:14
(53) в расшифровку положить номер документа,Ю а в ОбработкаРасшифровки выводить Предупреждение("А открой-ка, дружок, документ номер "+номерДокумента)
60 HawkEye
 
09.11.16
14:18
(54) короче, что в расшифровку положишь, то оттуда и возьмешь )
61 aka AMIGO
 
09.11.16
14:18
(53) А ну-ка еще раз :)

Процедура ОбработкаЯчейкиТаблицы(ЧтоВыводить, ФлагСтандартнойОбработки, Таблица, АдресЯчейки)

ФлагСтандартнойОбработки=1;

Если ...
ИначеЕсли ТипЗначенияСтр(ЧтоВыводить)="Документ" Тогда
Возврат;
КонецЕсли;
62 Slypower
 
09.11.16
14:22
(61) все, теперь пашет. (ЧтоВыводить, ФлагСтандартнойОбработки, Таблица, АдресЯчейки) - вот чего мне не хватало. я Оставлял только ЧтоВыводить. Спасибо.
63 Slypower
 
09.11.16
14:27
только вот теперь лишнее))))) При нажатии на стрелки, т.е. при выборе сортировки, выводит расшифровку в предупреждение.  Например: "НомерЭСЧФ+". Сортирует, но выводит это окно(((
64 Slypower
 
09.11.16
14:31
(63) все, сделал.     ФлагСтандартнойОбработки=1;
поместил только для ТипЗначенияСтр(ЧтоВыводить)="Документ".
Работает все.
65 aka AMIGO
 
09.11.16
14:41
(64) ну, и хорошо.

(63) Прочти (40), там упомянуто всё стандарное
Если надо что-то нестандартное вывести - надо указать:
ФлагСтандартнойОбработки=0;
К примеру:
66 Slypower
 
09.11.16
14:59
(65) спасибо за инфу и помощь. Тему можно закрывать
67 Злопчинский
 
09.11.16
15:52
(56) еще один.
я специально указал
что с"сделаем извращенно" - чтобы продемонстрировать
68 Злопчинский
 
09.11.16
15:53
(65) не совсем так.
если в расшифровку положить стандартные СЗ или ТЗ - то без программной доп.обработки при клике на ячейку просто выйдет диалоговоре окноа с надпсью "СписокЗначениен" или "ТаблицаЗначений"
69 Злопчинский
 
09.11.16
15:56
(65) на картинке кстати потенциально кривой код? если в ТЗК не найдено ЗН...
70 aka AMIGO
 
09.11.16
16:15
(69) Код прямой :)

если в ТЗК не найдено ЗН, то...

            ТЗК.НайтиЗначение(Зн, Стр, "Товар");
            Для ы=Стр По ТЗК.КоличествоСтрок() Цикл
                Если ы<=0 Тогда
                    ФСО=1;
                    Возврат;
                КонецЕсли;
71 aka AMIGO
 
09.11.16
16:21
+70 Можно осуществить желаемое еще двумя способами, но лень, Работает - не трожь! :)
72 aka AMIGO
 
09.11.16
16:23
Один из них:

Если ТЗК.НайтиЗначение(Зн, Стр, "Товар")=0 Тогда
ФСО=1;
Возврат;
КонецЕсли;
Для ы=Стр По ТЗК.КоличествоСтрок() Цикл
...

Код будет выполняться на 0.007 микросекунд быстрее.
73 Злопчинский
 
09.11.16
20:31
ТЗК.ВыбратьСтроки();
Попытка ТЗК.ПолучитьСтрокуПоНомеру(стр-1); Исключение КонецПопытки;
Пока ТЗК.ПолучитьСтроку()=1 Цикл
//далее по тексту
74 aka AMIGO
 
10.11.16
13:13
(73) Ошибка.
ТЗК я смотрю не все, и не с начала.
ТЗК отсортирована по товару, по "Найти" находится первая строка с товаром, в цикле проверяется товар, считанный из очередной строки ТЗК

В общем, не придирайся, не к чему :)
75 aka AMIGO
 
10.11.16
13:20
И это.. "Попытка.." в данном коде - это зло :)
Надо применять там, где обойтись без Попытки невозможно.
Основная теорема систематики: Новые системы плодят новые проблемы.