Имя: Пароль:
1C
1C 7.7
v7: Где туплю в простом семерочном запросе по бухитогам?
,
0 Цыпленок
 
17.07.12
14:17
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент);
   БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор);
   БИ.ВключатьСубсчета(0, 0);
   БИ.ВыполнитьЗапрос(НачДата, КонДата, СписокВыбранныхСчетов);
   

   СальдоНач = БИ.СНД() - БИ.СНК();
   СальдоКон = БИ.СКД() - БИ.СКК();





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



   БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент);
   БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор);
   БИ.ВключатьСубсчета(0, 0);
   БИ.ВыполнитьЗапрос(НачДата, КонДата, СписокВыбранныхСчетов,,,,,"К");
   
   СальдоНач = БИ.СНД("К") - БИ.СНК("К");
   СальдоКон = БИ.СКД("К") - БИ.СКК("К");
1 Академик_
Келдыш
 
17.07.12
14:20
все количественные счета в СписокВыбранныхСчетов?
2 Цыпленок
 
17.07.12
14:21
В обработке выбрал всего один счет, 45ый, на нем есть количественный учет.
3 Академик_
Келдыш
 
17.07.12
14:21
проверь и попробуй:
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент);
   БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор);
   БИ.ВключатьСубсчета(0, 0);
   БИ.ВыполнитьЗапрос(НачДата, КонДата, СписокВыбранныхСчетов);
   
   СальдоНач = БИ.СНД(3) - БИ.СНК(3);
   СальдоКон = БИ.СКД(3) - БИ.СКК(3);
4 miki
 
17.07.12
14:23
Даже если по счету есть кол. учет, то не очевидно, что он есть у обоих субконто.

ps. Не могу представить количеств по договору...
5 Академик_
Келдыш
 
17.07.12
14:27
(4) счет 10.7 открой и представишь
6 Цыпленок
 
17.07.12
14:27
Тааак. Отчет - обычный акт сверки по договору, попросили сделать чтобы показывал не по сумме а по количеству. Когда считаем обороты, перебираем проводки через,
[1CОпер.ВыбратьОперацииСПроводками(НачДата, КонДата, Фильтр);
   Пока Опер.ПолучитьПроводку() = 1 Цикл
количественные обороты показывает.
(3) Нет, так не работает. Могу весь код показать.
7 Цыпленок
 
17.07.12
14:28
Тааак. Отчет - обычный акт сверки по договору, попросили сделать чтобы показывал не по сумме а по количеству. Когда считаем обороты, перебираем проводки через,
Опер.ВыбратьОперацииСПроводками(НачДата, КонДата, Фильтр);
  Пока Опер.ПолучитьПроводку() = 1 Цикл

количественные обороты показывает.
(3) Нет, так не работает. Могу весь код показать.
8 Цыпленок
 
17.07.12
14:34
// Процедура Заполнить()
//
// Параметры:
//  Нет.
//
// Вызывается из формул элементов диалога:
//  Кнопка Заполнить
//        
// Описание:
//  Заполняется таблица значений ТаблицаДвижений. В нее включаются все операции
//  по расчетам с контрагентом (если выбран договор - то только в рамках
//  этого договора) за период сверки по данным бухгалтерского учета.
//  Первая строка таблицы - сальдо расчетов на
//  начало периода, последняя - сальдо на конец периода.
//  Вначале определяется дата, с которой начато ведение учета в данной
//  информационной базе. Начало периода сверки выбирается как наиболее поздняя
//  из двух дат - даты, указанной как дата предыдущей сверки + 1 день и даты
//  начала ведения учета в информационной базе. Если дата сверки указана более
//  ранняя, чем дата начала ведения учета в базе, то автозаполнение таблицы
//  не производится и акт сверки не составляется.
//
Процедура Заполнить()
   
   Если КонДата < НачДата Тогда
       Предупреждение("Неверно задан период сверки расчетов.", "!");
       Возврат;
   КонецЕсли;

   Если ПустоеЗначение(Контрагент) = 1 Тогда
       Предупреждение("Сначала, пожалуйста, выберите контрагента.");
       Возврат;
   КонецЕсли;
   
   Форма.ИспользоватьСлой("Таблица, Основной", 2);
   Форма.Закладки.ТекущаяСтрока(2);
   Если ТаблицаДвижений.КоличествоСтрок() > 0 Тогда
       Если Вопрос("Перед заполнением таблица движений будет очищена.
                   |Продолжать?", "Да+Нет") = "Нет" Тогда
           Возврат;
       КонецЕсли;
       
   КонецЕсли;
   ТаблицаДвижений.УдалитьСтроки();
   
   //ищем документы, в т.ч. операции, по расчетам с выбранным контрагентом, по проводкам
   СписокВыбранныхСчетов = СоздатьОбъект("СписокЗначений");
   Фильтр = "";
   Для СчетчикЦикла = 1 По СписокСчетов.РазмерСписка() Цикл
       Если СписокСчетов.Пометка(СчетчикЦикла) = 1 Тогда
           Сч = СписокСчетов.ПолучитьЗначение(СчетчикЦикла);
           СписокВыбранныхСчетов.ДобавитьЗначение(Сч);
           КодСчета = СокрЛП(Сч.Код);
           Фильтр = Фильтр + КодСчета + ",*;*," + КодСчета + ";";
       КонецЕсли;
   КонецЦикла;
   Если ПустоеЗначение(Фильтр) = 0 Тогда
       Фильтр = Лев(Фильтр, СтрДлина(Фильтр)-1);
   КонецЕсли;
   
   ЕстьВалютныеОперации = 0;
   Опер = СоздатьОбъект("Операция");
   Опер.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент);
   Если ПустоеЗначение(Договор) = 0 Тогда
       Опер.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор);
   КонецЕсли;
   Опер.ВыбратьОперацииСПроводками(НачДата, КонДата, Фильтр);
   Пока Опер.ПолучитьПроводку() = 1 Цикл
       СчДт = Опер.Дебет.Счет;
       СчКт = Опер.Кредит.Счет;
       СчетГруппаДт = СчДт.Родитель(1);
       СчетГруппаКт = СчКт.Родитель(1);
       
       // Отсекаем коррееспонденции выбранных счетов между собой с одним контрагентом.
       Если (СписокВыбранныхСчетов.НайтиЗначение(СчетГруппаДт) > 0) и (СписокВыбранныхСчетов.НайтиЗначение(СчетГруппаКт) > 0) Тогда
           Если Опер.Дебет.Субконто(ВидыСубконто.Контрагенты) = Опер.Кредит.Субконто(ВидыСубконто.Контрагенты) Тогда
               Продолжить;
               
           ИначеЕсли Опер.Дебет.Субконто(ВидыСубконто.Контрагенты) = Контрагент Тогда
               СчКт = ПолучитьПустоеЗначение("Счет");
               СчетГруппаКт = ПолучитьПустоеЗначение("Счет");
               
           Иначе // Опер.Кредит.Субконто(ВидыСубконто.Контрагенты) = Контрагент
               СчДт = ПолучитьПустоеЗначение("Счет");
               СчетГруппаДт = ПолучитьПустоеЗначение("Счет");
           КонецЕсли;
       КонецЕсли;
       
       Если Опер.Сумма = 0 Тогда
           Продолжить;
       
       ИначеЕсли СписокВыбранныхСчетов.НайтиЗначение(СчетГруппаДт) > 0 Тогда
           Если (Найти(СчДт.Код, "76.Н") <> 0) или (Найти(СчДт.Код, "76.АВ") <>  0) Тогда
               Продолжить;
           КонецЕсли;
           //[*]Антон, 16.07.2012
           //Дебет = Опер.Сумма;
           Дебет = Опер.Количество;
           //[*]_
           Кредит = 0;
           
       Иначе
           Если (Найти(СчКт.Код, "76.Н") <> 0) или (Найти(СчКт.Код, "76.АВ") <>  0) Тогда
               Продолжить;
           КонецЕсли;
           Дебет = 0;
           //[*]Антон, 16.07.2012
           //Кредит = Опер.Сумма;
           Кредит = Опер.Количество;
           //[*]_
       КонецЕсли;
       
       Если (СчДт.Валютный = 1) или (СчКт.Валютный = 1) Тогда
           ВалСумма = Опер.ВалСумма;
           Валюта = Опер.Валюта;
           ЕстьВалютныеОперации = 1;
           
       Иначе
           ВалСумма = 0;
           Валюта = "";
       КонецЕсли;
       
       Операция = "";
       
       Если СчДт = Сч91_2 Тогда
           ПрочиеДоходыИРасходы = Опер.Дебет.ПрочиеДоходыИРасходы;
           Если ПустоеЗначение(ПрочиеДоходыИРасходы) = 0 Тогда
               Если ПрочиеДоходыИРасходы.ВидПрочихДоходовИРасходов = Перечисление.ВидыПрочихДоходовИРасходов.КурсовыеРазницы Тогда
                   Операция = "Курсовые разницы";
                   
               ИначеЕсли ПрочиеДоходыИРасходы.ВидПрочихДоходовИРасходов = Перечисление.ВидыПрочихДоходовИРасходов.ШтрафыПоДоговорам Тогда
                   Операция = "Санкции";
               КонецЕсли;
           КонецЕсли;

       ИначеЕсли СчКт = Сч91_1 Тогда
           ПрочиеДоходыИРасходы = Опер.Кредит.ПрочиеДоходыИРасходы;
           Если ПустоеЗначение(ПрочиеДоходыИРасходы) = 0 Тогда
               Если ПрочиеДоходыИРасходы.ВидПрочихДоходовИРасходов = Перечисление.ВидыПрочихДоходовИРасходов.КурсовыеРазницы Тогда
                   Операция = "Курсовые разницы";
                   
               ИначеЕсли ПрочиеДоходыИРасходы.ВидПрочихДоходовИРасходов = Перечисление.ВидыПрочихДоходовИРасходов.ШтрафыПоДоговорам Тогда
                   Операция = "Санкции";
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
       
       Если ПустоеЗначение(Операция) = 1 Тогда
           Если (СчКт.ПринадлежитГруппе(Сч66) = 1) или (СчКт.ПринадлежитГруппе(Сч66) = 1) Тогда
               Операция = "Займ";

           ИначеЕсли (СчДт.ПринадлежитГруппе(Сч66) = 1) или (СчДт.ПринадлежитГруппе(Сч66) = 1) Тогда
               Операция = "Возврат займа";
           
           ИначеЕсли (СчДт = Сч76_2) или (СчКт = Сч76_2) Тогда
               Операция = "Претензия";
           
           ИначеЕсли (СчДт.ПринадлежитГруппе(Сч50) = 1) или (СчДт = Сч51) или (СчДт = Сч52) или (СчДт.ПринадлежитГруппе(Сч55) = 1) Тогда
               Если СчКт.ПринадлежитГруппе(Сч60) = 1 Тогда
                   Операция = "Возврат средств";
                   
               ИначеЕсли СчКт.ПринадлежитГруппе(Сч62) = 1 Тогда
                   Операция = "Оплата";
                   
               Иначе
                   Операция = "Перевод средств";
               КонецЕсли;
               
           ИначеЕсли (СчКт.ПринадлежитГруппе(Сч50) = 1) или (СчКт = Сч51) или (СчКт = Сч52) или (СчКт.ПринадлежитГруппе(Сч55) = 1) Тогда
               Если (СчДт.ПринадлежитГруппе(Сч60) = 1) или (СчДт.ПринадлежитГруппе(Сч76) = 1) Тогда
                   Операция = "Оплата";
                   
               ИначеЕсли СчДт.ПринадлежитГруппе(Сч62) = 1 Тогда
                   Операция = "Возврат средств";
                   
               Иначе
                   Операция = "Перевод средств";
               КонецЕсли;

           ИначеЕсли (СчДт.ПринадлежитГруппе(Сч60) = 1) или (СчДт.ПринадлежитГруппе(Сч76) = 1) Тогда
               Если (СчКт.ПринадлежитГруппе(Сч90) = 0) и (СчКт.ПринадлежитГруппе(Сч91) = 0) Тогда
                   Операция = "Оплата";
               КонецЕсли;
               
           ИначеЕсли СчДт.ПринадлежитГруппе(Сч62) = 1 Тогда
               Если (СчКт.ПринадлежитГруппе(Сч90) = 1) или (СчКт.ПринадлежитГруппе(Сч91) = 1) Тогда
                   Операция = "Продажа";
               КонецЕсли;

           ИначеЕсли (СчКт.ПринадлежитГруппе(Сч60) = 1) или (СчКт.ПринадлежитГруппе(Сч76) = 1) Тогда
               Операция = "Приход";

           ИначеЕсли СчКт.ПринадлежитГруппе(Сч62) = 1 Тогда
               Операция = "Оплата";
           КонецЕсли;
       КонецЕсли;

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

   БИ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент);
   БИ.ИспользоватьСубконто(ВидыСубконто.Договоры, Договор);
   БИ.ВключатьСубсчета(0, 0);
   БИ.ВыполнитьЗапрос(НачДата, КонДата, СписокВыбранныхСчетов,,,,,);
   

   СальдоНач = БИ.СНД() - БИ.СНК();
   СальдоКон = БИ.СКД() - БИ.СКК();

   
   ТаблицаДвижений.НоваяСтрока(1);
   ТаблицаДвижений.Операция = "Сальдо на " + Формат(НачДата, "Д ДДММГГГГ");
   ТаблицаДвижений.Дебет = 0;
   ТаблицаДвижений.Кредит = 0;
   Если СальдоНач > 0 Тогда
       ТаблицаДвижений.Дебет = СальдоНач;
   Иначе
       ТаблицаДвижений.Кредит = - СальдоНач;
   КонецЕсли;                    
   
   ТаблицаДвижений.НоваяСтрока();
   ТаблицаДвижений.Операция = "Обороты за период";
   
   ТаблицаДвижений.НоваяСтрока();
   ТаблицаДвижений.Операция = "Сальдо на " + Формат(КонДата, "Д ДДММГГГГ");
   ТаблицаДвижений.Дебет = 0;
   ТаблицаДвижений.Кредит = 0;
   Если СальдоКон > 0 Тогда
       ТаблицаДвижений.Дебет = СальдоКон;
   Иначе
       ТаблицаДвижений.Кредит = - СальдоКон;
   КонецЕсли;                    
   
   УстановитьОборотыЗаПериод();
   ТаблицаДвижений.ТекущаяСтрока(ТаблицаДвижений.КоличествоСтрок());
   
КонецПроцедуры // Заполнить
).
9 chief accountant
 
17.07.12
14:58
(8) поставь 2
БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент,2);

и усё
10 Цыпленок
 
17.07.12
15:02
Спасибо, так работает...
11 Цыпленок
 
17.07.12
15:04
А почему без отбора по контрагентам не работает?