|
Создание внешней обработки заполнения табличных частей в управляемом приложении | ☑ | ||
---|---|---|---|---|
0
Slepoi7
25.12.14
✎
09:44
|
// ----- модуль объекта ------
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Наименование", "Заполнить табличную часть "+ПараметрыРегистрации.Версия); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу РеализацияТоваровУслуг"); ТипСтрока = Новый ОписаниеТипов("Строка"); Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", ТипСтрока); Команды.Колонки.Добавить("Идентификатор", ТипСтрока); Команды.Колонки.Добавить("Использование", ТипСтрока); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", ТипСтрока); НоваяКоманда = Команды.Добавить(); НоваяКоманда.Представление = "Заполнить табличную часть = "+ПараметрыРегистрации.Версия; // отображается в меню!!! НоваяКоманда.Идентификатор = "Заполнить табличную часть "+ПараметрыРегистрации.Версия; НоваяКоманда.Использование = "ОткрытиеФормы"; НоваяКоманда.ПоказыватьОповещение = Истина; //НоваяКоманда.Модификатор = "ПечатьMXL"; НоваяКоманда.Модификатор = ""; ПараметрыРегистрации.Вставить("Команды", Команды); Возврат ПараметрыРегистрации; КонецФункции // ------ модуль формы ---- &НаКлиенте Процедура Кн1(Команда) // вот тут бы надо корректировать табличную часть,... не могу подобраться к документу .... // .......... // Заполнить(1); КонецПроцедуры ==== Что делать ??? ==== |
|||
1
hawksib
25.12.14
✎
10:01
|
зачем тебе процедура кн1, которая нигде не вызывается? че ты хочешь?
|
|||
2
Slepoi7
25.12.14
✎
10:09
|
Как зачкм ? ак как же по другому ? Когда я вызываю документ, нажимаю кнопку "Заполнить" и из выпадающего меню вызываю свою процедуру (форму), с помощью которой хочу занести свои данные с своём формате в табличную часть этого документа....
|
|||
3
banco
25.12.14
✎
10:10
|
(0) что делать? прочитать документацию, посмотреть примеры
|
|||
4
Slepoi7
25.12.14
✎
10:10
|
... а процедура Кн1 - это кнопка на теле формы, что вызывается....
|
|||
5
hawksib
25.12.14
✎
10:11
|
если кн1 это то, о чем я догадываюсь, а именно сама процедура по обраотке табличной части, тогда попробуй заменить "ОткрытиеФормы" на "ВызовКлиентскогоМетода", создать форму и напиши в ней
&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт //Спросим у пользователя разрешение на продолжение обработки Режим = РежимДиалогаВопрос.ДаНет; Текст = "Текущие данные документа(ов) будут заменены новыми без возможности восстановления. |Продолжить?"; Ответ = Вопрос(Текст, Режим, 0); Если Ответ = КодВозвратаДиалога.Да Тогда //Если пользователь дал разрешение на продолжение, то начнем перебирать все //документы, у которых мы планируем заполнить табличную часть Для каждого Элемент из ОбъектыНазначенияМассив Цикл //Зададим ключ поиска документа, из которого вызвана данная обработка, //чтобы получить ссылку на редактирумый документ в удобном виде для //функции ОткрытьФорму() КлючПоиска = Новый Структура("Ключ", Элемент); //Но нам не надо открывать новую форму (окно) для изменяемого документа, а //Нам надо все изменения показать в уже открытых у клиента окнах Окна = ПолучитьОкна(); ДокументИзмененВОкне = Ложь; Для каждого Окно из Окна Цикл //Окно изменяемого документа будет точно не основным, а вспомогательным, поэтому //сразу пропускаем основное окно, а далее идем на не очень хороший способ поиска открытого окна //изменяемого документа. Мы просто переберем все окна, а в заголовке, которых будет встречаться //Наименование, номер и дата нужного документа - будем изменять Если НЕ Окно.Основное И Найти(Окно.Заголовок, Элемент) Тогда //Передадим ключ поиска (можно сказать ссылку на объект) и данные о найденном открытом окне //в функцию ОткрытьФорму() //Код находится в цикле на тот случай, если открытых окон изменяемого документа больше одного Форма = ОткрытьФорму("Документ.ОтражениеЗарплатыВУчете.Форма.ФормаДокумента",КлючПоиска,,,Окно); //Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную //В объекте содержатся все реквизиты (элементы) формы НовыйОбъект = Форма.Объект; //Мы помещаем объект формы в переменную, //так как должны передать её в процедуру на сервере, //где нельзя изменять объект формы, зато можно править переменную содержащую его ДокументИзмененВОкне = ЗаполнитьОбъектВОкне(НовыйОбъект); //После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект, //которую необходимо передать в уже полученную нами форму КопироватьДанныеФормы(НовыйОбъект, Форма.Объект); КонецЕсли; КонецЦикла; Если Не ДокументИзмененВОкне Тогда ЗаполнитьОбъект(Элемент); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере Функция ЗаполнитьОбъектВОкне(НовыйОбъект) Документ = НовыйОбъект.Ссылка.ПолучитьОбъект(); Таблица = Документ.ОтражениеВУчете; Для Каждого СтрокаДанных Из Таблица Цикл Если Счет_НДФЛ(СтрокаДанных.СчетКт) Тогда Подразделение = ПолучитьПодразделение(Документ.Дата, Документ.Организация, СтрокаДанных.СубконтоДт1); СтрокаДанных.СубконтоКт2 = Подразделение; НовыйОбъект.ОтражениеВУчете[СтрокаДанных.НомерСтроки - 1].СубконтоКт2 = Подразделение; КонецЕсли; КонецЦикла; Документ.Записать(); Возврат Истина; КонецФункции &НаСервере Процедура ЗаполнитьОбъект(НовыйОбъект) Документ = НовыйОбъект.ПолучитьОбъект(); Таблица = Документ.ОтражениеВУчете; Для Каждого СтрокаДанных Из Таблица Цикл Если Счет_НДФЛ(СтрокаДанных.СчетКт) Тогда Подразделение = ПолучитьПодразделение(Документ.Дата, Документ.Организация, СтрокаДанных.СубконтоДт1); СтрокаДанных.СубконтоКт2 = Подразделение; КонецЕсли; КонецЦикла; Документ.Записать(); Возврат; КонецПроцедуры у меня так сделано и работает, вариант с открытием формы мне не понравился, в свой время. |
|||
6
Slepoi7
25.12.14
✎
10:11
|
... нет документации .... хотя бы ссылку на прмеры....
|
|||
7
Slepoi7
25.12.14
✎
10:12
|
... Спасибо.... буду пробовать!....
|
|||
8
banco
25.12.14
✎
10:15
|
(6) http://its.1c.ru/db/bspdoc примеры в демо базе БСП
|
|||
9
hawksib
25.12.14
✎
10:16
|
(7) бывают случаи, когда нужно ОткрытиеФормы, мне оно было не нужно и я от него избавился, ели как. Но сначала нашел пример с открытием формы, и по нему делал http://prosto1s.ru/index.php/19-sozdanie-vneshnej-obrabotki-zapolneniya-tablichnykh-chastej-v-upravlyaemom-prilozhenii-na-primere-konfiguratsii-1s-bukhgalteriya-predpriyatiya
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |