Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Заполнение счетов учета номенклатуры в ТЧ документа, созданного внешней обработкой

Заполнение счетов учета номенклатуры в ТЧ документа, созданного внешней обработкой
Я
   JonSilver
 
06.10.21 - 17:45
Всем доброго времени суток!
Конфигурация: 1С:Бухгалтерия предприятия, редакция 3.0 (3.0.101.19), платформа: 8.3.18.1289.
Пытаюсь заполнить счета учета номенклатуры (СчетУчета,СчетДоходов,СчетРасходов и т.п.) в документе "РеализацияТоваровУслуг", созданного внешней обработкой. Документ еще не записан.
1 способ: использовать экспортную процедуру "РеализацияТоваровУслугФормы.СкладПриИзменении(ЭтотОбъект)", но не могу с клиента передать на сервер Форму нового и незаписанного документа.
2 способ: использовать экспортную процедуру "СчетаУчетаВДокументах.Заполнить(ДанныеФормы.Ссылка, Отбор)", но натыкаюсь на невозможность записи нового значения реквизита "СчетУчетаРасчетовСКонтрагентом".
Хотя в отборе пытаюсь передать только нужную таблицу "Товары":
Отбор = Новый Структура;
Отбор.Вставить("ТабличнаяЧасть", "Товары");
или
Отбор = Новый Структура("ТабличнаяЧасть", Новый Соответствие);
Отбор.ТабличнаяЧасть.Вставить("Товары", Истина);

В массиве коллекций появляется элемент с ключом "", что для процедуры является, как я понял, все реквизиты моего документа.
Может кто подсказать рабочий метод решения данной проблемы?
   JonSilver
 
1 - 06.10.21 - 17:51
Второй день ломаю копья об этот монумент))). Дабы исключить лишние вопросы вот кусок кода:
    
        ЗаполнитьСчетаУчета(ФормаРеализации);
    ФормаРеализации.Открыть();
    
КонецПроцедуры

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

    СчетаУчетаВДокументах.Заполнить(ДанныеФормы.Ссылка, Отбор);
    
    //СчетаУчетаВДокументах.ЗаполнитьПередОтображениемПользователю(ДанныеФормы.Ссылка);

    
КонецПроцедуры
   runoff_runoff
 
2 - 06.10.21 - 18:02
в процедуре РеализацияТоваровУслугФормы.СкладПриИзменении смотреть серверные вызовы и вытянуть оттуда нужное..
   runoff_runoff
 
3 - 06.10.21 - 18:07
ПричиныИзменений = Новый Массив;
    ПричиныИзменений.Добавить("Склад");
    ПричиныИзменений.Добавить("ПодразделениеОрганизации");

    ПараметрыЗаполнения = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(ПричиныИзмененияСчетовУчета, Форма.Объект);
    СчетаУчетаВДокументах.ЗаполнитьОбъектПриИзменении(ПараметрыЗаполнения);
   JonSilver
 
4 - 06.10.21 - 18:09
(2) Как с клиента на сервер передать Форму документа? В модуле "РеализацияТоваровУслугФормы.СкладПриИзменении(ЭтотОбъект)" вот такой код:

Процедура СкладПриИзменении(Форма) Экспорт

    Объект = Форма.Объект;

    УстановитьДеятельностьНаТорговомСборе(Форма);
    
    Объект.ПодразделениеОрганизации = ОбщегоНазначенияБПВызовСервера.ПолучитьПодразделение(Объект.Организация, Объект.Склад);
    УстановитьОтветственногоПоСкладу(Форма);
    
    ПричиныИзменений = Новый Массив;
    ПричиныИзменений.Добавить("Склад");
    ПричиныИзменений.Добавить("ПодразделениеОрганизации");
    
    ЗаполнитьСчетаУчета(Форма, ПричиныИзменений, "Склад");
    
КонецПроцедуры
   runoff_runoff
 
5 - 06.10.21 - 18:19
(4) зачем передавать форму, если в процедуре РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета() требуются только данные формы (Объект)..
   runoff_runoff
 
6 - 06.10.21 - 18:20
общий подход на клиенте такой:

КопияОбъекта = Форма.Объект;
ПроцедураНаСервере(КопияОбъекта);
КопироватьДанныеФормы(КопияОбъекта, Форма.Объект);
   JonSilver
 
7 - 06.10.21 - 19:00
(5) Разве этой строкой БП-шной процедуры не получают документ:
"Объект = Форма.Объект;"?
Параметр "Форма" я передаю из своей обработки. В моем контексте, только Форма создаваемого документа имеет свойство "Объект".
Перебрал все примеры из конфигурации, ни один не подходит.
(6) Это тоже присутствует, этим производится запись данных формы в документ. Моя задача не меняя конфигурацию максимально выжать из нее все нужные для меня методы.
   runoff_runoff
 
8 - 06.10.21 - 21:13
(7) создать в форме обработки серверную процедуру с этими несколькими строчками (ПроцедураНаСервере).. и вызывать её из клиентской.. быстрее сделать, чем обсуждать это часами..
   JonSilver
 
9 - 06.10.21 - 23:02
(8) Не можешь подсказать ничего внятного, пройди мимо. В первом посте я выложил кусок кода, разве не так?
   runoff_runoff
 
10 - 07.10.21 - 10:55
(9) ну, что, сделал или опять не догнал, как делать? ;-)
   JonSilver
 
11 - 07.10.21 - 12:02
(10) Вот код:

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

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

&НаСервере
Процедура ЗаполнитьСчетаУчета(ДанныеФормы)
    
    РеализацияТоваровУслугФормы.СкладПриИзменении(ДанныеФормы);
    
КонецПроцедуры

В данном контексте в процедуру ЗаполнитьСчетаУчета() уходит ДанныеФормыСтруктура, у которого нет свойства "Объект":

{ОбщийМодуль.РеализацияТоваровУслугФормы.Модуль(229)}: Поле объекта не обнаружено (Объект)
    Объект = Форма.Объект;
   JonSilver
 
12 - 07.10.21 - 12:09
Если-же передавать в процедуру ЗаполнитьСчетаУчета() "ФормаРеализации" в качестве параметра, то сообщение следующее:

Ошибка отображения типов:
Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'
{ВнешняяОбработка.МенеджерПродаж.Форма.Форма.Форма(1979)}:    ЗаполнитьСчетаУчета(ФормаРеализации);

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'
   JonSilver
 
13 - 07.10.21 - 12:12
Весь мой код находится в модуле формы обработки, может его перенести в модуль обработки?
   JonSilver
 
14 - 07.10.21 - 16:05
Итак, кому интересно, вот код серверной процедуры модуля формы внешней обработки для заполнения счетов учета номенклатуры в новом незаписанном документе.

код:
&НаСервере
Процедура ЗаполнитьСчетаУчета(ДанныеФормы)
    
    СтрокиДляДополнительнойОбработки = ДанныеФормы.Товары;
    СчетаУчетаВДокументах.ЗаполнитьСтроки(СтрокиДляДополнительнойОбработки, "Товары", ДанныеФормы.Ссылка, Документы.РеализацияТоваровУслуг, Истина);
    
КонецПроцедуры
   JonSilver
 
15 - 07.10.21 - 16:40
Да еще не забудьте после открытия формы вставить код:

    ФормаРеализации.ОбновитьИтогиНаСервере();
    ФормаРеализации.ПодготовитьФормуНаСервере();
   JonSilver
 
16 - 07.10.21 - 16:42
Спасибо за поддержку runoff_runoff!!!

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.