Имя: Пароль:
1C
1С v8
помогите КД. произвольный алгоритм.
0 zladenuw
 
16.03.12
16:32
Делаю выборку. но получаю 1 документ. хотя должно быть больше.
В чем может быть причина :(
Делал на примере Книга знаний: Как правильно пользоваться переносом остатков 7.7 - 8.0 с помощью КД 2.0;
1 GenV
 
16.03.12
16:40
Убери галку в ПКО "Запоминать выгруженные объекты"
2 PVV65
 
16.03.12
16:42
(0) Если делал по Книга знаний: Как правильно пользоваться переносом остатков 7.7 - 8.0 с помощью КД 2.0; , то должен получиться один документ.
3 zladenuw
 
16.03.12
16:42
я немного переделал.
Сделал вот так.

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





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

ШкалаСтавок = СоздатьОбъект("Справочник.ШкалаСтавок");
ШкалаСтавок.ИспользоватьДату(ДатаОкончания);
лШакалаСтавки = ?(ШкалаСтавок.НайтиПоКоду("НДС20")=1,ШкалаСтавок.ТекущийЭлемент(),"");
       
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
   Отказ = 1;
   Возврат 1; //В 8.0/8.1 Возврат использовать нельзя!
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл
   Пока Запрос.Группировка(2) = 1 Цикл
       Пока Запрос.Группировка(3) = 1 Цикл
           
           ВыборкаДанных.НоваяСтрока();
           ВыборкаДанных.Дата = ДатаОкончания; //ДатаОкончания - реквизит обработки "Выгрузка данных"
           ВыборкаДанных.Фирма = Запрос.Фирма;
           ВыборкаДанных.Склад = Запрос.МестоХранения;
           ВыборкаДанных.Поставщик = Запрос.Поставщик;
           ВыборкаДанных.КатегорияЦен = Запрос.ПрихДокумент.КатегорияЦен;
           ВыборкаДанных.ВидОстатков = 1;
           ВыборкаДанных.Статус = 1;
           ВыборкаДанных.ВидТоваров = Перечисление.ВидыТМЦ.Товар;
           ВыборкаДанных.ВидНДС = лШакалаСтавки;
           
           ВыборкаДанных.ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");
           
           ТабличнаяЧасть = ВыборкаДанных.ТабличнаяЧасть;
           ТабличнаяЧасть.НоваяКолонка("Товар");
           ТабличнаяЧасть.НоваяКолонка("Код");
           ТабличнаяЧасть.НоваяКолонка("Кво");
           ТабличнаяЧасть.НоваяКолонка("Ед");
           ТабличнаяЧасть.НоваяКолонка("Коэффициент");
           ТабличнаяЧасть.НоваяКолонка("ЦенаБезНДС");
           ТабличнаяЧасть.НоваяКолонка("ЦенаСНДС");
           ТабличнаяЧасть.НоваяКолонка("СуммаБезНДС");
           ТабличнаяЧасть.НоваяКолонка("СуммаСНДС");
           ТабличнаяЧасть.НоваяКолонка("ЦенаБезНДСРеал");
           ТабличнаяЧасть.НоваяКолонка("ЦенаСНДСРеал");
           ТабличнаяЧасть.НоваяКолонка("СуммаБезНДСРеал");
           ТабличнаяЧасть.НоваяКолонка("СуммаСНДСРеал");
           
           
           Пока Запрос.Группировка(4) = 1 Цикл
           ТабличнаяЧасть.НоваяСтрока();
           ТабличнаяЧасть.Код        = Запрос.Товар.Код;
           ТабличнаяЧасть.Товар        = Запрос.Товар;        
           ТабличнаяЧасть.Кво        = Запрос.ОстатокТовараКонОст;
           ТабличнаяЧасть.Ед          = Запрос.Товар.БазоваяЕдиница;
           ТабличнаяЧасть.Коэффициент = Запрос.Товар.ЕдиницаПоУмолчанию.Коэффициент;
           ТабличнаяЧасть.ЦенаБезНДС = Запрос.Стоимость;
           ТабличнаяЧасть.ЦенаСНДС = Запрос.Стоимость;
           ТабличнаяЧасть.СуммаБезНДС = Запрос.Стоимость*Запрос.ОстатокТовараКонОст;
           ТабличнаяЧасть.СуммаСНДС = Запрос.Стоимость*Запрос.ОстатокТовараКонОст;
           ТабличнаяЧасть.ЦенаБезНДСРеал = Запрос.ПродСтоимость;
           ТабличнаяЧасть.ЦенаСНДСРеал   = Запрос.ПродСтоимость;
           ТабличнаяЧасть.СуммаБезНДСРеал = Запрос.ПродСтоимость*Запрос.ОстатокТовараКонОст;
           ТабличнаяЧасть.СуммаСНДСРеал = Запрос.ПродСтоимость*Запрос.ОстатокТовараКонОст;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
4 zladenuw
 
16.03.12
16:44
да и написано там
Система, определив, что ВыборкаДанных имеет тип "ТаблицаЗначений" начнет обычный обход этой таблицы через ВыбратьСтроки()/ПолучитьСтроку() и для каждой строки будет вызывать процедуру "ВыгрузитьПоПравилу".
Ведь я должен получить столько доков сколько строк в ТЗ.
А получил только 1 документ :(
5 zladenuw
 
16.03.12
16:45
ПКО поставил поиск по дате, фирме, поставщик, категорияцен. может тут проблема?
6 zladenuw
 
16.03.12
16:45
(1) галка не стоит
7 PVV65
 
16.03.12
16:55
(3) Вроде должен создавать. Надо в отладчик.
8 zladenuw
 
16.03.12
17:05
При выгрузке заметил. выгружаю 1 раз. то видно что обработка пробегает по правилам выгрузки. а дальше только такое сообщение.
Выгрузка объекта выборки:  ТаблицаЗначений  (ТаблицаЗначений)
Конвертация объекта или получение ссылки:  ТаблицаЗначений  (ТаблицаЗначений)
а Перебора по правилам нет
9 PLUT
 
гуру
16.03.12
17:06
(0) в ПКО в обормотчик ПередВыгрузкой например

КлючВыгружаемыхДанных = Строка(Источник.Дата)+Строка(Источник.Склад);

чтобы уникальный ключ для каждой строки ТЗ
10 zladenuw
 
16.03.12
17:12
(9) и где этот ключ дальше использовать?
11 PLUT
 
гуру
16.03.12
17:14
(10) скорми обормотке ПередВыгрузкой в ПКО
12 PVV65
 
16.03.12
17:14
Посмотри файл выгрузки. Сколько там доков?
13 PLUT
 
гуру
16.03.12
17:18
+(11) из СП по обормотчикам:

КлючВыгружаемыхДанных - Произвольный. По умолчанию - это ссылка на объект Источник, а если Источник неопределен, то используется ИмяПКО (подразумевается, что правило описывает в таком случае один объект-приемник). Данный параметр необходимо использовать если одному объекту источнику могут соответствовать несколько объектов приемника, например, в зависимости от входящих данных, или в случае, когда объект приемник полностью заполняется из входящих данных (например по результатам запроса), а объект источник, как таковой отсутствует.
14 zladenuw
 
16.03.12
17:18
(13) все понял. спс
15 zladenuw
 
16.03.12
17:23
Было дело в ключе. выгрузка еще идет. это уже радует.
То есть можно было добавил номер в выборку данных. и в пко установить вот так
КлючВыгружаемыхДанных  = Источник.Номер
16 zladenuw
 
16.03.12
17:26
а что может быть за ошибка.
Ошибка выбора объектов коллекции ?
17 PLUT
 
гуру
16.03.12
17:28
(16) это не ошибка, а фича. читай про если Источник неопределен...
18 PLUT
 
гуру
16.03.12
17:32
(16) текст ошибки какой?
19 zladenuw
 
16.03.12
17:42
(18) Ошибка выбора объектов коллекции
20 PLUT
 
гуру
16.03.12
17:53
(19) проверь в ПКО  соответствие полей твой ТЗ из произв.алгоритма и ТЧ Приемника

что-то подозрительные названия "Кво", "Ед"

у документа-Приемника точно также реквизиты ТЧ ? O_o
21 zladenuw
 
16.03.12
17:55
(20).
Да кажись нашел в чем причина.
ВыборкаДанных.КатегорияЦен = Запрос.ПрихДокумент.КатегорияЦен;