![]() |
|
Заполнение ТЧ стандартного документа из внешней обработки | ☑ | ||
---|---|---|---|---|
0
kks
13.07.21
✎
07:41
|
Добрый день.
Необходимо из внешней обработки заполнить документ ПоступлениеТоваровУслуг. Реквизиты заполняются нормально, а вот ТЧ Товары нет Есть ли стандартный способ, без изменения ОбработкаЗаполнения в расширении заполнения ТЧ документа, либо ТЧ формы документа. Код вызова формы следующий: ДанныеЗаполнения = Новый Структура; ДанныеЗаполнения.Вставить("Контрагент",Объект.Контрагент); ДанныеЗаполнения.Вставить("ДоговорКонтрагента",Объект.ДоговорКонтрагента); ДанныеЗаполнения.Вставить("Товары",Объект.СписокНоменклатурыДокументов); ПараметрыДляОповещения = Новый Структура; ПараметрыДляОповещения.Вставить("ЧтоСделаноНаФорме", ""); ЗакрытиеОбратныйВызов = Новый ОписаниеОповещения("ОбработкаЗакрытияФормы", ЭтаФорма,ПараметрыДляОповещения); ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары",Новый Структура("ЗначенияЗаполнения",ДанныеЗаполнения), ЭтаФорма,,,,ЗакрытиеОбратныйВызов); |
|||
1
SSSSS_AAAAA
13.07.21
✎
08:46
|
(0)
1. Для заполнения любых частей документа форма совершенно не нужна. 2. Документы хорошо заполняются прямым обращениям к частям документа без ОбработкаЗаполнения и структур. |
|||
2
Peka50
13.07.21
✎
10:09
|
А если нужно вызвать экспортный обработчик формы ?
|
|||
3
kks
13.07.21
✎
10:10
|
Вопрос как раз в том, чтобы оператор мог проверить правильность заполнения документа в форме и сам нажал Провести и закрыть или отменил запись документа
|
|||
4
Peka50
13.07.21
✎
10:14
|
вот пример кода. Но у меня не получается автоматически сохранить форму с данными. Сохраняется только пустая табличная часть
&НаКлиенте Процедура СоздатьДокументаАванса(Команда) Форма = ПолучитьФорму("Документ.НачислениеЗаПервуюПоловинуМесяца.Форма.ФормаДокумента", ); ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную ЗаполнитьДокументНаСервереБезКонтекста(ДанныеФормы); // Заполняем шапку документа на сервере КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); РасчетЗарплатыРасширенныйКлиент.ЗаполнитьДокументНачисленияЗарплаты(Форма); // заполняем табличную часть документа КонецПроцедуры &НаСервереБезКонтекста Функция ЗаполнитьДокументНаСервереБезКонтекста(ДанныеФормы); Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.НачислениеЗаПервуюПоловинуМесяца")); Док = Документы.НачислениеЗаПервуюПоловинуМесяца.СоздатьДокумент(); Док.Дата = ТекущаяДата(); Док.МесяцНачисления = '20210701'; Док.ОкончаниеПериодаНачисления = '20210715'; ЗначениеВДанныеФормы(Док, ДанныеФормы); КонецФункции |
|||
5
arsik
гуру
13.07.21
✎
10:14
|
(0) В БСП есть механизм внешних обработок. Через него делайте. Там есть, как раз для таких случаев, ввод на основании.
|
|||
6
Peka50
13.07.21
✎
10:25
|
Ввод на основании не даст возможности использовать процедуру формы.
|
|||
7
kks
13.07.21
✎
10:31
|
Да вопроса нет: заполнить Объект и запихнуть его в форму. Но я понимаю, что ПолучитьФорму - это моветон, использовать его неправильно, а без этого метода не получается. Или я неправильно понимаю стандарты разработки?
|
|||
8
Peka50
13.07.21
✎
10:33
|
Вы правильно понимаете, но на 17 релизе это работает.
|
|||
9
kks
13.07.21
✎
10:35
|
Ввод на основании для данного документа в стандарте подразумевает только Счёт и ещё 2 документа, в этом списке нет внешней обработки
|
|||
10
kks
13.07.21
✎
10:37
|
С чем связано отсутствие в ОбработкеЗаполнения заполнения ТЧ документа по произвольной ТЧ не понятно. Кто-то владеет этой информацией?
|
|||
11
SSSSS_AAAAA
13.07.21
✎
10:54
|
(3) Да пусть проверяет сколько угодно. После заполнения.
|
|||
12
SSSSS_AAAAA
13.07.21
✎
10:57
|
(10) Обработки заполнения никогда не принимали произвольные данные. Они всегда были рассчитаны или на известные им документы или на входную структуру, хотя бы частично совпадающую со структурой заполняемого документа.
|
|||
13
SSSSS_AAAAA
13.07.21
✎
10:59
|
(10) Разумеется. Внешние обработки никогда не были основанием для ввода.
|
|||
14
ДенисЧ
13.07.21
✎
10:59
|
(10) Обработка заполнения изначально задумывалась для интерактива. Как тебе пользователь передаст интерактивно произвольную ТЗ?
|
|||
15
SSSSS_AAAAA
13.07.21
✎
11:01
|
(7) А при ем тут стандарты обработки? Еще раз - заполнение документа совершенно никак не связано с формой. Заполняете докуметн и потом открываете заполненный документ для правки пользователем. Каким боком тут ПолучитьФорму и стандарты разработки?
|
|||
16
Kassern
13.07.21
✎
11:08
|
(0) В СведенияОВнешнейОбработке указываешь :
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта"); На форме создаешь экспортную процедуру на клиенте ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Далее в ней уже можешь обратиться к открытому документу, например: ТвойДокумент=ВладелецФормы.Объект; И делай в этой процедуре все что хочешь, хочешь ТЧ перезаполняй, хочешь, реквизиты меняй. |
|||
17
Kassern
13.07.21
✎
11:09
|
(16) через дополнительные обратоки у тебя добавится кнопка в определенный тобой документ. По ней будет выполняться экспортная процедура на форме внешней обработки.
|
|||
18
Kassern
13.07.21
✎
11:09
|
(17) *дополнительные обработки)
|
|||
19
GreyK
13.07.21
✎
11:29
|
(0) Конфигурация какая?
|
|||
20
kks
13.07.21
✎
11:46
|
Бухгалтерия предприятия 3.0 последняя
|
|||
21
kks
13.07.21
✎
11:53
|
(17) Внешняя обработка получает xml из другой базы не 1с с документами поступлений.
Список выводится на форму. При щелчке на строке открывается вторая форма, в которой производится сравнение объектов из xml и базы: контрагент, номенклатура, организация, склад. При отсутствии создаются новые элементы справочников вручную По кнопке вызывается форма документа ПоступлениеТоваровИУслуг. Если документ проведён, то на форму в обработке поступает номер накладной и выгружается в xml. Поэтому не понятно, как это будет обработка ЗаполнениеОбъекта? |
|||
22
GreyK
13.07.21
✎
11:55
|
(20) В БП3 можно заполнить по структуре. Создаешь структуру, вставляешь в неё основные реквизиты документа, вставляешь таблицу значений "Товары" и всё! Видишь как всё просто :)
|
|||
23
GreyK
13.07.21
✎
11:59
|
+(22) Посмотри ЗаполнениеДокументов.Заполнить(ЭтотОбъект, ДанныеЗаполнения, Истина)
Там есть строчки: Если ТипДанныхЗаполнения = Тип("Структура") Тогда ЗаполнитьПоСтруктуре(ДокументОбъект, ДанныеЗаполнения, МетаданныеДокумента); КонецЕсли; |
|||
24
kks
13.07.21
✎
12:53
|
(23) Не всё так просто. Если бы глубже залезли в процедуру ЗаполнитьПоСтруктуре, то там заполняют одни реквизиты, без ТЧ. ТЧ заполняется только в Модуле Менеджера в функции ЗаполнитьНаОснованииСчета или что-то около того
|
|||
25
hhhh
13.07.21
✎
13:10
|
(24) а это тогда что у вас?
ДанныеЗаполнения.Вставить("Товары",Объект.СписокНоменклатурыДокументов); Товары это и есть таб часть. Но вы туда какую-то херню похоже лепите, вместо таблицы. |
|||
26
1Сергей
13.07.21
✎
13:40
|
Вы со скольки метров ТЧ от ТЗ отличаете?
|
|||
27
kks
13.07.21
✎
13:53
|
(25) Это я пробовал передать ТЧ. Но обработки ТЧ при ОбработкаЗаполнения в стандарте НЕТ (Точнее есть, если заполнен ДанныеЗаполнения.Основание).
Видимо самый простой способ: в расширение добавить "После" ОбработкаЗаполнения. И там проверить наличие своего индикатора, например ДанныеЗаполнения.ОснованиеВнешнее = True и пробовать заполнить ТЧ документа Если у кого-то есть конкретные механизмы, с которыми реально сталкивались, то я буду рад, чтобы всё было по одинэсовскому феншую |
|||
28
GreyK
13.07.21
✎
13:56
|
(27) У меня в РТ сделано так:
Форма = ПолучитьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта"); ДанныеФормы = Форма.Объект; СформироватьДокументНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); |
|||
29
1Сергей
13.07.21
✎
14:01
|
У меня вот так сделано
&НаКлиенте Процедура ПеренестиТовары(Команда) ОчиститьСообщения(); ПеренестиТоварыФрагмент(); КонецПроцедуры &НаКлиенте Процедура ПеренестиТоварыФрагмент() Перем СтруктураВыбора; Если ПроверитьЗаполнение() Тогда Закрыть(); СтруктураВыбора = Новый Структура(); СтруктураВыбора.Вставить("АдресТоваровВХранилище", ПоместитьМатериалыВХранилище()); Если ЗначениеЗаполнено(ИмяТЧ) Тогда СтруктураВыбора.Вставить("ИмяТЧ", ИмяТЧ); КонецЕсли; ОповеститьОВыборе(СтруктураВыбора); КонецЕсли; КонецПроцедуры &НаСервере Функция ПоместитьМатериалыВХранилище() Материалы = Объект.МатериалыИУслуги.Выгрузить(); Возврат ПоместитьВоВременноеХранилище(Материалы); КонецФункции |
|||
30
kks
13.07.21
✎
14:05
|
Нашел статью:
http://agency-sd.ru/?p=40 |
|||
31
kks
13.07.21
✎
14:33
|
Решил, основываясь на статье и ваших подсказках:
1. В модуле формы внешней обработки:
|
|||
32
kks
13.07.21
✎
14:33
|
Не нашел каким тегом код свернуть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |