Имя: Пароль:
1C
1С v8
Заполнение таблицы данными из таблицы значений
0 timdim711
 
18.07.13
12:28
На основании данных заполняется таблица значений и потом заполняется таблица.

       Для Каждого СтрНом Из Отчет.Товары Цикл    // Цикл по документу
       Запрос = новый Запрос;   // Выбираем где есть комлектующие
           Запрос.Текст = "ВЫБРАТЬ
                          |    КомплектующиеНоменклатуры.Номенклатура,
                          |    КомплектующиеНоменклатуры.Комплектующая,
                          |    КомплектующиеНоменклатуры.Количество,
                          |    КомплектующиеНоменклатуры.ЕдиницаИзмерения
                          |ИЗ
                          |    РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
                          |ГДЕ
                          |    КомплектующиеНоменклатуры.Номенклатура = &Номенклатура";
           Запрос.УстановитьПараметр("Номенклатура", СтрНом.Номенклатура );
           ТЗ = Запрос.Выполнить().Выгрузить();
           Если ТЗ.Количество() > 0 Тогда // Если есть комплектуха то добавляем строчки в табличную часть
               
           НовСтр = Комплекты.Добавить();
           
           //номенклатура
           НовСтр.Номенклатура      = СтрНом.Номенклатура;
           НовСтр.Количество     = СтрНом.Количество;
           НовСтр.ЕдИзм          = СтрНом.ЕдиницаИзмерения;
           НовСтр.Загружать = Истина;
           
           
           //1
           НовСтр.Комплектующее1 = ТЗ[0].Комплектующая;
           НовСтр.Количество1    = ТЗ[0].Количество * СтрНом.Количество;
           НовСтр.ЕдИзм1         = ТЗ[0].ЕдиницаИзмерения;
           
           //2
           НовСтр.Комплектующее2 = ТЗ[1].Комплектующая;
           НовСтр.Количество2    = ТЗ[1].Количество *СтрНом.Количество;
           НовСтр.ЕдИзм2         = ТЗ[1].ЕдиницаИзмерения ;
           
           //3
           НовСтр.Комплектующее3 = ТЗ[2].Комплектующая;
           НовСтр.Количество3    = ТЗ[2].Количество *СтрНом.Количество;
           НовСтр.ЕдИзм3         = ТЗ[2].ЕдиницаИзмерения ;
           
           //4
           НовСтр.Комплектующее4 = ТЗ[3].Комплектующая;
           НовСтр.Количество4    = ТЗ[3].Количество *СтрНом.Количество;
           НовСтр.ЕдИзм4         = ТЗ[3].ЕдиницаИзмерения ;            
           
           //5
           НовСтр.Комплектующее5 = ТЗ[4].Комплектующая;
           НовСтр.Количество5    = ТЗ[4].Количество *СтрНом.Количество;
           НовСтр.ЕдИзм5         = ТЗ[4].ЕдиницаИзмерения ;            

Получается что у одной номенклатурной позиции 4 комплектующих, а другой 3.
Выдает ошибку - индекс находится за границами массива.
как и где указать что для данной номенклатуры массив состоит из 5, а для следующей из 3.
1 mikecool
 
18.07.13
12:29
овСтр.Комплектующееххх - это жесть (((
2 Ork
 
18.07.13
12:30
(0) Изучите группировки и их обход.
3 mikecool
 
18.07.13
12:31
+1 почему так?
добавляй н строк по количеству комплектующих, они потом отбором будут фильтроваться по номенклатуре
4 timdim711
 
18.07.13
12:32
(2) - переписать запрос через группировки и потом в цикле заполнять строки табличной части?
5 timdim711
 
18.07.13
12:34
(3) - можно пример кода.
6 Ork
 
18.07.13
12:35
(4) 100 пудов.
7 Плот
 
18.07.13
12:36
(0) Про запросы в цикле уже писали?
8 timdim711
 
18.07.13
12:37
(7) - нет
9 mikecool
 
18.07.13
12:38
(5) что за форма у тебя?
10 Плот
 
18.07.13
12:38
(8) это самое, еще в школе про запросы в цикле так то двойки ставят.
11 timdim711
 
18.07.13
12:40
(9) 8.2 УТ10.3
12 palpetrovich
 
18.07.13
12:49
(7) уже да :)
примерно так делай, МассивНоменклатуры = Товары.Выгрузить("Номенклатура"):
ВЫБРАТЬ
   КомплектующиеНоменклатуры.Номенклатура,
   КомплектующиеНоменклатуры.Комплектующая,
   СУММА(КомплектующиеНоменклатуры.Количество) КАК Количество
ИЗ
   РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
ГДЕ
   КомплектующиеНоменклатуры.Номенклатура В ИЕРАРХИИ(&МассивНоменклатуры)

СГРУППИРОВАТЬ ПО
   КомплектующиеНоменклатуры.Номенклатура,
   КомплектующиеНоменклатуры.Комплектующая
13 timdim711
 
18.07.13
12:55
ВЫБРАТЬ
   Отчет.Номенклатура,
   Отчет.Количество,
   КомплектующиеНоменклатуры.Комплектующая,
   КомплектующиеНоменклатуры.Количество
ИЗ
   Документ.ОтчетОРозничныхПродажах.Товары КАК Отчет

СОЕДИНЕНИЕ
   РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
ПО
   КомплектующиеНоменклатуры.Номенклатура = Отчет.Номенклатура  
ГДЕ
   Отчет.Ссылка=&Отчет

уже написал так, только без группировки пока
14 palpetrovich
 
18.07.13
13:01
(13) и что, не пофигуратор на это ругается? хоть так сделай:
КомплектующиеНоменклатуры.Количество КАК КоличествоКомплектующие

ну и какое СОЕДИНЕНИЕ определи :)
15 timdim711
 
18.07.13
13:05
(14) - ЛЕВОЕ?
16 palpetrovich
 
18.07.13
13:11
(15) конечно
17 timdim711
 
18.07.13
13:29
(16) - а как тебе сгруппировать???
СГРУППИРОВАТЬ ПО
Отчет.Номенклатура
18 palpetrovich
 
18.07.13
13:32
(17) мне группировать не надо :)
19 timdim711
 
18.07.13
13:35
(18) сорри, ошибся... мне конечно же
20 palpetrovich
 
18.07.13
13:41
(19)
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
       |    ОтчетОРозничныхПродажахТовары.Количество КАК Количество,
       |    КомплектующиеНоменклатуры.Комплектующая КАК Комплектующая,
       |    КомплектующиеНоменклатуры.Количество КАК КоличествоКомплектующая
       |ИЗ
       |    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
       |        ПО ОтчетОРозничныхПродажахТовары.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
       |        И ОтчетОРозничныхПродажахТовары.Ссылка = &Отчет
       |ИТОГИ
       |    СУММА(Количество),
       |    СУММА(КоличествоКомплектующая)
       |ПО
       |    Номенклатура,
       |    Комплектующая";

   Результат = Запрос.Выполнить();
   ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаНоменклатура.Следующий() Цикл
       // Вставить обработку выборки ВыборкаНоменклатура
       ВыборкаКомплектующая = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаКомплектующая.Следующий() Цикл
           // Вставить обработку выборки ВыборкаКомплектующая
       КонецЦикла;
   КонецЦикла;
21 timdim711
 
18.07.13
13:51
(20)
Пока ВыборкаНоменклатура.Следующий() Цикл
       // Вставить обработку выборки ВыборкаНоменклатура
Я могу в этом цикле создать новый документ комплектация???
       ВыборкаКомплектующая = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаКомплектующая.Следующий() Цикл
           // Вставить обработку выборки
а здесь заполнить табличную часть документа???
ВыборкаКомплектующая

       КонецЦикла;
   КонецЦикла;
22 palpetrovich
 
18.07.13
15:01
(21) можешь, а зачем? открой для себя:
НовыйДокументОбъект = СтарыйДокумент.Скопировать();
23 timdim711
 
18.07.13
16:05
(22) - смысл затеи в том, чтобы на основании документа о розничных продажа, обработкой создать документы комплектация на каждую номенклатурную строку.
24 timdim711
 
18.07.13
17:04
Запрос = новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура,
   |    КомплектующиеНоменклатуры.Комплектующая    КАК Комплектующая,
   |    ОтчетОРозничныхПродажахТовары.Количество   КАК Количество,
   |    (КомплектующиеНоменклатуры.Количество*ОтчетОРозничныхПродажахТовары.Количество)       КАК КоличествоКомплектующая
   |ИЗ
   |    Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
   |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
   |ПО ОтчетОРозничныхПродажахТовары.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
   |ГДЕ ОтчетОРозничныхПродажахТовары.Ссылка = &Отчет
   |ИТОГИ
   //СУММА(Количество),
   |    СУММА(КоличествоКомплектующая)
   |ПО Номенклатура, Комплектующая";
   
   Запрос.УстановитьПараметр("Отчет", Отчет);
   Результат=Запрос.Выполнить();
   ВыборкаНоменклатура=Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока ВыборкаНоменклатура.Следующий() Цикл
       
           Докум                  = Документы.КомплектацияНоменклатуры.СоздатьДокумент();
           Докум.Дата             = Отчет.Дата ;
           Докум.ВидОперации      = Перечисления.ВидыОперацийКомплектацияНоменклатуры.Комплектация;
           Докум.Комментарий  = "Создан автоматически на основе товарного отчета "+ВыборкаНоменклатура.Номенклатура;
           Докум.ОтражатьВУправленческомУчете = Истина;
           Докум.ОтражатьВБухгалтерскомУчете  = Истина;
           Докум.ОтражатьВНалоговомУчете      = Ложь;
           Докум.Организация = Отчет.Организация ;
           Докум.Склад = Отчет.Склад;
           Докум.НДСвСтоимостиТоваров = Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять;
           
           Докум.Номенклатура     = ВыборкаНоменклатура.Номенклатура;
           Докум.Количество       = ВыборкаНоменклатура.Количество;
           //Докум.ЕдиницаИзмерения = строк.ЕдИзм;
           Докум.Коэффициент      = 1;

       
       
       ВыборкаКомплектующая=ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       Пока ВыборкаКомплектующая.Следующий() Цикл
           
           
           
           НовСтрок    = Докум.Комплектующие.Добавить();
           НовСтрок.Номенклатура            = ВыборкаКомплектующая.Комплектующая;
           НовСтрок.Количество                  = выборкаКомплектующая.КоличествоКомплектующая;
           //НовСтрок.ЕдиницаИзмерения        = Строк.ЕдИзм1;
           НовСтрок.Коэффициент            = 1;
   
           
           
           
       КонецЦикла;
       
       
       Докум.Записать(РежимЗаписиДокумента.Запись);
       Сообщить("Создан документ комплектация номенклатуры N " + Докум.Номер + " для "   + ВыборкаНоменклатура.Номенклатура  )


Как написать количество номенклатуры???
25 timdim711
 
18.07.13
17:07
Докум.Количество       = ВыборкаНоменклатура.Количество;

В данном варианте - количество пустое значение
26 palpetrovich
 
18.07.13
17:18
//СУММА(Количество),
27 timdim711
 
18.07.13
17:22
если написать СУММА (Количество), то в запросе суммируется
Основная теорема систематики: Новые системы плодят новые проблемы.