Решил выложить альтернативный способ переноса данных в конвертации данных из источника к приемнику,
с последующим сбором их в ТЗ в месте ПослеЗагрузки. Т.е.можно готовый перенесенный объект доработать либо создать что-то еще на базе данных. Метод сам разработан с учетом простого понимания Конвертации без использования всех её многочисленных тонкостей и сложностей.
В примере рассматривается перенос Операции.
И вот еще что. Я не привожу тут готовое решение, я всего лишь показываю концепцию того, как можно делать в КД.
Без использования глобальных переменных.
Итак. Бухгалтерия предприятия, редакция 3.0, 1С:Предприятие 8.3 (8.3.12.1529).
Суть задачи: Перенос документа "Операция".
Решение:
Открываем конвертацию, создаем ПКО. в нем указываем объект источник и приемник — Операция.
Суть метода сводится к тому, что в источнике мы создаем параметры в конвертации свойств.
каждый из них это столбец нашей ТЗ.
тип данных — массив.
Соответсвенно мы переносим массивы данных, а дальше собираем их в ТЗ.
Итак, собираем массив.
Все ПКС однотипны. Они вытягивают нужные данные из источника и создают массив. Массив передается в тип — строка.
Так например, для одного документа операция может быть много строк проводок.
Все проводки с данными о"Дт" — мы записываем в массив.
Далее Так-же поступаем со всеми полями которые нам нужны для конечной ТЗ.
Т.е. резюмирую: мы массивы данных собираем в строку, через запятую. И передаем эту строку в приемник.
И сам код:
Значение="";
Пока Выборка.Следующий() Цикл
текЗнач = Выборка.СчетДт.Код;
Значение = Значение + текЗнач + ",";
КонецЦикла;
Значение = Лев(Значение,СтрДлина(Значение)-1);
Отлично. Наши данные загружены.
Переходим к п.2, а именно — получению приемником этих данных.
Мы заходим в ПКО Операции "ПослеЗагрузки" и определяем переменные которые передали из источника.
Т.к. переменные являются строкой, нам нужно их преобразовать обратно в массивы. Это делается однотипными методами:
Сам код:
Массив = новый Массив();
Стр = СчетКт; //Тут изменяемое
Рез = Найти(Стр, ",");
Если Рез = 0 Тогда Массив.Добавить(Стр); Иначе ЧтотоНайдено=Истина;
пока ЧтотоНайдено Цикл
Рез = Найти(Стр, ",");
Если Не ПустаяСтрока(Лев(Стр,Рез-1)) Тогда Массив.Добавить(Лев(Стр,Рез-1)); КонецЕсли;
Стр = Прав(Стр,СтрДлина(Стр)-Рез);
Если Рез = 0 Тогда ЧтотоНайдено = Ложь; Массив.Добавить(Стр); КонецЕсли;
КонецЦикла;
КонецЕсли;
МассивСчетКт =Массив; //Тут изменяемое
Далее нам нужно просто данные из массивов собрать вместе подобно ТЗ.
В данном случае, для документа "Операция" мы заполняем ее табличную часть.
Хочется так-же добавить, что весь код рабочий и использовался мной для решения реальной задачи.
Всем успехов с КД.
Скорость? в каждом ПКС выполнять запрос.
А чем неустроил «типовой» перенос Операции.
Скорость да. Ну это как пример же.
(0) как то не очень понятно зачем нужны все эти преобразования в массивы затем в строки ,
можно какой нибудь пример из практики где это пригодилось
Ну пример на картинке. Любые данные — в массив, а на другом конце парсим. По моему это мегагениально. — Я этот метод пользую теперь везде. Особенно где есть ТЧ. Ну в моем случае это оправдано еще из-за специфики выгрузки. Но, думаю, многим может пригодиться.
А не проще воспользоваться готовым ПередВыгрузкой: ПередатьОдинПараметрВПриемник(«ВашПараметр», ЗначениеВСтрокуВнутр(ВашаТабла)) и в загрузке:
ПослеЗагрузкиПараметров Параметры.Вставить(«ВашПараметрПриЗагрузке», ЗначениеИзСтрокиВнутр(Параметры.ВашПараметр))?
Толково!