7.7 Функция вывода остатков по заболансовым счетам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем НатахаБ, 30 янв 2008.

  1. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Привет всем!
    Проблема в следующем:
    Нужна функция которая выводит остатки материалов по заболансовым счетам. Надо чтобы при нажатии кн. Подбор и выбора сотрудника выходил стравочник Материалов с остатками материалов по данному сотруднику с счета МЦ.04, МЦ.03, МЦ.02

    Вот сама функция я ее частично взела с формы Справочник.Материалы.ФормаСписка.ДляПодбора
    Сама я создала новыую ФормуСписка - ДляПодбораЗС
    Бухнула туда поле вводв МОЛКто (Справочник.Сотрудники)
    В табличной части две колонки Наименование материала и Остатки
    В свойстве колонки Остатки во вкладке Дополнительно вызываю Данную функция

    Код:
    Функция ОстатокНаЗС(РасчетИзКолонки=1)
    
    ИспользоватьСчета = СоздатьОбъект("СписокЗначений");
    ИспользоватьСчета=(СчетПоКоду("МЦ.04"));  
    ИспользоватьСчета=(СчетПоКоду("МЦ.02"));
    ИспользоватьСчета=(СчетПоКоду("МЦ.03"));
    
    Если (РасчетИзКолонки = 0) или (РасчетИзКолонки = 1)  Тогда
    Если (КонМесяца(КонтекстФормыДокумента.ДатаДок) <= КонецРассчитанногоПериодаБИ()) 
    и (ТекущийЭлемент().Выбран() = 1) Тогда
    Если МОЛКто.Выбран() = 1  Тогда
    БИ.ВыполнитьЗапрос(КонтекстФормыДокумента.ДатаДок,КонтекстФормыДокумента.ДатаДок, ИспользоватьСчета,,, 3,,4);
    БИ.ВыбратьСчета(); 
    Пока БИ.ПолучитьСчет() = 1 Цикл  
    БИ.ВыбратьСубконто(ВидыСубконто.Материалы,Наименование,,); 
    Пока БИ.ПолучитьСубконто(ВидыСубконто.Материалы,Наименование,,)=1 Цикл
    БИ.ВыбратьСубконто(ВидыСубконто.Сотрудники, МОЛКто, ,);
    Пока би.ПолучитьСубконто(ВидыСубконто.Сотрудники, МОЛКто, ,)=1 Цикл
    Остаток = БИ.СНД(ТекущийЭлемент().ИспользоватьСчета, "Н",, ТекущийЭлемент(),  МОЛКто);
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    Возврат СокрЛ(Формат(Остаток, "Ч15.3."));
    КонецФункции 
    
    
    
    
    Но функция не что не выводит. Подскажите в чем проблема

    [warn=Читайте правила!]Не забываем использовать тэг
    Код:
    [/warn]
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    сильно не вникал, но попробуй вот это использовать:

    СНД(<?>)
    Синтаксис:
    СНД(<ТипСуммы>)
    Назначение:
    Возвращает дебетовое сальдо на начало периода.
    Параметры:
    <ТипСуммы> - Необязательный параметр. Число или строка - тип возвращаемой суммы. Может принимать одно из следующих значений: 1 (''C'') - сумма; 2 (''В'') - валютная сумма; 3 (''К'') - количество. Если параметр не указан, метод возвращает сумму.

    вместо
    Код:
    Остаток = БИ.СНД(ТекущийЭлемент().ИспользоватьСчета, "Н",, ТекущийЭлемент(), МОЛКто);
    
    
  3. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Все одно выводит нулевые остатки по всем материалам
    Код:
    Остаток = БИ.СНД(ТекущийЭлемент().ИспользоватьСчета, "К",, ТекущийЭлемент(),  МОЛКто);
    
    
    
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    вместо
    Код:
    Остаток = БИ.СНД(ТекущийЭлемент().ИспользоватьСчета, "К",, ТекущийЭлемент(),  МОЛКто);
    
    
    используй оператор

    СНД(<?>)
    Синтаксис:
    СНД(<ТипСуммы>)
    Назначение:
    Возвращает дебетовое сальдо на начало периода.
    Параметры:
    <ТипСуммы> - Необязательный параметр. Число или строка - тип возвращаемой суммы. Может принимать одно из следующих значений: 1 (''C'') - сумма; 2 (''В'') - валютная сумма; 3 (''К'') - количество. Если параметр не указан, метод возвращает сумму.

    что не так я написал?

    Код:
    Остаток = БИ.СНД(К);
    
    
    примерно так должно выглядеть...
  5. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    В отладчике он не входит в данную часть
    Код:
    БИ.ВыбратьСубконто(ВидыСубконто.Материалы,Наименование,,); 
    Пока БИ.ПолучитьСубконто(ВидыСубконто.Материалы,Наименование,,)=1 Цикл
    БИ.ВыбратьСубконто(ВидыСубконто.Сотрудники, МОЛКто, ,);
    Пока би.ПолучитьСубконто(ВидыСубконто.Сотрудники, МОЛКто, ,)=1 Цикл
    Остаток = БИ.СНД("К");
    КонецЦикла;
    КонецЦикла;
    
    
    
    Что то в ней не так
  6. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    что куда не входит?? дай мдшничек глянуть
  7. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    3,38 мб
    Дай мне свой mail а то что-то не как не получается прикрепить файл
  8. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    и? кинь его на webfile.ru например... а еще лучше не мдшничек, а базу...
  9. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
  10. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    у тебя функция-то есть... но вот где она вызывается я так и не нашел..
  11. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    В колонке Остаток. Свойство - Дополнительно.
  12. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    БИ = "";
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,,);
    БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники, МОЛКто, 2,);
    ИспользоватьСчета = СоздатьОбъект("СписокЗначений");
    
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.04"));  
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.03"));
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.02"));
    
    Если (РасчетИзКолонки = 0) или (РасчетИзКолонки = 1)  Тогда
    Если (КонМесяца(КонтекстФормыДокумента.ДатаДок) <= КонецРассчитанногоПериодаБИ()) 
    и (ТекущийЭлемент().Выбран() = 1) Тогда
    Если МОЛКто.Выбран() = 1  Тогда
    БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(), ИспользоватьСчета,,, 3,,4);
    БИ.ВыбратьСчета(); 
    Пока БИ.ПолучитьСчет() = 1 Цикл  
    БИ.ВыбратьСубконто(2); 
    Пока БИ.ПолучитьСубконто(2)=1 Цикл
    БИ.ВыбратьСубконто(1);
    Пока би.ПолучитьСубконто(1)=1 Цикл
    Остаток = БИ.СКД(3);
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    
    Примерно вот... только я там кое-чего под себя менял... так что повнимательнее...
  13. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Попробую
  14. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Что то не получается. По всем материалам из справочника выходит один и тот же остаток.
    Код:
    Функция ОстатокНаЗС(РасчетИзКолонки=1) 
    
    Остаток = 0;
    БИ = "";
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,,);
    БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники, МОЛКто, 2,);
    
    ИспользоватьСчета = СоздатьОбъект("СписокЗначений");
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.04"));
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.03"));
    ИспользоватьСчета.ДобавитьЗначение(СчетПоКоду("МЦ.02"));
    
    Если (РасчетИзКолонки = 0) или (РасчетИзКолонки = 1)  Тогда 
    Если (КонМесяца(КонтекстФормыДокумента.ДатаДок) <= КонецРассчитанногоПериодаБИ())
    и (ТекущийЭлемент().Выбран() = 1) Тогда 
    Если МОЛКто.Выбран() = 1  Тогда       
    БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(), ИспользоватьСчета,,, 3,,4); 
    БИ.ВыбратьСчета();        
    Пока БИ.ПолучитьСчет() = 1 Цикл            
    БИ.ВыбратьСубконто(2);            
    Пока БИ.ПолучитьСубконто(2)=1 Цикл              
    БИ.ВыбратьСубконто(1);
    Пока би.ПолучитьСубконто(1)=1 Цикл 
    Остаток = БИ.СКД(3); 
    КонецЦикла;           
    КонецЦикла;         
    КонецЦикла;      
    КонецЕсли;   
    КонецЕсли;
    КонецЕсли;
    
    Возврат СокрЛ(Формат(Остаток, "Ч15.3."));
    КонецФункции 
    
    
    
  15. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,,); 
    БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники, МОЛКто, 2,); 
    
    
    
    меняем строки местами... (пусть будет)
    Код:
    БИ.ВыбратьСубконто(1);
    Пока би.ПолучитьСубконто(1)=1 Цикл 
    
    
    
    
    убиваем на хрен...
  16. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    НЕ катит :(
  17. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    чего у тебя все не так?? у меня работало! только с твоим мдшником писало пару ошибок про то, что низя присваивать значение переменной "остаток" и т.д... но сама функция в отладчике четко выдает остатки товара по твоим счетам в разрезе выбранного сотрудник!
  18. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Функция сама работает но не для каждого элемента в справочнике. Надо чтобы она выводила остоток по сотруднику для каждого материала. Если он не числится то 0 если есть то какое количество.
    Вот что она выводит:

    Вложения:

  19. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
     Пока БИ.ПолучитьСубконто(2)=1 Цикл 
    
    
    на эту строчку поставь в отладчике точку останова и посмотри чего равно значение БИ.Субконто(2), меняется оно или нет и БИ.СКД(3)
  20. TopicStarter Overlay
    НатахаБ
    Offline

    НатахаБ Опытный в 1С

    Регистрация:
    24 янв 2007
    Сообщения:
    92
    Симпатии:
    0
    Баллы:
    26
    Значит так:
    Остатки меняются в зависимости от материала (Например у сотрудника на забал счете числется 10 материалов вот ихние остатки и показывает)
    Субконто(2) (т.е сотрудник) не меняется
    Субконто(1) материалы меняются.
    Но проблема в том что проверяются не все материалы в справочнике.
    Надо наподобие
    Код:
    БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,"Справочник.Материалы",,); 
    
    
    
    
    Но это не катит.
    Надо чтобы использовались все материалы в справочнике не зависимо числятся они на счетах МЦ.04, МЦ.03, МЦ.02

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