Консультация № 173069
08.10.2009, 19:30
0.00 руб.
0 4 2
Здравствуйте, уважаемые эксперты! конфигурация дописана на основе Бухгалтерия 7.7.

В табличном документе на выбранной ячейке (где документ) нужно чтобы открывался документ и курсор был на определенной строке. Где мне нужно это дописать?
См. приложение.
Заранее благодарю.


Приложение:
Перем ТЗ;
//*******************************************
Процедура Сформировать()

Спр = СоздатьОбъект("Справочник.ДоговорыСтроительства");

Т = СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица1");
НазваниеОрганизации = Константа.НазваниеОрганизации;
Заголовок = ?(ПустоеЗначение(ВыбКонтрагент)=1,"",СокрЛП(ВыбКонтрагент.ПолнНаименование));
Т.ВывестиСекцию("Заголовок");
Т.ВывестиСекцию("Шапка");

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Договор","Справочник");
ТЗ.НоваяКолонка("Заказчик","Справочник");
ТЗ.НоваяКолонка("Документ","Документ");
ТЗ.НоваяКолонка("Сумма","Число",15,2);
ТЗ.НоваяКолонка("Содержание","Строка",200);
ТЗ.НоваяКолонка("НомерСтрокиДок", "Число");

Если ПустоеЗначение(ВыбКонтрагент) = 1 Тогда

Спр.ВыбратьЭлементы();
Ном = 0;
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;

Если Спр.ПометкаУдаления() = 1 Тогда
Продолжить;
КонецЕсли;

Если ((Спр.ДатаНачала >= НачДата) и (Спр.ДатаКонца <= КонДата)) или ((ПустоеЗначение(Спр.ДатаНачала)=1) и (ПустоеЗначение(Спр.ДатаКонца)=1)) Тогда
Ном = Ном + 1;

Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Спр.Контрагент, 2);
НачДатаОтчета = Мин(Спр.ДатаДоговора,?(ПустоеЗначение(Спр.ДатаНачала)=1,НачГода(РабочаяДата()),Спр.ДатаНачала));
Ит.ВыполнитьЗапрос (НачДатаОтчета,РабочаяДата(),"62.1","50.1,51,60.1",3,,"проводка","С");

ИтогоОплачено = 0;
ТекстОплаты = "";
Ит.ВыбратьПериоды();
Пока Ит.ПолучитьПериод() = 1 Цикл
Оплачено = Ит.Операция.Сумма;
ТекстОплаты = ТекстОплаты + СокрЛП(Формат(Оплачено,"Ч015.2- "))+" ("+Ит.Операция.ДатаОперации+")"+ РазделительСтрок;
ТЗ.НоваяСтрока();
ТЗ.Договор = Спр.ТекущийЭлемент();
ТЗ.Заказчик = Спр.ТекущийЭлемент().Контрагент;
ТЗ.Документ = Ит.Операция.Документ;
ТЗ.Сумма = Оплачено;
ТЗ.Содержание = Ит.Операция.СодержаниеПроводки;
ТЗ.НомерСтрокиДок = Ит.Операция.НомерСтрокиДокумента();
ИтогоОплачено = ИтогоОплачено + Оплачено;
КонецЦикла;
Опл = ТекстОплаты;

Т.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Иначе
КонецЕсли;
ПериодИОрганизация = " ("+ПериодСтр(НачДата, КонДата)+")"+НазваниеОрганизации;
ВерхнийКолонтитул = "Отчет по договорам строительства"+ПериодИОрганизация;
Т.ПараметрыСтраницы(2,,,10,5,10,10,,,1,,);
Т.ТолькоПросмотр(1);
Т.Показать("Отчет по договорам строительства");

КонецПроцедуры

//******************************************************************************
Процедура ОбработкаЯчейкиТаблицы(Значение,Фл) // Предопределенная
Перем Документ, НомерСтрокиДок, СписокПараметров;
Если (ТипЗначенияСтр(Значение)="Справочник")Или(ТипЗначенияСтр(Значение)="Число") Тогда

Фл=0;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Расшифровка");
ТЗ.ВыбратьСтроки();
ИтогСумма = 0;
Заказчик = Значение.Контрагент;
Таб.ВывестиСекцию("Заголовок");
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Если (ТЗ.Заказчик = Заказчик) и (ТЗ.Договор = Значение) Тогда
Содержание = ТЗ.Содержание;
ТекДок = ТЗ.Документ;
Если ТекДок.Вид() = "Выписка" Тогда
ТекРасшифровка = СоздатьОбъект("СписокЗначений");
ТекРасшифровка.Установить("Документ", ТекДок);
ТекРасшифровка.Установить("НомерСтроки", ТЗ.НомерСтрокиДок);
// ТекДок.ПолучитьСтрокуПоНомеру(ТЗ.НомерСтрокиДок);
Иначе
ТекРасшифровка = ТекДок;
КонецЕсли;
ИтогСумма = ИтогСумма + ТЗ.Сумма;
Таб.ВывестиСекцию("Секция");
КонецЕсли;
КонецЦикла;

Таб.ВывестиСекцию("Итого");
Таб.ТолькоПросмотр(1);
Таб.Показать("");

ИначеЕсли ТипЗначенияСтр(Значение)="Документ" Тогда

ОткрытьФорму(Значение,,1);
ИначеЕсли ТипЗначенияСтр(Значение) = "СписокЗначений" Тогда

Фл = 0;

Документ = Значение.Получить("Документ");
НомерСтрокиДок = Значение.Получить("НомерСтроки");

СписокПараметров = СоздатьОбъект("СписокЗначений");
СписокПараметров.Установить("НомерСтроки", НомерСтрокиДок);

ОткрытьФорму(Документ, СписокПараметров);
КонецЕсли;
КонецПроцедуры // ОбработкаЯчейкиТаблицы

Обсуждение

Неизвестный
09.10.2009, 06:43
общий
это ответ
Здравствуйте, Darina9.

Это можно сделать в процедуре формы документы "ПриОткрытии", проанализировав параметр открытия "НомерСтроки".

Если он существует и не равен нулю - то вызвать метод модуля формы документа АктивизироватьСтроку().
5
Спасибо!
Неизвестный
09.10.2009, 14:36
общий
Darina9:
Скажите, а используемая таблица значений вписана как расшифровка в выводимой ячейке? Ибо это важный момент: я вижу, что заносятся значения в эту ТЗ, и по идее, их нужно считать.
Неизвестный
09.10.2009, 18:30
общий
это ответ
Здравствуйте, Darina9.

Вы используете таблицу значений, а в моем примере это список значений, я думаю, так рациональнее. Ключемые операторы я описал в комментариях:
Код:
Процедура ОбработкаЯчейкиТаблицы(Расшифровка, СтандартнаяОбработка, Таблица) Экспорт
Перем Отчет, Конт;

Если ТипЗначенияСтр(Расшифровка) <> "СписокЗначений" Тогда // В списке значений передаются параметры, в т.ч. ссылка на документ и номер строки в этом документе
СтандартнаяОбработка = 1;
Возврат;
КонецЕсли;

Меню = СоздатьОбъект("СписокЗначений");
// Расшифровка отчета
Объект = Расшифровка.Получить("Объект");

...

ИначеЕсли (ТипЗначенияСтр(Объект) = "Документ") И (ПустоеЗначение(Объект) = 0) Тогда
// на документ
Меню.ДобавитьЗначение("Документ");
Меню.ДобавитьЗначение("Журнал");
Если Меню.ВыбратьЗначение(Отчет, "",,, 1) = 1 Тогда
Если Отчет = "Документ" Тогда
Стр = Расшифровка.Получить("СтрокаДокумента"); // -------------- Получаю номер строки
//ОткрытьФорму(Объект, Стр);
ОткрытьФорму(Объект, Конт); // -------------- Открываю полученный документ
Конт.АктивизироватьСтроку(Стр); // -------------- Активизирую эту строку по номеру
Иначе
ОткрытьФорму("Журнал.ЖурналОбщий", Конт);
Конт.АктивизироватьОбъект(Объект);
КонецЕсли;
КонецЕсли;
ИначеЕсли ...

...

КонецЕсли;
Меню = 0;
КонецПроцедуры

Прокомментирую код:
При двойном клике на ячейке таблицы в отчете, вызывается предопреленная процедура ОбработкаЯчейкиТаблицы, которая является обработчиком этого события.
Разумеется, заранее нужно в расшифровку этой ячейки "положить" нужный набор данных. У Вас это таблица значений (массив), у меня же список значений. т.е. одномерный массив.
Затем из расшифровки этой ячейки я беру номер строки и в открываемом документе активирую эту строку. Лялин Виталий Владимирович это решил передачей параметра формы, у меня же за это отвечает объект Док.

Успехов!
С уважением, Владимир.
Неизвестный
13.10.2009, 19:05
общий
ОткрытьФорму(Документ, СписокПараметров) вернет в СписокПараметров контекст открытой формы.
СписокПараметров.АктивизироватьСтроку(5)
СписокПараметров.Форма.Активизировать("Контрагент") еще и установит курсор в колонку контрагента
КонецПроцедуры//ОбработкаЯчейкиТаблицы
Форма ответа