Имя: Пароль:
1C
1С v8
табличная часть товары
0 dimogen
 
15.06.12
12:46
Подскажите, как сделать чтоб весь список в ТЧ загружался, а то у меня при обходе создаются столько доков сколь в условие попадают?

ЗапросНомен = Новый Запрос;
ЗапросНомен.Текст =    
"ВЫБРАТЬ
|ЧекККМТовары.Номенклатура,
|СУММА(ЧекККМТовары.Количество) КАК Количество,
|СУММА(ЧекККМТовары.Номенклатура.МинОстаток) КАК МинОстаток
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
|Документ.ЧекККМ.Товары КАК ЧекККМТовары
|ГДЕ
|ЧекККМТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
|
|СГРУППИРОВАТЬ ПО
|ЧекККМТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЧекККМТовары.Номенклатура
|ПОМЕСТИТЬ СписокТоваров
|ИЗ
|    Документ.ЧекККМ.Товары КАК ЧекККМТовары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Док.Номенклатура КАК Номенклатура,
|    Док.Количество КАК Продано,
|    ЕСТЬNULL(Рег.КоличествоОстаток, 0) КАК Остаток,
|    Док.МинОстаток КАК МинОстаток,
|    Рег.ЦенаЗакупочная КАК Цена
|ИЗ
|    ДокТЧ КАК Док
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
|                ,
|                Номенклатура В
|                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
|                        СписокТоваров.Номенклатура
|                    ИЗ
|                        СписокТоваров КАК СписокТоваров)) КАК Рег
|        ПО Док.Номенклатура = Рег.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
|    Номенклатура";
       
ЗапросНомен.УстановитьПараметр("ДатаНач", ДатаНач);
ЗапросНомен.УстановитьПараметр("ДатаКон", ДатаКон);
МассивРезультатов = ЗапросНомен.ВыполнитьПакет();
РезультатЗапроса = ЗапросНомен.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
   Если НЕ Выборка.Номенклатура.ЭтоГруппа Тогда
       Номенклатура = Выборка.Номенклатура;
       Остаток = Выборка.Остаток;
       МинОстаток = Выборка.МинОстаток;
       Продано = Выборка.Продано;
       Цена = Выборка.Цена;
       Сумма = Цена*Продано;
       Если Остаток < МинОстаток Тогда
           Док = Документы.ЗаявкаМагазина.СоздатьДокумент);
           НовТовар = Док.Товары.Добавить();
           НовТовар.Номенклатура = Номенклатура;
           НовТовар.Количество = Продано;
           НовТовар.Сумма = Сумма;
           НовТовар.Цена = Цена;
       КонецЕсли;
       Док.Автор = глТекущийПользователь.Наименование;
       Док.Дата = ТекущаяДата();
       Док.Склад = Справочники.МестаХранения.НайтиПоКоду(1);
       Док.ПримечаниеДокумента = Строка("Создан автоматически");
       Док.Записать();
       Форма = Док.ПолучитьФорму("ФормаДокумента");
       Форма.Открыть();
   КонецЕсли;
КонецЦикла;
1 Mort
 
15.06.12
12:50
программиста позвать
2 dimogen
 
15.06.12
13:15
(1) умник
3 France
 
15.06.12
13:16
я тоже согласен
4 Diose
 
15.06.12
14:48
вынеси из цикла

Док = Документы.ЗаявкаМагазина.СоздатьДокумент); - а вообще это работает :)
5 Renat11111
 
15.06.12
14:51
(0) это что за х...ня? ты все это сделал?
6 Diose
 
15.06.12
14:58
Судя по всему обиделся...

Чувак не парься. Сегодня  пятница ...  оставь сложные задачи на понедельник !!!
7 abitfrosty
 
15.06.12
15:01
Не знаю, что такое "МинОстаток", но исходя из того, что он реквизит Номенклатуры, то суммировать его неправильно.
8 Hande hoch
 
15.06.12
15:02
не обиделся... (4) прочитал и понял где ступил
9 kosts
 
15.06.12
15:18
(0)
Если НЕ Выборка.Номенклатура.ЭтоГруппа Тогда

Так не делают, нужно сразу в запросе отсекать группы.

Док.Склад = Справочники.МестаХранения.НайтиПоКоду(1);

Склад лучше задать на форме.

Док.ПримечаниеДокумента = "Создан автоматически";

И примечание лучше ориентироваться на типовые, там используется Комментарий.


Вот примерно так можно переписать.

Пока Выборка.Следующий() Цикл
       Док = Документы.ЗаявкаМагазина.СоздатьДокумент);
       Если Выборка.Остаток < Выборка.МинОстаток Тогда
           т = Док.Товары.Добавить();
           ЗаполнитьЗначенияСвойств(т, Выборка);
           т.Сумма = Выборка.Цена * Выборка.Количество;
       КонецЕсли;
       Док.Автор = глТекущийПользователь.Наименование;
       Док.Дата = ТекущаяДата();
       Док.Склад = Склад;
       Док.Комментарий = "Создан автоматически";
       Док.Записать();
       Форма = Док.ПолучитьФорму("ФормаДокумента");
       Форма.Открыть();
КонецЦикла;
10 kosts
 
15.06.12
15:23
+ к (9)
Да и Если Остаток < МинОстаток Тогда тоже можно сразу в запросе отфильтровать...
11 Reset
 
15.06.12
15:47
(9)
В (0) написано: "как сделать чтоб весь список в ТЧ загружался, а то у меня при обходе создаются столько доков сколь в условие попадают"
А что твой код делать будет? :)
12 dimogen
 
15.06.12
15:53
(6)не обиделся))) сейчас попробую все это провернуть, спасибо за подсказки
13 kosts
 
15.06.12
16:01
(11) Показал подход по сокращению кода, а по существу уже раньше подсказали...
14 dimogen
 
15.06.12
16:29
(9) тоже самое делает что и мой код, только создаются +2 пустых дока...а как в один то загнать все?
15 dimogen
 
15.06.12
16:36
все я разобрался))) спс всем, подправил запрос, чтоб остатки отсеялись по периоду и код подправил!!! терь буду думать как минуса убирать по продажам за период, товар кот. попадает в выборку
16 dimogen
 
20.06.12
11:02
снова нужна помощь по этой же теме. СУММА(ЧекККМТовары.Количество) КАК Количество - это проданый товар, как сделать если это количество равно 0, то есть товара не было продано, тогда это количество равно миностаток? Я делал так

ВЫБОР КОГДА ЧекККМТовары.Количество=0 ТОГДА ЧекККМТовары.Количество = ЧекККМТовары.Номенклатура.МинОстаток КОНЕЦ

Но как я понимаю он мне всегда будет возвращать пустое значение?
17 Buster007
 
20.06.12
11:06
надо сначала просуммировать, а потом только сравнивать. Но с другой стороны откуда в документе будут позиции с нулевым количеством?
18 dimogen
 
20.06.12
11:20
попробую тогда в регистре провернуть
19 dimogen
 
20.06.12
11:25
ВЫБОР КОГДА Док.Количество=0 ТОГДА Док.Количество = Док.МинОстаток ИНАЧЕ Док.Количество КОНЕЦ
Сделал так, пишет неверные параметры (Док.Количество<<?>>)
20 Diose
 
20.06.12
11:27
(19) Док.Количество<<?>> -> Таб.Количество
21 dimogen
 
20.06.12
11:31
(20) что-то не понял, Таб.Количество что это?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn