Имя: Пароль:
1C
1С v8
Конвертация данных по произвольному алгоритму
0 Игорь_МММ
 
17.03.16
17:34
делаю выгрузку из самописной конфы в БП. Сделал ПВД со способом выборки "произвольный алгоритм", результат запроса записал в ВыборкаДанных.
Как теперь создать ПКС? откуда взять поля источника - они же в ВыборкеДанных?
1 mikecool
 
17.03.16
17:35
(0) оттуда и бери и не забудь убрать у пко признак "не запоминать выгруженные"
2 Cyberhawk
 
17.03.16
17:36
ПКС создаешь кнопкой (командой) "Создать", источник не указываешь
3 Игорь_МММ
 
17.03.16
17:40
(1) (2) а как сопоставляться будут данные? не нужно тогда в запросе псевдонимы указывать как-то  специально?
4 hhhh
 
17.03.16
17:42
(3) да, псевдонимы в запросе указывай.
5 Cyberhawk
 
17.03.16
17:43
(3) Поля в результирующем запросе должны совпадать с именами свойств приемника в ПКС
6 Игорь_МММ
 
17.03.16
17:46
выгружаю спецификации номенклатуры. Нужно выгрузить Владельца, Количество присвоить =1 и заполнить ИсходныеКомплектующие.
Запрос такой:

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

Владельца как обозвать? прям вот таблица.Товар КАК Владелец?
7 mikecool
 
17.03.16
17:46
(6) да
8 Игорь_МММ
 
17.03.16
17:48
(4) (5) (7) спасибо
9 Игорь_МММ
 
17.03.16
17:56
одинаковое наименование реквизита Количество в табличной части и в основных реквизитах. Тогда как именовать?
10 Игорь_МММ
 
17.03.16
18:02
В СпецификацииНоменклатуры есть реквизит Количество и в ТЧ ИсходныеКомплектующие есть реквизит Количество

|ВЫБРАТЬ
|    таблица.Товар КАК Владелец,
|    1 КАК Количество
|    таблица.Количество * таблица.Количество1 КАК Количество2,
|    таблица.Номенклатура
|ИЗ
|    таблица КАК таблица";
ВыборкаДанных = Запрос.Выполнить().Выбрать();

Как правильно обозвать Количество2 ?
11 Cyberhawk
 
17.03.16
18:04
Одинаково его обозвать...

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

РезультатыЗапроса = Запрос.Выполнить();
ВыборкаПоОрганизациям = РезультатыЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоОрганизациям.Следующий() Цикл
    
    ВыборкаПоСкладам = ВыборкаПоОрганизациям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаПоСкладам.Следующий() Цикл
        
        НоваяСтрока = ВыборкаДанных.Добавить();
        НоваяСтрока.Дата        = ДатаНачала;
        НоваяСтрока.Организация = ВыборкаПоОрганизациям.Организация;
        НоваяСтрока.Склад       = ВыборкаПоСкладам.Склад;
        НоваяСтрока.Комментарий = НСтр("ru = 'БП 2.0 -> ЕРП 2.0: ТМЦ (счет 10)'");
        
        
        НоваяСтрока.Товары = Новый ТаблицаЗначений;
        НоваяСтрока.Товары.Колонки.Добавить("Номенклатура");
        НоваяСтрока.Товары.Колонки.Добавить("Характеристика");
        НоваяСтрока.Товары.Колонки.Добавить("Качество");
        НоваяСтрока.Товары.Колонки.Добавить("Количество");
        НоваяСтрока.Товары.Колонки.Добавить("КоличествоУпаковок");
        НоваяСтрока.Товары.Колонки.Добавить("Цена");
        НоваяСтрока.Товары.Колонки.Добавить("Сумма");
        НоваяСтрока.Товары.Колонки.Добавить("СуммаРегл");
        НоваяСтрока.Товары.Колонки.Добавить("СтавкаНДС");
        НоваяСтрока.Товары.Колонки.Добавить("СуммаБезНДС");
        НоваяСтрока.Товары.Колонки.Добавить("СуммаНДС");
        НоваяСтрока.Товары.Колонки.Добавить("НДСРегл");
        НоваяСтрока.Товары.Колонки.Добавить("НомерГТД");
        
        НоваяСтрока.Серии = Новый ТаблицаЗначений;
        НоваяСтрока.Серии.Колонки.Добавить("Номенклатура");
        НоваяСтрока.Серии.Колонки.Добавить("Характеристика");
        НоваяСтрока.Серии.Колонки.Добавить("Качество");
        НоваяСтрока.Серии.Колонки.Добавить("Серия");
        НоваяСтрока.Серии.Колонки.Добавить("Количество");
        НоваяСтрока.Серии.Колонки.Добавить("КоличествоУпаковок");

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

            СтрокаСообщения = "";
            Если ВыборкаДетальныеЗаписи.Количество < 0.00 Тогда
                СтрокаСообщения = "Обнаружен отрицательный остаток на складе ""%1"" по товару ""%2"" при выгрузке по правилу: ""%3""";
            ИначеЕсли ВыборкаДетальныеЗаписи.Сумма <= 0.00 Или ВыборкаДетальныеЗаписи.Количество = 0.00 Тогда
                СтрокаСообщения = "Обнаружен некорректный суммовой остаток на складе ""%1"" по товару ""%2"" при выгрузке по правилу: ""%3""";
            КонецЕсли;
            
            Если ЗначениеЗаполнено(СтрокаСообщения) Тогда
                СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "%1", ВыборкаПоСкладам.Склад);
                СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "%2", ВыборкаДетальныеЗаписи.Номенклатура);
                СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "%3", "ТМЦ (счет 10)");
                Сообщить(СтрокаСообщения, СтатусСообщения.ОченьВажное);
                Продолжить;
            КонецЕсли;
    
            НоваяСтрокаТовары = НоваяСтрока.Товары.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрокаТовары, ВыборкаДетальныеЗаписи);
            Если НЕ ЗначениеЗаполнено(НоваяСтрокаТовары.СтавкаНДС) Тогда
                НоваяСтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
            КонецЕсли;
            НоваяСтрокаТовары.Цена = ВыборкаДетальныеЗаписи.Сумма / ВыборкаДетальныеЗаписи.Количество;
            НоваяСтрокаТовары.КоличествоУпаковок = ВыборкаДетальныеЗаписи.Количество;
    
            СтавкаНДСЧислом = УчетНДС.ПолучитьСтавкуНДС(ВыборкаДетальныеЗаписи.СтавкаНДС) / 100;
            НоваяСтрокаТовары.СуммаНДС    = НоваяСтрокаТовары.Сумма / (СтавкаНДСЧислом + 1) * СтавкаНДСЧислом;
            НоваяСтрокаТовары.НДСРегл     = НоваяСтрокаТовары.Сумма / (СтавкаНДСЧислом + 1) * СтавкаНДСЧислом;
            НоваяСтрокаТовары.СуммаБезНДС = НоваяСтрокаТовары.Сумма - НоваяСтрокаТовары.СуммаНДС;
            НоваяСтрокаТовары.СуммаРегл   = НоваяСтрокаТовары.Сумма - НоваяСтрокаТовары.НДСРегл;
    
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.НомерГТД) Тогда
                НоваяСтрокаТовары.НомерГТД = Новый Структура;
                НоваяСтрокаТовары.НомерГТД.Вставить("Владелец", ВыборкаДетальныеЗаписи.Номенклатура);
                НоваяСтрокаТовары.НомерГТД.Вставить("СтранаПроисхождения", ВыборкаДетальныеЗаписи.СтранаПроисхождения);
                //НоваяСтрокаТовары.НомерГТД.Вставить("ПометкаУдаления", ВыборкаДетальныеЗаписи.ПометкаУдаления);
                НоваяСтрокаТовары.НомерГТД.Вставить("Код", ВыборкаДетальныеЗаписи.НомерГТД);
            КонецЕсли;
    
        КонецЦикла;
    КонецЦикла;
КонецЦикла;
12 Игорь_МММ
 
17.03.16
18:10
(11) да, смысл понял
а ВыборкаДанных = ТаблицаЗначений - это ОК?
то есть на будущее, это одно и тоже
ВыборкаДанных = Запрос.Выполнить().Выбрать(); и
ВыборкаДанных = Запрос.Выполнить().Выгрузить();
13 Cyberhawk
 
17.03.16
18:53
(12) Это имя параметра обработчика "Перед обработкой" у ПВД.
"ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов."
ТЗ туда запросто можно подсовывать. Структура ТЗ должна повторять структуру твоего объекта-приемника.
Основная теорема систематики: Новые системы плодят новые проблемы.