Выгрузка в регистр сведений
По теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Выгрузка / Загрузка регистра сведений из внешней системы с большим количеством строк
- Очистка регистра накопления. Очистка регистра сведений
- Универсальная обработка регистров сведений: удаление и обработка записей по фильтрам - все конфигурации
- Доработка стандартного модуля обмена от Битрикс для выгрузки произвольных таблиц значений или запросов в Highload-блоки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Почистить независимый регистр сведений - если весь то
НаборЗаписей = РегистрыСведений.ЗдесьИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
если с отбором то надо перед Записать, установить отбор.
Перенести можно так При выгрузке в ПВД обойдя результат запроса сформировать ИсходящиеДанные с полями, которые есть в РС,потом
использовать ВыгрузитьПоПравилу,
Более подробно:
1)Создать ПКО где объект источник - пусто, объект приемник - твой регистр сведений, допустим Правило конвертации будет называться "ИМяРегистраСведений"
2)Создать ПВД с ОбъектВыборки - пусто, способ выборки Произвольный алгоритм, Правило конвертации - что выше -"ИмяРегистраСведений".В ПВД в ПередВыгрузкой прописать обход результата запроса и заполнение Структуры - ИсходящиеДанные
Пока Выборка.Следующий() Цикл
ИсходящиеДанные = Новый Структура;
далее все нужные измерения,ресурсы,реквизиты надо заполнить(кроме Активности по-моему, у Активности в ПКС помтавить флажок отключить)далее пример, как основа
ИсходящиеДанные.Вставить("Имя", Выборка.Имя);
ИсходящиеДанные.Вставить("Фамилия", Выборка.Фамилия);
ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ИМяРегистраСведений");
КонецЦикла
Может можно и короче если надо сразу очистить и создать записи
НаборЗаписей.Загрузить(Таб);
НаборЗаписей.Записать();
а Таб - из ИсходящихДанных
НаборЗаписей = РегистрыСведений.ЗдесьИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
если с отбором то надо перед Записать, установить отбор.
Перенести можно так При выгрузке в ПВД обойдя результат запроса сформировать ИсходящиеДанные с полями, которые есть в РС,потом
использовать ВыгрузитьПоПравилу,
Более подробно:
1)Создать ПКО где объект источник - пусто, объект приемник - твой регистр сведений, допустим Правило конвертации будет называться "ИМяРегистраСведений"
2)Создать ПВД с ОбъектВыборки - пусто, способ выборки Произвольный алгоритм, Правило конвертации - что выше -"ИмяРегистраСведений".В ПВД в ПередВыгрузкой прописать обход результата запроса и заполнение Структуры - ИсходящиеДанные
Пока Выборка.Следующий() Цикл
ИсходящиеДанные = Новый Структура;
далее все нужные измерения,ресурсы,реквизиты надо заполнить(кроме Активности по-моему, у Активности в ПКС помтавить флажок отключить)далее пример, как основа
ИсходящиеДанные.Вставить("Имя", Выборка.Имя);
ИсходящиеДанные.Вставить("Фамилия", Выборка.Фамилия);
ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ИМяРегистраСведений");
КонецЦикла
Может можно и короче если надо сразу очистить и создать записи
НаборЗаписей.Загрузить(Таб);
НаборЗаписей.Записать();
а Таб - из ИсходящихДанных
(7) kn, в ПВД прописал перед выгрузкой:
в свойствах необходимо что-то делать ПКО?
Запрос = Новый запрос();
Запрос.текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВложенныйЗапрос.Склад КАК МестоХранения,
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| СУММА(ВложенныйЗапрос.КоличествоОстаток - ВложенныйЗапрос.КоличествоВРезерве) КАК Количество
|ИЗ
| (ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| 0 КАК КоличествоВРезерве
| ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (СерияНоменклатуры).* КАК СерияНоменклатуры}) КАК ТоварыНаСкладахОстатки
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТоварыВРезервеНаСкладахОстатки.Склад,
| ТоварыВРезервеНаСкладахОстатки.Номенклатура,
| 0,
| ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
| ИЗ
| РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, {(Склад).* КАК Склад, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (СерияНоменклатуры).* КАК СерияНоменклатуры, (ДокументРезерва).* КАК ДокументОснование}) КАК ТоварыВРезервеНаСкладахОстатки) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Склад,
| ВложенныйЗапрос.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| МестоХранения,
| Номенклатура";
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ТекущаяДата()));
ВыборкаДанных = запрос.Выполнить().Выбрать();
Пока ВыборкаДанных.Следующий() Цикл
ИсходящиеДанные = Новый Структура("МестоХранения,Номенклатура,Количество");
ИсходящиеДанные.МестоХранения = ВыборкаДанных.МестоХранения.Ссылка;
ИсходящиеДанные.Номенклатура = ВыборкаДанных.Номенклатура.Ссылка;
ИсходящиеДанные.Количество = ВыборкаДанных.Количество;
ВыгрузитьПоПравилу( , , ИсходящиеДанные, , "ОстаткиТоваров");
КонецЦикла;
Показатьв свойствах необходимо что-то делать ПКО?
(7) kn, короче выпадает на ошибке: это значит что объект выборки не указан
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(14357)}: Ошибка при вызове метода контекста (НайтиПоТипу)
СтрокаТаблицы.ОбъектВыборкиМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ОбъектВыборки);
по причине:
Несоответствие типов (параметр номер '1')
1)Запрос с группировками, может обходить надо по-другому.
2)В ПКО ОстаткиТоваров - должны быть только свойства МестоХранения,Номенклатура,Количество, если есть другие то их тоже надо прописывать(про Активность писалось выше)
3)В ПКО ОстаткиТоваров - ОбъектИсточник должен быть пуст,объектПриемник - заполнен
и у всех свойств этого ПКО (МестоХранения,Номенклатура,Количество)без флага Отключенный, должен быть указан флаг ПолучитьизВходящихДанных.
Вроде все.
2)В ПКО ОстаткиТоваров - должны быть только свойства МестоХранения,Номенклатура,Количество, если есть другие то их тоже надо прописывать(про Активность писалось выше)
3)В ПКО ОстаткиТоваров - ОбъектИсточник должен быть пуст,объектПриемник - заполнен
и у всех свойств этого ПКО (МестоХранения,Номенклатура,Количество)без флага Отключенный, должен быть указан флаг ПолучитьизВходящихДанных.
Вроде все.
1)Активность не надо передавать, надо у Активности в ПКС поставить флажок Отключить!
2)Запрос с группировками, на уровне группировка Склад - нет Номенклатуры, надо обходить по-другому
ВыборкаДанных = запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДанных.Следующий() Цикл
ИсходящиеДанные = Новый Структура("МестоХранения,Номенклатура,Количество");
ИсходящиеДанные.МестоХранения = ВыборкаДанных.МестоХранения.Ссылка;
Выборка1 = ВыборкаДанных.Выбрать();
Пока Выборка1.Следующий() Цикл
ИсходящиеДанные.Номенклатура = ВыборкаДанных.Номенклатура.Ссылка;
ИсходящиеДанные.Количество = ВыборкаДанных.Количество;
ВыгрузитьПоПравилу( , , ИсходящиеДанные, , "ОстаткиТоваров");
КонецЦикла;
КонецЦикла;
3)Если после этого ошибка останется, отладчиком надо смотреть.
и проверить что у регистра больше нет других измерений, ресурсов, все заполняем в стуктуре.
2)Запрос с группировками, на уровне группировка Склад - нет Номенклатуры, надо обходить по-другому
ВыборкаДанных = запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДанных.Следующий() Цикл
ИсходящиеДанные = Новый Структура("МестоХранения,Номенклатура,Количество");
ИсходящиеДанные.МестоХранения = ВыборкаДанных.МестоХранения.Ссылка;
Выборка1 = ВыборкаДанных.Выбрать();
Пока Выборка1.Следующий() Цикл
ИсходящиеДанные.Номенклатура = ВыборкаДанных.Номенклатура.Ссылка;
ИсходящиеДанные.Количество = ВыборкаДанных.Количество;
ВыгрузитьПоПравилу( , , ИсходящиеДанные, , "ОстаткиТоваров");
КонецЦикла;
КонецЦикла;
3)Если после этого ошибка останется, отладчиком надо смотреть.
и проверить что у регистра больше нет других измерений, ресурсов, все заполняем в стуктуре.
(12) kn, Через обработку универсальный обмен это работает, но через обмен не хочет выпадает на:
наверно какие-то особенности есть через план обмена*?
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(14357)}: Ошибка при вызове метода контекста (НайтиПоТипу)
СтрокаТаблицы.ОбъектВыборкиМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ОбъектВыборки);
по причине:
Несоответствие типов (параметр номер '1')
наверно какие-то особенности есть через план обмена*?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот