Имя: Пароль:
1C
1С v8
Обработка заполнения таб части на Управляемых формах
,
0 Юзер123
 
naïve
02.02.16
17:21
Доброго дня.

САБЖ опять же.
делаю все по инструкции


http://catalog.mista.ru/public/84119/  

http://prosto1s.ru/index.php/19-sozdanie-vneshnej-obrabotki-zapolneniya-tablichnykh-chastej-v-upravlyaemom-prilozhenii-na-primere-konfiguratsii-1s-bukhgalteriya-predpriyatiya


разные пробовал.


В итоге ничего не получается.

Идея такая. Необходимо что бы обработка данные из Экселя подтягивала в таб часть документа.  Можно сделать конечно что то типа обработки где просто указывать в какой документ грузить данные. Но хочется разобраться именно с обработкой заполнения таб части.


Обрабоку делаю и в модуле объекта все прописываю. Она прекрасно подключается к документу и появляется кнопочка "Заполнить".

Вопрос   КАК сказать обработке в каком именно документе мы находимся?  ВладелецФормы.Объект у меня не работает почему то.  


Делаю 1 в 1 как в примерах
1 Юзер123
 
naïve
02.02.16
17:44
НАтолкните на мысль то
2 sonne666
 
02.02.16
18:39
(0) в модуле объекта при подключении тип использование у команды какой? ОткрытиеФормы?
3 sonne666
 
02.02.16
18:40
ДобавитьКоманду(ТаблицаКоманд,
     "Загрузить услуги из excel",
     "Загрузить услуги из excel",
     "ОткрытиеФормы",
     Истина);
4 Cyberhawk
 
02.02.16
18:51
Без фото не взлетит
5 Cyberhawk
 
02.02.16
18:51
(имею в виду код)
6 Юзер123
 
naïve
03.02.16
08:22
ДобавитьКоманду(ТаблицаКоманд,
    "Заполнить документ",
    "Заполнить документ",
    "ОткрытиеФормы",
    Истина);


вот что у меня прописано.
7 Fedor-1971
 
03.02.16
08:49
(0) в качестве мысли: ВладелецФормы - это форма (тип Данныеформы, а не объект хранения в БД) владелец текущей открытой формы и доступна НаКлиенте.

(6) имелся в виду код заполнения ТЧ или его начало, там где получаешь доступ к данным формы
8 Юзер123
 
naïve
03.02.16
09:07
(7)

А  можно как то владельца формы , точнее по владельцу формы , получить ссылку на документ из которого открыта обработка?

Как в примере..



&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    
    //Если ИдентификаторКоманды = "Заполнить" Тогда
    //    
    //    Документ = ОбъектыНазначения[0];
    //    КонецЕсли;

        //Спросим у пользователя разрешение на продолжение обработки
    Режим = РежимДиалогаВопрос.ДаНет;
    Текст = "Текущие данные документа будут заменены новыми без возможности восстановления.
    |Продолжить?";
    Ответ = Вопрос(Текст, Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда
            
    
        //Если пользователь дал разрешение на продолжение, то начнем перебирать все
        //документы, у которых мы планируем заполнить табличную часть
        Для каждого Элемент из ОбъектыНазначения Цикл

            //Зададим ключ поиска документа, из которого вызвана данная обработка,
            //чтобы получить ссылку на редактирумый документ в удобном виде для
            //функции ОткрытьФорму()
            КлючПоиска = Новый Структура("Ключ", Элемент);

            //Но нам не надо открывать новую форму (окно) для изменяемого документа, а
            //Нам надо все изменения показать в уже открытых у клиента окнах
            Окна = ПолучитьОкна();
            Для каждого Окно из Окна Цикл
9 Fedor-1971
 
03.02.16
09:21
(8) из команды не скажу, а из самой формы:
НаКлиенте
Через ЭтаФорма.Владелец можно получить данные формы владельца.
10 Юзер123
 
naïve
03.02.16
09:24
(9)  Спачибо. Сейчас проверю
11 Юзер123
 
naïve
03.02.16
09:27
(9)

ЭтаФорма.Владелец = Управляемая форма.  

Ссылки на  документ нет(
12 Юзер123
 
naïve
03.02.16
09:30
ЭтаФорма.Владелец.Заголовок  сообщает название моего документа. Уже хорошо)
13 Defender aka LINN
 
03.02.16
09:32
(11) ЭтаФорма.Владелец.Объект
14 Юзер123
 
naïve
03.02.16
09:34
(13) ДанныйФормыСтруктура.
15 Юзер123
 
naïve
03.02.16
09:48
Не догоняю зачем так было усложнять. неужели нельзя было сделать ссылочку на реквизит хотя бы строковый. По которому всегда можно было бы найти   Документ.
16 Defender aka LINN
 
03.02.16
09:49
(14) Да. И?
(15) Открой глаза до щелчка и вперься в (13)
17 Юзер123
 
naïve
03.02.16
10:02
Объект  = ЭтаФорма.ВладелецФормы.Объект;
ВыбДок = ПолучитьДокументНаСервере(Объект);    




&НаСервере

Функция  ПолучитьДокументНаСервере(Заголовок)
    
    
Док = ДанныеФормыВЗначение(Заголовок,Тип("ДокументОбъект.ПоступлениеТоваровУслуг"));
Возврат(Сокрлп(Док));
    
КонецФункции

Ругается на не соответствие типов 1
18 Defender aka LINN
 
03.02.16
10:16
(17) Нахфига тебе получать объект? Что мешает работать с данными формы?
19 Юзер123
 
naïve
03.02.16
10:21
(18)

Можно любой пример?

Имею на клиенте ДанныйФормыСтруктура

Как мне получить Ссылку на документ. Или доступ к таб части документа в которм я сейчас открыл обработку?
20 Fedor-1971
 
03.02.16
10:32
(17) Объект  = ЭтаФорма.ВладелецФормы.Объект; - вот это, это просто 5. Не надо использовать имя переменной Объект для получения неких внешних данных, придумай своё.

(19) Вот тебе пример:
ПапаСРемнём  = ЭтаФорма.ВладелецФормы.Объект; - получишь ДанныеФормы
тч=ПапаСРемнём.НужнаяТЧформы - доступ к ТЧ, того, что на форме, но ещё не в БД
вСсылка=ПапаСРемнём.Ссылка - раз уж хочешь именно ссылку
21 Defender aka LINN
 
03.02.16
10:33
(19) НАХРЕНА тебе ссылка? А если объект новый?
Строка = Объект.Товары.Добавить(); - такой доступ не подойдет, не?
22 Юзер123
 
naïve
03.02.16
10:36
(20) (21)

На клиенте. ?



Объект  = ЭтаФорма.ВладелецФормы.Объект; - вот это, это просто 5.



Это поправил сразу после того как написал 17.
23 Юзер123
 
naïve
03.02.16
10:40
(21)

Все прекрасно. Простите что долго тупил.

Спасибо огромное)
24 Юзер123
 
naïve
03.02.16
10:50
А теперь самое интересно). Как обновить форму документа которая открыта?)
25 Fedor-1971
 
03.02.16
11:02
(24) Через Оповестить("ОбновисьФормаОднако") и ОбработкаОповещения на форме.
Только ты изменял саму форму, что собрался обновлять?
26 Юзер123
 
naïve
03.02.16
11:24
(25)
Я менял таб часть. Потом записывал Док. Но пользователь этого не видит пока не закроет и откроет док опять.
27 Юзер123
 
naïve
03.02.16
11:24
Можно это  проделать автоматом. т.е. закрыть форму документа, а потом открыть.
28 Юзер123
 
naïve
03.02.16
11:37
Или я  продолжаю тупить дико?(
29 FIXXXL
 
03.02.16
11:39
(28) попробуй ЗначениеВДанныеФормы, если ты с документом на сервере игрался
30 Fedor-1971
 
03.02.16
11:58
(28) ты что сделал то? в предыдущем, просто изменил форму, соответственно она обновляется автоматически.
Если изменил и записал сам объект в БД, тогда ЭтаФорма.Прочитать() - вытащит то, что записано из БД на форму
31 Юзер123
 
naïve
03.02.16
12:01
(30)

Я получил ссылку на объект.

Потом на сервере получил объект, сделал то что надои записал его.
32 Fedor-1971
 
03.02.16
12:02
(31) когда вернёшься в форму ЭтаФорма.Прочитать();
33 Юзер123
 
naïve
03.02.16
12:03
(32) А что она должна прочитать? все данные же в документе хранятся а не на форме)
34 Юзер123
 
naïve
03.02.16
12:03
(32) Да и нет такой функции у ЭтаФорма
35 Fedor-1971
 
03.02.16
12:13
(34) Обманываешь
36 Юзер123
 
naïve
03.02.16
12:15
(35)

ЭтаФорма - форма обработки верно?.  В ней я выбираю только Файл из которого гружу, и храню в ней данные из этого файла + ссылку на документ из которого запускаю обработку.
37 Юзер123
 
naïve
03.02.16
12:16
У меня обработка заполнения Таб части. Т.е.  я открываю документ и его заполняю данными.
38 Fedor-1971
 
03.02.16
12:22
(36) шутник, ты изменил Объект документа, а хочешь прочитать его в форму обработки?
По порядку: Открыл документ (ф1), вызвал обработку (ф2), в ней изменил данные объекта, ПередЗакрытием в ф2 отправляешь оповещение Оповестить("ИзмениласьТЧТвоегоДокумента"), в ф1 в ОбработкаОповещения:
Если событие="ИзмениласьТЧТвоегоДокумента" тогда
   ЭтаФорма.Прочитать();
КонецЕсли;

Результат: обновлённая форма твоего документа с данными которые ты втянул и потерянными данными того, что пользователь изменял до вызова обработки.
39 Юзер123
 
naïve
03.02.16
12:32
(38) В параметре передавать Структуру?
40 Fedor-1971
 
03.02.16
12:34
(39) в параметре чего?
41 Юзер123
 
naïve
03.02.16
12:38
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

    Если ИмяСобытия = "Запись_СчетФактураПолученный"
        И ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("ДокументыОснования") И Параметр.ДокументыОснования.Найти(Объект.Ссылка) <> Неопределено Тогда
        ПоступлениеТоваровУслугФормыКлиентСервер.ЗаполнитьРеквизитыПроСчетФактуру(ЭтаФорма, Параметр.РеквизитыСФ);
        УправлениеФормой(ЭтаФорма);
    ИначеЕсли ИмяСобытия = "ОбработанаТабличнаяЧастьТовары" И ТипЗнч(Параметр) = Тип("Структура")
        И Параметр.Свойство("ИдентификаторВызывающейФормы")
        И Параметр.ИдентификаторВызывающейФормы = УникальныйИдентификатор Тогда
        ОбработкаОповещенияОбработкиТабличнойЧастиТоварыНаСервере(Параметр);
    ИначеЕсли ИмяСобытия = "ОбновитьСостояниеЭД" Тогда
        УстановитьТекстСостоянияЭДНаСервере();
    ИначеЕсли ИмяСобытия = "ОбновитьДокументИБПослеЗаполнения" И Параметр.Найти(Объект.Ссылка) <> Неопределено Тогда
        Прочитать();
    ИначеЕсли ИмяСобытия = "ИзмененСтатусДокументов" Тогда




Вот процедура в форме документа.

Я про оповещении попадаю в нее.  Меня устраивает Вот этот вариант

ИначеЕсли ИмяСобытия = "ОбновитьДокументИБПослеЗаполнения" И Параметр.Найти(Объект.Ссылка) <> Неопределено Тогда
        Прочитать();



Что бы ничего не пилить в конфиге.
42 Fedor-1971
 
03.02.16
12:44
(41) я бы дописал свою строку с ИмяСобытия="", но если хочешь использовать то, что уже есть, тогда передавай Параметр так, что-бы попасть в нужное тебе условие.
43 Fedor-1971
 
03.02.16
12:46
42+ Для начала просто допиши, проверь работоспособность, а потом будешь стараться попасть в то, что уже есть. Может тебе такой вариант не подойдёт, только время потеряешь пытаясь использовать стандартное.
44 Юзер123
 
naïve
03.02.16
12:46
(42) (43) ок. попробую сейчас.

А вообще какой тип должен былть для параметра?)
45 Fedor-1971
 
03.02.16
12:50
(44) любой тебе удобный, как передашь, так и обрабатаешь
46 Юзер123
 
naïve
03.02.16
12:52
(45) Там именно что бы Найти работало.
47 Юзер123
 
naïve
03.02.16
12:58
(43) Работает Прочитать(). . Осталось параметр верно передать)
48 Fedor-1971
 
03.02.16
13:01
(47) Дерзай! Удачи.
49 Юзер123
 
naïve
03.02.16
13:19
(48) cgfcb,j)
50 Юзер123
 
naïve
03.02.16
13:19
(49) Спасибо
51 Юзер123
 
naïve
03.02.16
16:00
Поместил ссылку на документ в массив и передал как параметр массив. Типовой код его скушал.  

Все хорошо работает и обновляет данные.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший