|   |   | 
| 
 | Заполнение счетов учета номенклатуры в ТЧ документа, созданного внешней обработкой | ☑ | ||
|---|---|---|---|---|
| 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!!!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |