Форум программистов, компьютерный форум CyberForum.ru

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
 
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
#1

1с отчет скд по нажатию на строку открыть форму документа - 1С

26.12.2016, 16:17. Просмотров 1004. Ответов 44

Здравствуйте. Платформа 1С: Предприятие 8.3.
Столкнулась с такой проблемой. Имеется отчет "Отчет по грузоперевозкам", созданный с помощью СКД на основании данных документа "CMR", который выводит следующие поля за указываемый период:
Получатель | Грузополучатель | Разрешение | Заявление
Тип полей "Получатель" и "Грузополучатель" = СправочникСсылка.Контрагенты, тип полей "Разрешение" и "Заявление" = Дата.
Необходимо реализовать возможность открытия формы документа "CMR" по нажатию на строку. Я так понимаю, за это будет отвечать функция Расшифровать.
Подскажите, пожалуйста, можно ли реализовать эту возможность в СКД. Если да, то каким образом? Заранее спасибо!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dethmontt
Модератор
Эксперт 1С
2374 / 2183 / 324
Регистрация: 10.03.2011
Сообщений: 7,647
Записей в блоге: 1
Завершенные тесты: 1
26.12.2016, 17:45     1с отчет скд по нажатию на строку открыть форму документа #2
Tatiana21, выведи еще ссылку на документ
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
27.12.2016, 13:07  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #3
Мне надо по нажатию на строку перейти на форму документа, а не по нажатию на ячейку Ссылка.

Добавлено через 1 час 48 минут
При чем форма документа не является основной.

Добавлено через 2 часа 28 минут
Подскажите хотя бы как реализовать возможность открыть форму документа (не основную) по щелчку на строку (в крайнем случае на ячейки Разрешение и Заявление), прописав код в модуле формы отчета. Который день пытаюсь разобраться в примерах, что-то не очень понятно.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
27.12.2016, 15:23  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #4
Здравствуйте. Платформа 1С: Предприятие 8.3.
Столкнулась с такой проблемой. Имеется отчет "Отчет по грузоперевозкам", созданный с помощью СКД на основании данных документа "CMR", который выводит следующие поля за указываемый период:
Получатель | Грузополучатель | Номер разрешения на убытие товаров | Дата разрешения
Тип полей "Получатель" и "Грузополучатель" = СправочникСсылка.Контрагенты, тип поля "Номер разрешения на убытие товара" = Строка и тип поля "Дата разрешения" = Дата.
Необходимо реализовать возможность открытия формы документа "CMR" по нажатию на любую ячейку строки сформированного отчета. Форма, которую необходимо вызвать, не является основной! Называется "ФормаТД".
Попробовала переделать найденный на просторах Интернета следующий код и вставила его в модуль формы отчета:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    СтандартнаяОбработка = Ложь;
    ЗначениеРасшифровки = ПолучитьЗначениеРасшифровки(Расшифровка);
    Если ТипЗнч(ЗначениеРасшифровки) = Тип("ДокументСсылка.CMR") Тогда
        Форма = ЗначениеРасшифровки.ПолучитьФорму("ФормаТД");
        Форма.Открыть();
        Форма.Активизировать();    
    Иначе
        СтандартнаяОбработка = Истина;      
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
Функция ПолучитьЗначениеРасшифровки(Расшифровка)
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); 
    Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();//Тут получаем поля расшифровки, среди которых находим нужное
    НужноеПоле = Поля.Найти("НомерРазрешенияНаУбытиеТоваров");
    Если НужноеПоле = Неопределено Тогда    
        Возврат Неопределено;    
    Иначе        
        Возврат НужноеПоле.Значение;    
    КонецЕсли;    
КонецФункции
Он не работает. Подскажите, пожалуйста, ошибки и возможное их разрешение. Заранее спасибо!
Dethmontt
27.12.2016, 18:07
  #5
 Комментарий модератора 
Не нужно дублировать темы
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
28.12.2016, 12:46  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #6
Может кто-нибудь подскажет по данной тематике что-нибудь?
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 13:51     1с отчет скд по нажатию на строку открыть форму документа #7
Самое простое - в запросе выбирать кроме нужных полей ещё и ссылку. В настройке полей у поля "Ссылка" в ячейке "Выражение представления" поставить нужное вам поле (разрешение, заявление и т.п.). Таким образом, у вас будет в ячейке отчета храниться ссылка, и по даблклику на ней автоматом будет открываться документ, но отображаться она будет как любое другое выбранное вами поле.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
28.12.2016, 14:18  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #8
Таким образом же предается ссылка на основную форму документа, а мне нужно открыть не основную форму. Как лучше прописать?

Добавлено через 1 минуту
Начала писать по-другому, ругается, что не определена переменная СхемаКомпоновкиДанных
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
     Перем ВыполненноеДействие; 
    СтандартнаяОбработка = Ложь;    
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));   
    ДоступныеДействия = Новый Массив();
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть таможенную декларацию");
    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, ДополнительныеДействия);
    Если ВыполненноеДействие = "Открыть таможенную декларацию" Тогда
        ДокументОбъект = Документы.CMR.ПолучитьФорму("ФормаТД").Открыть();
    КонецЕсли;
КонецПроцедуры
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 14:44     1с отчет скд по нажатию на строку открыть форму документа #9
Создать форму отчета, если не создана. У поля табличного документа, куда выводится результат отчета есть событие ОбработкаРасшифровки. Там, используя параметр "Расшифровка" получать значение в ячейке, получать нужную форму и открывать её.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
28.12.2016, 15:32  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #10
Этот код я и прописываю в модуле формы отчета в событии ОбработкаРасшифровки. Но я не понимаю, как правильно организовать обработку.

Добавлено через 12 минут
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    СхемаКомпоновкиДанных1 = Отчеты.ОтчетПоГрузоперевозкам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    СтандартнаяОбработка = Ложь;    
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных1));  
    ДоступныеДействия = Новый Массив();
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть таможенную декларацию");
    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, ДополнительныеДействия);
    Если ВыполненноеДействие = "Открыть таможенную декларацию" Тогда
        ДокументОбъект = Документы.CMR.ПолучитьФорму("ФормаТД");
        ДокументОбъект.Открыть();
    КонецЕсли;
КонецПроцедуры
Открывает форму при нажатии на любую ячейку и выборе пункта Открыть таможенную декларацию. Но возникла другая проблема. Форма открывается не по текущей записи, а пустая (создается новая). Что нужно учесть?
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 18:39     1с отчет скд по нажатию на строку открыть форму документа #11
Ну так, конечно, открывается пустая форма - вы ж ничего не сделали, чтоб эту форму связать со значением в расшифровываемой ячейке. В приведенном коде нет ничего, что получало бы ссылку на документ в выбранной пользователем ячейке - её нужно получить и заполнить объект формы. Например, так. Не утверждаю, что это оптимально, но должно работать (для УФ):

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
    Форма=ПолучитьФорму("Документ.CMR.ИмяВашейФормыЗдесь");
    ОбъектФормы=Форма.Объект;
    ЗаполнитьОбъектЗначением(ОбъектФормы,ЗначениеВЯчейке);
    КопироватьДанныеФормы(ОбъектФормы,Форма.Объект);
    Форма.Открыть();
КонецПроцедуры  
 
&НаСервере
Процедура ЗаполнитьОбъектЗначением(ОбъектФормы,ЗначениеВЯчейке);
    ОбъектВЯчейке=ЗначениеВЯчейке.ПолучитьОбъект();
    ЗначениеВДанныеФормы(ОбъектВЯчейке,ОбъектФормы);
КонецПроцедуры
 
&НаСервере
Функция ПолучитьЗначениеВЯчейке(Расшифровка)
    РасшифровкаДанные=ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ЗначениеВЯчейке=РасшифровкаДанные.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
    Возврат ЗначениеВЯчейке;
КонецФункции
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
29.12.2016, 08:57  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #12
А почему КопироватьДанныеФормы? Если форма документа заполнена, они должны не переносится с отчета на форму, а уже быть на ней

Добавлено через 13 минут
Система ругается на Форма.Объект.
Ошибка:
{Отчет.ОтчетПоГрузоперевозкам.Форма.ФормаОтчета.Форма(6)}: Поле объекта не обнаружено (Объект)
ОбъектФормы=Форма.Объект;

Добавлено через 2 минуты
1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
    Форма=ПолучитьФорму("Документ.CMR.Форма.ФормаТД");
    ОбъектФормы = Форма.Объект;
    ЗаполнитьОбъектЗначением(ОбъектФормы,ЗначениеВЯчейке);
    КопироватьДанныеФормы(ОбъектФормы,Форма.Объект);
    Форма.Открыть();
КонецПроцедуры
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
29.12.2016, 09:24     1с отчет скд по нажатию на строку открыть форму документа #13
Так надо посмотреть - в той нестандартной форме, как называется основной реквизит? Объект - стандартное имя, но в вашем случае может там и не объект вовсе.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
29.12.2016, 09:48  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #14
Вместо Объект написала имя реквизита ДокументОбъект, все равно ошибки
1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
    Форма=ПолучитьФорму("Документ.CMR.Форма.ФормаТД");
    ОбъектФормы=Форма.ДокументОбъект;
    ЗаполнитьОбъектЗначением(ОбъектФормы,ЗначениеВЯчейке);
    КопироватьДанныеФормы(ОбъектФормы,Форма.ДокументОбъект);                       
    Форма.Открыть();
КонецПроцедуры
Почему-то начинает ругаться на процедуры в модуле формы ФормаТД...

Добавлено через 57 секунд
А можно ли открыть текущий элемент, передав в открываемую форму параметр "Ключ" с ссылкой на текущий элемент документа?
1C
1
2
ПараметрыФормы = Новый Структура("Ключ", Объект.Ссылка); 
ОткрытьФорму("Документ.CMR.Форма.ФормаТД", ПараметрыФормы);
Добавлено через 16 минут
Попробовала так, но форма открывается пустой
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    СхемаКомпоновкиДанных1 = Отчеты.ОтчетПоГрузоперевозкам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    СтандартнаяОбработка = Ложь;    
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных1));  
    ДоступныеДействия = Новый Массив();
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть таможенную декларацию");
    Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, ДополнительныеДействия);
    Если ВыполненноеДействие = "Открыть таможенную декларацию" Тогда
        ПараметрыФормы = Новый Структура ("ДокументОбъект", Документы.CMR);
        Форма=ПолучитьФорму("Документ.CMR.Форма.ФормаТД", ПараметрыФормы); 
        Форма.Открыть();
    КонецЕсли;
КонецПроцедуры
Dethmontt
Модератор
Эксперт 1С
2374 / 2183 / 324
Регистрация: 10.03.2011
Сообщений: 7,647
Записей в блоге: 1
Завершенные тесты: 1
29.12.2016, 10:05     1с отчет скд по нажатию на строку открыть форму документа #15
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
//ЗначениеВЯчейке - Должен быть ТИП ДокументСсылка
    Сообщить("Значение = "+ЗначениеВЯчейке+"; Тип = "+ТипЗнч(ЗначениеВЯчейке));
    ОткрытьФорму("Документ.CMR.Форма.ФормаТД", Новый Структура("Ключ", ЗначениеВЯчейке));
КонецПроцедуры  
 
&НаСервере
Функция ПолучитьЗначениеВЯчейке(Расшифровка)
    РасшифровкаДанные=ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ЗначениеВЯчейке=РасшифровкаДанные.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
    Возврат ЗначениеВЯчейке;
КонецФункции
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
29.12.2016, 10:22  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #16
Ругается на тип ячеек, даже на те у которых тип Документ.Ссылка.

Добавлено через 2 минуты
Это же не основная форма документа, почему ЗначениеВЯчейке должен быть тип Документ.Ссылка?

Добавлено через 5 минут
Получается, что на основной форме документа есть все поля из отчета, на дополнительной только Номер разрешения на убытие товаров и Дата разрешения. Мне надо получить дополнительную форму, которая связана с данными ячеек отчета. В форме списка документа имеется кнопка, по нажатию которой открывается дополнительная форма. После ее запонления данные из дополнительной формы попадают на основную форму документа.
Dethmontt
Модератор
Эксперт 1С
2374 / 2183 / 324
Регистрация: 10.03.2011
Сообщений: 7,647
Записей в блоге: 1
Завершенные тесты: 1
29.12.2016, 10:34     1с отчет скд по нажатию на строку открыть форму документа #17
Цитата Сообщение от Tatiana21 Посмотреть сообщение
которая связана с данными ячеек отчета
Как она связана?
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
29.12.2016, 10:54  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #18
Связана в том смысле, что не создавать форму должно, а если поля в документе заполнены и значения этих полей отобразились в отчете, по нажатию на ячейку отчета открылась дополнительная форма с соответствующими данными.

Добавлено через 3 минуты
Может я не понимаю, что в данном случае значит тип ДокументСсылка? Я вывела в отчете еще одно поле Ссылка (из документа CMR), которое имеет Выражение представление (в СКД) Ссылка.Номер и Заголовок Номер. Т.е. по нажатию по этой ячейке я могу открыть основную форму документа. Когда я вставила Ваш код, система ругается на тип ячейки.

Добавлено через 7 минут
В общем с Вашим кодом тоже открывает пустую форму
Dethmontt
Модератор
Эксперт 1С
2374 / 2183 / 324
Регистрация: 10.03.2011
Сообщений: 7,647
Записей в блоге: 1
Завершенные тесты: 1
29.12.2016, 10:55     1с отчет скд по нажатию на строку открыть форму документа #19
Цитата Сообщение от Tatiana21 Посмотреть сообщение
система ругается на тип ячейки.
???

Добавлено через 26 секунд
Tatiana21, текст сообщения в студию

Добавлено через 21 секунду
Значение = ???? Тип = ????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 10:55     1с отчет скд по нажатию на строку открыть форму документа
Еще ссылки по теме:

1c СКД Цветной отчет 1С
Отчет СКД перекрестный 1С 1C 8.x (тонкий)
1С Отчет СКД. Пересчет значения поля табличного документа при изменении другого поля
Расчет только в группировке (отчет СКД) 1С
Отчет в СКД 1С

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 97
29.12.2016, 10:55  [ТС]     1с отчет скд по нажатию на строку открыть форму документа #20
Я ошибку в коде была сделала, вот и ругалось. Сейчас все хорошо, но форму открывает пустую
Yandex
Объявления
29.12.2016, 10:55     1с отчет скд по нажатию на строку открыть форму документа
Ответ Создать тему
Опции темы

Текущее время: 08:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru