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