7.7 Данные из 2-х Таблиц Значение

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Mitay_D, 6 дек 2010.

  1. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, подскажите пожалуйста, нужно, чтобы
    Код:
        ТЗПИЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗПИЗ.НоваяКолонка("Продукция"  ,"Справочник.Номенклатура");
    ТЗПИЗ.НоваяКолонка("СтоимПрихода1","Число");        
    ТЗПИЗ.НоваяКолонка("КоличПрихода","Число");        
    ТЗПИЗ.НоваяКолонка("СтоимостьИзПроизводства","Число");  
    Таб.ВывестиСекцию("ЗагИзмПрод"); 
    
    ЗапросИзм = СоздатьОбъект("Запрос");
    ТекстЗапросаИзм = 
    "//{{ЗАПРОС(Сформировать)
    |Период с НачалоМесяца по КонецМесяца;
    |ВидМПЗ     = Регистр.МестаХранения.ВидМПЗ;
    |МПЗ        = Регистр.МестаХранения.МПЗ;
    |Количество = Регистр.МестаХранения.Количество;
    |ДокИзмПрод = Регистр.МестаХранения.Документ;
    |Функция КоличествоПриход = Приход(Количество);
    |Группировка МПЗ без групп;      
    |Условие (ВидМПЗ = Перечисление.ВидыМПЗ.Продукция);
    |Условие(ПустоеЗначение(ДокИзмПрод)=0);
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    Если ЗапросИзм.Выполнить(ТекстЗапросаИзм) = 0 Тогда
    Возврат;
    КонецЕсли;
    докИП = СоздатьОбъект("Документ.ИзменениеПродукции");
    // Подготовка к заполнению выходных форм данными запроса
    Пока ЗапросИзм.Группировка(1) = 1 Цикл
    // Заполнение полей МПЗ        
    Если докИП.НайтиДокумент(ЗапросИзм.ДокИзмПрод) = 1 Тогда
    ДокИП.ВыбратьСтроки();
    Пока ДокИП.ПолучитьСтроку() = 1 Цикл
    Если  ДокИП.Продукция = ЗапросИзм.МПЗ  Тогда  
    Стр = 0;   
    СтоимПрП = 0; 
    Если ТЗП.НайтиЗначение(ДокИП.ПродукцияСписываемая,Стр,"Продукция") = 1 Тогда  
    ТЗП.ПолучитьСтрокуПоНомеру(Стр);       
    СтоимПрП = ?(ТЗП.СтоимРасхода=0,ТЗП.СтоимПрихода,ТЗП.СтоимРасхода); 
    Если СтоимПрП <> 0 Тогда   
    ТЗПИЗ.НоваяСтрока();
    ТЗПИЗ.Продукция =  ЗапросИзм.МПЗ;
    ТЗПИЗ.СтоимПрихода1=СтоимПрП; 
    ТЗПИЗ.КоличПрихода=ЗапросИзм.КоличествоПриход; 
    ТЗПИЗ.СтоимостьИзПроизводства = ТЗПИЗ.СтоимПрихода1 * ТЗПИЗ.КоличПрихода;
    Таб.ВывестиСекцию("СтрИзмПр"); 
    КонецЕсли;        
    КонецЕсли;                    
    КонецЕсли;    
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;       
    
    
    
    ТЗПИЗ.СтоимостьИзПроизводства участвовала в
    Регистр.Партии.Сумма=ТЗП.НачОстСумма+ТЗП.КоличПрод*СтоимПрП))/ (ТЗП.НачОстКолич+ТЗП.КоличПрод)*ЗапросПарт2.КоличРасход)+ТЗПИЗ.СтоимостьИзПроизводства;

    Код:
        ЗапросПарт2 = СоздатьОбъект("Запрос");
    ТекстЗапросаПарт2 = 
    "//{{ЗАПРОС(Сформировать)
    |Период с НачалоМесяца по КонецМесяца;
    |ВидМПЗ = Регистр.Партии.ВидМПЗ;
    |МПЗ    = Регистр.Партии.МПЗ;
    |Колич  = Регистр.Партии.Количество;
    |КодОп  = Регистр.Партии.КодОперации;
    |Функция КоличПриход = Приход(Колич) когда((ВидМПЗ  Перечисление.ВидыМПЗ.Материалы) и (КодОп  Перечисление.КодыОпераций.ИзменениеМПЗ));
    |Функция КоличРасход = Расход(Колич);
    |Группировка ВидМПЗ;
    |Группировка МПЗ без групп;
    |Группировка КодОп;
    |Условие(ВидМПЗ  Перечисление.ВидыМПЗ.Товары);    
    //|Условие(КодОп  Перечисление.КодыОпераций.ИзменениеМПЗ);    
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    Если ЗапросПарт2.Выполнить(ТекстЗапросаПарт2) = 0 Тогда
    Возврат;
    КонецЕсли; 
    ........
    .........
    .........
    ..........
    Стр = 0;   
    СтоимПрП = 0;
    СтоимПрР = 0;
    Если ТЗП.НайтиЗначение(ЗапросПарт2.МПЗ,Стр,"Продукция") = 1 Тогда
    ТЗП.ПолучитьСтрокуПоНомеру(Стр); 
    СтоимПрП = ТЗП.СтоимПрихода+ТЗП.СтоимостьКорректировки;                     // Дима 
    СтоимПрР = ?(ТЗП.СтоимРасхода=0,СтоимПрП,ТЗП.СтоимРасхода);   
    КонецЕсли;  
    
    Регистр.Партии.ВидМПЗ      = ЗапросПарт2.ВидМПЗ;
    Регистр.Партии.МПЗ         = ЗапросПарт2.МПЗ;   
    
    
    Пока ЗапросПарт2.Группировка(3) = 1 Цикл  
    Если ЗапросПарт2.КоличПриход * СтоимПрП <> 0 Тогда  
    Регистр.Партии.Сумма  = ТЗП.КоличПрод *СтоимПрП;
    Регистр.Партии.КодОперации = ЗапросПарт2.КодОп;    
    Регистр.Партии.ДвижениеПриходВыполнить();                                 
    КонецЕсли;                              
    Если ЗапросПарт2.КоличРасход * СтоимПрР <> 0 Тогда
    Регистр.Партии.Сумма  = ((ТЗП.НачОстСумма+(ТЗП.КоличПрод *СтоимПрП))/
    (ТЗП.НачОстКолич+ТЗП.КоличПрод)*ЗапросПарт2.КоличРасход)+ТЗПИЗ.СтоимостьИзПроизводства;
    Регистр.Партии.КодОперации = ЗапросПарт2.КодОп;    
    Регистр.Партии.ДвижениеРасходВыполнить();                                 
    КонецЕсли;
    Таб.ВывестиСекцию("СтрокаПартПр");                             
    КонецЦикла;
    
    
    
  2. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Извиняюсь, я сам сделал! правда 20 минут в отладчике пришлось сидеть ))).
    Сделал через НайтиЗначение. Всем спасибо, тему можно оставить или удалить. Буду рад услышать другие варианты решения.
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно было попробовать одновременный запрос к двум регисрам, а вычисления проводить в функции. Тогда ТЗ не нужно

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