Имя: Пароль:
1C
1С v8
Цикл в цикле
0 capllary
 
16.12.14
14:18
Народ, подскажите как вот это вот прописать чтоб оно работало:

Пока ВыборкаПоСтрокам.Следующий() Цикл
        
        Область = Макет.ПолучитьОбласть("Строка");
        Область.Параметры.Заполнить(ВыборкаПоСтрокам);
                    
        ТабНомер = СоответствиеТабНомеров[ВыборкаПоСтрокам.Сотрудник];
        Если НЕ ПустаяСтрока(ТабНомер) Тогда
            Область.Параметры.ТабельныйНомер = ТабНомер;
        КонецЕсли;
    
        Для Каждого ВыборкаПоСтрокам Из ТаблицаЗатрат Цикл
            Область.Параметры.Цена = ?(ВыборкаПоСтрокам.Количество = 0, ВыборкаПоСтрокам.Сумма, Окр(ВыборкаПоСтрокам.Сумма / ВыборкаПоСтрокам.Количество, 2));
            Область.Параметры.ТоварНаименование = СокрЛП(ВыборкаПоСтрокам.ТоварНаименование);
            Область.Параметры.Сумма = Область.Параметры.Цена*Область.Параметры.Количество;
        КонецЦикла;

        ТабДокумент.Вывести(Область);
    КонецЦикла;
1 Господин ПЖ
 
16.12.14
14:19
миста - лучший отладчик
2 capllary
 
16.12.14
14:20
(1) Перефразирую свой вопрос как Пока ВыборкаПоСтрокам.Следующий() Цикл и Для Каждого ВыборкаПоСтрокам Из ТаблицаЗатрат Цикл объеденить в один цикл?
3 piter3
 
16.12.14
14:21
[вот это] это что?
4 su_mai
 
16.12.14
14:21
Пока ВыборкаПоСтрокам.Следующий() Цикл

...

        Для Каждого ВыборкаПоСтрокам Из ТаблицаЗатрат Цикл
      


Во вложенном цикле заменить ВыборкаПоСтрокам на СтрокаТаблицы.

Привет КопиПастерам :)
5 Alex S D
 
16.12.14
14:23
(2) всеравно непонятно
6 capllary
 
16.12.14
14:25
(4) Все равно одна и та же цена у всех:

Пока ВыборкаПоСтрокам.Следующий() Цикл
        
        Область = Макет.ПолучитьОбласть("Строка");
        Область.Параметры.Заполнить(ВыборкаПоСтрокам);
                    
        ТабНомер = СоответствиеТабНомеров[ВыборкаПоСтрокам.Сотрудник];
        Если НЕ ПустаяСтрока(ТабНомер) Тогда
            Область.Параметры.ТабельныйНомер = ТабНомер;
        КонецЕсли;
        Область.Параметры.ТоварНаименование = СокрЛП(ВыборкаПоСтрокам.ТоварНаименование);
        Для Каждого Табстрок Из ТаблицаЗатрат Цикл
            Область.Параметры.Цена = ?(Табстрок.Количество = 0, Табстрок.Сумма, Окр(Табстрок.Сумма / Табстрок.Количество, 2));
        КонецЦикла;
        Область.Параметры.Сумма = Область.Параметры.Цена*Область.Параметры.Количество;
        ТабДокумент.Вывести(Область);
    КонецЦикла;
7 vicof
 
16.12.14
14:26
Я так туманно догадываюсь, что автору нужен срез последних на каждую дату в запросе.
8 Господин ПЖ
 
16.12.14
14:27
(7) вот у тебя уже железа телепата развита
9 capllary
 
16.12.14
14:27
Цель - получить разные цены, а у меня выходит одна и та же на все номенклатуры.
10 su_mai
 
16.12.14
14:27
(6) Причем последняя из ТаблицаЗатрат
11 su_mai
 
16.12.14
14:27
(10)        
Для Каждого Табстрок Из ТаблицаЗатрат Цикл
            Область.Параметры.Цена = ?(Табстрок.Количество = 0, Табстрок.Сумма, Окр(Табстрок.Сумма / Табстрок.Количество, 2));
        КонецЦикла;

Что делает этот цикл?
12 vicof
 
16.12.14
14:28
(9) Представляю, что у автора в запросе творится
13 capllary
 
16.12.14
14:29
(11) Соотносит наименование номенклатуры и её цену.

ТаблицаЗатрат = УправлениеЗапасами.ПолучитьТаблицуЗатратДляПечатиИЗаполненияДокументов(СсылкаНаОбъект, ТекстЗапроса_Материалы, СтруктраПараметров);
14 Бубка Гоп
 
16.12.14
14:29
(0) переписывай запрос
15 su_mai
 
16.12.14
14:29
(1) Миста - лучшая раскачка для мозга :) главное не привыкать
16 Dionis Sergeevich
 
16.12.14
14:29
(0)Работа нужна?
17 capllary
 
16.12.14
14:31
Вот вся функция печати:

ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();  
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;
    
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номер     КАК НомерДокумента,
    |    Дата    КАК ДатаДокумента,
    |    Дата    КАК ДатаСоставления,
    |    Организация,
    |    Склад,
    |    "+?(СсылкаНаОбъект.ОтражатьВБухгалтерскомУчете, "ПодразделениеОрганизации", "Подразделение")+" КАК Подразделение
    |ИЗ
    |    Документ.ПередачаМатериаловВЭксплуатацию КАК ПередачаМатериаловВЭксплуатацию
    |
    |ГДЕ
    |    ПередачаМатериаловВЭксплуатацию.Ссылка = &ТекущийДокумент";  

    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);

    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПередачаМатериаловВЭксплуатацию.НомерСтроки КАК НомерПП,
    |    ПередачаМатериаловВЭксплуатацию.Номенклатура.Код КАК НоменклатурныйНомер,
    |    ВЫРАЗИТЬ(ПередачаМатериаловВЭксплуатацию.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК ТоварНаименование,
    |    ПередачаМатериаловВЭксплуатацию.ХарактеристикаНоменклатуры КАК Характеристика,
    |    ПередачаМатериаловВЭксплуатацию.СерияНоменклатуры КАК Серия,
    |    ПередачаМатериаловВЭксплуатацию.Номенклатура.БазоваяЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод,
    |    ПередачаМатериаловВЭксплуатацию.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
    |    ПередачаМатериаловВЭксплуатацию.Количество КАК Количество,
    |    ПередачаМатериаловВЭксплуатацию.ФизЛицо КАК Сотрудник,
    |    ПередачаМатериаловВЭксплуатацию.ФизЛицо.Код КАК ТабельныйНомер,
    |    ПередачаМатериаловВЭксплуатацию.Ссылка.Дата КАК ДатаДокумента,
    |    ПередачаМатериаловВЭксплуатацию.НазначениеИспользования.СрокПолезногоИспользования КАК СрокСлужбы
    |ИЗ
    |    Документ.ПередачаМатериаловВЭксплуатацию.Материалы КАК ПередачаМатериаловВЭксплуатацию
    |ГДЕ
    |    ПередачаМатериаловВЭксплуатацию.Ссылка = &ТекущийДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    НомерПП";
    
    
    ТекстЗапроса_Материалы =
    "ВЫБРАТЬ
    |    ПередачаМатериаловВЭксплуатацию.Номенклатура                                                  КАК Номенклатура,
    |    ВЫРАЗИТЬ(ПередачаМатериаловВЭксплуатацию.Номенклатура.НаименованиеПолное КАК Строка(1000))     КАК ТоварНаименование,
    |    ПередачаМатериаловВЭксплуатацию.Номенклатура." + ТоварКод + "                                 КАК НоменклатурныйНомер,
    |    ПередачаМатериаловВЭксплуатацию.ЕдиницаИзмерения.Представление                                КАК ЕдиницаИзмеренияНаименование,
    |    ПередачаМатериаловВЭксплуатацию.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код                  КАК ЕдиницаИзмеренияКод,
    |    ПередачаМатериаловВЭксплуатацию.Характеристика                                                КАК Характеристика,
    |    ПередачаМатериаловВЭксплуатацию.Серия                                                         КАК Серия,
    |    ПередачаМатериаловВЭксплуатацию.Количество                                                    КАК Количество,
    |    ПередачаМатериаловВЭксплуатацию.Счет                                                          КАК Счет,
    |    ПередачаМатериаловВЭксплуатацию.НомерСтроки                                                   КАК НомерСтроки,
    |    ВЫРАЗИТЬ(
    |        ЕСТЬNULL(ТаблицаСебестоимостиОбороты.Стоимость, 0)
    |        * ПередачаМатериаловВЭксплуатацию.Количество
    |        * ПередачаМатериаловВЭксплуатацию.Коэффициент
    |        / ЕСТЬNULL(ПередачаМатериаловВЭксплуатацию.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1)
    |        / ЕСТЬNULL(ТаблицаСебестоимостиОбороты.Количество, 1)
    |     КАК ЧИСЛО(15,2))                                                                             КАК Сумма
    |ИЗ
    |    (
    |    ВЫБРАТЬ
    |        Номенклатура                 КАК Номенклатура,
    |        ЕдиницаИзмерения             КАК ЕдиницаИзмерения,
    |        Коэффициент                 КАК Коэффициент,
    |        СчетУчетаБУ                 КАК Счет,
    |        ХарактеристикаНоменклатуры    КАК Характеристика,
    |        СерияНоменклатуры           КАК Серия,
    |        СУММА(Количество)           КАК Количество,
    |        МИНИМУМ(НомерСтроки)         КАК НомерСтроки
    |    ИЗ
    |        Документ.ПередачаМатериаловВЭксплуатацию.Материалы КАК ПередачаМатериаловВЭксплуатацию
    |    ГДЕ
    |        ПередачаМатериаловВЭксплуатацию.Ссылка = &ТекущийДокумент
    |
    |    СГРУППИРОВАТЬ ПО
    |        Номенклатура,
    |        ЕдиницаИзмерения,
    |        Коэффициент,
    |        СчетУчетаБУ,
    |        ХарактеристикаНоменклатуры,
    |        СерияНоменклатуры
    |    ) КАК ПередачаМатериаловВЭксплуатацию
    |
    |    ЛЕВОЕ СОЕДИНЕНИЕ
    |        ТаблицаСебестоимостиОбороты КАК ТаблицаСебестоимостиОбороты
    |        ПО ПередачаМатериаловВЭксплуатацию.Номенклатура = ТаблицаСебестоимостиОбороты.Номенклатура
    |            И ТаблицаСебестоимостиОбороты.Регистратор = &Регистратор
    |            И ((ПередачаМатериаловВЭксплуатацию.Характеристика = ТаблицаСебестоимостиОбороты.ХарактеристикаНоменклатуры)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.ХарактеристикаНоменклатуры = ""Не используется""))
    |            И ((ПередачаМатериаловВЭксплуатацию.Серия = ТаблицаСебестоимостиОбороты.СерияНоменклатуры)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.СерияНоменклатуры = ""Не используется""))
    |            И ((ПередачаМатериаловВЭксплуатацию.Счет = ТаблицаСебестоимостиОбороты.СчетУчета)
    |                ИЛИ (ТаблицаСебестоимостиОбороты.СчетУчета = ""Не используется""))
    |        
    |УПОРЯДОЧИТЬ ПО
    |    НомерСтроки";
    
    СтруктраПараметров = Новый Структура;
    СтруктраПараметров.Вставить("ТекущийДокумент",     СсылкаНаОбъект);
    СтруктраПараметров.Вставить("Регистратор",         СсылкаНаОбъект);
    СтруктраПараметров.Вставить("НачГраница",         Новый Граница(СсылкаНаОбъект.Дата, ВидГраницы.Включая));
    
    ТаблицаЗатрат = УправлениеЗапасами.ПолучитьТаблицуЗатратДляПечатиИЗаполненияДокументов(СсылкаНаОбъект, ТекстЗапроса_Материалы, СтруктраПараметров);
        
    ЗапросПоНоменклатуре = Запрос.Выполнить();

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПередачаМатериаловВЭксплуатацию_МБ7";
    
    // Вывод заголовка
    Макет = ПолучитьМакет("МБ7");
    Область = Макет.ПолучитьОбласть("Заголовок");
    Область.Параметры.Заполнить(Шапка);
    
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);

    Область.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    Область.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
    Область.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
    
    СоответствиеТабНомеров = СпецодеждаИСпецоснастка.ПолучитьТабНомера( СсылкаНаОбъект.Организация, СсылкаНаОбъект.Дата, СсылкаНаОбъект.Материалы.ВыгрузитьКолонку("ФизЛицо"));
    
    ТабДокумент.Вывести(Область);

    ВыборкаПоСтрокам = ЗапросПоНоменклатуре.Выбрать();

    Пока ВыборкаПоСтрокам.Следующий() Цикл
        
        Область = Макет.ПолучитьОбласть("Строка");
        Область.Параметры.Заполнить(ВыборкаПоСтрокам);
                    
        ТабНомер = СоответствиеТабНомеров[ВыборкаПоСтрокам.Сотрудник];
        Если НЕ ПустаяСтрока(ТабНомер) Тогда
            Область.Параметры.ТабельныйНомер = ТабНомер;
        КонецЕсли;
        Область.Параметры.ТоварНаименование = СокрЛП(ВыборкаПоСтрокам.ТоварНаименование);
        Для Каждого Табстрок Из ТаблицаЗатрат Цикл
            Область.Параметры.Цена = ?(Табстрок.Количество = 0, Табстрок.Сумма, Окр(Табстрок.Сумма / Табстрок.Количество, 2));
        КонецЦикла;
        Область.Параметры.Сумма = Область.Параметры.Цена*Область.Параметры.Количество;
        ТабДокумент.Вывести(Область);
    КонецЦикла;
    
    Область = Макет.ПолучитьОбласть("Подписи");
        
    Область.Параметры.ФИОПолучателя = ОбщегоНазначения.ФамилияИнициалыФизЛица(ПрочитатьОтветственноеЛицо(СсылкаНаОбъект.Подразделение));
    Область.Параметры.Должность = ПолныеПрава.СведенияОСотруднике(ПрочитатьОтветственноеЛицо(СсылкаНаОбъект.Подразделение), СсылкаНаОбъект.Дата, СсылкаНаОбъект.Организация).Должность;
18 capllary
 
16.12.14
14:32
(14) Запросы нормальные и выдают верную инфу.
19 ejikbeznojek
 
16.12.14
14:32
(10) Ну напиши отбор какой-нибудь по этой таблице. Вместо цикла

Отбор=новый структура();
отбор.вставить("ТоварНаименование",Область.Параметры.ТоварНаименование)
НайдёмСтрокуТаблицыЗатрат=ТаблицаЗатрат.НайтиСтроки(отбор);


Убеждайся что нашло 1 строку и бери цену оттуда)
20 capllary
 
16.12.14
14:34
(19) Идея, щас попробую.
21 su_mai
 
16.12.14
14:36
(13) Этот цикл не работает, как ты этого ожидаешь. Он для одной области перебирает строки ТаблицаЗатрат и выводит в Область.Параметры.Цена. причем так как ТаблицаЗатрат одна для всей выборки, то всегда во всех областях будет цена из последней строки ТаблицаЗатрат.

Спокойно пойми как тебе надо вычислять цену.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.