Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Янв 2018, 07:02
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как остановить цикл  (Прочитано 5994 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Voodi86

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-27
  • Сайт: 
  • Профессия: Ученик 1С
Здравтсвуйте,
Помогите пожалуйста решить проблему. У меня есть внешняя обработка. в ней настроина возможность печати этикетки, проблема заключается в том, что программа должна печатать товар на котором в таблице стоит товар + ниже по списку услуги к этому товару. У меня сейчас либо печатается все товары в одну этикетку либо только один товар, без услуг. Есть такой цикл:
Макет = ПолучитьМакет("Этикетка");
   ОблКарт = Макет.ПолучитьОбласть("Картинки");
   ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
   ОбластьМакета.Параметры.Номер = СсылкаНаОбъект.Номер;
   ОбластьМакета.Параметры.Дата = СсылкаНаОбъект.Дата;
   ОбластьМакета.Параметры.ДатаОтгр = СсылкаНаОбъект.ДатаОтгрузки;
   ТабДокумент.Вывести(ОбластьМакета);
   СтрМат = ЭтаФорма.ЭлементыФормы.ТаблицаМатериалов.ТекущиеДанные;
   Для каждого СтрМат Из Материалы Цикл
      Если СтрМат.Материал.Услуга Тогда
         Если ЭтоОбработкаКромок(СтрМат.Материал) Тогда
            ОбластьМакета = Макет.ПолучитьОбласть("Кромка");
            КартинкаПоТипуКромки(ОблКарт, ОбластьМакета, СтрМат.ОбрКромок);
         Иначе
            ОбластьМакета = Макет.ПолучитьОбласть("Услуга");
            Если ЭтоМатирование(СтрМат.Материал) Тогда
               ОбластьМакета.Параметры.Площадь = СтрМат.Площадь;
               ОбластьМакета.Параметры.Длина = СтрМат.Длина;
               ОбластьМакета.Параметры.Высота = СтрМат.Высота;
            ИначеЕсли СтрМат.Материал.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("m2") Тогда
               ОбластьМакета.Параметры.Площадь = СтрМат.Площадь;
               ОбластьМакета.Параметры.Длина = СтрМат.Длина;
               ОбластьМакета.Параметры.Высота = СтрМат.Высота;
            Иначе
               ОбластьМакета.Параметры.Колво = СтрМат.Количество;
            КонецЕсли;
         КонецЕсли;
      Иначе
         ОбластьМакета = Макет.ПолучитьОбласть("Материал");
         ОбластьМакета.Параметры.Высота = СтрМат.Высота;
         ОбластьМакета.Параметры.Длина = СтрМат.Длина;
         ОбластьМакета.Параметры.Колво = СтрМат.Количество;
               КонецЕсли;
      ОбластьМакета.Параметры.Материал = СтрМат.Материал.НаименованиеПолное;
      ТабДокумент.Вывести(ОбластьМакета);
   КонецЦикла;
В этом примере, он берет все товары и к ним услуги. и это. как я понимаю из за Для каждого СтрМат Из Материалы Цикл. Как мне прописать, что бы он брал только один товар и к нему услуги. Или что бы цтикл останавливался, когда дойдет до следующего товара.


Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
А вы уверены, что вы правильно спроектировали структуру документа(ну или из чего вы печатаете?), просто условие-то можно поставить на неравестно.
Например в одной переменной вы запоминаете текущий товар и на каждом витке цикла сравниваете не изменился ли товар, если изменился тогда Прервать

Но вообще, мне кажется тут имеет смысл сделать 2 табличные части, в одной только товары, во второй услуги со ссылкой на товар - вам так было бы намного проще анализировать, или хотя бы добавить в эту табличную часть реквизит "товар" и заполнять его у услуг. Это более устойчивое соответствие, чем просто перебирать всё подряд.

Оффлайн Voodi86

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-27
  • Сайт: 
  • Профессия: Ученик 1С
Разделить на два документа не получится никак. Другие возможности обработку не позволяют этого.
Добавлено: 09 Апр 2013, 00:04

Например в одной переменной вы запоминаете текущий товар и на каждом витке цикла сравниваете не изменился ли товар, если изменился тогда Прервать.

Подскажите пожалуйста, как правельно праписать код, что бы прервалась процедура, когда поменяется товар. У меня переменная запоминает товар, на котором стоит курсор. Потом ниже по списку идут услуги к этому товаруб и надо прервать цикл, когда будут пройдены услуги, и цикл дойдет до другого товара. Может пример где есть?


Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2860
  • РЕПУТАЦИЯ: 547
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
О_о
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2860
  • РЕПУТАЦИЯ: 547
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Прервать;
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
Voodi86, судя по тому, что я вижу - ваш цикл работает совсем не так, как вы думаете :)
сначала вы устанавливаете ссылку на текущие данные(если это ТЧ, то это ДанныеФормыСтруктура, если я ничего не путаю) в любом случае это не товар, это коллекция, в которой содержатся либо данные строки, либо неопределено.

Потом вы в цикле ПЕРЕОПРЕДЕЛЯЕТЕ эту переменную, то есть фактически затираете то, что сделали предыдущим действием. И перебираете элементы некой коллекции Материалы...
В общем, обработку в студию :)


Теги:
 

Условие запроса, цикл, конструктор запроса

Автор mashamashaРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 381
Последний ответ 31 Янв 2017, 14:29
от Oldman06
Форма Списка. Печать по всем записям справочника. как организовать цикл?

Автор SnakeyРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 2524
Последний ответ 10 Дек 2012, 16:58
от Dethmontt
Не могу понять как правильно написать цикл Помогите!

Автор ПрокофийРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 5126
Последний ответ 15 Апр 2011, 10:55
от Klyacksa
Как сделать цикл по всем строкам в табличной части

Автор it-logicРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 2008
Последний ответ 19 Мар 2014, 09:52
от KrivosheevEV
Помогите составить Цикл Повтора операции

Автор siralexРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 735
Последний ответ 09 Окт 2015, 15:23
от siralex

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
102 Сообщений
AIFrame
86 Сообщений
alex0402
34 Сообщений
pavl_vs
23 Сообщений
kiksi
19 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
LexaK
13 Сообщений
MuI_I_Ika MuI_I_Ika
13 Сообщений

* Кто онлайн

  • Точка Гостей: 371
  • Точка Скрытых: 0
  • Точка Пользователей: 8
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal