Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как узнать остатки на основном складе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Sede
Здравствуйте.
Помогите разобраться. Пытаюсь узнать остатки товаров на основном складе на текущую дату:


 спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар");                                         // товары по Номенклатуре
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("1");                                                          // основной склад
ОснСклад=спрСклади.ТекущийЭлемент();

Бухи = СоздатьОбъект("БухгалтерскиеИтоги");
Бухи.ИспользоватьСубконто(видыСубконто.тмц, спТовары);
Бухи.ИспользоватьСубконто(видыСубконто.МестаХранения, ОснСклад);
Бухи.ВыполнитьЗапрос(ТекДата, ТекДата,,,,,,);        

Бухи.ВыбратьСубконто(1);
  Пока Бухи.ПолучитьСубконто(1)=1 Цикл
      Тов=бухи.Субконто(1);
      Строка="";     Остатки=0;
      Если тзТовары.НайтиЗначение(Тов, Строка, "Товар")=1 Тогда
          Остатки=Бухи.СКД(3);
        тзТовары.установитьЗначение(Строка,"НаличиеНаСкладе", Остатки);
    КонецЕсли;    
  КонецЦикла;


результат - везде наличие на складе по нулям. Где-то что-то не то но разобраться не могу.
nysysimara
а если так:
спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар");                                         // товары по Номенклатуре
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("1");                                                          // основной склад
ОснСклад=спрСклади.ТекущийЭлемент();

Бухи = СоздатьОбъект("БухгалтерскиеИтоги");
Бухи.ИспользоватьСубконто(видыСубконто.тмц, спТовары,2);
Бухи.ИспользоватьСубконто(видыСубконто.МестаХранения, ОснСклад,2);
Бухи.ВыполнитьЗапрос(ТекДата,ТекДата,,,,,,);        

тзТовары.ВыбратьСтроки();
Пока тзТовары.ПолучитьСтроку()=1 Цикл
    Если Бухи.ПолучитьСубконто(1,,тзТовары.Товар) = 1 Тогда
        тзТовары.НаличиеНаСкладе = Бухи.СНД("К") - Бухи.СНК("К");
    КонецЕсли;
КонецЦикла;
Sede
результат тот же - 0
mister-x
а якщо розгорнути залишки ще і по 2-му субконто і тоді брати
Бухи.СКД(3)
nysysimara
попробуйте пройтись еще и по счетам
тзТовары.ВыбратьСтроки();
Пока тзТовары.ПолучитьСтроку()=1 Цикл
    Если Бухи.ПолучитьСубконто(1,,тзТовары.Товар) = 1 Тогда  
        БИ.ВыбратьСчета();
        Пока БИ.ПолучитьСчет()=1 Цикл
            тзТовары.НаличиеНаСкладе = тзТовары.НаличиеНаСкладе+(Бухи.СНД("К")-Бухи.СНК("К"));  
        КонецЦикла;    
    КонецЕсли;
КонецЦикла;
Sede
Как говорится если долго мучиться что-нибуть получится.
Ошибка была в сравнениях значений таблицы и субконто БИ. (в таблице значение типа ссылка, в БИ возвращалось типа строка)
Решение следующее:

 спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар");
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("1");
ОснСклад=спрСклади.ТекущийЭлемент();

Бухи = СоздатьОбъект("БухгалтерскиеИтоги");  
Бухи.ИспользоватьСубконто(видыСубконто.МестаХранения, ОснСклад);
Бухи.ИспользоватьСубконто(видыСубконто.тмц, спТовары);
Бухи.ИспользоватьСубконто(видыСубконто.партии);

Если Бухи.ВыполнитьЗапрос(КонДата, КонДата,"281,282")=0 Тогда
    Возврат;    
КонецЕсли;

Бухи.ВыбратьСубконто(1);
Пока Бухи.ПолучитьСубконто(1)=1 Цикл
    Бухи.ВыбратьСубконто(2);

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

    КонецЦикла;
КонецЦикла;


Может кому-то подойдет
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.