7.7 Нужно правильно составить запрос

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

  1. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    блин, снова не получается, пытался сделать вот так:

    Код:
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;   
    Т1.КолОбщ = Т.Кол;
    Т1.СуммаСебОбщ = Т.СуммаСеб;
    
    а=0;
    КолОбщ=0;
    СуммаСебОбщ=0;
    Если Т1.НайтиЗначение(Запрос.Контрагент,а,"Контрагент")=1 Тогда
    Т1.ПолучитьСтрокуПоНомеру(а);
    КолОбщ=Т1.Итог("КолОбщ");
    СуммаСебОбщ=Т1.Итог("СуммаСебОбщ");
    КонецЕсли;
    
  2. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Вот весь код

    Код:
    	Т = СоздатьОбъект("ТаблицаЗначений");
    Т.НоваяКолонка("Сумма","Число",14,2);
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т.НоваяКолонка("Кол","Число",14,2);
    Т.НоваяКолонка("СуммаСеб","Число",14,2);
    Т.НоваяКолонка("СуммаСНДС","Число",14,2);
    Т.НоваяКолонка("ЦенаБезНДС","Число",14,2);
    
    Т1 = СоздатьОбъект("ТаблицаЗначений");
    Т1.НоваяКолонка("Контрагент","Запрос.Контрагент");
    Т1.НоваяКолонка("КолОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаСебОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаСНДС","Число",14,2);
    
    Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей РасходнаяНакладная
    // СуммаКонтр = Запрос.СуммаО;
    
    Таб.ВывестиСекцию("Строка");
    
    Пока Запрос.Группировка(2) = 1 Цикл 
    
    Т.УдалитьСтроки();	
    Опер=СоздатьОбъект("Операция");
    Опер.НайтиОперацию(Запрос.РасходнаяНакладная.ТекущийДокумент());
    Опер.ВыбратьПроводки();		
    Пока Опер.ПолучитьПроводку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    Если (Опер.Дебет.Счет<>СчетПоКоду("902")) и (Опер.Кредит.Счет<>СчетПоКоду("281")) Тогда
    Продолжить;			
    КонецЕсли;
    
    Т.НоваяСтрока();
    Т.ТМЦ = Опер.Дебет.Субконто(2);   
    Т.Кол = ?(Опер.Количество=0,1,Опер.Количество);
    Т.Сумма = Опер.Сумма/Опер.Количество; //это себестоимость
    Т.СуммаСеб = Опер.Сумма*1.2;
    
    КонецЦикла;
    
    Если Запрос.КолДок <> 0 Тогда
    Таб.ВывестиСекцию("Строка1");	
    КонецЕсли;	
    
    Пока Запрос.Группировка(3) = 1 Цикл   
    
    а=0;
    Себестоимость=0;
    Если Т.НайтиЗначение(Запрос.ТМЦ,а,"ТМЦ")=1 Тогда
    Т.ПолучитьСтрокуПоНомеру(а);
    Себестоимость=Т.Сумма;
    КонецЕсли;
    
    Таб.ВывестиСекцию("Строка2");
    КонецЦикла;   
    
    КонецЦикла;
    
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;   
    Т1.КолОбщ = Т.Кол;
    Т1.СуммаСебОбщ = Т.Итог("СуммаСеб");
    
    а=0;
    КолОбщ=0;
    СуммаСебОбщ=0;
    Если Т1.НайтиЗначение(Запрос.Контрагент,а,"Контрагент")=1 Тогда
    Т1.ПолучитьСтрокуПоНомеру(а);
    //КолОбщ=Т1.Итог("КолОбщ");
    СуммаСебОбщ=Т1.Итог("СуммаСебОбщ");
    КонецЕсли;		
    
    КонецЦикла;
    
  3. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну начнем с таблицы...
    В ней должны присутствовать ВСЕ колонки макета которые мы будем потом выводить в цикле (мтц/количество/цена...). Иначе как потом получить информацию?

    Если не будете структурировать код - более не буду отвечать.
    Крайне не удобно анализировать.
  4. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Так правильно?

    Код:
    	Т = СоздатьОбъект("ТаблицаЗначений");
    Т.НоваяКолонка("Сумма","Число",14,2);
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т.НоваяКолонка("Кол","Число",14,2);
    Т.НоваяКолонка("СуммаСеб","Число",14,2);
    Т.НоваяКолонка("СуммаСНДС","Число",14,2);
    
    Т1 = СоздатьОбъект("ТаблицаЗначений");
    Т1.НоваяКолонка("Контрагент","Запрос.Контрагент");
    Т1.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т1.НоваяКолонка("КолОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаСебОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаОбщ","Число",14,2);
    
    Пока Запрос.Группировка(1) = 1 Цикл //группировка по Контрагенту
    
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    
    Пока Запрос.Группировка(2) = 1 Цикл  //группировка по РасходнойНакладной
    
    // - - получаем себестоимость и кол. ТМЦ по накладной
    Т.УдалитьСтроки();	
    Опер=СоздатьОбъект("Операция");
    Опер.НайтиОперацию(Запрос.РасходнаяНакладная.ТекущийДокумент());
    Опер.ВыбратьПроводки();		
    
    Пока Опер.ПолучитьПроводку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    Если (Опер.Дебет.Счет<>СчетПоКоду("902")) и (Опер.Кредит.Счет<>СчетПоКоду("281")) Тогда
    Продолжить;			
    КонецЕсли;
    
    Т.НоваяСтрока();
    Т.ТМЦ = Опер.Дебет.Субконто(2);   
    Т.Кол = ?(Опер.Количество=0,1,Опер.Количество);
    Т.Сумма = Опер.Сумма/Опер.Количество; //это себестоимость
    Т.СуммаСеб = Опер.Сумма*1.2; //это общая себестоимость по накладной с НДС
    
    КонецЦикла;
    // - -
    
    Если Запрос.КолДок <> 0 Тогда
    Таб.ВывестиСекцию("Строка1"); // выводим данные по накладной	
    КонецЕсли;	
    
    // - - группировка по ТМЦ
    Пока Запрос.Группировка(3) = 1 Цикл    
    
    // - - вывод себестоимости по ТМЦ
    а=0;
    Себестоимость=0;
    Если Т.НайтиЗначение(Запрос.ТМЦ,а,"ТМЦ")=1 Тогда
    Т.ПолучитьСтрокуПоНомеру(а);
    Себестоимость=Т.Сумма; 
    КонецЕсли;
    // - -
    
    Таб.ВывестиСекцию("Строка2"); // выводим данные по ТМЦ из накладной
    КонецЦикла;   
    // - - конец группировки по ТМЦ
    
    КонецЦикла;
    
    // - - расчитываем общий итог по кол. и себестоимости из всех накладных по контрагенту
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;
    Т1.ТМЦ = Т.ТМЦ;   
    Т1.КолОбщ = Т.Итог("Кол");
    Т1.СуммаСебОбщ = Т.Итог("СуммаСеб");
    
    стр=0;
    КолОбщ=0;
    СуммаСебОбщ=0;
    Если Т1.НайтиЗначение(Запрос.Контрагент,стр,"Контрагент")=1 Тогда
    Т1.ПолучитьСтрокуПоНомеру(стр);
    КолОбщ=Т1.Итог("КолОбщ");
    СуммаСебОбщ=Т1.Итог("СуммаСебОбщ");
    КонецЕсли;		
    // - - 
    
    КонецЦикла;
    
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. КАРДИНАЛЬНО лучше для восприятия...

    Теперь по ТЗ...
    1) Она должна быть ОБЩЕЙ для группировки 2 и 3....
    2) Сделайте ее НЕ типизированной (в случае итогов 1с сама разберется, а нам так нужно из-за разности данных в группировках)
    3) Т1 добавляем не в том месте... Нужно ВНУТРИ цикла по группировкам.
    4) Вывод строки группировки 1 (по контрагенту) Будет ПОСЛЕ цикла по группировке 3. После вывода этой строки нужно вывести Т1 построчно (будет еще доп. условие по виду - документ или ТМЦ)
  6. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Вроде учел все Ваши замечания:

    Код:
    	Т = СоздатьОбъект("ТаблицаЗначений");
    Т.НоваяКолонка("Сумма","Число",14,2);
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т.НоваяКолонка("Кол","Число",14,2);
    Т.НоваяКолонка("СуммаСеб","Число",14,2);
    Т.НоваяКолонка("СуммаСНДС","Число",14,2);
    
    Пока Запрос.Группировка(1) = 1 Цикл //группировка по Контрагенту
    
    Т1 = СоздатьОбъект("ТаблицаЗначений");
    Т1.НоваяКолонка("Контрагент","Запрос.Контрагент");
    Т1.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т1.НоваяКолонка("КолОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаСебОбщ","Число",14,2);
    Т1.НоваяКолонка("СуммаОбщ","Число",14,2);
    
    Пока Запрос.Группировка(2) = 1 Цикл  //группировка по РасходнойНакладной
    
    // - - получаем себестоимость и кол. ТМЦ по накладной
    Т.УдалитьСтроки();	
    Опер=СоздатьОбъект("Операция");
    Опер.НайтиОперацию(Запрос.РасходнаяНакладная.ТекущийДокумент());
    Опер.ВыбратьПроводки();		
    
    Пока Опер.ПолучитьПроводку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    Если (Опер.Дебет.Счет<>СчетПоКоду("902")) и (Опер.Кредит.Счет<>СчетПоКоду("281")) Тогда
    Продолжить;			
    КонецЕсли;
    
    Т.НоваяСтрока();
    Т.ТМЦ = Опер.Дебет.Субконто(2);   
    Т.Кол = ?(Опер.Количество=0,1,Опер.Количество);
    Т.Сумма = Опер.Сумма/Опер.Количество; //это себестоимость
    Т.СуммаСеб = Опер.Сумма*1.2; //это общая себестоимость по накладной с НДС
    
    КонецЦикла;
    // - -
    
    Если Запрос.КолДок <> 0 Тогда
    Таб.ВывестиСекцию("Строка1"); // выводим данные по накладной	
    КонецЕсли;	
    
    // - - группировка по ТМЦ
    Пока Запрос.Группировка(3) = 1 Цикл    
    
    // - - вывод себестоимости по ТМЦ
    а=0;
    Себестоимость=0;
    Если Т.НайтиЗначение(Запрос.ТМЦ,а,"ТМЦ")=1 Тогда
    Т.ПолучитьСтрокуПоНомеру(а);
    Себестоимость=Т.Сумма; 
    КонецЕсли;
    // - -
    Таб.ВывестиСекцию("Строка2"); // выводим данные по ТМЦ из накладной
    КонецЦикла;
    // - - конец группировки по ТМЦ
    
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    
    // - - расчитываем общий итог по кол. и себестоимости из всех накладных по контрагенту
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;
    Т1.ТМЦ = Т.ТМЦ;   
    Т1.КолОбщ = Т.Кол;
    Т1.СуммаСебОбщ = Т.СуммаСеб;
    
    Если Т1.ПолучитьСтроку()=1 Тогда
    КолОбщ=Т1.КолОбщ;
    СуммаСебОбщ=Т1.СуммаСебОбщ;
    КонецЕсли;		
    // - -
    
    КонецЦикла; // - - конец группировки по накладной
    
    КонецЦикла; // - - конец группировки по контрагенту
    
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Почему создаем объект внутри цикла (по 1й группировке)?
    Для очистки таблицы используем УдалитьСтроки();

    2) Я сказал сделать таблицу НЕ типизированной

    3) Остались выводы строк во второй и 3й группировке - убрать. Вместо этого должна как раз заполняться таблица значений...
  8. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    не типизированной это как?
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нет.... Смотри пост выше
  10. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    не типизированной это как?
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вместо
    Код:
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ"); //Запрос.ТМЦ - вообще полный бред
    
    
    нужно

    Код:
    Т.НоваяКолонка("ТМЦ");
    
    
  12. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Вроде сделал:

    Код:
    Т = СоздатьОбъект("ТаблицаЗначений");
    Т.НоваяКолонка("Сумма","Число",14,2);
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т.НоваяКолонка("Кол","Число",14,2);
    Т.НоваяКолонка("СуммаСеб","Число",14,2);
    Т.НоваяКолонка("СуммаСНДС","Число",14,2);
    
    Т1 = СоздатьОбъект("ТаблицаЗначений");
    Т1.НоваяКолонка("Контрагент");
    Т1.НоваяКолонка("КолОбщ");
    Т1.НоваяКолонка("СуммаСебОбщ");
    Т1.НоваяКолонка("СуммаОбщ");
    
    Пока Запрос.Группировка(1) = 1 Цикл //группировка по Контрагенту
    
    Пока Запрос.Группировка(2) = 1 Цикл  //группировка по РасходнойНакладной
    
    // - - получаем себестоимость и кол. ТМЦ по накладной
    Т1.УдалитьСтроки();
    Т.УдалитьСтроки();	
    
    Опер=СоздатьОбъект("Операция");
    Опер.НайтиОперацию(Запрос.РасходнаяНакладная.ТекущийДокумент());
    Опер.ВыбратьПроводки();		
    
    Пока Опер.ПолучитьПроводку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    Если (Опер.Дебет.Счет<>СчетПоКоду("902")) и (Опер.Кредит.Счет<>СчетПоКоду("281")) Тогда
    Продолжить;			
    КонецЕсли;
    
    Т.НоваяСтрока();
    Т.ТМЦ = Опер.Дебет.Субконто(2);   
    Т.Кол = ?(Опер.Количество=0,1,Опер.Количество);
    Т.Сумма = Опер.Сумма/Опер.Количество; //это себестоимость
    Т.СуммаСеб = Опер.Сумма*1.2; //это общая себестоимость по накладной с НДС
    
    КонецЦикла;
    // - -
    
    //Если Запрос.КолДок <> 0 Тогда
    //	Таб.ВывестиСекцию("Строка1"); // выводим данные по накладной	
    //КонецЕсли;	
    
    // - - группировка по ТМЦ
    Пока Запрос.Группировка(3) = 1 Цикл    
    
    // - - вывод себестоимости по ТМЦ
    а=0;
    Себестоимость=0;
    Если Т.НайтиЗначение(Запрос.ТМЦ,а,"ТМЦ")=1 Тогда
    Т.ПолучитьСтрокуПоНомеру(а);
    Себестоимость=Т.Сумма; 
    КонецЕсли;
    // - -
    // Таб.ВывестиСекцию("Строка2"); // выводим данные по ТМЦ из накладной
    КонецЦикла;
    // - - конец группировки по ТМЦ
    
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    
    // - - расчитываем общий итог по кол. и себестоимости из всех накладных по контрагенту
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;
    Т1.КолОбщ = Т.Кол;
    Т1.СуммаСебОбщ = Т.СуммаСеб;
    
    Т1.ВыбратьСтроки();
    
    Если Т1.ПолучитьСтроку()=1 Тогда
    КолОбщ=Т1.КолОбщ;
    СуммаСебОбщ=Т1.СуммаСебОбщ;	
    КонецЕсли;		
    // - -
    
    КонецЦикла; // - - конец группировки по накладной
    
    КонецЦикла; // - - конец группировки по контрагенту
    
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не сработает...
    1) Очищаем строки ТЗ ДО цикла по группировке 2
    2) Добавить в ТЗ (Т) еще одну колонку - документ иначе потом не разберемся по какому документу табличная часть
    3) До вывода строки по контрагенту нужно получать итоги
    4) Перебираете в цикле Т1 (кстати без какого либо вывода в макет) а нужно перебирать Т, т.к. Т1 у вас ВООБЩЕ нигде не фигурирует
  14. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Сделал так:

    Код:
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;
    Т1.КолОбщ = Т.Итог("Кол");
    Т1.СуммаСебОбщ = Т.Итог("СуммаСеб");
    
    Т1.ВыбратьСтроки();
    
    Пока Т1.ПолучитьСтроку()=1 Цикл
    
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    
    КонецЦикла;
    
    
    В макет выводится, как Т1.Итог("КолОбщ ") и Т1.Итог("СуммаСебОбщ "), вроде всё правильно, выводимые цифры верны.
    Дальше нужно вывести строки по ТМЦ и Накладной.
  15. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    переделал на так (много строчек выводил)

    Код:
    Если Т1.ПолучитьСтроку()=1 Тогда
    
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    
    КонецЕсли;
    
    теперь выводятся строчки, если было 2 накладных, то выводится две строчки по контрагенту, первая с итоговыми данными по первой накладной, вторая строчка со всеми итогами по всем накладным(как и нужно)
  16. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Как сделать, чтоб выводилась только одна строка с общими итогами по контрагенту и остальные строки?
  17. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    со строкой с итогами по контрагенту разобрался, остаётся правильно вывести остальные строчки, как это сделать?
  18. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    выкладывайте обработку снова. Нужно видеть текущую картину целиком
  19. TopicStarter Overlay
    warayg
    Offline

    warayg Опытный в 1С

    Регистрация:
    1 июл 2011
    Сообщения:
    104
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура З()
    Перем Запрос, ТекстЗапроса, Таб, Стр;
    
    
    
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(З)
    |Период с Дата1 по Дата2;
    |Обрабатывать НеПомеченныеНаУдаление;
    |РасходнаяНакладная = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Контрагент = Документ.РасходнаяНакладная.Контрагент;
    |Валюта = Документ.РасходнаяНакладная.Валюта;
    |ТМЦ = Документ.РасходнаяНакладная.ТМЦ;
    |Кво = Документ.РасходнаяНакладная.Кво;
    |ЦенаБезНДС = Документ.РасходнаяНакладная.ЦенаБезНДС;
    |НДС = Документ.РасходнаяНакладная.НДС;
    |СуммаСНДС = Документ.РасходнаяНакладная.СуммаСНДС;
    |СуммаБезНДС = Документ.РасходнаяНакладная.СуммаБезНДС;
    |НомерДок = Документ.РасходнаяНакладная.НомерДок;
    |ДатаДок = Документ.РасходнаяНакладная.ДатаДок;
    |СуммаБезСкидки = Документ.РасходнаяНакладная.СуммаБезСкидки;
    |Скидка = Документ.РасходнаяНакладная.Скидка;
    |Функция Итого1 = Сумма(СуммаСНДС);
    |Функция Итого2 = Сумма(СуммаБезНДС);
    |Функция Итого3 = Сумма(НДС);
    |Функция Итого4 = Сумма((СуммаБезСкидки+Скидка)*1.2);
    |Функция КолДок= Сумма(Кво);
    |Группировка  Контрагент без групп;
    |Группировка  РасходнаяНакладная;
    |Группировка  ТМЦ без групп;	
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    // Подготовка к заполнению выходных форм данными запроса
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("З");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    
    Т = СоздатьОбъект("ТаблицаЗначений");
    Т.НоваяКолонка("Док","Запрос.РасходнаяНакладная");
    Т.НоваяКолонка("Сумма","Число",14,2);
    Т.НоваяКолонка("ТМЦ","Запрос.ТМЦ");
    Т.НоваяКолонка("Кол","Число",14,2);
    Т.НоваяКолонка("СуммаСеб","Число",14,2);
    Т.НоваяКолонка("СуммаСНДС","Число",14,2);
    
    Т1 = СоздатьОбъект("ТаблицаЗначений");
    Т1.НоваяКолонка("Контрагент");
    Т1.НоваяКолонка("КолОбщ");
    Т1.НоваяКолонка("СуммаСебОбщ");
    Т1.НоваяКолонка("СуммаОбщ");
    
    Пока Запрос.Группировка(1) = 1 Цикл //группировка по Контрагенту
    
    Т1.УдалитьСтроки();		 
    
    Пока Запрос.Группировка(2) = 1 Цикл  //группировка по РасходнойНакладной
    
    // - - получаем себестоимость и кол. ТМЦ по накладной
    
    Т.УдалитьСтроки();	
    
    Опер=СоздатьОбъект("Операция");
    Опер.НайтиОперацию(Запрос.РасходнаяНакладная.ТекущийДокумент());
    Опер.ВыбратьПроводки();		
    
    Пока Опер.ПолучитьПроводку()=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    Если (Опер.Дебет.Счет<>СчетПоКоду("902")) и (Опер.Кредит.Счет<>СчетПоКоду("281")) Тогда
    Продолжить;			
    КонецЕсли;
    
    Т.НоваяСтрока();
    Т.ТМЦ = Опер.Дебет.Субконто(2);   
    Т.Кол = ?(Опер.Количество=0,1,Опер.Количество);
    Т.Сумма = Опер.Сумма/Опер.Количество; //это себестоимость
    Т.СуммаСеб = Опер.Сумма*1.2; //это общая себестоимость по накладной с НДС
    
    КонецЦикла;
    // - -
    
    //Если Запрос.КолДок <> 0 Тогда
    //	Таб.ВывестиСекцию("Строка1"); // выводим данные по накладной	
    //КонецЕсли;	
    
    // - - группировка по ТМЦ
    Пока Запрос.Группировка(3) = 1 Цикл    
    
    // - - вывод себестоимости по ТМЦ
    а=0;
    Себестоимость=0;
    Если Т.НайтиЗначение(Запрос.ТМЦ,а,"ТМЦ")=1 Тогда
    Т.ПолучитьСтрокуПоНомеру(а);
    Себестоимость=Т.Сумма; 
    КонецЕсли;
    // - -
    // Таб.ВывестиСекцию("Строка2"); // выводим данные по ТМЦ из накладной
    КонецЦикла;
    // - - конец группировки по ТМЦ
    
    КонецЦикла; // - - конец группировки по накладной
    
    // - - расчитываем общий итог по кол. и себестоимости из всех накладных по контрагенту
    Т1.НоваяСтрока();
    Т1.Контрагент = Запрос.Контрагент;
    Т1.КолОбщ = Т.Итог("Кол");
    Т1.СуммаСебОбщ = Т.Итог("СуммаСеб");
    
    //Т1.ВыбратьСтроки();
    
    //Если Т1.ПолучитьСтроку()=1 Тогда
    а=0;
    СуммаСебОбщ=0;
    КолОбщ=0;
    Если Т1.НайтиЗначение(Запрос.Контрагент,а,"Контрагент")=1 Тогда
    Т1.ПолучитьСтрокуПоНомеру(а);
    СуммаСебОбщ=Т1.Итог("СуммаСебОбщ");
    КолОбщ=Т1.Итог("КолОбщ"); 
    КонецЕсли;
    Таб.ВывестиСекцию("Строка"); // выводим данные по контрагенту
    //КонецЕсли;		
    
    // - -
    
    КонецЦикла; // - - конец группировки по контрагенту
    
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("З", "");
    КонецПроцедуры 
    
  20. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Уффффф....
    Смотрите.
    Таблица Т нам нужна только для получения себестоимости в цикле группировки №3. Поэтому остальные колонки там не нужны (кроме ТМЦ и себестоимости)...

    А вот как раз в цикле по 3ей группировке нам нужна ОТДЕЛЬНАЯ таблица с такой структурой как Т. В этом цикле мы и заполняем значения по накладной (+ текущий документ как я вам и говорил).

    Затем после вывода итогов по контрагенту проходим циклом по получившейся ТЗ и выводим строки
    (колонка Док нам как раз покажет принадлежность табличной части)

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