Имя: Пароль:
1C
1C 7.7
v7: Нужна помощь в составлении отчета
0 Osipov81
 
11.07.13
09:55
Приветствую.
Нужна помощь в составлении отчета.
Нужет отчет по расчетам организации. чтобы в одной строчке отображался:
-Наименование организации
-счет учета
-субсчет
-наименование контрагента
-договор
-сальдо начало по Д
-Сальдо на начало по К
-ОборотД
-ОборотК
-Сальдо на конец по Д
-Сальдо на конец по К

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

Может у кого-то есть что-то подобное?
Подарите !! ;-)))
1 ДенисЧ
 
11.07.13
09:56
интересно....
А по 10.1 кто будет контрагентом?
2 zak555
 
11.07.13
09:56
скопируй из него код
3 zak555
 
11.07.13
09:57
(1) корсчет ?
4 Osipov81
 
11.07.13
10:00
//-----------------------------------------------
Перем Т;
Перем Обновить;
Перем Расшифровка;
Перем Ит;
Перем ПланСчетов;
Перем ВыбПланСчетов;
Перем ПредставлениеРУ;
Перем СортировкаСубконто[3];
Перем ВидСубконто[3], Субконто[3], ОтборСубконто[3], ПоГруппам[3], Номер[3];
Перем Сортировка[3], НаправлениеСортировки[3], НапрСортировки[3];
Перем СписокСубконто, ДобавитьСубконто, ОтборСубк;
// Таблицы для расчета развернутого сальдо.
Перем СумСальдо, КолСальдо;
Перем СНДР, СНКР, СКДР, СККР;
Перем УровеньГруппировкиДляРасчетаСальдо[3];
Перем ВыборкаИтоговПоГруппеСправочника[3];

//-----------------------------------------------
Процедура ПолучитьУровниГруппировокДляРасчетаСальдо()
   
   Индекс = 3;
   Для ТипСуммы = 1 по 3 Цикл
       УровеньГруппировкиДляРасчетаСальдо[ТипСуммы] = 0;
   КонецЦикла;
   
   ТипСуммы = 0;
   Пока Индекс > 0 Цикл
       ТипСуммы = ТипСуммы + 1;
       // Если установлен режим "разворачивать":
       Если ОтборСубконто[Индекс] = 1 Тогда
           УровеньГруппировкиДляРасчетаСальдо[Индекс] = Индекс;
       КонецЕсли;
       Индекс = Индекс - 1;
   КонецЦикла;
   УровеньГруппировкиДляРасчетаСальдо[1] = 1;
КонецПроцедуры // ПолучитьУровниГруппировокДляРасчетаСальдо()

//-----------------------------------------------
Процедура ДобавитьИтогиПоСубконтоКРазвернутомуСальдо(БухИт, Индекс, ТЗ, ТипСуммы)
   
   Если Счет.Выбран() = 0 Тогда
       Если БухИт.Счет.Забалансовый = 1 Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   Если (УровеньГруппировкиДляРасчетаСальдо[Индекс] = Индекс)
        и (ВыборкаИтоговПоГруппеСправочника[Индекс] = 0) Тогда

       
       ТЗ.НоваяСтрока();
       
       СН = БухИт.СНД(ТипСуммы) - БухИт.СНК(ТипСуммы);
       Если СН > 0 Тогда
           ТЗ.СНД = ТЗ.СНД + СН;
           
       Иначе
           ТЗ.СНК = ТЗ.СНК - СН;
       КонецЕсли;
       
       СК = БухИт.СКД(ТипСуммы) - БухИт.СКК(ТипСуммы);
       Если СК > 0 Тогда
           ТЗ.СКД = ТЗ.СКД + СК;
           
       Иначе
           ТЗ.СКК = ТЗ.СКК - СК;
       КонецЕсли;
       
       Если ТипСуммы = 2 Тогда
           ТЗ.Валюта = БухИт.Валюта;
       КонецЕсли;
       
   КонецЕсли;
   
КонецПроцедуры // ДобавитьИтогиПоСубконтоКРазвернутомуСальдо()

//-----------------------------------------------
Процедура СобратьСальдоРазвернутое(Суммировать = 0)
   
   Если Суммировать = 1 Тогда
       СНДР = СНДР + СумСальдо.Итог("СНД");
       СНКР = СНКР + СумСальдо.Итог("СНК");
       СКДР = СКДР + СумСальдо.Итог("СКД");
       СККР = СККР + СумСальдо.Итог("СКК");
       
   Иначе
       СНДР = СумСальдо.Итог("СНД");
       СНКР = СумСальдо.Итог("СНК");
       СКДР = СумСальдо.Итог("СКД");
       СККР = СумСальдо.Итог("СКК");
   КонецЕсли;
   
КонецПроцедуры

//-----------------------------------------------
Процедура РассчитатьСальдоРазвернутоеПоГруппе()
   
   КолСальдо.УдалитьСтроки();
   СумСальдо.УдалитьСтроки();
   
   ДобавитьИтогиПоСубконтоКРазвернутомуСальдо(Ит, 1, СумСальдо, 1);                
   Если Ит.Счет.Количественный = 1 Тогда
       ДобавитьИтогиПоСубконтоКРазвернутомуСальдо(Ит, 1, КолСальдо, 3);
   КонецЕсли;
   
КонецПроцедуры

//-----------------------------------------------
Процедура УстановитьВладельца(ПоВсем, РУ, Вид, Форма)
   Назначить = 0;
   Если ТипЗначенияСтр(РУ) = "Справочник" Тогда
       Если ПоВсем = 0 Тогда
           МДСубконто = Метаданные.Справочник(Вид);
           Если МДСубконто.Выбран() = 1 Тогда
               Если МДСубконто.Владелец.Выбран() = 1 Тогда
                   Если МДСубконто.Владелец.Идентификатор = РУ.Вид() Тогда
                       Назначить = 1;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   Если Назначить = 1 Тогда
       Форма.ИспользоватьВладельца(РУ);
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Функция ПроверкаПериода()
   Если ПустоеЗначение(Дата1) = 1 Тогда
       Предупреждение("Не указана дата начала периода отчета!");
       Возврат 0;
   КонецЕсли;
   Если Дата1 > Дата2 Тогда
       Предупреждение("Неправильно задан период отчета!"+РазделительСтрок+
                      "Дата начала больше даты окончания периода.");
       Возврат 0;
   КонецЕсли;
   Если Дата2 > КонецРассчитанногоПериодаБИ() Тогда
       Предупреждение("За выбранный период итоги не рассчитаны!"+РазделительСтрок+
                      "Расчет итогов выполняется в режиме"+РазделительСтрок+
                      """Операции - Управление бухгалтерскими итогами"".");
       Возврат 0;
   КонецЕсли;
   Возврат 1;
КонецФункции

//-----------------------------------------------
Функция ЗначенияВСтроку(Значения)
   Если ТипЗначенияСтр(Значения) = "СписокЗначений" Тогда
       С = "";
       Для А=1 По Значения.РазмерСписка() Цикл
           Если А <> 1 Тогда
               С = С+" ";
           КонецЕсли;
           С = С+Значения.ПолучитьЗначение(А);
       КонецЦикла;
       Возврат С;
   Иначе
       Возврат Значения;
   КонецЕсли;
КонецФункции

//-----------------------------------------------
Процедура ПоменятьЗначения(А1, А2)
   А = А1;
   А1 = А2;
   А2 = А;
КонецПроцедуры

//-----------------------------------------------
Процедура КопироватьСЗ(Куда, Откуда)
   Куда.УдалитьВсе();
   Для А=1 По Откуда.РазмерСписка() Цикл
       Куда.ДобавитьЗначение(Откуда.ПолучитьЗначение(А));
   КонецЦикла;
КонецПроцедуры

//-----------------------------------------------
Функция РасшифровкаОбновить(Обновить)
   Расшифровка.Установить("Обновить", Обновить);
   Возврат Расшифровка;
КонецФункции

//-----------------------------------------------
Процедура Поменять(Поз1, Поз2)
   ПоменятьЗначения(ВидСубконто[Поз1], ВидСубконто[Поз2]);
   ПоменятьЗначения(Субконто[Поз1], Субконто[Поз2]);
   ПоменятьЗначения(ОтборСубконто[Поз1], ОтборСубконто[Поз2]);
   ПоменятьЗначения(ПоГруппам[Поз1], ПоГруппам[Поз2]);
   ПоменятьЗначения(Номер[Поз1], Номер[Поз2]);
   ПоменятьЗначения(Сортировка[Поз1], Сортировка[Поз2]);
   ПоменятьЗначения(НапрСортировки[Поз1], НапрСортировки[Поз2]);
КонецПроцедуры

//-----------------------------------------------
Процедура ЗаполнитьСортировку(ВыбВидСубконто, ВыбСортировка)
   Перем Сортировка;
   Сортировка = "";
   Если ВыбСортировка.ТекущаяСтрока() <> 0 Тогда
       Сортировка = ВыбСортировка.ПолучитьЗначение(ВыбСортировка.ТекущаяСтрока());
   КонецЕсли;
   ВыбСортировка.УдалитьВсе();
   ВыбСортировка.ДобавитьЗначение("", "<Стандартная>");
   МД = Метаданные.ВидСубконто(ВыбВидСубконто.Идентификатор());
   Тип = МД.Тип;
   Если Тип = "Справочник" Тогда
       ВыбСортировка.ДобавитьЗначение("Код");
       ВыбСортировка.ДобавитьЗначение("Наименование");
       Если МД.Вид <> "" Тогда
           МД = Метаданные.Справочник(МД.Вид);
           Для А=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.Выбран() = 0 Тогда
       ВыбОтборСубконто1.ТекущаяСтрока(4);
       ВыбСортировка1.УдалитьВсе();
   Иначе
       Если ВыбСубконто1.РазмерСписка() = 0 Тогда
           ВыбОтборСубконто1.ТекущаяСтрока(1);
       КонецЕсли;
       ЗаполнитьСортировку(ВыбВидСубконто1, ВыбСортировка1);
   КонецЕсли;
   ДоступностьСубконто1();
КонецПроцедуры

//-----------------------------------------------
Процедура ДоступностьСубконто2()
   Выбран = ВыбВидСубконто2.Выбран();
   Форма.ВыбОтборСубконто2.Доступность(Выбран);
   Форма.ВыбСортировка2.Доступность(?((Выбран = 1) И (ВыбСортировка2.РазмерСписка() > 1), 1, 0));
   Форма.ВыбСубконто2.Доступность(Выбран);
   Форма.ВыбратьСубконто2.Доступность(Выбран);
   Форма.ДобавитьСубконто2.Доступность(Выбран);
   Форма.УдалитьСубконто2.Доступность(Выбран);
   Форма.УдалитьВсеСубконто2.Доступность(Выбран);
   Форма.СортПоВозрастанию2.Доступность(Выбран);
   Форма.СортПоУбыванию2.Доступность(Выбран);
КонецПроцедуры

//-----------------------------------------------
Процедура ПриВыбореВидаСубконто2(Очистить = 1)
   Если Очистить = 1 Тогда
       ВыбСубконто2.УдалитьВсе();
   КонецЕсли;
   Если ВыбВидСубконто2.Выбран() = 0 Тогда
       ВыбОтборСубконто2.ТекущаяСтрока(4);
       ВыбСортировка2.УдалитьВсе();
   Иначе
       Если ВыбСубконто2.РазмерСписка() = 0 Тогда
           ВыбОтборСубконто2.ТекущаяСтрока(1);
       КонецЕсли;
       ЗаполнитьСортировку(ВыбВидСубконто2, ВыбСортировка2);
   КонецЕсли;
   ДоступностьСубконто2();
КонецПроцедуры

//-----------------------------------------------
Процедура ДоступностьСубконто3()
   Выбран = ВыбВидСубконто3.Выбран();
   Форма.ВыбОтборСубконто3.Доступность(Выбран);
   Форма.ВыбСортировка3.Доступность(?((Выбран = 1) И (ВыбСортировка3.РазмерСписка() > 1), 1, 0));
   Форма.ВыбСубконто3.Доступность(Выбран);
   Форма.ВыбратьСубконто3.Доступность(Выбран);
   Форма.ДобавитьСубконто3.Доступность(Выбран);
   Форма.УдалитьСубконто3.Доступность(Выбран);
   Форма.УдалитьВсеСубконто3.Доступность(Выбран);
   Форма.СортПоВозрастанию3.Доступность(Выбран);
   Форма.СортПоУбыванию3.Доступность(Выбран);
КонецПроцедуры

//-----------------------------------------------
Процедура ПриВыбореВидаСубконто3(Очистить = 1)
   Если Очистить = 1 Тогда
       ВыбСубконто3.УдалитьВсе();
   КонецЕсли;
   Если ВыбВидСубконто3.Выбран() = 0 Тогда
       ВыбОтборСубконто3.ТекущаяСтрока(4);
       ВыбСортировка3.УдалитьВсе();
   Иначе
       Если ВыбСубконто3.РазмерСписка() = 0 Тогда
           ВыбОтборСубконто3.ТекущаяСтрока(1);
       КонецЕсли;
       ЗаполнитьСортировку(ВыбВидСубконто3, ВыбСортировка3);
   КонецЕсли;                
   ДоступностьСубконто3();
КонецПроцедуры

//-----------------------------------------------
Процедура ПриВыбореСчета()
   ВидСубк = ВыбВидСубконто1;
   НазначитьСчет(ВыбВидСубконто1, Счет, 1);
   Если Счет.Выбран() = 0 Тогда
       Форма.ВыбВидСубконто1.Доступность(1);
       ВыбВидСубконто1 = ВидСубк;
   Иначе        
       Если Счет.КоличествоСубконто() < 1 Тогда
           Форма.ВыбВидСубконто1.Доступность(0);
       КонецЕсли;
       Если ВыбВидСубконто1 <> ВидСубк Тогда
           ПриВыбореВидаСубконто1();
       КонецЕсли;
   КонецЕсли;

   ВидСубк = ВыбВидСубконто2;
   НазначитьСчет(ВыбВидСубконто2, Счет, 2);
   Если Счет.Выбран() = 0 Тогда
       Форма.ВыбВидСубконто2.Доступность(1);
       ВыбВидСубконто2 = ВидСубк;
   Иначе
       Если Счет.КоличествоСубконто() < 2 Тогда
           Форма.ВыбВидСубконто2.Доступность(0);
       КонецЕсли;
       Если ВыбВидСубконто2 <> ВидСубк Тогда
           ПриВыбореВидаСубконто2();
       КонецЕсли;
   КонецЕсли;

   ВидСубк = ВыбВидСубконто3;
   НазначитьСчет(ВыбВидСубконто3, Счет, 3);
   Если Счет.Выбран() = 0 Тогда
       Форма.ВыбВидСубконто3.Доступность(1);
       ВыбВидСубконто3 = ВидСубк;
   Иначе
       Если Счет.КоличествоСубконто() < 3 Тогда
           Форма.ВыбВидСубконто3.Доступность(0);
       КонецЕсли;
       Если ВыбВидСубконто3 <> ВидСубк Тогда
           ПриВыбореВидаСубконто3();
       КонецЕсли;
   КонецЕсли;

   Если Счет.Выбран() = 0 Тогда
       Форма.ДанныеПоСубсчетам.Доступность(1);
   Иначе
       ДанныеПоСубсчетам = 0;
       Форма.ДанныеПоСубсчетам.Доступность(0);
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ПриВыбореПоВсемСчетам()
   Если ПоВсемСчетам = 1 Тогда
       Счет = 0;
       Форма.Счет.Доступность(0);
       ПриВыбореСчета();
   Иначе
       Форма.Счет.Доступность(1);
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ОбработкаПодбора(ВыбранноеЗначение)
   РазмерСписка = СписокСубконто.РазмерСписка();
   Если (ДобавитьСубконто = 1) Или (СписокСубконто.РазмерСписка() = 0) Тогда
       СписокСубконто.ДобавитьЗначение(ВыбранноеЗначение);
       СписокСубконто.ТекущаяСтрока(СписокСубконто.РазмерСписка());
   Иначе
       Позиция = СписокСубконто.ТекущаяСтрока();
       СписокСубконто.УстановитьЗначение(Позиция, ВыбранноеЗначение);
       СписокСубконто.ТекущаяСтрока(Позиция);
   КонецЕсли;
   Если ДобавитьСубконто = 1 Тогда
       Если (РазмерСписка = 0) И (СписокСубконто.РазмерСписка() = 1) И (ОтборСубк.ТекущаяСтрока() = 1) Тогда
           ОтборСубк.ТекущаяСтрока(3);
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ВводСубконто(ВыбВидСубконто, ВыбСубконто, РежимПодбора, ДобСубконто, ОтборСубконто)
   Перем Субк, Форма;
   Если (ВыбСубконто.РазмерСписка() > 0) И (ВыбСубконто.ТекущаяСтрока() > 0)  Тогда
       Субк = ВыбСубконто.ПолучитьЗначение(ВыбСубконто.ТекущаяСтрока());
   КонецЕсли;

   СписокСубконто = ВыбСубконто;
   ДобавитьСубконто = ДобСубконто;
   ОтборСубк = ОтборСубконто;

   МД = Метаданные.ВидСубконто(ВыбВидСубконто.Идентификатор());
   Тип = МД.Тип;
   Если (Тип = "Справочник") Или (Тип = "Документ") Или (Тип = "Счет") Тогда
       ТипВид = Тип;
       Если МД.Вид <> "" Тогда
           ТипВид = ТипВид+"."+МД.Вид;
       Иначе
           СписокВидов = СоздатьОбъект("СписокЗначений");
           Если Тип = "Справочник" Тогда
               Для а = 1 по Метаданные.Справочник() Цикл
                   СписокВидов.ДобавитьЗначение(Метаданные.Справочник(а).Идентификатор, Метаданные.Справочник(а).Представление());
               КонецЦикла;
               
           ИначеЕсли Тип = "Документ" Тогда
               Для а = 1 по Метаданные.Документ() Цикл
                   СписокВидов.ДобавитьЗначение(Метаданные.Документ(а).Идентификатор, Метаданные.Документ(а).Представление());
               КонецЦикла;
               
           КонецЕсли;
           ВыбВид = "";
           Если СписокВидов.ВыбратьЗначение(ВыбВид, "Укажите вид объекта") = 0 Тогда
               Возврат;
           КонецЕсли;
           ТипВид = ТипВид+"."+ВыбВид;
       КонецЕсли;
       глРазделительУчета = РазделительУчета;
       ОткрытьПодбор(ТипВид,,Форма, РежимПодбора, Субк);
       Если (Тип = "Справочник") Или (Тип = "Счет") Тогда
           Форма.ВыборГруппы(1);
           Если Тип = "Справочник" Тогда
               УстановитьВладельца(ПоВсемРУ, РазделительУчета, МД.Вид, Форма);
           КонецЕсли;
       КонецЕсли;
   ИначеЕсли Тип = "Перечисление" Тогда
       СписокЗначений = СоздатьОбъект("СписокЗначений");
       П = Перечисление.ПолучитьАтрибут(МД.Вид);
       Для А=1 По П.КоличествоЗначений() Цикл
           СписокЗначений.ДобавитьЗначение(П.ЗначениеПоНомеру(А));
           Если РежимПодбора = 1 Тогда
               Если ВыбСубконто.НайтиЗначение(П.ЗначениеПоНомеру(А)) <> 0 Тогда
                   СписокЗначений.Пометка(А, 1);
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
       Если РежимПодбора = 1 Тогда
           Если СписокЗначений.ОтметитьЗначения(, "Выберите "+МД.Синоним) = 1 Тогда
               РазмерСписка = ВыбСубконто.РазмерСписка();
               ВыбСубконто.УдалитьВсе();
               Для А=1 По СписокЗначений.РазмерСписка() Цикл
                   Если СписокЗначений.Пометка(А) = 1 Тогда
                       ВыбСубконто.ДобавитьЗначение(СписокЗначений.ПолучитьЗначение(А));
                   КонецЕсли;
               КонецЦикла;
               Если ДобавитьСубконто = 1 Тогда
                   Если (РазмерСписка = 0) И (ВыбСубконто.РазмерСписка() = 1) И (ОтборСубк.ТекущаяСтрока() = 1) Тогда
                       ОтборСубк.ТекущаяСтрока(3);
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли
       Иначе
           Если СписокЗначений.ВыбратьЗначение(Субк, "Выберите "+МД.Синоним) = 1 Тогда
               ОбработкаПодбора(Субк);
           КонецЕсли
       КонецЕсли;
   Иначе
       ВвестиЗначение(Субк, "Введите "+Тип, Тип, МД.Длина, МД.Точность);
       ОбработкаПодбора(Субк);
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ПриРедактированииСубконто(ВыбВидСубконто, ВыбСубконто)
   ВводСубконто(ВыбВидСубконто, ВыбСубконто, 0, 0, "");
КонецПроцедуры

//-----------------------------------------------
Процедура ПриВыбореСубконто(ВыбВидСубконто, ВыбСубконто, ОтборСубконто)
   ВводСубконто(ВыбВидСубконто, ВыбСубконто, 0, 1, ОтборСубконто);
КонецПроцедуры

//-----------------------------------------------
Процедура ПриДобавленииСубконто(ВыбВидСубконто, ВыбСубконто, ОтборСубконто)
   ВводСубконто(ВыбВидСубконто, ВыбСубконто, 1, 1, ОтборСубконто);
КонецПроцедуры

//-----------------------------------------------
Процедура ПриУдаленииСубконто(ВыбСубконто, ОтборСубконто)
   Если (ВыбСубконто.РазмерСписка() > 0) И
        (ВыбСубконто.ТекущаяСтрока() > 0) Тогда
       ВыбСубконто.УдалитьЗначение(ВыбСубконто.ТекущаяСтрока());
       Если (ВыбСубконто.РазмерСписка() = 0) И (ОтборСубконто.ТекущаяСтрока() = 3) Тогда
           ОтборСубконто.ТекущаяСтрока(1);
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ПриУдаленииВсехСубконто(ВыбСубконто, ОтборСубконто)
   ВыбСубконто.УдалитьВсе();
   Если ОтборСубконто.ТекущаяСтрока() = 3 Тогда
       ОтборСубконто.ТекущаяСтрока(1);
   КонецЕсли;
КонецПроцедуры

//-----------------------------------------------
Процедура ЦиклПоСчетам(Индекс)
   Ит.ВыбратьСчета();
   Расшифровка.Установить("Отчет", "КарточкаСчета");
   Пока Ит.ПолучитьСчет() = 1 Цикл
       Расшифровка.Установить("Счет", Ит.Счет);
       Т.ВывестиСекцию("Секция_4");
       Если ((ДанныеПоСубсчетам = 1) и (Ит.Счет.ЭтоГруппа() =0))
             или (ДанныеПоСубсчетам <> 1) Тогда
                 ДобавитьИтогиПоСубконтоКРазвернутомуСальдо(Ит, Индекс, СумСальдо, 1);                      
       КонецЕсли;
       Расшифровка.Установить("ПоВалюте", 1);
       Ит.ВыбратьВалюты();
       Пока Ит.ПолучитьВалюту() = 1 Цикл
           Расшифровка.Установить("Валюта", Ит.Валюта);
           Т.ВывестиСекцию("Секция_6");
       КонецЦикла;
       Расшифровка.Установить("Валюта");
       Расшифровка.Установить("ПоВалюте");
       Если Ит.Счет.Количественный = 1 Тогда
           Т.ВывестиСекцию("Секция_5");
           Если ((ДанныеПоСубсчетам = 1) и (Ит.Счет.ЭтоГруппа() <> 0))
             или (ДанныеПоСубсчетам <> 1) Тогда                  
                 ДобавитьИтогиПоСубконтоКРазвернутомуСальдо(Ит, Индекс, КолСальдо, 3);
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Расшифровка.Установить("Счет");
   Расшифровка.Установить("Отчет", "КарточкаСубконто");
КонецПроцедуры

//-----------------------------------------------
Процедура Сформировать(ФлагЗакрытияФормы = 0)
   Если (ВыбВидСубконто1.Выбран() = 0) И
        (ВыбВидСубконто2.Выбран() = 0) И
        (ВыбВидСубконто3.Выбран() = 0) Тогда
       Предупреждение("Не указан вид субконто!");
       Возврат;
   КонецЕсли;

   Если ПроверкаПериода() = 0 Тогда
       Возврат;
   КонецЕсли;
   
   СумСальдо = СоздатьОбъект("ТаблицаЗначений");
   СумСальдо.НоваяКолонка("Валюта");
   СумСальдо.НоваяКолонка("СНД", "Число");
   СумСальдо.НоваяКолонка("СНК", "Число");
   СумСальдо.НоваяКолонка("СКД", "Число");
   СумСальдо.НоваяКолонка("СКК", "Число");

   КолСальдо = СоздатьОбъект("ТаблицаЗначений");
   КолСальдо.НоваяКолонка("Валюта");
   КолСальдо.НоваяКолонка("СНД", "Число");
   КолСальдо.НоваяКолонка("СНК", "Число");
   КолСальдо.НоваяКолонка("СКД", "Число");
   КолСальдо.НоваяКолонка("СКК", "Число");
   
   СНДР = 0; СНКР = 0;    СКДР = 0; СККР = 0;

   ВидСубконто[1] = ВыбВидСубконто1; ВидСубконто[2] = ВыбВидСубконто2; ВидСубконто[3] = ВыбВидСубконто3;
   
   Субконто[1] = ВыбСубконто1; Субконто[2] = ВыбСубконто2; Субконто[3] = ВыбСубконто3;
   Если ВидСубконто[1].Выбран() = 1 Тогда
       ОтборСубконто[1] = ВыбОтборСубконто1.ТекущаяСтрока();
       Если ОтборСубконто[1] > 1 Тогда
           ОтборСубконто[1] = ОтборСубконто[1]-1;
       КонецЕсли;
   Иначе
       ОтборСубконто[1] = 3;
   КонецЕсли;
   ПоГруппам[1] = ?(ВыбОтборСубконто1.ТекущаяСтрока()=2, 1, 0);
   
   Если ВидСубконто[2].Выбран() = 1 Тогда
       ОтборСубконто[2] = ВыбОтборСубконто2.ТекущаяСтрока();
       Если ОтборСубконто[2] > 1 Тогда
           ОтборСубконто[2] = ОтборСубконто[2]-1;
       КонецЕсли;
   Иначе
       ОтборСубконто[2] = 3;
   КонецЕсли;
   ПоГруппам[2] = ?(ВыбОтборСубконто2.ТекущаяСтрока()=2, 1, 0);
   
   Если ВидСубконто[3].Выбран() = 1 Тогда
       ОтборСубконто[3] = ВыбОтборСубконто3.ТекущаяСтрока();
       Если ОтборСубконто[3] > 1 Тогда
           ОтборСубконто[3] = ОтборСубконто[3]-1;
       КонецЕсли;
   Иначе
       ОтборСубконто[3] = 3;
   КонецЕсли;
   ПоГруппам[3] = ?(ВыбОтборСубконто3.ТекущаяСтрока()=2, 1, 0);

   НапрСортировки[1] = НаправлениеСортировки[1];
   НапрСортировки[2] = НаправлениеСортировки[2];
   НапрСортировки[3] = НаправлениеСортировки[3];

   Если (ВидСубконто[1] = ВидСубконто[2]) И (ОтборСубконто[1] <> 3) И (ОтборСубконто[2] <> 3) Или
        (ВидСубконто[2] = ВидСубконто[3]) И (ОтборСубконто[2] <> 3) И (ОтборСубконто[3] <> 3) Или
        (ВидСубконто[3] = ВидСубконто[1]) И (ОтборСубконто[3] <> 3) И (ОтборСубконто[1] <> 3) Тогда
       Предупреждение("Выбраны одинаковые виды субконто!");
       Возврат;
   КонецЕсли;


   Если (ВыбСортировка1.РазмерСписка() > 0) И (ВыбСортировка1.ТекущаяСтрока() > 0) Тогда
       Сортировка[1] = ВыбСортировка1.ПолучитьЗначение(ВыбСортировка1.ТекущаяСтрока());
   Иначе
       Сортировка[1] = "";
   КонецЕсли;
   Если (ВыбСортировка2.РазмерСписка() > 0) И (ВыбСортировка2.ТекущаяСтрока() > 0) Тогда
       Сортировка[2] = ВыбСортировка2.ПолучитьЗначение(ВыбСортировка2.ТекущаяСтрока());
   Иначе
       Сортировка[2] = "";
   КонецЕсли;
   Если (ВыбСортировка3.РазмерСписка() > 0) И (ВыбСортировка3.ТекущаяСтрока() > 0) Тогда
       Сортировка[3] = ВыбСортировка3.ПолучитьЗначение(ВыбСортировка3.ТекущаяСтрока());
   Иначе
       Сортировка[3] = "";
   КонецЕсли;

   Номер[1] = 1; Номер[2] = 2;    Номер[3] = 3;

   Если ОтборСубконто[1] > ОтборСубконто[2] Тогда
       Поменять(1, 2);
   КонецЕсли;
   Если ОтборСубконто[2] > ОтборСубконто[3] Тогда
       Поменять(2, 3);
       Если ОтборСубконто[1] > ОтборСубконто[2] Тогда
           Поменять(1, 2);
       КонецЕсли;
   КонецЕсли;

   Расшифровка = СоздатьОбъект("СписокЗначений");
   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ВключатьСубСчета(ДанныеПоСубсчетам);
   Заголовок = "";
   ВыбВидыСубконто = "";
   Для А=1 По 3 Цикл
       Если ОтборСубконто[А] <> 3 Тогда
           ВыбВидыСубконто = ВыбВидыСубконто+?(А=1, " ", ", ")+Строка(ВидСубконто[А]);
           Заголовок = Заголовок+?(А=1, "", "; ")+Строка(ВидСубконто[А])+?(ОтборСубконто[А] = 2, ": "+ЗначенияВСтроку(Субконто[А]), "");
           Ит.ИспользоватьСубконто(ВидСубконто[А], Субконто[А], ОтборСубконто[А], ПоГруппам[А]);
       КонецЕсли;
   КонецЦикла;
   Если ВыбПланСчетов = 1 Тогда
       ПланСчетов = ВыбранныйПланСчетов();
   КонецЕсли;
   Ит.ИспользоватьПланСчетов(ПланСчетов);
   Ит.ИспользоватьРазделительУчета(РазделительУчета);
   Если Счет.Выбран() = 1 Тогда
       Ит.Опции(1,1);
   КонецЕсли;
   Если Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет) = 0 Тогда
       Возврат;
   КонецЕсли;
   Если (ТипЗначенияСтр(Т) <> "Таблица")ИЛИ(Обновить=0) Тогда
         Т = СоздатьОбъект("Таблица");
   Иначе
       Т.Очистить();
   КонецЕсли;
   Т.ИсходнаяТаблица("Таблица");
   
   НазваниеОрганизации = глНазваниеОрганизации(Контекст);
   
   Если Счет.Выбран() = 1 Тогда
       НаименованиеОтчета = "Анализ счета "+Счет+" по субконто";
       
   Иначе
       НаименованиеОтчета = "Анализ субконто";
   КонецЕсли;
   
   Расшифровка.Установить("Отчет", "РасширенныйАнализСубконто");
   Расшифровка.Установить("РазделительУчета", РазделительУчета);
   Расшифровка.Установить("ПланСчетов", ПланСчетов);
   Расшифровка.Установить("Обновить", 1);
   Расшифровка.Установить("Дата1", Дата1);
   Расшифровка.Установить("Дата2", Дата2);
   Расшифровка.Установить("Счет", Счет);
   Для А=1 По 3 Цикл
       Расшифровка.Установить("ВидСубконто"+Номер[А], ВидСубконто[А]);
       Расшифровка.Установить("Субконто"+Номер[А], Субконто[А]);
       Расшифровка.Установить("ПоГруппам"+Номер[А], ПоГруппам[А]);
       Расшифровка.Установить("ОтборСубконто"+Номер[А], ОтборСубконто[А]);
       Расшифровка.Установить("Сортировка"+Номер[А], Сортировка[А]);
       Расшифровка.Установить("НаправлениеСортировки"+Номер[А], НапрСортировки[А]);
   КонецЦикла;
   Расшифровка.Установить("ДанныеПоСубсчетам", ДанныеПоСубсчетам);
   Т.ВывестиСекцию("Секция_12");
   Т.ВывестиСекцию("Секция_1");
   Расшифровка.УдалитьВсе();
   Если Счет.Выбран() = 1 Тогда
       Расшифровка.Установить("Отчет", "КарточкаСчета");
   Иначе
       Расшифровка.Установить("Отчет", "КарточкаСубконто");
   КонецЕсли;
   Расшифровка.Установить("РазделительУчета", РазделительУчета);
   Расшифровка.Установить("ПланСчетов", ПланСчетов);
   Расшифровка.Установить("Дата1", Дата1);
   Расшифровка.Установить("Дата2", Дата2);
   Расшифровка.Установить("Счет", Счет);
   НеВыбраноСубконто = 0;
   Для А=1 По 3 Цикл
       Если ОтборСубконто[А] <> 3 Тогда
           Расшифровка.Установить("ВидСубконто"+Номер[А], ВидСубконто[А]);
           Расшифровка.Установить("ОтборСубконто"+Номер[А], ОтборСубконто[А]);
           Расшифровка.Установить("Субконто"+Номер[А], Субконто[А]);
       Иначе
           НеВыбраноСубконто = НеВыбраноСубконто + 1;
       КонецЕсли;
   КонецЦикла;
   Если НеВыбраноСубконто = 3 Тогда
       Предупреждение("Не указан вид субконто!");
       Возврат;
   КонецЕсли;
   
   ПолучитьУровниГруппировокДляРасчетаСальдо();

   Если ОтборСубконто[1] = 1 Тогда
       Ит.ВыбратьСубконто(1,,,, 1, Сортировка[1], НапрСортировки[1]);
       Пока Ит.ПолучитьСубконто(1) = 1 Цикл
           Расшифровка.Установить("ОтборСубконто"+Номер[1], 2);
           Расшифровка.Установить("Субконто"+Номер[1], Ит.Субконто());
           
           ВыборкаИтоговПоГруппеСправочника[1] = ?( Счет.Выбран() = 1, 0, Ит.ЭтоГруппа());

           Если ОтборСубконто[2] = 1 Тогда
               Т.ВывестиСекцию("Секция_2");
               Ит.ВыбратьСубконто(2,,,, 1, Сортировка[2], НапрСортировки[2]);
               Пока Ит.ПолучитьСубконто(2) = 1 Цикл
                   Расшифровка.Установить("ОтборСубконто"+Номер[2], 2);
                   Расшифровка.Установить("Субконто"+Номер[2], Ит.Субконто(2));
                   
                   ВыборкаИтоговПоГруппеСправочника[2] = Макс(Ит.ЭтоГруппа(), ВыборкаИтоговПоГруппеСправочника[1]);
                   
                   Если ОтборСубконто[3] = 1 Тогда
                       Т.ВывестиСекцию("Секция_3");
                       Ит.ВыбратьСубконто(3,,,, 1, Сортировка[3], НапрСортировки[3]);
                       Пока Ит.ПолучитьСубконто(3) = 1 Цикл
                           Расшифровка.Установить("ОтборСубконто"+Номер[3], 2);
                           Расшифровка.Установить("Субконто"+Номер[3], Ит.Субконто(3));
                           
                           ВыборкаИтоговПоГруппеСправочника[3] = Макс(Ит.ЭтоГруппа(), ВыборкаИтоговПоГруппеСправочника[2]);
                           
                           Если Счет.Выбран() = 0 Тогда
                               Т.ВывестиСекцию("Секция_10");
                               ЦиклПоСчетам(3);
                               Т.ВывестиСекцию("Секция_11");
                           Иначе
                               Т.ВывестиСекцию("Секция_13");
                           КонецЕсли;
                       КонецЦикла;
                       Расшифровка.Установить("Субконто"+Номер[3]);
                       Расшифровка.Установить("ОтборСубконто"+Номер[3]);
                       Т.ВывестиСекцию("Секция_7");
                   ИначеЕсли Счет.Выбран() = 0 Тогда
                       Т.ВывестиСекцию("Секция_3");
                       ЦиклПоСчетам(2);
                       Т.ВывестиСекцию("Секция_7");
                   Иначе
                       Т.ВывестиСекцию("Секция_14");
                   КонецЕсли;
               КонецЦикла;
&
5 zak555
 
11.07.13
10:00
(4) что это ?
6 Osipov81
 
11.07.13
10:03
Скопировал из отчета код! (или что-то не так сделал??)
Когда формируешь расширенный анализ субконто по контрагентам и договорам, получается именно то, что необходимо.

Я в печатной форме перенес необходимые данные в одну строчку. Все красиво выходит.... но... остаются лишние строчки которые потом в экселе приходится удалять. (Итого... Итого развернуто... колличество...)

Хотелось бы без этих строчек.
7 mikecool
 
11.07.13
10:03
мочи спамера!!! )))
8 Osipov81
 
11.07.13
10:05
ей... хорош... я не программер. поэтому в кодах не разбираюсь...
9 zak555
 
11.07.13
10:07
(8) высылай кабанчика тогда
10 dedmoroz777
 
11.07.13
10:09
(8) закомментируй не нужные тебе Т.ВывестиСекцию("")
11 Osipov81
 
11.07.13
10:09
(9) Что такое кабанчик?
12 Пронькин
 
11.07.13
10:28
(11) Кабанчик это, видимо, тот, что хрюкал, а сейчас под соусом...
Другими словами, Вам дают совет - нанять специалиста.
Хотя, мож, и ошибаюсь - у каждого свои кабанчики :)
13 Osipov81
 
11.07.13
10:30
(10) Пытаюсь выключить секцию в печатной форме, мне пишет ошибку формирования отчета.

Т.ВывестиСекцию("Секция_7");
\РАБОЧИЙ СТОЛ\РАСЧЕТЫ 1.ERT(791)}: Секция не найдена Секция_7

Нанять проще всего, Если на это бюджет выделяют... а если нет?
Ладно Я не знал, что тут исключительно комерческий форум.
14 Пронькин
 
11.07.13
10:33
Тут НЕ исключительно коммерческий форум!
А выключить секцию, наверное, нужно в модуле отчете, закомментировав нужную строку, а убрав секцию из самого макета получите сообщение об ошибке, что секция не найдена...
15 markgenuine
 
11.07.13
11:01
Готов помочь, если у вас есть тим вьювер и аська;)
16 Osipov81
 
11.07.13
11:37
(14) Спасибо.
Пусть криво, но вроде получил тот отчет который необходимо!!!!

Закрываем тему!!!!
17 Osipov81
 
11.07.13
11:54
А второй вопрос.
Есть ячейк Контрагент Как мне в соседнюю вставить "ИНН Контрагента"
18 Пронькин
 
11.07.13
12:51
Нужно определить это ИНН, проверив, что это справочник Контрагенты и присвоить переменной ПечИНН = Ит.Субконто().ЮрФизЛицо.ИНН. (я х.з. что за конфа...).ДО проверки определить переменную ПечИНН = "". После эту переменную выводить в новой колонке (или же добавив в существующую, где выводится контрагент).
19 zak555
 
11.07.13
12:52
(18) только там ещё и кпп хранится
20 Пронькин
 
11.07.13
12:54
Ну да, разберется, надеюсь!
21 Эльниньо
 
11.07.13
15:32
(4) Ошибка в 23049280958-й строчке
22 Mikeware
 
11.07.13
15:36
(21) в ДНК нет строчек...
23 dedmoroz777
 
11.07.13
15:44
(22) в 19368-ом гене
24 Darych
 
11.07.13
15:47
тонкий стеб... пишите еще
25 zak555
 
11.07.13
15:49
есть порядковый номер кислоты
=)
26 Darych
 
11.07.13
15:50
порядковый номер нуклеотида