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

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

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

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

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

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

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

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

Открыть форму конкретного документа (тонкий клиент) - 1С
Здравствуйте. Мне нужно при записи элемента справочника открывать форму документа УстановкаЦенНоменклатуры. Форму нового документа...

1C 8.x Открыть форму и заполнить поле табличного документа - 1С
Привет, народ! подскажите, как открыть форму программно , сформировать макет и выводить этот макет в табличное поле на этой форме? ...

1C 7.x Как можно открыть форму нового документа с уже некоторыми заполненными полями? - 1С
Хочу сделать это из обработки. Алгоритм приблизительно следующий: Программа берёт XML файл, извлекает из него какието данные, затем...

Отчет в СКД - 1С
Добрый день. Делаю простенький отчет в системе компановки данных. За основу беру регистр сведений "СоставГруппСотрудников". ВЫБРАТЬ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dethmontt
Модератор
Эксперт 1С
2501 / 2310 / 362
Регистрация: 10.03.2011
Сообщений: 8,103
Записей в блоге: 1
Завершенные тесты: 1
26.12.2016, 17:45 #2
Tatiana21, выведи еще ссылку на документ
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
27.12.2016, 13:07  [ТС] #3
Мне надо по нажатию на строку перейти на форму документа, а не по нажатию на ячейку Ссылка.

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

Добавлено через 2 часа 28 минут
Подскажите хотя бы как реализовать возможность открыть форму документа (не основную) по щелчку на строку (в крайнем случае на ячейки Разрешение и Заявление), прописав код в модуле формы отчета. Который день пытаюсь разобраться в примерах, что-то не очень понятно.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
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") Тогда
        Форма = ЗначениеРасшифровки.ПолучитьФорму("ФормаТД");
        Форма.Открыть();
        Форма.Активизировать();    
    Иначе
        СтандартнаяОбработка = Истина;      
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
Функция ПолучитьЗначениеРасшифровки(Расшифровка)
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); 
    Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля();//Тут получаем поля расшифровки, среди которых находим нужное
    НужноеПоле = Поля.Найти("НомерРазрешенияНаУбытиеТоваров");
    Если НужноеПоле = Неопределено Тогда    
        Возврат Неопределено;    
    Иначе        
        Возврат НужноеПоле.Значение;    
    КонецЕсли;    
КонецФункции
Он не работает. Подскажите, пожалуйста, ошибки и возможное их разрешение. Заранее спасибо!
Dethmontt
27.12.2016, 18:07
  #5
 Комментарий модератора 
Не нужно дублировать темы
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
28.12.2016, 12:46  [ТС] #6
Может кто-нибудь подскажет по данной тематике что-нибудь?
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 13:51 #7
Самое простое - в запросе выбирать кроме нужных полей ещё и ссылку. В настройке полей у поля "Ссылка" в ячейке "Выражение представления" поставить нужное вам поле (разрешение, заявление и т.п.). Таким образом, у вас будет в ячейке отчета храниться ссылка, и по даблклику на ней автоматом будет открываться документ, но отображаться она будет как любое другое выбранное вами поле.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
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.ПолучитьФорму("ФормаТД").Открыть();
    КонецЕсли;
КонецПроцедуры
Nath
1 / 1 / 1
Регистрация: 03.12.2013
Сообщений: 38
28.12.2016, 14:44 #9
Создать форму отчета, если не создана. У поля табличного документа, куда выводится результат отчета есть событие ОбработкаРасшифровки. Там, используя параметр "Расшифровка" получать значение в ячейке, получать нужную форму и открывать её.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
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.ПолучитьФорму("ФормаТД");
        ДокументОбъект.Открыть();
    КонецЕсли;
КонецПроцедуры
Открывает форму при нажатии на любую ячейку и выборе пункта Открыть таможенную декларацию. Но возникла другая проблема. Форма открывается не по текущей записи, а пустая (создается новая). Что нужно учесть?
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].Значение;
    Возврат ЗначениеВЯчейке;
КонецФункции
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
29.12.2016, 08:57  [ТС] #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 #13
Так надо посмотреть - в той нестандартной форме, как называется основной реквизит? Объект - стандартное имя, но в вашем случае может там и не объект вовсе.
Tatiana21
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 104
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.Форма.ФормаТД", ПараметрыФормы); 
        Форма.Открыть();
    КонецЕсли;
КонецПроцедуры
Dethmontt
Модератор
Эксперт 1С
2501 / 2310 / 362
Регистрация: 10.03.2011
Сообщений: 8,103
Записей в блоге: 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].Значение;
    Возврат ЗначениеВЯчейке;
КонецФункции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2016, 10:05
Привет! Вот еще темы с ответами:

1C 8.x (тонкий) Отчет в СКД - 1С
Здравствуйте! Помогите пожалуйста разобраться с отчетом в СКД! Нужно чтобы в строках были наименования: Животное, Болезнь, Район, а в...

Отчет СКД - 1С
Создала внешний отчет с помощью СКД. Результат вывожу на форму в Поле табличного документа. Ка мне сделать расшифровку результата? С чего...

1C 8.x Отчет в СКД - 1С
Здравствуйте.У меня отчет вида как на рисунке 1,подскажите пожалуйста, как в СКД преобразовать отчет до такого вида как на 2 рисунке?

Отчет СКД - 1С
Добрый день. Пытаюсь какой уже день, все мысли исчерпаны. Пытаюсь сделать отчет при помощи СКД Вот то что у меня имеется, но...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.12.2016, 10:05
Ответ Создать тему
Опции темы

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