Имя: Пароль:
1C
1С v8
КД. Нужно перенести набор записей регистра накопления
0 skydrive
 
04.02.17
16:31
Здравствуйте. Нужна помощь.

Нужно перенести список значений, который состоит из записей регистра накопления источника в базу приемник и там, на основе этих данных, заполнить реквизиты документа.
Я так понимаю это можно сделать через глобальный параметр с типом хранилище значений.
Записываю данные в параметр - все отлично. Пытаюсь получить данные после загрузки - не выходит.

Может есть у кого простой пример, как правильно получить данные из параметра с типом хранилище значений на стороне приемника?
1 skydrive
 
06.02.17
21:20
Неужели никто не знает как передать список значений из источника в приемник?
2 Лефмихалыч
 
06.02.17
21:24
какую-то ты ерунду с глобальным параметром затеял.
3 Defender aka LINN
 
06.02.17
21:46
(0) "Я так понимаю это можно сделать через глобальный параметр"
Откуда такое понимание?
И что мешает сразу в источнике все эти реквизиты получить и передать?
4 Diman000
 
06.02.17
21:53
Список значений не может состоять из записей регистра.
Нет такого ссылочного объекта "Запись регистра накопления".
У тебя в списке либо структуры с полями регистра, либо хз что. Это первое.
А второе, если ты запихал в хранилище значений объекты одной информационной базы, то при "распаковке" в другой базе непонятно что ты хочешь получить. Ссылки просто так не перенесутся, нормально перенесутся только примитивные типы.
Ну и третье, см. (3). Наверняка, можно сразу передать эту информацию в приемник, например, через "входящие данные". Чтобы приемник не парился ни с каким хранилищем значений из параметра.
5 MadJhey
 
06.02.17
22:27
посмотри как переносятся остатки в старых правилах обмена.
например. Производство+Услуги+Бухгалтерия, редакция 2.8 --> УправлениеПроизводственнымПредприятием
здесь правда источник 7.7 но идею поймешь.
6 MadJhey
 
06.02.17
22:35
если в двух словах:
1. делаешь правило конвертации документа:
Дата, номер, реквизиты и пр. Источник - пустой.
2. делаешь правило выгрузки данных:
способ выборки произвольный алогоритм, правило конвертации п.1

в перед обработкой пишешь что то вроде:
ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
ВыборкаДанных.НоваяКолонка("Дата");
ВыборкаДанных.НоваяКолонка("Комментарий");
ВыборкаДанных.НоваяКолонка("ПартииТоваровНаСкладах");

ВыборкаДанных.НоваяСтрока();

ВыборкаДанных.Дата = ПолучитьДатуV8(ПолучитьТА());
ВыборкаДанных.Комментарий = "Остатки по партиям";
ВыборкаДанных.ПартииТоваровНаСкладах = ПартииОстатки();
вместо таблицы значений можно использовать и структуру.
3.ПартииОстатки - алгоритм
Перем РезультатЗапроса;

ДатаКон = ?(ПустоеЗначение(ДатаОкончания) = 0, ?(ДатаОкончания > ПолучитьДатуТА(), ПолучитьДатуТА(), ДатаОкончания), ПолучитьДатуТА());

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|с ДатаКон;
|Без итогов;
|Номенклатура = Регистр.Партии.МПЗ;
|Склад = Регистр.Партии.МестоХранения;
|Заказ = Регистр.Партии.Заявка;
|ПартииКоличество = Регистр.Партии.Количество;
|ПартииСумма = Регистр.Партии.Сумма;
|Функция Количество = КонОст(ПартииКоличество);
|Функция Стоимость = КонОст(ПартииСумма);
|Группировка Номенклатура без групп;
|Группировка Склад без групп;
|Группировка Заказ без групп;
|"//}}ЗАПРОС
;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    
    Возврат 0;
    
КонецЕсли;

Запрос.Выгрузить(РезультатЗапроса);

РезультатЗапроса.НоваяКолонка("Период");

Если РезультатЗапроса.КоличествоСтрок() > 0 Тогда
    
    РезультатЗапроса.Заполнить(ПолучитьДатуV8(ДатаКон),,, "Период");
    
КонецЕсли;

Возврат РезультатЗапроса;
7 MadJhey
 
06.02.17
22:36
"глобальный параметр с типом хранилище значений" - это какой то бред
8 skydrive
 
07.02.17
15:41
Спасибо всем большое за помощь! Сделал в итоге сам.
Надо было, наверное, пояснить.

Я из УТ в БП переносил документы. И мне нужно было на стороне приемника заполнить счета в документах на основании записи измерения "СтатусПартии" регистра накопления "ПартииТоваровНаСкладах". Если статус "Купленный" у документа, то одни счета, а если "На комиссию" - другие.

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

В итоге реализовал так:

1. Создал параметр с типом хранилище значения "СтатусПартииПоступления".
2. Получил результат запроса в виде списка значения.

СтатусПартииПоступления = Новый СписокЗначений();
    
Пока Выборка.Следующий() Цикл
СтатусПартииПоступления.Добавить(Выборка.Номер, Выборка.СтатусПартии);
КонецЦикла;

3. Поместил в хранилище.

Результат = Новый ХранилищеЗначения(СтатусПартииПоступления);

4. Передал в параметр, предварительно сделав сериализацию, так как тип примитивный только передать можно.

ПередатьОдинПараметрВПриемник("СтатусПартииПоступления", ЗначениеВСтрокуВнутр(Результат));

5. Далее уже на стороне приемника, после загрузки делаю обратный процесс и получаю список значений из хранилища:

СтатусПартииПоступления = ЗначениеИзСтрокиВнутр(Параметры.СтатусПартииПоступления).Получить();


Ну и дальше уже делаю с этим что хочу.
Немного не понял, как это можно было реализовать другим способом.
Извиняюсь, что не расписал более подробно, что я хотел сделать.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший