Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/58: Рейтинг темы: голосов - 58, средняя оценка - 5.00
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
1

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

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

Здравствуйте. Платформа 1С: Предприятие 8.3.
Столкнулась с такой проблемой. Имеется отчет "Отчет по грузоперевозкам", созданный с помощью СКД на основании данных документа "CMR", который выводит следующие поля за указываемый период:
Получатель | Грузополучатель | Разрешение | Заявление
Тип полей "Получатель" и "Грузополучатель" = СправочникСсылка.Контрагенты, тип полей "Разрешение" и "Заявление" = Дата.
Необходимо реализовать возможность открытия формы документа "CMR" по нажатию на строку. Я так понимаю, за это будет отвечать функция Расшифровать.
Подскажите, пожалуйста, можно ли реализовать эту возможность в СКД. Если да, то каким образом? Заранее спасибо!
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2016, 16:17
Ответы с готовыми решениями:

Обычные формы, отчет на СКД - вывод параметров на форму
Обычная форма, делаю отчет на СКД. Задаю параметры , на форме размещаю Табличное поле - В его...

По двойному нажатию на строку в dbgrid открыть форму и заполнить поля dbedit данными из это строки
Доброго времени суток! Помогите пожалуйста! Нужно по двойному нажатию на строку dbgrid открывать...

Отчет СКД. Пересчет значения поля табличного документа при изменении другого поля
Народ, есть отчет без СКД, нужно разрешить ввод пользователем 5 графы отчета, и на основе...

Открыть форму по нажатию кнопки на клавиатуре
Всем привет! Искал, но не нашёл, как открыть форму по нажатию кнопки на клавиатуре: Этот код не...

Открыть другую форму по нажатию на кнопку
Поля для ввода фамилии, имени, адреса, телефона. 3 элемента CheckBox, которые позволяют определять...

44
Dethmontt
Модератор
Эксперт 1С
2756 / 2510 / 446
Регистрация: 10.03.2011
Сообщений: 9,159
Записей в блоге: 1
Завершенные тесты: 1
26.12.2016, 17:45 2
Tatiana21, выведи еще ссылку на документ
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
27.12.2016, 13:07  [ТС] 3
Мне надо по нажатию на строку перейти на форму документа, а не по нажатию на ячейку Ссылка.

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

Добавлено через 2 часа 28 минут
Подскажите хотя бы как реализовать возможность открыть форму документа (не основную) по щелчку на строку (в крайнем случае на ячейки Разрешение и Заявление), прописав код в модуле формы отчета. Который день пытаюсь разобраться в примерах, что-то не очень понятно.
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
27.12.2016, 15:23  [ТС] 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") Тогда
        Форма = ЗначениеРасшифровки.ПолучитьФорму("ФормаТД");
        Форма.Открыть();
        Форма.Активизировать();    
    Иначе
        СтандартнаяОбработка = Истина;      
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
Функция ПолучитьЗначениеРасшифровки(Расшифровка)
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); 
    Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();//Тут получаем поля расшифровки, среди которых находим нужное
    НужноеПоле = Поля.Найти("НомерРазрешенияНаУбытиеТоваров");
    Если НужноеПоле = Неопределено Тогда    
        Возврат Неопределено;    
    Иначе        
        Возврат НужноеПоле.Значение;    
    КонецЕсли;    
КонецФункции
Он не работает. Подскажите, пожалуйста, ошибки и возможное их разрешение. Заранее спасибо!
0
27.12.2016, 15:23
Dethmontt
27.12.2016, 18:07
  #5
 Комментарий модератора 
Не нужно дублировать темы
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
28.12.2016, 12:46  [ТС] 6
Может кто-нибудь подскажет по данной тематике что-нибудь?
0
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 13:51 7
Самое простое - в запросе выбирать кроме нужных полей ещё и ссылку. В настройке полей у поля "Ссылка" в ячейке "Выражение представления" поставить нужное вам поле (разрешение, заявление и т.п.). Таким образом, у вас будет в ячейке отчета храниться ссылка, и по даблклику на ней автоматом будет открываться документ, но отображаться она будет как любое другое выбранное вами поле.
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
28.12.2016, 14:18  [ТС] 8
Таким образом же предается ссылка на основную форму документа, а мне нужно открыть не основную форму. Как лучше прописать?

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

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

Добавлено через 2 минуты
1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
    Форма=ПолучитьФорму("Документ.CMR.Форма.ФормаТД");
    ОбъектФормы = Форма.Объект;
    ЗаполнитьОбъектЗначением(ОбъектФормы,ЗначениеВЯчейке);
    КопироватьДанныеФормы(ОбъектФормы,Форма.Объект);
    Форма.Открыть();
КонецПроцедуры
0
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
29.12.2016, 09:24 13
Так надо посмотреть - в той нестандартной форме, как называется основной реквизит? Объект - стандартное имя, но в вашем случае может там и не объект вовсе.
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
29.12.2016, 09:48  [ТС] 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.Форма.ФормаТД", ПараметрыФормы); 
        Форма.Открыть();
    КонецЕсли;
КонецПроцедуры
0
Dethmontt
Модератор
Эксперт 1С
2756 / 2510 / 446
Регистрация: 10.03.2011
Сообщений: 9,159
Записей в блоге: 1
Завершенные тесты: 1
29.12.2016, 10:05 15
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ЗначениеВЯчейке=ПолучитьЗначениеВЯчейке(Расшифровка);
//ЗначениеВЯчейке - Должен быть ТИП ДокументСсылка
    Сообщить("Значение = "+ЗначениеВЯчейке+"; Тип = "+ТипЗнч(ЗначениеВЯчейке));
    ОткрытьФорму("Документ.CMR.Форма.ФормаТД", Новый Структура("Ключ", ЗначениеВЯчейке));
КонецПроцедуры  
 
&НаСервере
Функция ПолучитьЗначениеВЯчейке(Расшифровка)
    РасшифровкаДанные=ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ЗначениеВЯчейке=РасшифровкаДанные.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
    Возврат ЗначениеВЯчейке;
КонецФункции
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
29.12.2016, 10:22  [ТС] 16
Ругается на тип ячеек, даже на те у которых тип Документ.Ссылка.

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

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

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

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

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

Добавлено через 21 секунду
Значение = ???? Тип = ????
0
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 123
29.12.2016, 10:55  [ТС] 20
Я ошибку в коде была сделала, вот и ругалось. Сейчас все хорошо, но форму открывает пустую
0
29.12.2016, 10:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 10:55

По нажатию на кнопку открыть форму php
На форме есть кнопка, по нажатию на которую хочу открыть другой файл php (уже созданный). <a...

Открыть вторую форму по нажатию на кнопку
Можно ли сделать две формы?(Чтобы вторая открывалась при нажатии на какую-то кнопу и также имела...

Открыть форму документа
Пожалуйста, подскажите: как в 8.3 выполнить вывод формы документа для заполнения реквизитов при...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.