|
Внешняя дополнительная обработка - команды | ☑ | ||
---|---|---|---|---|
0
Масянька
03.10.19
✎
08:37
|
Доброе утро!
Есть обработка. Нужно добавить механизм заполнения табличных частей документа. Как? Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить(""); ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); //ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", ".... (Обмен)"); ПараметрыРегистрации.Вставить("Версия", "1.0.2.2"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить("Информация", "Обработка для обмена с системой ....."); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Нативи Маркет", "ОткрытьОбработку", "ОткрытиеФормы", Истина); ДобавитьКоманду(ТаблицаКоманд, "Выполнить синхронизацию", "ВыполнитьСинхронизацию", "ВызовСерверногоМетода"); // Я ДобавитьКоманду(ТаблицаКоманд, "Загрузка в табличную часть", "ЗагрузкаВТЧ", "ВызовКлиентскогоМетода", Ложь); //ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта() ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Спасибо. |
|||
1
Mankubus
03.10.19
✎
08:53
|
||||
2
Vadim_37
03.10.19
✎
08:57
|
Что-то типа
&НаСервере Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ЗагрузкаВТЧ" Тогда ЗагрузитьВТЧПолюбому(); КонецЕсли; КонецПроцедуры |
|||
3
Масянька
03.10.19
✎
08:58
|
(1) А почитать за тебя нужно?
Меня не устраивает " ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");". У меня дополнительная внешняя обработка (ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); " Мне нужно сделать команду с видом "заполнение объекта" (нечто в этом роде). Я не нашла в гугле. Поэтому и спрашиваю у гуру. |
|||
4
Масянька
03.10.19
✎
08:59
|
(2) Команда - заполнение ТЧ. В док-те должна появиться кнопка "Заполнить" и в ней моя команда.
|
|||
5
Cyberhawk
03.10.19
✎
09:04
|
Какие проблемы?
|
|||
6
Масянька
03.10.19
✎
09:06
|
(5) ДобавитьКоманду(ТаблицаКоманд, "Загрузка в табличную часть", "ЗагрузкаВТЧ", "ВызовКлиентскогоМетода", Ложь); - правильно?
Почему нет кнопки? |
|||
7
Sergz66
03.10.19
✎
09:08
|
(3) Сделай еще одну обработку и у нее сделай вид Заполнение объекта
|
|||
8
Cyberhawk
03.10.19
✎
09:08
|
Где нет?
|
|||
9
Масянька
03.10.19
✎
09:09
|
(8) В док-те.
Если делать "ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта")" - кнопка появляется. |
|||
10
Масянька
03.10.19
✎
09:10
|
(7) Тут обработка по обмену. В ней получается инфа для обмена. Потом это нужно загрузить в док-т.
|
|||
11
Cyberhawk
03.10.19
✎
09:11
|
Не каждый вид подключаемой обработки совместим с каждым типом использования команды
|
|||
12
RomanYS
03.10.19
✎
09:11
|
(6) где нет кнопки? У тебя массив назначений пустой
|
|||
13
Масянька
03.10.19
✎
09:11
|
(11) Откуда инфа? Где прочесть?
|
|||
14
Sergz66
03.10.19
✎
09:12
|
(10)Ну не предусмотрели разработчики БСП возможности использовать несколько видов у одной обработки...
|
|||
15
Sergz66
03.10.19
✎
09:12
|
(13)ИТС, не?
|
|||
16
Масянька
03.10.19
✎
09:14
|
(15) Ткни. Я не нашла.
|
|||
17
Cyberhawk
03.10.19
✎
09:14
|
||||
18
Cyberhawk
03.10.19
✎
09:15
|
(обратить внимание на описание возвращаемого значения)
|
|||
19
Cyberhawk
03.10.19
✎
09:16
|
Ну а потом, после лицезрения слова "глобальная", обратиться в раздел 5: https://its.1c.ru/db/bsp301doc#content:1865:1:issogl1_глобальные_отчеты_и_обработки
|
|||
20
Масянька
03.10.19
✎
09:17
|
(19) То бишь, как таковая команда (для конфы), определяется именно видом обработки?
|
|||
21
Cyberhawk
03.10.19
✎
09:18
|
Вид обработки на самом верхнем уровне определяет, будет команда глобальной (в подсистеме) или привязанной к объекту (в форме объекта и/или списка).
На следующем уровне (для неглобальных) уже определяет, в каком подменю будет команда - печать, заполнение, отчеты |
|||
22
Масянька
03.10.19
✎
09:19
|
(21) Я не поняла :(
|
|||
23
Масянька
03.10.19
✎
09:32
|
(21) А как на следующем уровне определить команду для заполнения? Пусть хотя бы для одного док-та.
|
|||
24
Cyberhawk
03.10.19
✎
09:39
|
(23) Если без записи объекта (чисто манипуляции с данными формы), то
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы(); Иначе подойдет и любой другой тип команды. |
|||
25
Масянька
03.10.19
✎
09:44
|
(24) В Сведениях:
ДобавитьКоманду(ТаблицаКоманд, "Загрузка в табличную часть", "ЗагрузкаВТЧ", ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы(), Ложь); Нету кнопки. А настройку команды как сделать? |
|||
26
Cyberhawk
03.10.19
✎
09:47
|
Не по чертежу значит
|
|||
27
Cyberhawk
03.10.19
✎
09:51
|
Пишешь же что в (9) все работает. Какие проблемы-то?
|
|||
28
Масянька
03.10.19
✎
09:52
|
(27) Это если менять вид обработки.
А не меняя вид обработки вариант сделать кнопку? |
|||
29
Cyberhawk
03.10.19
✎
10:03
|
Могу только порекомендовать перечитать (21)
|
|||
30
hhhh
03.10.19
✎
10:05
|
(28) а конфа новая? дело в том, что ТаблицаКоманд = ПолучитьТаблицуКоманд(); давным давно отменили. теперь по другому там в свежих БСП.
|
|||
31
Масянька
03.10.19
✎
10:08
|
(30) Получить прописана ниже
Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции |
|||
32
Масянька
03.10.19
✎
14:02
|
Чтобы новые темы не плодить...
Как в одной обработке вызвать процедуру из другой? Если Обработка <> Неопределено Тогда Обработка.ОбработкаИнициализация(); Это в первой &НаСервере Процедура ОбработкаИнициализация() Экспорт Это во второй. Пишет - Метод объекта не обнаружен (ОбработкаИнициализация) |
|||
33
Масянька
03.10.19
✎
14:02
|
Процедура (во второй) лежит в модуле объекта
|
|||
34
RomanYS
03.10.19
✎
14:03
|
(32) >>Это во второй.
В модуле обработки? Тип Обработка какой? |
|||
35
Масянька
03.10.19
✎
14:05
|
Отбой. Уже нашла.
PS Вот что значит "поговорить с умными людьми" :) |
|||
36
Масянька
04.10.19
✎
10:08
|
Все таки придется продолжать...
Описываю: - есть обработка, которая выполняет некий обмен. В этой обработке сделали форму со списком нужной фигни. - нужно в таб. часть док-тов сделать загрузку фигни (см. выше). Пришли к такому решению: - новая обработка (вид "Заполнение"). - в новой обработке открыть форму списка нужной фигни из обработки обмена. &НаСервере Функция ПолучитьОбработку() Обработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Нативи Маркет (Обмен)").Ссылка; Возврат Обработка; КонецФункции &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Если (ИдентификаторКоманды = "ЗагрузкаВТЧ") Тогда Обработка = ПолучитьОбработку(); ОткрытьФорму("Справочники.ДополнительныеОтчетыИОбработки." + Строка(обработка) + ".ФормаСпискаПересчет"); КонецЕсли; КонецПроцедуры Выдает - Неизвестное имя формы ... Прошу помощи. |
|||
37
Масянька
04.10.19
✎
11:32
|
Я понимаю, конечно, интереснее деликатесами делиться, но может кто ткнет в правильном направлении?
|
|||
38
hhhh
04.10.19
✎
11:57
|
(37) ну вот это "Строка(обработка)" - какая-то запредельная фигня.
|
|||
39
Масянька
04.10.19
✎
12:00
|
(38) Так важно?
|
|||
40
Масянька
04.10.19
✎
12:00
|
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ОткрытьФорму("Справочники.ДополнительныеОтчетыИОбработки.НативиМаркет.ФормаОбмена"); КонецПроцедуры Вот этот код должен работать? Обработка в справочнике есть. |
|||
41
Mankubus
04.10.19
✎
12:33
|
(40) нет это не будет работать
я тут еще раз погуглил..
только тебе нужно сначала получить обработку из справочника и записать ее например во временный файл |
|||
42
Масянька
04.10.19
✎
13:03
|
(41) Я это раньше тебя нагуглила. Только не работало.
Оказывается, толстый клиент нужен. |
|||
43
Масянька
04.10.19
✎
14:40
|
Еще вопрос: открытие с параметром.
Обработка по команде открывает обработку обмена. ПараметрыОбработки = Новый Структура(); ПараметрыОбработки.Вставить("ДокументОбработки" , Док); ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма.ФормаСпискаПересчет", ПараметрыОбработки); Но в обработке обмена ругань - недопустимое значение параметра (параметр номер 2) - на вот это &НаСервере Процедура СохранитьОбработку() ЗначениеВРеквизитФормы(Обработка, "Объект"); КонецПроцедуры Почему? |
|||
44
Кац
04.10.19
✎
14:50
|
Все не читал. Задача какая?
Открыть чтоль внешнюю обработку из справочника внешних обработок? |
|||
45
Масянька
04.10.19
✎
15:01
|
(44) Прочитай (43).
Стоит убрать параметры - все норм. Как обойти? |
|||
46
Кац
04.10.19
✎
15:10
|
(45) т.е. ты открываешь не основную форму обработки? попробуй основную
|
|||
47
Масянька
04.10.19
✎
15:12
|
(46) Да нет же!
В открываемую (!!!!) форму передаются параметры. При этом ругается здесь: &НаСервере Процедура СохранитьОбработку() ЗначениеВРеквизитФормы(Обработка, "Объект"); КонецПроцедуры Если параметры убрать - ругани нет. |
|||
48
Кац
04.10.19
✎
15:14
|
Расскажи сколько форм у ивоей обработки? ФормаСпискаПересчет это ведь не основная ее форма?
|
|||
49
Масянька
04.10.19
✎
15:14
|
(48)
1. 6 (шесть). 2. Не основная. |
|||
50
Масянька
04.10.19
✎
15:15
|
+ (49) Забыла: обработка не моя. Я только ломаю... Ну, ломальщик...
|
|||
51
Масянька
04.10.19
✎
15:16
|
(48) Если ты думаешь, что она (не основная форма) не открывается - забудь.
Без передачи параметров открывается норм. |
|||
52
Кац
04.10.19
✎
15:18
|
Я к тому, что с основной формой + параметры не будет проблем, откроется.
А с не основной формой есть какой-то нюанс и в параметр надо передавать ключ. Но это не точно, надо гуглить. Но можно схитрить - открывать основную, а из нее слету открывать ФормаСпискаПересчет |
|||
53
Масянька
04.10.19
✎
15:19
|
Слушайте, в ветке 75% постов - мои.
Со мной будет кто-нибудь говорить? |
|||
54
Масянька
04.10.19
✎
15:20
|
(52) Так-с...
А погуглить не знаешь где? А не могу нагуглить. |
|||
55
Масянька
04.10.19
✎
15:21
|
Мне параметр нужен именно в этой форме.
По-любому, в нее нужно передать параметр. |
|||
56
Кац
04.10.19
✎
15:33
|
v8: Как открыть вторую форму обработки, открытой через меню файл? (УФ) глянь пост 26, посмотри как маньяк открывает не основную форму
|
|||
57
Масянька
04.10.19
✎
15:35
|
(56) Спасибо
|
|||
58
Масянька
07.10.19
✎
16:06
|
Следующий вопрос:
(кратко напомню вводную: внешняя обработка по заполнению док-та - кнопка "Заполнить" в док-те) если ТЧ док-та не пуста - вопрос об очистке. Кол-во в ТЧ можно получить на клиенте (по-крайней мере, у меня на сервере - ругается), а вот вопрос - на клиенте. Как обойти? |
|||
59
Масянька
07.10.19
✎
16:25
|
Неужели реквизит лепить?
Но, ведь, простая же операция... |
|||
60
hhhh
07.10.19
✎
16:43
|
(59) ну в типовых посмотреть как сделано. Там вроде никаких реквизитов. Чистят без проблем.
|
|||
61
3achem
07.10.19
✎
16:45
|
(58) А что сложного? Диалог с пользователем - потом вызов серверной процедуры
|
|||
62
Масянька
07.10.19
✎
16:49
|
(60) В типовых все на клиенте. Поскольку в документе делается (или в справочнике).
А у меня - док-т это ссылка (из него вызвали обработку). |
|||
63
Масянька
07.10.19
✎
16:49
|
(61) А можно пример кода?
|
|||
64
hhhh
07.10.19
✎
16:52
|
(63) Ну типа
Если ОпределитьКоличествоНаСервере(СсылкаНаДОкумент) > 0 Тогда ПоказатьВопрос(, "Чистить ТЧ?"); |
|||
65
Масянька
07.10.19
✎
16:56
|
(64) А в типовых где? Уже так и сделала.
|
|||
66
Масянька
07.10.19
✎
16:58
|
Дальше:
&НаСервере Процедура ОчиститьТабЧастьДокта() ДокОбъект = Объект.РабочийДокумент.ПолучитьОбъект(); Сообщить("1 - " + ДокОбъект + " - " + ТипЗнч(ДокОбъект)); ТабЧасть = ДокОбъект.Запасы; Сообщить("2 - " + ТабЧасть.Количество()); ТабЧасть.Очистить(); Сообщить("3 - " + ТабЧасть.Количество()); КонецПроцедуры в 3-ем сообщении - 0, а закрываешь обработку (возвращаешься в док-т) - перечитать ничего не удалено. Почему? |
|||
67
pechkin
07.10.19
✎
16:59
|
открыть форму можно для любого вида обработки.
так что сделать привязанную и одновременно непривязанную можно |
|||
68
hhhh
07.10.19
✎
16:59
|
(65) Я не смотрел. Просто из опыта знаю, что она постоянно спрашивает, ТЧ непустая, очистить?
|
|||
69
pechkin
07.10.19
✎
16:59
|
(66) так не записыаешь же
|
|||
70
Масянька
07.10.19
✎
17:00
|
(69) А не записывая никак?
|
|||
71
pechkin
07.10.19
✎
17:01
|
(70) только как заполнение объекта
|
|||
72
Масянька
07.10.19
✎
17:02
|
(71) Переведи...
|
|||
73
hhhh
07.10.19
✎
17:02
|
(66) такая фишка в восьмерке
ДокОбъект1 = Объект.РабочийДокумент.ПолучитьОбъект(); и ДокОбъект2 = Объект.РабочийДокумент.ПолучитьОбъект(); ДокОбъект1 и ДокОбъект2 - это два разных объекта. Они ничего не знают друг о друге. |
|||
74
pechkin
07.10.19
✎
17:02
|
(72) у тебя вроде в (0) все переведено
|
|||
75
Масянька
07.10.19
✎
17:04
|
(73) Я бы это не фишкой назвала...
|
|||
76
Масянька
07.10.19
✎
17:04
|
Спасибо!
|
|||
77
Масянька
08.10.19
✎
08:29
|
(73) (74) То есть - чтобы увидеть в док-те (из которого вызвана форма заполнения) изменения, до-к нужно записать? Я правильно понимаю?
|
|||
78
Масянька
09.10.19
✎
13:14
|
Очень надеюсь, что последний вопрос...
&НаКлиенте Процедура Загрузить(Команда) ДокументОбъект = ВладелецФормы.Объект; КолВоСтр = КолВоСтрокВТабЧастиДокта(ДокументОбъект); Если (КолВоСтр > 0) Тогда Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("ЗагрузитьОтветНаВопрос", ЭтотОбъект, ДокументОбъект), НСтр("ru = 'Табличная часть документа заполнена. Очистить?'"), РежимДиалогаВопрос.ДаНет, 0); Иначе ЗагрузитьВДокумент(ДокументОбъект); КопироватьДанныеФормы(ДокументОбъект, ВладелецФормы.Объект); КонецЕсли; КопироватьДанныеФормы(ДокументОбъект, ВладелецФормы.Объект); ЭтаФорма.Закрыть(); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьОтветНаВопрос(Результат, ДокументОбъект) Экспорт Ответ = Результат; Если (Ответ = КодВозвратаДиалога.Да) Тогда ОчиститьТабЧастьДокта(ДокументОбъект); КонецЕсли; ЗагрузитьВДокумент(ДокументОбъект); КопироватьДанныеФормы(ДокументОбъект.Запасы, ВладелецФормы.Объект.Запасы); ВладелецФормы.Модифицированность = Истина; КонецПроцедуры &НаСервере Процедура ОчиститьТабЧастьДокта(ДокументОбъект) ТабЧасть = ДокументОбъект.Запасы; ТабЧасть.Очистить(); КонецПроцедуры Этот кусок работает шикарно - для очистки ТЧ. А вот для заполнения ТЧ - фигня. &НаСервере Процедура ЗагрузитьВДокумент(ДокументОбъект) Фильтр = Новый Соответствие; Фильтр.Вставить("filter", "{""include"":""productItems""}"); ПересчетСписок = ПолучитьТоварыНаСервере(Фильтр); тчЗапасы = Пересчет.Запасы; Для Каждого ТекСтр Из тчЗапасы Цикл ТекТовар = ТекСтр.Номенклатура; ТекХарактеристика = ТекСтр.Характеристика; ТекПартия = ТекСтр.Партия; ТекКоличество = ТекСтр.Количество; ТекЕдиница = ТекСтр.ЕдиницаИзмерения; ТекЦена = ТекСтр.Цена; ТекСтрДокта = ДокументОбъект.Запасы.Добавить(); ТекСтрДокта.Номенклатура = УстановитьЭлементСправочника(ТекТовар, Справочники.Номенклатура, "Не найдена номенклатура: "); ТекСтрДокта.ЕдиницаИзмерения = УстановитьЕдИзм(ТекЕдиница); ТекСтрДокта.Характеристика = УстановитьХарактеристику(ТекХарактеристика); ТекСтрДокта.Партия = УстановитьЭлементСправочника(ТекПартия, Справочники.ПартииНоменклатуры, "Не найдена партия: "); ТекСтрДокта.Количество = ТекКоличество; ТекСтрДокта.Цена = ТекЦена; КонецПроцедуры То есть - не вижу в ТЧ документа. Ну, почему?! |
|||
79
Масянька
09.10.19
✎
13:17
|
Сообщить("тек. стр. док - " + ТекСтрДокта.Номенклатура);
нормально пишет номенклатуру. А в док-те не отображается. |
|||
80
pechkin
09.10.19
✎
13:18
|
копировать данные формы не обязательно
ДокументОбъект = Форма.Объект можно на сервер передавать спокойно |
|||
81
Масянька
09.10.19
✎
13:32
|
(80) А почему в док-те не отображается?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |