Здравствуйте.
Помогите разобраться. Пытаюсь узнать остатки товаров на основном складе на текущую дату:
спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар"); // товары по Номенклатуре
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("1"); // основной склад
ОснСклад=спрСклади.ТекущийЭлемент();
Бухи = СоздатьОбъект("БухгалтерскиеИтоги");
Бухи.ИспользоватьСубконто(видыСубконто.тмц, спТовары);
Бухи.ИспользоватьСубконто(видыСубконто.МестаХранения, ОснСклад);
Бухи.ВыполнитьЗапрос(ТекДата, ТекДата,,,,,,);
Бухи.ВыбратьСубконто(1);
Пока Бухи.ПолучитьСубконто(1)=1 Цикл
Тов=бухи.Субконто(1);
Строка=""; Остатки=0;
Если тзТовары.НайтиЗначение(Тов, Строка, "Товар")=1 Тогда
Остатки=Бухи.СКД(3);
тзТовары.установитьЗначение(Строка,"НаличиеНаСкладе", Остатки);
КонецЕсли;
КонецЦикла;
а если так:
спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар"); // товары по Номенклатуре
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("1"); // основной склад
ОснСклад=спрСклади.ТекущийЭлемент();
Бухи = СоздатьОбъект("БухгалтерскиеИтоги");
Бухи.ИспользоватьСубконто(видыСубконто.тмц, спТовары,2);
Бухи.ИспользоватьСубконто(видыСубконто.МестаХранения, ОснСклад,2);
Бухи.ВыполнитьЗапрос(ТекДата,ТекДата,,,,,,);
тзТовары.ВыбратьСтроки();
Пока тзТовары.ПолучитьСтроку()=1 Цикл
Если Бухи.ПолучитьСубконто(1,,тзТовары.Товар) = 1 Тогда
тзТовары.НаличиеНаСкладе = Бухи.СНД("К") - Бухи.СНК("К");
КонецЕсли;
КонецЦикла;
результат тот же - 0
а якщо розгорнути залишки ще і по 2-му субконто і тоді брати
Бухи.СКД(3)
попробуйте пройтись еще и по счетам
тзТовары.ВыбратьСтроки();
Пока тзТовары.ПолучитьСтроку()=1 Цикл
Если Бухи.ПолучитьСубконто(1,,тзТовары.Товар) = 1 Тогда
БИ.ВыбратьСчета();
Пока БИ.ПолучитьСчет()=1 Цикл
тзТовары.НаличиеНаСкладе = тзТовары.НаличиеНаСкладе+(Бухи.СНД("К")-Бухи.СНК("К"));
КонецЦикла;
КонецЕсли;
КонецЦикла;
Как говорится если долго мучиться что-нибуть получится.
Ошибка была в сравнениях значений таблицы и субконто БИ. (в таблице значение типа ссылка, в БИ возвращалось типа строка)
Решение следующее:
спТовары=СоздатьОбъект("СписокЗначений");
тзТовары.выгрузить(спТовары,,,"Товар");
спрСклади=СоздатьОбъект("Справочник.МестаХранения");
спрСклади.найтиПоКоду("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