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

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

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

Автор: Sede 05.10.15, 11:11

Здравствуйте.
Помогите разобраться. Пытаюсь узнать остатки товаров на основном складе на текущую дату:


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

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

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


результат - везде наличие на складе по нулям. Где-то что-то не то но разобраться не могу.

Автор: nysysimara 05.10.15, 12:28

а если так:

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

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

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

Автор: Sede 05.10.15, 14:07

результат тот же - 0

Автор: mister-x 05.10.15, 16:53

а якщо розгорнути залишки ще і по 2-му субконто і тоді брати

Бухи.СКД(3)

Автор: nysysimara 06.10.15, 6:42

попробуйте пройтись еще и по счетам

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

Автор: Sede 15.10.15, 13:49

Как говорится если долго мучиться что-нибуть получится.
Ошибка была в сравнениях значений таблицы и субконто БИ. (в таблице значение типа ссылка, в БИ возвращалось типа строка)
Решение следующее:

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

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

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

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

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

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


Может кому-то подойдет

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