Альтернатива переноса ТЗ в конвертации данных 2.1







Здравствуйте уважаемые.
Решил выложить альтернативный способ переноса данных в конвертации данных из источника к приемнику,
с последующим сбором их в ТЗ в месте ПослеЗагрузки. Т.е.можно готовый перенесенный объект доработать либо создать что-то еще на базе данных. Метод сам разработан с учетом простого понимания Конвертации без использования всех её многочисленных тонкостей и сложностей.
В примере рассматривается перенос Операции.
И вот еще что. Я не привожу тут готовое решение, я всего лишь показываю концепцию того, как можно делать в КД.
Без использования глобальных переменных.

Итак. Бухгалтерия предприятия, редакция 3.0, 1С:Предприятие 8.3 (8.3.12.1529).

Суть задачи: Перенос документа "Операция".

Решение:

Открываем конвертацию, создаем ПКО. в нем указываем объект источник и приемник — Операция.

 

Суть метода сводится к тому, что в источнике мы создаем параметры в конвертации свойств.

каждый из них это столбец нашей ТЗ. 

тип данных — массив.

Соответсвенно мы переносим массивы данных, а дальше собираем их в ТЗ.

Итак, собираем массив.

Все ПКС однотипны. Они вытягивают нужные данные из источника и создают массив. Массив передается в тип — строка.

Так например, для одного документа операция может быть много строк проводок.

Все проводки с данными о"Дт" — мы записываем в массив.

Далее Так-же поступаем со всеми полями которые нам нужны для конечной ТЗ.

Т.е. резюмирую: мы массивы данных собираем в строку, через запятую. И передаем эту строку в приемник.

 

И сам код:

Значение="";
Пока Выборка.Следующий() Цикл
текЗнач =  Выборка.СчетДт.Код;

Значение = Значение + текЗнач + ",";
КонецЦикла;

Значение = Лев(Значение,СтрДлина(Значение)-1);

 

Отлично. Наши данные загружены.

Переходим к п.2, а именно — получению приемником этих данных.

 

Мы заходим в ПКО Операции "ПослеЗагрузки" и определяем переменные которые передали из источника.

Т.к. переменные являются строкой, нам нужно их преобразовать обратно в массивы. Это делается однотипными методами:

Сам код: 

Массив = новый Массив();
Стр = СчетКт;  //Тут изменяемое
Рез = Найти(Стр, ",");
Если Рез = 0 Тогда Массив.Добавить(Стр); Иначе     ЧтотоНайдено=Истина;
пока ЧтотоНайдено Цикл
Рез = Найти(Стр, ",");
Если Не ПустаяСтрока(Лев(Стр,Рез-1)) Тогда Массив.Добавить(Лев(Стр,Рез-1)); КонецЕсли;
Стр = Прав(Стр,СтрДлина(Стр)-Рез);
Если Рез = 0 Тогда ЧтотоНайдено = Ложь;  Массив.Добавить(Стр);    КонецЕсли;
КонецЦикла;
КонецЕсли;
МассивСчетКт =Массив; //Тут изменяемое 

Далее нам нужно просто данные из массивов собрать вместе подобно ТЗ.

В данном случае, для документа "Операция" мы заполняем ее табличную часть.

 

Хочется так-же добавить, что весь код рабочий и использовался мной для решения реальной задачи.

Всем успехов с КД.

6 Comments

  1. Константин С.

    Скорость? в каждом ПКС выполнять запрос.

    А чем неустроил «типовой» перенос Операции.

    Reply
  2. dinopopyys

    Скорость да. Ну это как пример же.

    Reply
  3. pm74

    (0) как то не очень понятно зачем нужны все эти преобразования в массивы затем в строки ,

    можно какой нибудь пример из практики где это пригодилось

    Reply
  4. dinopopyys

    Ну пример на картинке. Любые данные — в массив, а на другом конце парсим. По моему это мегагениально. — Я этот метод пользую теперь везде. Особенно где есть ТЧ. Ну в моем случае это оправдано еще из-за специфики выгрузки. Но, думаю, многим может пригодиться.

    Reply
  5. vynosmozga

    А не проще воспользоваться готовым ПередВыгрузкой: ПередатьОдинПараметрВПриемник(«ВашПараметр», ЗначениеВСтрокуВнутр(ВашаТабла)) и в загрузке:

    ПослеЗагрузкиПараметров Параметры.Вставить(«ВашПараметрПриЗагрузке», ЗначениеИзСтрокиВнутр(Параметры.ВашПараметр))?

    Reply
  6. dinopopyys

    Толково!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *