|
Заполнение счетов учета номенклатуры в ТЧ документа, созданного внешней обработкой | ☑ | ||
---|---|---|---|---|
0
JonSilver
06.10.21
✎
17:45
|
Всем доброго времени суток!
Конфигурация: 1С:Бухгалтерия предприятия, редакция 3.0 (3.0.101.19), платформа: 8.3.18.1289. Пытаюсь заполнить счета учета номенклатуры (СчетУчета,СчетДоходов,СчетРасходов и т.п.) в документе "РеализацияТоваровУслуг", созданного внешней обработкой. Документ еще не записан. 1 способ: использовать экспортную процедуру "РеализацияТоваровУслугФормы.СкладПриИзменении(ЭтотОбъект)", но не могу с клиента передать на сервер Форму нового и незаписанного документа. 2 способ: использовать экспортную процедуру "СчетаУчетаВДокументах.Заполнить(ДанныеФормы.Ссылка, Отбор)", но натыкаюсь на невозможность записи нового значения реквизита "СчетУчетаРасчетовСКонтрагентом". Хотя в отборе пытаюсь передать только нужную таблицу "Товары": Отбор = Новый Структура; Отбор.Вставить("ТабличнаяЧасть", "Товары"); или Отбор = Новый Структура("ТабличнаяЧасть", Новый Соответствие); Отбор.ТабличнаяЧасть.Вставить("Товары", Истина); В массиве коллекций появляется элемент с ключом "", что для процедуры является, как я понял, все реквизиты моего документа. Может кто подсказать рабочий метод решения данной проблемы? |
|||
1
JonSilver
06.10.21
✎
17:51
|
Второй день ломаю копья об этот монумент))). Дабы исключить лишние вопросы вот кусок кода:
ЗаполнитьСчетаУчета(ФормаРеализации); ФормаРеализации.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьСчетаУчета(ДанныеФормы) Отбор = Новый Структура("ТабличнаяЧасть", Новый Соответствие); Отбор.ТабличнаяЧасть.Вставить("Товары", Истина); СчетаУчетаВДокументах.Заполнить(ДанныеФормы.Ссылка, Отбор); //СчетаУчетаВДокументах.ЗаполнитьПередОтображениемПользователю(ДанныеФормы.Ссылка); КонецПроцедуры |
|||
2
runoff_runoff
06.10.21
✎
18:02
|
в процедуре РеализацияТоваровУслугФормы.СкладПриИзменении смотреть серверные вызовы и вытянуть оттуда нужное..
|
|||
3
runoff_runoff
06.10.21
✎
18:07
|
ПричиныИзменений = Новый Массив;
ПричиныИзменений.Добавить("Склад"); ПричиныИзменений.Добавить("ПодразделениеОрганизации"); ПараметрыЗаполнения = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(ПричиныИзмененияСчетовУчета, Форма.Объект); СчетаУчетаВДокументах.ЗаполнитьОбъектПриИзменении(ПараметрыЗаполнения); |
|||
4
JonSilver
06.10.21
✎
18:09
|
(2) Как с клиента на сервер передать Форму документа? В модуле "РеализацияТоваровУслугФормы.СкладПриИзменении(ЭтотОбъект)" вот такой код:
Процедура СкладПриИзменении(Форма) Экспорт Объект = Форма.Объект; УстановитьДеятельностьНаТорговомСборе(Форма); Объект.ПодразделениеОрганизации = ОбщегоНазначенияБПВызовСервера.ПолучитьПодразделение(Объект.Организация, Объект.Склад); УстановитьОтветственногоПоСкладу(Форма); ПричиныИзменений = Новый Массив; ПричиныИзменений.Добавить("Склад"); ПричиныИзменений.Добавить("ПодразделениеОрганизации"); ЗаполнитьСчетаУчета(Форма, ПричиныИзменений, "Склад"); КонецПроцедуры |
|||
5
runoff_runoff
06.10.21
✎
18:19
|
(4) зачем передавать форму, если в процедуре РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета() требуются только данные формы (Объект)..
|
|||
6
runoff_runoff
06.10.21
✎
18:20
|
общий подход на клиенте такой:
КопияОбъекта = Форма.Объект; ПроцедураНаСервере(КопияОбъекта); КопироватьДанныеФормы(КопияОбъекта, Форма.Объект); |
|||
7
JonSilver
06.10.21
✎
19:00
|
(5) Разве этой строкой БП-шной процедуры не получают документ:
"Объект = Форма.Объект;"? Параметр "Форма" я передаю из своей обработки. В моем контексте, только Форма создаваемого документа имеет свойство "Объект". Перебрал все примеры из конфигурации, ни один не подходит. (6) Это тоже присутствует, этим производится запись данных формы в документ. Моя задача не меняя конфигурацию максимально выжать из нее все нужные для меня методы. |
|||
8
runoff_runoff
06.10.21
✎
21:13
|
(7) создать в форме обработки серверную процедуру с этими несколькими строчками (ПроцедураНаСервере).. и вызывать её из клиентской.. быстрее сделать, чем обсуждать это часами..
|
|||
9
JonSilver
06.10.21
✎
23:02
|
(8) Не можешь подсказать ничего внятного, пройди мимо. В первом посте я выложил кусок кода, разве не так?
|
|||
10
runoff_runoff
07.10.21
✎
10:55
|
(9) ну, что, сделал или опять не догнал, как делать? ;-)
|
|||
11
JonSilver
07.10.21
✎
12:02
|
(10) Вот код:
&НаКлиенте Процедура СоздатьНакладнуюТоварыУслуги(Команда) СтруктураПараметров = ПолучитьПараметрыФормыДокумента(ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.ПродажаКомиссия")); ФормаРеализации = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", СтруктураПараметров, ЭтотОбъект); ДанныеФормы = ФормаРеализации.Объект; ИмяТаблицы = "Товары"; ВидДокумента = "Накладная"; СтруктураСвойств = Новый Структура; СтруктураСвойств.Вставить("СуммаВключаетНДС",СуммаВключаетНДС); СтруктураСвойств.Вставить("Комментарий","Создано обработкой 'Рабочее место менеждера'"); ЗаполнитьЗначенияСвойств(ДанныеФормы,СтруктураСвойств,"СуммаВключаетНДС,Комментарий",); КопироватьДанныеФормы(ДанныеФормы, ФормаРеализации.Объект); ЗаполнитьТабличнуюЧасть(ДанныеФормы, ВидДокумента, ИмяТаблицы, СтруктураПараметров); ИмяТаблицы = "Услуги"; ЗаполнитьТабличнуюЧасть(ДанныеФормы, ВидДокумента, ИмяТаблицы, СтруктураПараметров); ЗаполнитьСчетаУчета(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, ФормаРеализации.Объект); СтруктураНадписи = Новый Структура( "ВалютаДокумента, Курс, Кратность, СуммаВключаетНДС, ДокументБезНДС, ВалютаРегламентированногоУчета", ДанныеФормы.ВалютаДокумента, ДанныеФормы.КурсВзаиморасчетов, ДанныеФормы.КратностьВзаиморасчетов, ДанныеФормы.СуммаВключаетНДС, ДанныеФормы.ДокументБезНДС, ФормаРеализации.ВалютаРегламентированногоУчета); Если ФормаРеализации.ИспользоватьТипыЦенНоменклатуры Тогда СтруктураНадписи.Вставить("ТипЦен", ДанныеФормы.ТипЦен); КонецЕсли; ФормаРеализации.ЦеныИВалюта = ОбщегоНазначенияБПКлиентСервер.СформироватьНадписьЦеныИВалюта(СтруктураНадписи); ФормаРеализации.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьСчетаУчета(ДанныеФормы) РеализацияТоваровУслугФормы.СкладПриИзменении(ДанныеФормы); КонецПроцедуры В данном контексте в процедуру ЗаполнитьСчетаУчета() уходит ДанныеФормыСтруктура, у которого нет свойства "Объект": {ОбщийМодуль.РеализацияТоваровУслугФормы.Модуль(229)}: Поле объекта не обнаружено (Объект) Объект = Форма.Объект; |
|||
12
JonSilver
07.10.21
✎
12:09
|
Если-же передавать в процедуру ЗаполнитьСчетаУчета() "ФормаРеализации" в качестве параметра, то сообщение следующее:
Ошибка отображения типов: Отсутствует отображение для типа 'ФормаКлиентскогоПриложения' {ВнешняяОбработка.МенеджерПродаж.Форма.Форма.Форма(1979)}: ЗаполнитьСчетаУчета(ФормаРеализации); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ФормаКлиентскогоПриложения' |
|||
13
JonSilver
07.10.21
✎
12:12
|
Весь мой код находится в модуле формы обработки, может его перенести в модуль обработки?
|
|||
14
JonSilver
07.10.21
✎
16:05
|
Итак, кому интересно, вот код серверной процедуры модуля формы внешней обработки для заполнения счетов учета номенклатуры в новом незаписанном документе.
код: &НаСервере Процедура ЗаполнитьСчетаУчета(ДанныеФормы) СтрокиДляДополнительнойОбработки = ДанныеФормы.Товары; СчетаУчетаВДокументах.ЗаполнитьСтроки(СтрокиДляДополнительнойОбработки, "Товары", ДанныеФормы.Ссылка, Документы.РеализацияТоваровУслуг, Истина); КонецПроцедуры |
|||
15
JonSilver
07.10.21
✎
16:40
|
Да еще не забудьте после открытия формы вставить код:
ФормаРеализации.ОбновитьИтогиНаСервере(); ФормаРеализации.ПодготовитьФормуНаСервере(); |
|||
16
JonSilver
07.10.21
✎
16:42
|
Спасибо за поддержку runoff_runoff!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |