Имя: Пароль:
1C
 
КД 2.0 передача данных через параметр? массив структур
,
0 spiller26
 
24.08.17
16:23
Суть такова. Переброс из БП в КА. В КА при поступление услуг нужно указывать обязательно номенклатуру (тип "Услуга"), а в БП можно просто написать "Содержание".

1. Заполняю в источнике данные по услугам, и пихаю его в Параметр.
2. В получателе "парсю" и при надобности вытягиваю данные

Вот  с 2-м пунктом проблемище.
--------------------------------------
Есть Параметр "МассивПоступлениеУслугСодержание" (передавать при выгрузке)
Перед выгрузкой данных, заполняю массив структур, т.к. с таблицей значений всё плохо.

После загрузки параметров, пытаюсь обратиться к этому параметру и получаю "Неопределено".

Как их прочитать в на получателе?
1 Ёпрст
 
24.08.17
16:35
Передавать можно через Входящие/ИсходящиеДанные
2 Ёпрст
 
24.08.17
16:35
или просто, передавать в параметр, и ставить галку - используется призагрузке
3 spiller26
 
24.08.17
16:36
(2) галка стоит
4 Parenek_88
 
24.08.17
16:37
(0) >>После загрузки параметров
это что за событие такое?
5 Ёпрст
 
24.08.17
16:42
(3)

Ну смотри, делаешь параметр, вася, ставишь галку - передавать данные в параметр, в свойствах, ПередВыгрузкой, присвваиваешь ему что -то , например, Значение="Лошпед"

затем, в ПослеЗагрузки этого объекта, ловишь как
Параметрыобъекта["Вася"]
6 Ёпрст
 
24.08.17
16:44
так делаешь ?
7 spiller26
 
24.08.17
16:48
(4) Конвертация_ПослеЗагрузкиПараметров
8 spiller26
 
24.08.17
16:50
(5)
Конвертация_ПередВыгрузкойДанных

Параметры.МассивПоступлениеУслугСодержание = Новый Массив;

//заполение ТаблицаПоступлениеУслугСодержание
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ПоступлениеУслуг.НомерДокумента КАК НомерДокумента,
|    ПоступлениеУслуг.ДатаДокумента КАК ДатаДокумента,
|    ПоступлениеУслуг.НомерСтрокиДок КАК НомерСтрокиДок,
|    ПоступлениеУслуг.Содержание КАК Содержание,
|    ПоступлениеУслуг.СчетУчета КАК СчетУчета,
|    ПоступлениеУслуг.СтатьяЗатрат КАК СтатьяЗатрат
|ИЗ
|    (ВЫБРАТЬ
|        ПоступлениеТоваровУслугУслуги.Ссылка.Номер КАК НомерДокумента,
|        ПоступлениеТоваровУслугУслуги.Ссылка.Дата КАК ДатаДокумента,
|        ПоступлениеТоваровУслугУслуги.НомерСтроки КАК НомерСтрокиДок,
|        ПоступлениеТоваровУслугУслуги.Номенклатура КАК Номенклатура,
|        ПоступлениеТоваровУслугУслуги.Содержание КАК Содержание,
|        ПоступлениеТоваровУслугУслуги.СчетЗатрат КАК СчетУчета,
|        ПоступлениеТоваровУслугУслуги.Субконто1 КАК СтатьяЗатрат
|    ИЗ
|        Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеТоваровУслугУслуги
|    ГДЕ
|        ПоступлениеТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|        И ПоступлениеТоваровУслугУслуги.Ссылка.ПометкаУдаления = ЛОЖЬ) КАК ПоступлениеУслуг
|ГДЕ
|    ПоступлениеУслуг.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";
Запрос.УстановитьПараметр("ДатаНачала", Параметры.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Параметры.ДатаОкончания);
РезультатУслуг = Запрос.Выполнить().Выбрать();
Пока РезультатУслуг.Следующий() Цикл
    СтруктураСтроки = Новый Структура;
    СтруктураСтроки.Вставить("НомерДокумента", РезультатУслуг.НомерДокумента);
    СтруктураСтроки.Вставить("ДатаДокумента", РезультатУслуг.ДатаДокумента);
    СтруктураСтроки.Вставить("НомерСтрокиДок", РезультатУслуг.НомерСтрокиДок);
    СтруктураСтроки.Вставить("Содержание", РезультатУслуг.Содержание);
    СтруктураСтроки.Вставить("СчетУчета", РезультатУслуг.СчетУчета.Код);
    СтруктураСтроки.Вставить("СтатьяЗатрат", "");  //РезультатУслуг.СтатьяЗатрат;
    //
    Параметры.МассивПоступлениеУслугСодержание.Добавить(СтруктураСтроки);
КонецЦикла;

Конвертация_ПослеЗагрузкиПараметров

Параметры.ТаблицаПоступлениеУслугСодержание = Новый ТаблицаЗначений;
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("НомерДокумента");
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("ДатаДокумента");
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("НомерСтрокиДок");
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("Содержание");
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("СчетУчета");
Параметры.ТаблицаПоступлениеУслугСодержание.Колонки.Добавить("СтатьяЗатрат");

    Для Каждого СтрМассива Из Параметры.МассивПоступлениеУслугСодержание Цикл
        НовСтрУслуга = Параметры.ТаблицаПоступлениеУслугСодержание.Добавить();
        НовСтрУслуга.НомерДокумента = СтрМассива.НомерДокумента;
        НовСтрУслуга.ДатаДокумента  = СтрМассива.ДатаДокумента;
        НовСтрУслуга.НомерСтрокиДок = СтрМассива.НомерСтрокиВДокументе;
        НовСтрУслуга.Содержание     = СтрМассива.Содержание;
        НовСтрУслуга.СчетУчета      = СтрМассива.СчетУчета;
        НовСтрУслуга.СтатьяЗатрат   = СтрМассива.СтатьяЗатрат;
    КонецЦикла;
9 spiller26
 
24.08.17
16:54
ПКО_ПоступлениеТоваровУслуг_ПослеЗагрузкиОбъекта

ТаблицаПоступлениеУслугСодержание = Параметры.ТаблицаПоступлениеУслугСодержание;
//Строки товара (интересуют услуги)
Для Каждого СтрТовар Из Объект.Товары Цикл
    Если СтрТовар.Номенклатура.Пустая() Тогда
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("НомерДокумента", Объект.Номер);
        ПараметрыОтбора.Вставить("ДатаДокумента", Объект.Дата);
        ПараметрыОтбора.Вставить("НомерСтрокиДок", СтрТовар.НомерСтроки);
        //
        НайденныеСтроки = ТаблицаПоступлениеУслугСодержание.НайтиСтроки(ПараметрыОтбора);
        Для Каждого СтрУслуг Из НайденныеСтроки Цикл
            //Номенклатура
            НаименованиеУслуги = СокрЛП(СтрУслуг.Содержание);
            Если НаименованиеУслуги <> "" Тогда
                Запрос = Новый Запрос;
                Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                |    Номенклатура.Ссылка КАК УслугаСсылка,
                |    Номенклатура.Код КАК Код
                |ИЗ
                |    Справочник.Номенклатура КАК Номенклатура
                |ГДЕ
                |    Номенклатура.Наименование ПОДОБНО &Наименование
                |    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
                |
                |УПОРЯДОЧИТЬ ПО
                |    Код УБЫВ";
                Запрос.УстановитьПараметр("Наименование", НаименованиеУслуги);
                РезультатУслуг = Запрос.Выполнить().Выбрать();
                Если РезультатУслуг.Следующий() Тогда
                    //Заполение строки
                    СтрТовар.Номенклатура = РезультатУслуг.УслугаСсылка;        
                Иначе
                    //создание услуги
                    НовУслуга = Справочники.Номенклатура.СоздатьЭлемент();
                    НовУслуга.Родитель = ГруппаУслуг;
                    НовУслуга.Наименование = НаименованиеУслуги;
                    НовУслуга.НаименованиеПолное = НаименованиеУслуги;
                    НовУслуга.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга;
                    НовУслуга.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуги");
                    НовУслуга.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
                    НовУслуга.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду("796");
                    НовУслуга.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
                    НовУслуга.Качество = Перечисления.ГрадацииКачества.Новый;
                    НовУслуга.СтавкаНДС = СтрУслуг.СтавкаНДС;
                    Попытка
                        НовУслуга.Записать();
                        СтрТовар.Номенклатура = НовУслуга.Ссылка;
                    Исключение
                        Сообщить("Номенклатура (Услуга): "+ НаименованиеУслуги + " // Не записана!");    
                    КонецПопытки;    
                КонецЕсли;    
            КонецЕсли;
        КонецЦикла;    
    КонецЕсли;    
КонецЦикла;    

//Проведение и отражение в РеглУчете
Если Объект.Проведен Тогда
    Объект.Записать(РежимЗаписиДокумента.Проведение);
    РеглУчетПроведениеСервер.ОтразитьДокумент(Объект);
Иначе
    Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
10 Ёпрст
 
24.08.17
16:55
(8) какой редкостный изврат :)
11 Ёпрст
 
24.08.17
16:58
Не проще ли, в ПКО табличной части, передавать данные в параметр, если у источника, это услуга. А затем в ПослеЗагрузки, добавлять эту услугу, если параметр заполнен ?
12 spiller26
 
24.08.17
16:58
(10) Я старался :)
13 Ёпрст
 
24.08.17
16:59
или еще проще, если это услуга, то ищем в приёмнике по пко Услуга, если товар - по ПКО Товар. Для услуги, можно, например, из входящих данных всё получить
14 spiller26
 
24.08.17
17:01
(13) Да мне такая схема переброски еще пригодиться для ручных корректировок документов.
Вот и пошел этим путем.