|
Конвертация данных. Произвольный алгоритм. Не выгружается вся выборка. | ☑ | ||
---|---|---|---|---|
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
|
Проблема решена. Нужно было просто галку в ПВД поставить Не запоминать выгруженные объекты.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |