Имя: Пароль:
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) Этот цикл не работает, как ты этого ожидаешь. Он для одной области перебирает строки ТаблицаЗатрат и выводит в Область.Параметры.Цена. причем так как ТаблицаЗатрат одна для всей выборки, то всегда во всех областях будет цена из последней строки ТаблицаЗатрат.

Спокойно пойми как тебе надо вычислять цену.
Закон Брукера: Даже маленькая практика стоит большой теории.