Имя: Пароль:
1C
1С v8
Конвертация данных. Произвольный алгоритм. Не выгружается вся выборка.
,
0 akhmadey
 
25.05.17
17:01
Выгрузка документа Поступление ТМЦ из комплексной конфигурации 7.7 в БП 3.0. Поскольку необходимо выгружать документы по контрагентам из папки в справочнике, а типовой отбор в обработке Tr77_82.ert не работает (отбор становится не чувствителен к периоду и выгружает ВСЕ документы, но по нужным контрагентам), решено формировать выборку документов по произвольному алгоритму с использованием метода Выбрать() справочника 7.7. Данные выбираются верно, но вот незадача, выгружается только первый документ из выборки. Что я делаю не так? Заранее спасибо.

Код обработчика:

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

ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");
ТабличнаяЧасть.НоваяКолонка("Единица");
ТабличнаяЧасть.НоваяКолонка("Количество");
ТабличнаяЧасть.НоваяКолонка("Коэффициент");
ТабличнаяЧасть.НоваяКолонка("Номенклатура");
ТабличнаяЧасть.НоваяКолонка("СтавкаНДС");
ТабличнаяЧасть.НоваяКолонка("Сумма");
ТабличнаяЧасть.НоваяКолонка("СуммаНДС");
ТабличнаяЧасть.НоваяКолонка("Цена");

СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");

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

СпрКонтр.ВыборГруппы(1);
Если СпрКонтр.Выбрать("Введите группу поставщиков", "ДляВыбора") = 1 Тогда
    ВыбГруппа = СпрКонтр.ТекущийЭлемент();
Иначе
    Возврат 0;
КонецЕсли;

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

Пока Запрос.Группировка(1) = 1 Цикл
    ВыборкаДанных.НоваяСтрока();
    ВыборкаДанных.Валюта                 = ТекДок.Валюта;
    ВыборкаДанных.КодОперации             = ТекДок.КодОперации;
    ВыборкаДанных.ДатаДок                 = ТекДок.ДатаДок;
    ВыборкаДанных.НомерДок                 = ТекДок.НомерДок;
    ВыборкаДанных.Комментарий             = ТекДок.Комментарий;
    ВыборкаДанных.Контрагент             = ТекДок.Контрагент;
    ВыборкаДанных.Кратность             = ТекДок.Кратность;
    ВыборкаДанных.Курс                     = ТекДок.Курс;
    ВыборкаДанных.СуммаВзаиморасчетов     = ТекДок.СуммаВзаиморасчетов;
    ВыборкаДанных.СуммаВклНДС             = ТекДок.СуммаВклНДС;
    ВыборкаДанных.ТипЦен                 = ТекДок.ТипЦен;
    ВыборкаДанных.УчитыватьНДС             = ТекДок.УчитыватьНДС;
    ВыборкаДанных.Фирма                    = ТекДок.Фирма;
    ВыборкаДанных.ПометкаУдаления        = 0;
    ВыборкаДанных.Проведен                = 1;
    
    ТабличнаяЧасть.УдалитьСтроки();
    ТекДок.ВыбратьСтроки();
    Пока ТекДок.ПолучитьСтроку() = 1 Цикл
        Сообщить("" + ТекДок.Номенклатура + "  " + ТекДок.Сумма);
        ТабличнаяЧасть.НоваяСтрока();
        ТабличнаяЧасть.Единица         = ТекДок.Единица;
        ТабличнаяЧасть.Количество     = ТекДок.Количество;
        ТабличнаяЧасть.Коэффициент     = ТекДок.Коэффициент;
        ТабличнаяЧасть.Номенклатура = ТекДок.Номенклатура;
        ТабличнаяЧасть.СтавкаНДС     = ТекДок.СтавкаНДС;
        ТабличнаяЧасть.Сумма         = ТекДок.Сумма;
        ТабличнаяЧасть.СуммаНДС     = ТекДок.СуммаНДС;
        ТабличнаяЧасть.Цена         = ТекДок.Цена;
    КонецЦикла;
    ВыборкаДанных.ТабличнаяЧасть = ТабличнаяЧасть;
КонецЦикла;
1 Вафель
 
25.05.17
17:02
делай лучше через ВыгрузитьПоправилу
2 akhmadey
 
25.05.17
17:10
(1) А это никак не лечится?
3 Ёпрст
 
25.05.17
17:11
(0)
ТекДок = ????
4 Ёпрст
 
25.05.17
17:12
Ну и.. писать вот так:
ВыборкаДанных.ТабличнаяЧасть = ТабличнаяЧасть; нельзя.
Будет всегда одна и та же ТЗ.
5 akhmadey
 
25.05.17
17:12
(3) ТекДок = Запрос.ТекДок.ТекущийДокумент();
6 Ёпрст
 
25.05.17
17:13
(5) Где это в коде ?
ЗЫ: за Запрос.ТекДок.ТекущийДокумент(); нужно линейкой по пальчикам
7 akhmadey
 
25.05.17
17:14
(6) Сразу после Пока Запрос.Группировка(1) = 1 Цикл
8 Ёпрст
 
25.05.17
17:16
(7) этого нет в (0)
9 Ёпрст
 
25.05.17
17:16
ну и СпрКонтр.Выбрать - это тоже шедевр..
Чего, одноразовая выгрузка ?
10 Ёпрст
 
25.05.17
17:17
Ну и самое главное, думай над (4).
11 akhmadey
 
25.05.17
17:22
(8) Это потому что я хреновый копипастер )))
(9) Приходится изголяться. Сама обработка нормально не отбирает, я в (0) писал.
(10) Я семерку уже хреново помню, но ВыборкаДанных.ТабличнаяЧасть = СоздатьОбъект("ТабличнаяЧасть"); Выдает ошибку (((
12 Ёпрст
 
25.05.17
17:24
(11)
Так, хотя бы

ТабличнаяЧасть.Выгрузить(ВыборкаДанных.ТабличнаяЧасть);
13 akhmadey
 
25.05.17
17:38
(12) Отрабатывает только в первой строке таблицы ВыборкаДанных. Во второй выдает ошибку Ошибка выбора объектов коллекции.
14 h-sp
 
25.05.17
17:42
(13) так пробуй

Пока Запрос.Группировка(1) = 1 Цикл
    ВыборкаДанных.НоваяСтрока();
    ВыборкаДанных.Валюта                 = ТекДок.Валюта;
    ВыборкаДанных.КодОперации             = ТекДок.КодОперации;
    ВыборкаДанных.ДатаДок                 = ТекДок.ДатаДок;
    ВыборкаДанных.НомерДок                 = ТекДок.НомерДок;
    ВыборкаДанных.Комментарий             = ТекДок.Комментарий;
    ВыборкаДанных.Контрагент             = ТекДок.Контрагент;
    ВыборкаДанных.Кратность             = ТекДок.Кратность;
    ВыборкаДанных.Курс                     = ТекДок.Курс;
    ВыборкаДанных.СуммаВзаиморасчетов     = ТекДок.СуммаВзаиморасчетов;
    ВыборкаДанных.СуммаВклНДС             = ТекДок.СуммаВклНДС;
    ВыборкаДанных.ТипЦен                 = ТекДок.ТипЦен;
    ВыборкаДанных.УчитыватьНДС             = ТекДок.УчитыватьНДС;
    ВыборкаДанных.Фирма                    = ТекДок.Фирма;
    ВыборкаДанных.ПометкаУдаления        = 0;
    ВыборкаДанных.Проведен                = 1;
    
ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");
ТабличнаяЧасть.НоваяКолонка("Единица");
ТабличнаяЧасть.НоваяКолонка("Количество");
ТабличнаяЧасть.НоваяКолонка("Коэффициент");
ТабличнаяЧасть.НоваяКолонка("Номенклатура");
ТабличнаяЧасть.НоваяКолонка("СтавкаНДС");
ТабличнаяЧасть.НоваяКолонка("Сумма");
ТабличнаяЧасть.НоваяКолонка("СуммаНДС");
ТабличнаяЧасть.НоваяКолонка("Цена");

    ТекДок.ВыбратьСтроки();
    Пока ТекДок.ПолучитьСтроку() = 1 Цикл
        Сообщить("" + ТекДок.Номенклатура + "  " + ТекДок.Сумма);
        ТабличнаяЧасть.НоваяСтрока();
        ТабличнаяЧасть.Единица         = ТекДок.Единица;
        ТабличнаяЧасть.Количество     = ТекДок.Количество;
        ТабличнаяЧасть.Коэффициент     = ТекДок.Коэффициент;
        ТабличнаяЧасть.Номенклатура = ТекДок.Номенклатура;
        ТабличнаяЧасть.СтавкаНДС     = ТекДок.СтавкаНДС;
        ТабличнаяЧасть.Сумма         = ТекДок.Сумма;
        ТабличнаяЧасть.СуммаНДС     = ТекДок.СуммаНДС;
        ТабличнаяЧасть.Цена         = ТекДок.Цена;
    КонецЦикла;
    ВыборкаДанных.ТабличнаяЧасть = ТабличнаяЧасть;
КонецЦикла;
15 Ёпрст
 
25.05.17
17:45
(13) покажи свой код, целиком
16 akhmadey
 
25.05.17
18:04
(15)

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

СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");

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

СпрКонтр.ВыборГруппы(1);
Если СпрКонтр.Выбрать("Введите группу поставщиков", "ДляВыбора") = 1 Тогда
    ВыбГруппа = СпрКонтр.ТекущийЭлемент();
Иначе
    Возврат 0;
КонецЕсли;

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

Пока Запрос.Группировка(1) = 1 Цикл
    ТекДок = Запрос.ТекДок.ТекущийДокумент();
    ВыборкаДанных.НоваяСтрока();
    ВыборкаДанных.Валюта                 = ТекДок.Валюта;
    ВыборкаДанных.КодОперации             = ТекДок.КодОперации;
    ВыборкаДанных.ДатаДок                 = ТекДок.ДатаДок;
    ВыборкаДанных.НомерДок                 = ТекДок.НомерДок;
    ВыборкаДанных.Комментарий             = ТекДок.Комментарий;
    ВыборкаДанных.Контрагент             = ТекДок.Контрагент;
    ВыборкаДанных.Кратность             = ТекДок.Кратность;
    ВыборкаДанных.Курс                     = ТекДок.Курс;
    ВыборкаДанных.СуммаВзаиморасчетов     = ТекДок.СуммаВзаиморасчетов;
    ВыборкаДанных.СуммаВклНДС             = ТекДок.СуммаВклНДС;
    ВыборкаДанных.ТипЦен                 = ТекДок.ТипЦен;
    ВыборкаДанных.УчитыватьНДС             = ТекДок.УчитыватьНДС;
    ВыборкаДанных.Фирма                    = ТекДок.Фирма;
    ВыборкаДанных.ПометкаУдаления        = 0;
    ВыборкаДанных.Проведен                = 1;
    Сообщить("" + ВыборкаДанных.НомерДок + " " + ВыборкаДанных.ДатаДок);
    
    //ТабличнаяЧасть.УдалитьСтроки();
    ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");
    ТабличнаяЧасть.НоваяКолонка("Единица");
    ТабличнаяЧасть.НоваяКолонка("Количество");
    ТабличнаяЧасть.НоваяКолонка("Коэффициент");
    ТабличнаяЧасть.НоваяКолонка("Номенклатура");
    ТабличнаяЧасть.НоваяКолонка("СтавкаНДС");
    ТабличнаяЧасть.НоваяКолонка("Сумма");
    ТабличнаяЧасть.НоваяКолонка("СуммаНДС");
    ТабличнаяЧасть.НоваяКолонка("Цена");
    
    ТекДок.ВыбратьСтроки();
    Пока ТекДок.ПолучитьСтроку() = 1 Цикл
        ТабличнаяЧасть.НоваяСтрока();
        ТабличнаяЧасть.Единица         = ТекДок.Единица;
        ТабличнаяЧасть.Количество     = ТекДок.Количество;
        ТабличнаяЧасть.Коэффициент     = ТекДок.Коэффициент;
        ТабличнаяЧасть.Номенклатура = ТекДок.Номенклатура;
        ТабличнаяЧасть.СтавкаНДС     = ТекДок.СтавкаНДС;
        ТабличнаяЧасть.Сумма         = ТекДок.Сумма;
        ТабличнаяЧасть.СуммаНДС     = ТекДок.СуммаНДС;
        ТабличнаяЧасть.Цена         = ТекДок.Цена;
    КонецЦикла;
    ВыборкаДанных.ТабличнаяЧасть = ТабличнаяЧасть;
    //ТабличнаяЧасть.Выгрузить(ВыборкаДанных.ТабличнаяЧасть);
КонецЦикла;
17 akhmadey
 
25.05.17
18:05
(15) При таком раскладе таблица ВыборкаДанных формируется как надо, но выгружается только первый документ
18 akhmadey
 
25.05.17
18:25
Проблема решена. Нужно было просто галку в ПВД поставить Не запоминать выгруженные объекты.