8.х Проверка сторки на пометку

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Danik95, 28 мар 2009.

  1. TopicStarter Overlay
    Danik95
    Offline

    Danik95 Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Приветствую всех!!!
    Помогите пожалуйста разобраться!!!
    Делаю для Бухи 8.1 обработку которая загружает в таблицу значений документы РТУ за опред период и на основания этих РТУ создает один документ ПТУ, загружая товары из помеченных РТУ в табличную часть ПТУ. Проблема в том что я не могу заставить обработку выбирать только помеченные строки из таблицы значений, как я понял нужен цикл, вот только я не могу понять куда его вставить! :unsure:
    P.S Код ниже, мой цикл для выбора помеченных выделил жирным шрифтом.
    Выручите кто может, очень нужно до понедельника!! заранее спасибо

    Код:
    Процедура ЗаполнитьНажатие(Элемент)
    
    Док =  Документы.РеализацияТоваровУслуг.Выбрать(НачПериода,КонПериода);    
    ТДоков.Очистить();
    Пока Док.Следующий()=1 Цикл   
    Если Док.ПометкаУдаления ИЛИ Не Док.Проведен  = Истина Тогда  
    Продолжить;
    КонецЕсли;
    Стр= ТДоков.Добавить();
    Стр.Контрагент = Док.Контрагент;
    Стр.Документ = Док.Ссылка;
    Стр.Сумма = Док.СуммаДокумента;
    Стр.Пометка = Ложь;
    КонецЦикла;
    
    ЭлементыФормы.ТДоков.ОбновитьСтроки();
    КонецПроцедуры
    
    Процедура КнопкаВыбораПериодаНажатие(Элемент)
    
    НастройкаПериода = Новый НастройкаПериода;
    НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    
    Если НастройкаПериода.Редактировать() Тогда
    НачПериода = НастройкаПериода.ПолучитьДатуНачала();
    КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
    
    КонецПроцедуры
    
    Процедура КнопкаУстановитьФлажкиНажатие(Элемент)
    // проверку на пустое количество
    Для Каждого Строка Из ТДоков Цикл
    
    Строка.Пометка = Истина;
    КонецЦикла;
    КонецПроцедуры
    
    Процедура КнопкаСнятьФлажкиНажатие(Элемент)
    // проверку на пустое количество
    Для Каждого Строка Из ТДоков Цикл
    
    Строка.Пометка = Ложь;
    КонецЦикла;
    КонецПроцедуры
    
    Процедура КнопкаИнвертироватьФлажкиНажатие(Элемент)
    
    // проверку на пустое количество
    Для Каждого Строка Из ТДоков Цикл
    
    Если Строка.Пометка = Ложь Тогда 
    
    Строка.Пометка = Истина;
    ИначеЕсли Строка.Пометка = Истина Тогда
    
    Строка.Пометка = Ложь;
    КонецЕсли;
    КонецЦикла;	
    КонецПроцедуры
    
    Процедура СоздатьНажатие(Элемент) 
    ДокФ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    ДокФ.ПолучитьФорму().Открыть();
    
    Если Не ЗначениеЗаполнено(ДатаД) Тогда
    ДатаД= ТекущаяДата();
    Предупреждение("Дата документа не заполнена, будет назначена текущая дата");
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ДатаД) Тогда
    
    ДокФ.Дата = ТекущаяДата();
    Иначе
    ДокФ.Дата = ДатаД;
    КонецЕсли;
    
    ДокФ.Контрагент = Поставщик;
    Запрос = новый запрос;
    Запрос.Текст =    "ВЫБРАТЬ
    |	ВложенныйЗапрос.Номенклатура,
    |	ВложенныйЗапрос.Количество,
    |	ВложенныйЗапрос.Коэффициент,
    |	ВложенныйЗапрос.СтавкаНДС,
    |	ВложенныйЗапрос.ЕдиницаИзмерения,
    |	ВложенныйЗапрос.Цена
    |ИЗ
    |	(ВЫБРАТЬ
    |		РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    |		РеализацияТоваровУслугТовары.Количество КАК Количество,
    |		РеализацияТоваровУслугТовары.Коэффициент КАК Коэффициент,
    |		РеализацияТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
    |		РеализацияТоваровУслугТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |		РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
    |		РеализацияТоваровУслугТовары.Цена КАК Цена 
    |	ИЗ
    |		Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары) КАК ВложенныйЗапрос
    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |		ПО ВложенныйЗапрос.Ссылка = РеализацияТоваровУслуг.Ссылка
    |ГДЕ
    |	РеализацияТоваровУслуг.Ссылка В ИЕРАРХИИ(&МассивДокументов)";
    МассивДокументов = ЭтотОбъект.ТДоков.ВыгрузитьКолонку("Документ");
    Запрос.УстановитьПараметр("МассивДокументов",МассивДокументов);
    ТЗ  = Запрос.Выполнить().Выгрузить();
    
    
    
    Для каждого строка из ТЗ Цикл
    
    Для каждого Стр из Тдоков Цикл
    
    Если Стр.Пометка = Истина тогда 
    Нстрока = Докф.Товары.Добавить(); 
    НСтрока.Номенклатура  = Строка.Номенклатура;
    Нстрока.СтавкаНДС = Строка.СтавкаНДС;
    НСтрока.Цена =Строка.Цена*Процент /100;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
    КонецПроцедуры
    
  2. TopicStarter Overlay
    Danik95
    Offline

    Danik95 Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    видимо администраторы перевели текст в код, так что жирного шрифта не будет, ну вот заголовок цикла проверки пометки, это самый последний цикл (Для каждого Стр из Тдоков Цикл)
  3. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Можно попробовать сделать несколько проще - выбирайте в результирующую таблицу только отмеченные галочками РТУ. Вот так:
    Код:
    Запрос = новый запрос;
    Запрос.Текст =    "ВЫБРАТЬ
    |	ВложенныйЗапрос.Номенклатура,
    |	ВложенныйЗапрос.Количество,
    |	ВложенныйЗапрос.Коэффициент,
    |	ВложенныйЗапрос.СтавкаНДС,
    |	ВложенныйЗапрос.ЕдиницаИзмерения,
    |	ВложенныйЗапрос.Цена
    |ИЗ
    |	(ВЫБРАТЬ
    |		РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    |		РеализацияТоваровУслугТовары.Количество КАК Количество,
    |		РеализацияТоваровУслугТовары.Коэффициент КАК Коэффициент,
    |		РеализацияТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
    |		РеализацияТоваровУслугТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |		РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
    |		РеализацияТоваровУслугТовары.Цена КАК Цена 
    |	ИЗ
    |		Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары) КАК ВложенныйЗапрос
    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |		ПО ВложенныйЗапрос.Ссылка = РеализацияТоваровУслуг.Ссылка
    |ГДЕ
    |	РеализацияТоваровУслуг.Ссылка В ИЕРАРХИИ(&МассивДокументов)";
    // мы заменим полную выгрузку всех документов на те, которые отметил пользователь 
    //	 МассивДокументов = ЭтотОбъект.ТДоков.ВыгрузитьКолонку("Документ");
    
    // создадим список документов отмеченных галками
    МассивДокументов = Новый СписокЗначений;
    Для каждого стрДоков из Цикл
    Если стрДоков.Пометка Тогда
    МассивДокументов.Добавить(стрДоков.Документ);
    КонецЕсли;
    КонецЦикла;
    
    Запрос.УстановитьПараметр("МассивДокументов",МассивДокументов);
    ТЗ  = Запрос.Выполнить().Выгрузить();
    // теперь в ТЗ попали только строки из помеченых документов, и мы можем их выгрузить в документ:
    
    Для каждого строка из ТЗ Цикл
    Нстрока = Докф.Товары.Добавить(); 
    НСтрока.Номенклатура  = Строка.Номенклатура;
    Нстрока.СтавкаНДС = Строка.СтавкаНДС;
    НСтрока.Цена =Строка.Цена*Процент /100;
    КонецЦикла;
    
    
    
    1Ски сейчас под рукой нету, проверить не могу. Если будут затруднения - пиши.
  4. TopicStarter Overlay
    Danik95
    Offline

    Danik95 Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Спасибо тебе большое!!! все получилось!!!
  5. TopicStarter Overlay
    Danik95
    Offline

    Danik95 Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    127
    Симпатии:
    0
    Баллы:
    26
    Спасибо, вот только долго формирует табличную часть
  6. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Скорее всего это связано с неоптимальностью запроса. Попробуй заменить на такой:
    Код:
    Запрос.Текст =    "ВЫБРАТЬ
    |	ВложенныйЗапрос.Номенклатура,
    |	ВложенныйЗапрос.Количество,
    |	ВложенныйЗапрос.Коэффициент,
    |	ВложенныйЗапрос.СтавкаНДС,
    |	ВложенныйЗапрос.ЕдиницаИзмерения,
    |	ВложенныйЗапрос.Цена
    |ИЗ
    |		Документ.РеализацияТоваровУслуг.Товары КАК ВложенныйЗапрос
    |ГДЕ
    |	Ссылка В ИЕРАРХИИ(&МассивДокументов)";
    
    

Поделиться этой страницей