Версия для печати темы (https://pro1c.org.ua/index.php?s=25a14f520608e242e68bebe214928c7c&showtopic=41699)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Отчет по двум запросам

Автор: ranis 07.11.17, 12:38

Нужно сформировать отчет по двум запросам.
При формировании отчета, не выводит данные первого запроса, а со вторым всё в порядке. Подскажите пожалуйста, в чем ошибка(В 7.7 работаю не давно, больше опыта в 8)


Код

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос3 = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС3(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
   |Расчет = Документ.НачисленияУдержанияСписком.Расчет;
   |НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
   |Величина = Документ.НачисленияУдержанияСписком.Величина;
   |СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
   |Функция СкидкаКДоходамДляСтраховыхВзносовСумма = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
   |Группировка ДатаДок без упорядочивания;
   |Группировка Расчет;
   |Группировка НомерДок;
   |Условие(Расчет = ВыбРасчет);
   |"//}}ЗАПРОС
  ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;

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

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"  
      Таб.ВывестиСекцию("Заголовок1");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос1.Группировка(1) = 1 Цикл
      // Заполнение полей ДатаДок
      Таб.ВывестиСекцию("ДатаДок1");
      Пока Запрос1.Группировка(2) = 1 Цикл
         // Заполнение полей Расчет
  
         Таб.ВывестиСекцию("Расчет1");
         Пока Запрос1.Группировка(3) = 1 Цикл
            // Заполнение полей НомерДок
  
            Таб.ВывестиСекцию("НомерДок1");
         КонецЦикла;
      КонецЦикла;
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого1");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "Сформировать1");
КонецПроцедуры

Автор: Flexy 07.11.17, 12:55

Табличный документ - переменная "Таб". Перезаписывается, после первого запроса. Она же и выводиться последней.

Таб.ВывестиСекцию("Итого"); 
...
Таб = СоздатьОбъект("Таблица");

Автор: ranis 07.11.17, 13:01

Flexy @ Сегодня, 13:55 * ,
И что сделать?

Автор: Flexy 07.11.17, 13:15

Цитата(ranis @ 07.11.17, 13:01) *
И что сделать?

Выводить в одну таблицу два отчета:
Таб = СоздатьОбъект("ТабличныйДокумент");
//Вывод первого отчета
// Вывод второго отчета
Таб.Показать();

Или в разные шаблоны:
Таб = СоздатьОбъект("ТабличныйДокумент");
Таб.ИсходнаяТаблица("Отчет_1");
// Вывод отчета
Таб.Показать();
Таб = СоздатьОбъект("ТабличныйДокумент");
Таб.ИсходнаяТаблица("Отчет_2");
// Вывод второго отчета в другой шаблон
Таб.Показать();

Автор: ranis 07.11.17, 13:17

Flexy @ Сегодня, 14:15 * ,
Суть в том что в 1 таблице одно условие, во второй таблице другое условие. В этом и проблема

Автор: Flexy 07.11.17, 13:23

Цитата(ranis @ 07.11.17, 13:17) *
Суть в том что в 1 таблице одно условие, во второй таблице другое условие. В этом и проблема

Сделайте одним запросом
СписокУсловий = СоздатьОбъект("СписокЗначений");
СписокУсловий.Добавить(Расчет1);
СписокУсловий.Добавить(Расчет2);
ТекстЗапроса="
...
|Условие(Расчет В СписокУсловий );

Автор: ranis 07.11.17, 13:46

ranis @ Сегодня, 14:17 * ,

Вот диалоговое окно


Вот так должно сформироваться


Так формируется



 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8, в следующий раз картинки удалю
 


Flexy @ Сегодня, 14:23 * ,
Похоже я совсем не умею описывать. Нужно по одному документу создать отчет. Есть два отбора "Удержание " и "Доплата". К примеру ставим удержание 25 и Произвольную доплату 50. В одной таблице нужно вывести данные по отбору Удержание, во второй таблице по отбору Доплата. И это всё должно быть в одном отчетеFlexy @ Сегодня, 14:23 * ,


Flexy @ Сегодня, 14:23 * ,
Получается надо получить 2 таблицы. С разными отборами

Автор: ranis 08.11.17, 8:35

Актуально sad.gif

Автор: salton 08.11.17, 10:23

ranis, измените макет таким образом, чтобы у Вас секции Итого1, ДатаДок1, Расчет1 итд были вертикальными.
И при обходе результата второго запроса используйте метод ПрисоединитьСекцию().

Как пишет помощник: "В выражении можно задавать имена двух секций, разделенных знаком ''|''. При этом будет получена область исходной таблицы, являющаяся пересечением первой и второй указанных секций. При этом одна секция может быть горизонтальной (состоять из строк), а другая - вертикальной (состоять из колонок). В результате получится прямоугольная область таблицы."

Автор: ranis 08.11.17, 12:37

salton @ Сегодня, 11:23 * ,
Не то

Автор: salton 08.11.17, 13:03

Цитата(ranis @ 08.11.17, 12:37) *
Не то

Что не то?
Используя ПрисоединитьСекцию() можно выводить в одну строку две разных колонки.
Если Вам не нравиться так - делайте одним запросом как подсказал Flexy, и в обходе результата выводите одну строку/секцию для обеих таблиц сразу.

Автор: ranis 08.11.17, 13:29

salton @ Сегодня, 14:03 * ,
Пробывал присоединяя, тоже пустые строчки выходят. Один запрос не проходит, т.к по одному докменту нужно вывести 2 отчета для сравнения. В одном условие один рассчет, в другом другой. Таблицы с данными должн быть параллельные

Автор: sava1 08.11.17, 13:36

Выгрузите результат в тз.
Цикл по первой тз
вторая - получитьстрокупономеру (номер строки первой тз)
выводим первую часть
присоединяем вторую

Автор: ranis 09.11.17, 7:03

актуально

Автор: nysysimara 09.11.17, 8:54

во-первых, не понимаю этой формулы:

 СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина)

ведь: (а - а) + в = 0 + в

во-вторых, предлагаю вам все-таки написать один запрос,

в-третьих, если "Таблицы с данными должн быть параллельные", а запроса остается все-таки два, то скидываете результаты в общую таблицу и сворачивайте

Автор: ranis 09.11.17, 9:20

nysysimara @ Сегодня, 9:54 * ,
1) Величина тип "Неопределенный", а для суммирование как раз та и нужно сделать.
2) Если делать одним запросом, то я не представляю, как объеденить существующие запросы
3) Я не имею представления как работать с таблицами значений

Автор: nysysimara 09.11.17, 10:26

ranis @ Сегодня, 9:20 * ,
тогда вам в стол заказов

Автор: ranis 09.11.17, 12:08

nysysimara @ Сегодня, 11:26 * ,
Мне лучше научиться. жаль нет методичек

Автор: nysysimara 09.11.17, 13:35

Таблицы обязательно должны быть параллельные?

Нужны ли строки с итоговыми значениями по Дате и по Расчету?

Автор: ranis 09.11.17, 14:19

nysysimara @ Сегодня, 14:35 * ,

//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос    
        
  
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.КоличествоКолонок(10);//сколько надо    

Запрос3 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Для й=1 по Результат1.КоличествоСтрок() Цикл //1
Если й>ТЗ.КоличествоСтрок() Тогда
//в 1 результате вдруг больше строк чем уже есть в ТЗ
ТЗ.НоваяСтрока();
КонецЕсли;

ТЗ.НоваяСтрока();
ТЗ.УстановитьЗначение(й,1,Итого);
ТЗ.УстановитьЗначение(й,2,Расчет);
ТЗ.УстановитьЗначение(й,3,НомерДок);
ТЗ.УстановитьЗначение(й,4,ДатаДок);
КонецЦикла;


////////////////////////////////////////////////////////2222222
Для й=1 по Результат2.КоличествоСтрок() Цикл //2
Если й>ТЗ.КоличествоСтрок() Тогда
//во 2 результате вдруг больше строк чем уже есть в ТЗ
ТЗ.НоваяСтрока();
КонецЕсли;
ТЗ.УстановитьЗначение(й,1,Итого1);
ТЗ.УстановитьЗначение(й,2,Расчет1);
ТЗ.УстановитьЗначение(й,3,НомерДок1);
ТЗ.УстановитьЗначение(й,4,ДатаДок1);
//и т.д.

//

Запрос1 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Для й=1 по ТЗ.КоличествоСтрок() Цикл
// Заполнение полей ДатаДок
Таб.ВывестиСекцию("ДатаДок");

// Заполнение полей Расчет
Таб.ВывестиСекцию("Расчет");

// Заполнение полей НомерДок
Таб.ВывестиСекцию("НомерДок");

КонецЦикла;

// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Вот сейчас код написанный с ТЗ. Только он сейчас на переменные ругается

nysysimara @ Сегодня, 14:35 * ,
Таблицы обязательно нужны параллельные, где есть столбцы дата, расчет, и сумма

Точнее вот так
Процедура Сформировать() 
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос    
        
  
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.КоличествоКолонок(10);//сколько надо    

Запрос3 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция Итого = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

; Пока Для й=1 по Запрос3.КоличествоСтрок() Цикл //1
Если й>ТЗ.КоличествоСтрок() Тогда
//в 1 результате вдруг больше строк чем уже есть в ТЗ
ТЗ.НоваяСтрока();
КонецЕсли;

ТЗ.НоваяСтрока();
ТЗ.УстановитьЗначение(й,1,Итого);
ТЗ.УстановитьЗначение(й,2,Расчет);
ТЗ.УстановитьЗначение(й,3,НомерДок);
ТЗ.УстановитьЗначение(й,4,ДатаДок);
КонецЦикла;

                                


////////////////////////////////////////////////////////2222222


//

Запрос1 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция Итого1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;    

Для й=1 по Запрос1.КоличествоСтрок() Цикл //2
Если й>ТЗ.КоличествоСтрок() Тогда
//во 2 результате вдруг больше строк чем уже есть в ТЗ
ТЗ.НоваяСтрока();
КонецЕсли;
ТЗ.УстановитьЗначение(й,1,Итого1);
ТЗ.УстановитьЗначение(й,2,Расчет1);
ТЗ.УстановитьЗначение(й,3,НомерДок1);
ТЗ.УстановитьЗначение(й,4,ДатаДок1);
//и т.д.

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Для й=1 по ТЗ.КоличествоСтрок() Цикл
// Заполнение полей ДатаДок
Таб.ВывестиСекцию("ДатаДок");

// Заполнение полей Расчет
Таб.ВывестиСекцию("Расчет");

// Заполнение полей НомерДок
Таб.ВывестиСекцию("НомерДок");

КонецЦикла;

// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецЦикла;
КонецПроцедуры

Автор: nysysimara 09.11.17, 14:53

код

Запрос3 = СоздатьОбъект("Запрос"); 
ТекстЗапроса =
"//{{ЗАПРОС3(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма = Сумма(СкидкаКДоходамДляСтраховыхВзносов-СкидкаКДоходамДляСтраховыхВзносов+Число(Величина));
|Группировка ДатаДок без упорядочивания;
|Группировка Расчет;
|Группировка НомерДок;
|Условие(Расчет = ВыбРасчет);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос3.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли;

ТабОбщ = СоздатьОбъект("ТаблицаЗначений");
Запрос3.Выгрузить(ТабОбщ,0,1); //0 - значения групп и функций;//1 - итоги по группировкам выводить сверху

Запрос1 = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС1(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДатаДок1 = Документ.НачисленияУдержанияСписком.ДатаДок;
|Расчет1 = Документ.НачисленияУдержанияСписком.Расчет;
|НомерДок1 = Документ.НачисленияУдержанияСписком.НомерДок;
|Величина1 = Документ.НачисленияУдержанияСписком.Величина;
|СкидкаКДоходамДляСтраховыхВзносов1 = Документ.НачисленияУдержанияСписком.СкидкаКДоходамДляСтраховыхВзносов;
|Функция СкидкаКДоходамДляСтраховыхВзносовСумма1 = Сумма(СкидкаКДоходамДляСтраховыхВзносов1-СкидкаКДоходамДляСтраховыхВзносов1+Число(Величина1));
|Группировка ДатаДок1 без упорядочивания;
|Группировка Расчет1;
|Группировка НомерДок1;
|Условие(Расчет1 = ВыбРасчет1);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли;

ТабОбщ.НоваяКолонка("Расчет1");//
ТабОбщ.НоваяКолонка("СкидкаКДоходамДляСтраховыхВзносов1","Число");

Пока Запрос1.Группировка(1) = 1 Цикл
    ДатаДок1 = Запрос1.ДатаДок1;
    ТабОбщ.НоваяСтрока();
    ТабОбщ.ДатаДок = ДатаДок1;
    ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
    Пока Запрос1.Группировка(2) = 1 Цикл
        Расчет1 = Запрос1.Расчет1;
        ТабОбщ.НоваяСтрока();
        ТабОбщ.ДатаДок = ДатаДок1;
        ТабОбщ.Расчет1 = Расчет1;
        ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
        Пока Запрос1.Группировка(3) = 1 Цикл
            ТабОбщ.НоваяСтрока();
            ТабОбщ.ДатаДок = ДатаДок1;
            ТабОбщ.НомерДок = Запрос1.НомерДок1;
            ТабОбщ.Расчет1 = Расчет1;
            ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

ТабОбщ.Свернуть("ДатаДок,НомерДок,Расчет,Расчет1","СкидкаКДоходамДляСтраховыхВзносов,СкидкаКДоходамДляСтраховыхВзносов1");
ТабОбщ.Сортировать("ДатаДок,НомерДок");
  
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");
ТабОбщ.ВыбратьСтроки();
Пока ТабОбщ.ПолучитьСтроку() Цикл
    Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать("Сформировать", "");


а строка таблицы
<ТабОбщ.ДатаДок>|<ТабОбщ.НомерДок>|<ТабОбщ.Расчет>|<ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов>| |<ТабОбщ.ДатаДок>|<ТабОбщ.НомерДок>|<ТабОбщ.Расчет1>|<ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1>|

Автор: ranis 09.11.17, 15:03

nysysimara @ Сегодня, 15:53 * ,
Пока ТабОбщ.ПолучитьСтроку() <<?>>Цикл
{C:\USERS\FIN\DESKTOP\ГТОВО2.ERT(88)}: Выражение должно иметь логический тип

Автор: nysysimara 09.11.17, 15:10

ranis @ Сегодня, 15:03 * ,

Пока ТабОбщ.ПолучитьСтроку()=1 Цикл


блин, как стала кодить в 8ке это моя самая частая ошибка


Автор: ranis 09.11.17, 15:20

nysysimara @ Сегодня, 16:10 * ,
А тут то что не то sad.gif

Вот что выходит

Автор: nysysimara 09.11.17, 15:21

ranis @ Сегодня, 15:16 * ,
в свойствах ячеек с данными нужно указать тип="Выражение"

Автор: ranis 09.11.17, 15:35

nysysimara @ Сегодня, 16:21 * ,
Что то тут явно не то biggrin.gif

Вот что за нулевые поля?

Автор: nysysimara 09.11.17, 15:49

ranis @ Сегодня, 15:31 * ,
взамен

ТабОбщ.Сортировать("ДатаДок,НомерДок");

так
ТабОбщ.Сортировать("ДатаДок,НомерДок,Расчет,Расчет1");


взамен кода
ТабОбщ.НоваяКолонка("СкидкаКДоходамДляСтраховыхВзносов1","Число");

Пока Запрос1.Группировка(1) = 1 Цикл
    ДатаДок1 = Запрос1.ДатаДок1;
    ТабОбщ.НоваяСтрока();
    ТабОбщ.ДатаДок = ДатаДок1;
    ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
    Пока Запрос1.Группировка(2) = 1 Цикл
        Расчет1 = Запрос1.Расчет1;
        ТабОбщ.НоваяСтрока();
        ТабОбщ.ДатаДок = ДатаДок1;
        ТабОбщ.Расчет1 = Расчет1;
        ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
        Пока Запрос1.Группировка(3) = 1 Цикл
            ТабОбщ.НоваяСтрока();
            ТабОбщ.ДатаДок = ДатаДок1;
            ТабОбщ.НомерДок = Запрос1.НомерДок1;
            ТабОбщ.Расчет1 = Расчет1;
            ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносов1;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

ТабОбщ.Свернуть("ДатаДок,НомерДок,Расчет,Расчет1","СкидкаКДоходамДляСтраховыхВзносов,СкидкаКДоходамДляСтраховыхВзносов1");


этот
ТабОбщ.НоваяКолонка("СкидкаКДоходамДляСтраховыхВзносовСумма1","Число");

Пока Запрос1.Группировка(1) = 1 Цикл
    ДатаДок1 = Запрос1.ДатаДок1;
    ТабОбщ.НоваяСтрока();
    ТабОбщ.ДатаДок = ДатаДок1;
    ТабОбщ.ССкидкаКДоходамДляСтраховыхВзносовСумма1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносовСумма1;
    Пока Запрос1.Группировка(2) = 1 Цикл
        Расчет1 = Запрос1.Расчет1;
        ТабОбщ.НоваяСтрока();
        ТабОбщ.ДатаДок = ДатаДок1;
        ТабОбщ.Расчет1 = Расчет1;
        ТабОбщ.СкидкаКДоходамДляСтраховыхВзносовСумма1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносовСумма1;
        Пока Запрос1.Группировка(3) = 1 Цикл
            ТабОбщ.НоваяСтрока();
            ТабОбщ.ДатаДок = ДатаДок1;
            ТабОбщ.НомерДок = Запрос1.НомерДок1;
            ТабОбщ.Расчет1 = Расчет1;
            ТабОбщ.СкидкаКДоходамДляСтраховыхВзносовСумма1 = Запрос1.СкидкаКДоходамДляСтраховыхВзносовСумма1;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

ТабОбщ.Свернуть("ДатаДок,НомерДок,Расчет,Расчет1","СкидкаКДоходамДляСтраховыхВзносовСумма,СкидкаКДоходамДляСтраховыхВзносовСумма1");


и в таблице заменить
ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов на ТабОбщ.СкидкаКДоходамДляСтраховыхВзносовСумма
ТабОбщ.СкидкаКДоходамДляСтраховыхВзносов1 на ТабОбщ.СкидкаКДоходамДляСтраховыхВзносовСумма1

Автор: logist 09.11.17, 15:53

Цитата(ranis @ 09.11.17, 8:03) *
актуально

У нас не принято "поднимать" темы.

Автор: ranis 09.11.17, 15:55

nysysimara @ Сегодня, 16:49 * ,
в группировке у меня похоже проблема sad.gif

logist @ Сегодня, 16:53 * ,
Я не поднял тему, а просто указал, что проблема не решена. И заранее прошу прощения за ошибки, я не знаю всех правил

Автор: salton 10.11.17, 8:07

Цитата(ranis @ 09.11.17, 15:55) *
в группировке у меня похоже проблема


"Без Итогов"
в обеих запросах. Если нужен итог - пользуйтесь ТЗ.Итог("ИмяКолонки")

Автор: ranis 10.11.17, 9:11

salton @ Сегодня, 9:07 * ,
Это для итого по всему документу?

nysysimara @ Вчера, 16:49 * ,
Огромное спасибо за помощь wub.gif . Теперь я хоть что-то представляю. Задача решена, чуть чуть подкорректировал

И всем остальным, выражаю огромную благодарность

Автор: Vofka 10.11.17, 9:40

Цитата(ranis @ 10.11.17, 9:11) *
Огромное спасибо за помощь

Жмите палец вверх.

Автор: salton 10.11.17, 11:31

Цитата(ranis @ 10.11.17, 9:11) *
salton @ Сегодня, 9:07 ,
Это для итого по всему документу?

Для "итого по всему документу" (если Вы имеете ввиду Документ.НачисленияУдержанияСписком) есть в запросе
Функция СкидкаКДоходамДляСтраховыхВзносовСумма
, а метод ТабОбщ.Итог("СкидкаКДоходамДляСтраховыхВзносовСумма") вернет вам итог по колонке ТабОбщ.СкидкаКДоходамДляСтраховыхВзносовСумма, который Вы потом сможете поместить в конце табличного документа.
К примеру
СуммаСкидкаКДоходамДляСтраховыхВзносовСумма = ТабОбщ.Итог("СкидкаКДоходамДляСтраховыхВзносовСумма");

Потом в табличном документе создаете секцию "Подвал" и под колонкой "Сумма" помещаете
СуммаСкидкаКДоходамДляСтраховыхВзносовСумма
как выражение.
В коде сначала прошлись по группировкам, а после
ТабОбщ.Свернуть("ДатаДок,НомерДок,Расчет,Расчет1","СкидкаКДоходамДляСтраховыхВзносовСумма,СкидкаКДоходамДляСтраховыхВзносовСумма1");

ставим
СуммаСкидкаКДоходамДляСтраховыхВзносовСумма = ТабОбщ.Итог("СкидкаКДоходамДляСтраховыхВзносовСумма");

и потом уже
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
Таб.ВывестиСекцию("Заголовок");
ТабОбщ.ВыбратьСтроки();
Пока ТабОбщ.ПолучитьСтроку() Цикл
    Таб.ВывестиСекцию("Строка");
КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
Таб.Показать("Сформировать", "");

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua