Обработка результатов запроса к 1С 7.7 из 1С 8.3 через COM соединение

1. Asya.Ozerova 40 30.09.20 18:57 Сейчас в теме
Добрый день!
Суть вопроса в том, что надо получить остатки по Регистру сведений ОстаткиТМЦ из ТиС7.7 в Таблицу на сторонне 1С 8.3, пробую:
	ОткрытьСоединение(База);
	Запрос = База.CreateObject("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Фирма								=  Регистр.ОстаткиТМЦ.Фирма,             
	|                 					   Регистр.РезервыТМЦ.Фирма;
	|ФирмаКод							=  Регистр.ОстаткиТМЦ.Фирма.Код,             
	|                 					   Регистр.РезервыТМЦ.Фирма.Код;
	|УпрАналитика 						=  Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
	|                 					   Регистр.РезервыТМЦ.Фирма.УпрАналитика;
	|ЮрЛицо	 							=  Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,      
	|                 					   Регистр.РезервыТМЦ.Фирма.ЮрЛицо;
	|Номенклатура						=  Регистр.ОстаткиТМЦ.Номенклатура,      
	|                 					   Регистр.Заказы.Номенклатура,
	|                 					   Регистр.РезервыТМЦ.Номенклатура;
	|НоменклатураР						=  Регистр.ОстаткиТМЦ.Номенклатура.Родитель,      
	|                 					   Регистр.Заказы.Номенклатура.Родитель,
	|                 					   Регистр.РезервыТМЦ.Номенклатура.Родитель;
	|Склад								=  Регистр.ОстаткиТМЦ.Склад,             
	|                 					   Регистр.РезервыТМЦ.Склад;
	|СкладКод							=  Регистр.ОстаткиТМЦ.Склад.Код,             
	|                 					   Регистр.РезервыТМЦ.Склад.Код;
	|Количество 						=  Регистр.ОстаткиТМЦ.Количество,
	|				  					   Регистр.РезервыТМЦ.Количество;
	|Резерв     						=  Регистр.РезервыТМЦ.Количество;
	|Группировка 						   Фирма Все ВошедшиеВЗапрос;
	|Группировка 						   Склад Все ВошедшиеВЗапрос;
	|Группировка 						   Номенклатура Все ВошедшиеВЗапрос;
	|Функция КоличествоКонОст 			=  КонОст(Количество);
    |Функция РезервКонОст   			=  КонОст(Резерв);
	|Условие (Номенклатура.ЭтоГруппа() 	=  0);  
	|Условие (Количество 				<> 0);  
	|Условие (ФирмаКод 					=  '00017');  
	|Условие (НоменклатураР 			=  'р2649');  
	|Условие (СкладКод 					=  '00060');";  
	
	Запрос.Выполнить(ТекстЗапроса);
	Пока Запрос.Группировка("Фирма") = 1 Цикл 
	Пока Запрос.Группировка("Склад") = 1 Цикл 
	Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
		СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
		СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
		СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
	КонецЦикла;
	КонецЦикла;
	КонецЦикла;
Показать

В результате получаю "0"

Строки запроса:
	|Условие (ФирмаКод 					=  '00017');  
	|Условие (НоменклатураР 			=  'р2649');  
	|Условие (СкладКод 					=  '00060');";  

добавила т.к. "Очень долго думал!", с ними все понятно, отбираю по Фирме, Складу и Номенклатуру по Родителю.

Когда формирую ОстаткиТМЦ в 7.7 с тем-же отбором, там остатки есть! В чем и где ошибаюсь не пойму(

Может я ВООБЩЕ пошла не тем путем( ?
Мне нужны Актуальные остатки по Фирме, Складу и Номенклатуре входящей в Группу
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1464234 30.09.20 19:13 Сейчас в теме
Оптимально по быстродействию глобальная функция в 7.7, возвращающая именно те остатки, которые требуются. Получение элементов для отборов так же на стороне 7ки в этой функции методом найти по коду. Запрос в 7.ке с получением остатков не следует нагружать реквизитами через точку.
3. Asya.Ozerova 40 30.09.20 19:15 Сейчас в теме
(2)
глобальная функция в 7.7, возвращающая именно те остатки

(2)
А как к Ней обратиться и что это за Функция, для меня 7-ка пока как "Дремучий лес" ((
5. user1464234 30.09.20 19:17 Сейчас в теме
(3) evalexpr ("глполучитьостаткидля8кипофирме17("+кодсклада+","+кодгруппытмц+")")
6. Asya.Ozerova 40 30.09.20 19:19 Сейчас в теме
(5)
глполучитьостаткидля8кипофирме17

Такой функции в Глобальном модуле нет(
7. user1464234 30.09.20 19:21 Сейчас в теме
(6) если нет возможности добавить, то можно и ваш вариант. В вашем запросе период указан?
А зачем два регистра в одном запросе и все вошедшие?
8. Asya.Ozerova 40 30.09.20 19:24 Сейчас в теме
(7) Пока нет, я взяла за основу Отчет Остатки ТМЦ из 7-ки, там:
Функция ТекстЗапросаБезКомиссии()

СтрПериод = ?(ДатаКонца>= ПолучитьДатуТА(),"",
"Период с ДатаКонца по ДатаКонца;");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|" + СтрПериод +
"
|Фирма = Регистр.ОстаткиТМЦ.Фирма,
| Регистр.РезервыТМЦ.Фирма;
|УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика,
| Регистр.РезервыТМЦ.Фирма.УпрАналитика;
|ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо,


т.е. если ДатаКонца>= ПолучитьДатуТА() то период в Запрос не попадает, но он формируется
10. Asya.Ozerova 40 30.09.20 19:30 Сейчас в теме
(7)
А зачем два регистра в одном запросе и все вошедшие?

Там есть еще Регистр ОстаткиТМЦ, чтоб его учитывать тоже(

А, всеВошедшие - незнаю, так в 7-ошном отчете было(
4. Asya.Ozerova 40 30.09.20 19:17 Сейчас в теме
(2) Мне нужны все остатки по РегиструНакоплений ОстаткиТМЦ с отбором по Фирме, Складу и Номенклатуре (в группе)
9. user1464234 30.09.20 19:25 Сейчас в теме
Вы через оле видите датуТА?
11. Asya.Ozerova 40 30.09.20 19:34 Сейчас в теме
(9) Я к ней не обращаюсь, а беру за основу, что она меньше и просто убираю период из запроса(
Мне сейчас просто надо остатки получить, чтоб понять в чем ошибка, потом добавлю период
12. Asya.Ozerova 40 30.09.20 19:36 Сейчас в теме
(9)т.е. считаю, что СтрПериод = ""
13. user1464234 30.09.20 19:37 Сейчас в теме
Возможно, датаТА в оле нулевая, и период без точного указания не показывает остатки. Не помню всех нюансов к сожалению:(
14. vlad_d 30.09.20 19:43 Сейчас в теме
(1) Так-так-так... Выбираем ссылку а ставим в условие строку...
НоменклатураР                        =  Регистр.ОстаткиТМЦ.Номенклатура.Родитель,      
                                            Регистр.Заказы.Номенклатура.Родитель,
                                         Регистр.РезервыТМЦ.Номенклатура.Родитель;
......
Условие (НоменклатураР             =  'р2649')
16. Asya.Ozerova 40 30.09.20 19:45 Сейчас в теме
(14)
Так-так-так... Выбираем ссылку а ставим в условие строку...

Хм... Но... Номенклатуры то он из Группы правильно выбирает! А остаток нулевой
17. user1464234 30.09.20 19:49 Сейчас в теме
(16) он выбирает Все, а не остаток из регистра. У вас отчет в клеточку. Для обмена данными шахматка не требуется.
18. Asya.Ozerova 40 30.09.20 19:52 Сейчас в теме
(17) Все из группы
Условие (НоменклатураР = 'р2649')
15. user1464234 30.09.20 19:44 Сейчас в теме
Попробуйте в запросе 7.7 сделать группировки по фирмакод, складкод и номенклатуракод.
19. vlad_d 30.09.20 19:53 Сейчас в теме
(16) Этот запрос и в самой 7-ке ничего не выберет из базы. Как и в восьмерке собственно, если вы на ссылочный тип в условие равенства строку подставите.

Ну и дату можно так передать:
ДатаЗапроса = "'30.09.2020'";

ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)

|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
20. Asya.Ozerova 40 30.09.20 20:08 Сейчас в теме
(19)
ДатаЗапроса = "'30.09.2020'";

ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)

|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";


Убрала вообще Условие (НоменклатураР = 'р2649');

Период поставила, так как Вы написали, на всякий случай Дату взяла Началом года, проверила в 7-ке на эту дату формирует! А у меня Нет! (
Выдает только список Номенклатур по Складу которые не с нулевым остатком (только те, что в 7-ке в отчете т.е. он видит что в остатках), сверила в Отчетом в семерке, а остаток не показывает!
21. alex_bob 248 30.09.20 20:10 Сейчас в теме
В условиях сравнения со строками нужно апострофы заменить на удвоенные кавычки.
22. Asya.Ozerova 40 30.09.20 20:11 Сейчас в теме
(21)Так он отбор по условиям правильно делает. Нет только остатков, точнее они все "0"
23. user1464234 30.09.20 20:14 Сейчас в теме
Запросите начост, приход и расход тоже, за компанию.
24. Asya.Ozerova 40 30.09.20 20:25 Сейчас в теме
Убрала из запроса Все!
Оставила только регистр ОстаткиТМЦ
	ДатаЗапроса = "'01.01.2020'";
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
	|Фирма								= Регистр.ОстаткиТМЦ.Фирма;             
	|ФирмаКод							= Регистр.ОстаткиТМЦ.Фирма.Код;             
	|Номенклатура						= Регистр.ОстаткиТМЦ.Номенклатура;      
	|Склад								= Регистр.ОстаткиТМЦ.Склад;             
	|СкладКод							= Регистр.ОстаткиТМЦ.Склад.Код;             
	|Количество 						= Регистр.ОстаткиТМЦ.Количество;
	|Резерв     						= Регистр.РезервыТМЦ.Количество;
	|Функция КоличествоКонОст 			= КонОст(Количество);
	|Группировка 						  Номенклатура Все;
	|Группировка 						  Склад Все ВошедшиеВЗапрос;
	|Условие (ФирмаКод 					= '00017');  
	|Условие (Номенклатура.ЭтоГруппа() 	= 0);  
	|Условие (СкладКод 					= '00060');";  
	Запрос.Выполнить(ТекстЗапроса);
	Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
		Пока Запрос.Группировка("Склад") = 1 Цикл 
			СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
			СтрокаЗагрузки.НоменклатураНаименование77 = Запрос.Номенклатура.Наименование;
			СтрокаЗагрузки.НоменклатураКоличество77 = Запрос.КоличествоКонОст;
		КонецЦикла;
	КонецЦикла;
Показать


Убила Базу 7-ки( Переиндексируется...
Жду...
25. vlad_d 30.09.20 20:36 Сейчас в теме
(24) вот это тоже пока уберите:

|Резерв                             = Регистр.РезервыТМЦ.Количество;
26. Asya.Ozerova 40 30.09.20 20:36 Сейчас в теме
(25)Да, спасибо! Уже заметила и... тоже убрала)
28. Asya.Ozerova 40 30.09.20 20:40 Сейчас в теме
(25)Пока 7-ка индексируется, подскажите,
имеет ли значение порядок группировок? Почему в Типовом отчете в 7-ке в начале группируется
Номенклатура ВСЕ!, а потом Склад Все ВОШЕДШИЕВЗАПРОС?
И почему Номенклатура Все, а Склад Все Вошедшиевзапрос?
29. Kolunya 6 30.09.20 20:42 Сейчас в теме
(28)
Все вошедшиеВзапрос - чтобы не было в выборке Складов с нулевыми остатками

Порядок группировок можете ставить так, как вам надо
Т.к. Вы делаете отбор по конкретному складу, то можете группировку по нему не делать даже
32. Asya.Ozerova 40 30.09.20 20:45 Сейчас в теме
(29)
Т.к. Вы делаете отбор по конкретному складу, то можете группировку по нему не делать даже

Если я ее убираю, тогда вообще ни чего не приходит(
35. Kolunya 6 30.09.20 20:54 Сейчас в теме
(32) Номенклатура ВСЕ
покажет все ТМЦ, даже те, у которых КонОст = 0
Если написать ВСЕ ВошедшиеВЗапрос - то в выборке будут все неНулевые значения
37. Asya.Ozerova 40 30.09.20 21:02 Сейчас в теме
(35)Не поняла(
так у меня же такого условия нет: КонОст <> 0
т.е. если я без этого условия отберу Номенклатуру Все ВошедшиеВЗапрос то он мне выдаст только не нулевые?
41. Asya.Ozerova 40 30.09.20 21:27 Сейчас в теме
(25) Извините за Навязчивость(
А вот тут не надо местами Циклы поменять?
     Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
        Пока Запрос.Группировка("Склад") = 1 Цикл 
            СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
            СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
            СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
        КонецЦикла;
    КонецЦикла;
43. vlad_d 30.09.20 21:32 Сейчас в теме
(41) Да вроде нормально сейчас все. Должен данные отдавать.
Попробуйте так:


     Пока Запрос.Группировка(1) = 1 Цикл 
        Пока Запрос.Группировка(2) = 1 Цикл 
            СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
            СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
            СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
        КонецЦикла;
    КонецЦикла;
Показать
47. Asya.Ozerova 40 30.09.20 21:38 Сейчас в теме
49. Asya.Ozerova 40 30.09.20 22:12 Сейчас в теме
52. vlad_d 30.09.20 22:17 Сейчас в теме
(49) На другом компьютере попробуйте. Может, в системном ПО проблема. Сейчас вроде и придраться уже не к чему, должен отрабатывать.
53. Asya.Ozerova 40 30.09.20 22:19 Сейчас в теме
(52)Так вот и я о том-же думаю! На сколько бы я не была Глупа, но тут уже даже и тупить негде!
Либо.... Я Глупа!...
55. vlad_d 30.09.20 22:22 Сейчас в теме
(53) Возможно какой-то баг с вещественными числами.
56. Asya.Ozerova 40 30.09.20 22:24 Сейчас в теме
(55)Я у Вас не займу много времени!
Посмотрите пожалуйста!?
54. Asya.Ozerova 40 30.09.20 22:22 Сейчас в теме
(52)Вы можете подключится?
57. vlad_d 30.09.20 22:26 Сейчас в теме
(56) В личку написал. Давайте попробуем, чем смогу.
27. Kolunya 6 30.09.20 20:37 Сейчас в теме
НоменклатураР                        =  Регистр.ОстаткиТМЦ.Номенклатура.Родитель,      
    |                                        Регистр.Заказы.Номенклатура.Родитель,
    |                                        Регистр.РезервыТМЦ.Номенклатура.Родитель;

 |Условие (НоменклатураР             =  'р2649');  



Уже писали выше: так однозначно не взлетит
Только если писать
НоменклатураР  =  Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Код
30. Asya.Ozerova 40 30.09.20 20:42 Сейчас в теме
(27)Я не видела от Вас ответов(
но все равно я это уже убрала из запроса и еще резерв тоже пока (24)
31. Kolunya 6 30.09.20 20:45 Сейчас в теме
(30) про это вам писали в (14)
В запросе НоменклатураР - это родитель, ссылка
Ее нельзя сравнивать со строкой, в этом случае можно решить только если Код родителя
33. Kolunya 6 30.09.20 20:47 Сейчас в теме
(30) если уберете условие отбора по группе номенклатуры, то Запрос вернет Вам все-все остатки на указанной Фирме/Склад
34. Asya.Ozerova 40 30.09.20 20:48 Сейчас в теме
(33)Так мне это и нужно! Отбор по группе Номенклатур я ставила, чтоб ускорить процесс во время отладки
36. alex_bob 248 30.09.20 20:57 Сейчас в теме
Я конечно уже плохо помню семерку, но возможно строки
Функция КоличествоКонОст = КонОст(Количество) нужно поднять выше группировок, к остальным полям запроса.
38. Asya.Ozerova 40 30.09.20 21:05 Сейчас в теме
(36)Вот!!! я уже про Порядок спрашивала! Точнее я видимо не правильно спросила( В Какой очередности надо поставить Функции и Группировки?
Сейчас запрос так выглядит:
	ДатаЗапроса = "'01.01.2020'";
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
	|Фирма								= Регистр.ОстаткиТМЦ.Фирма;             
	|ФирмаКод							= Регистр.ОстаткиТМЦ.Фирма.Код;             
	|Номенклатура						= Регистр.ОстаткиТМЦ.Номенклатура;      
	|НоменклатураР						= Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Код;      
	|Склад								= Регистр.ОстаткиТМЦ.Склад;             
	|СкладКод							= Регистр.ОстаткиТМЦ.Склад.Код;             
	|Количество 						= Регистр.ОстаткиТМЦ.Количество;
	|Функция КоличествоКонОст 			= КонОст(Количество);
	|Группировка 						  Номенклатура Все;
	|Группировка 						  Склад Все ВошедшиеВЗапрос;
	|Условие (ФирмаКод 					= '00017');  
	|Условие (НоменклатураР				= 'р2649');  
	|Условие (Номенклатура.ЭтоГруппа() 	= 0);  
	|Условие (СкладКод 					= '00060');";  
	Запрос.Выполнить(ТекстЗапроса);
	Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
		Пока Запрос.Группировка("Склад") = 1 Цикл 
			СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
			СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
			СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
		КонецЦикла;
	КонецЦикла;
Показать
39. Asya.Ozerova 40 30.09.20 21:08 Сейчас в теме
(36)
Я конечно уже плохо помню семерку

Вот и я ее плохо "ПОМНЮ" (знаю), точнее не знаю! И в отличии от 8-й не могу найти, где можно научиться(
40. Asya.Ozerova 40 30.09.20 21:13 Сейчас в теме
Блин.... Тут еще и месяц "нечаянно" новый начался(
База переиндексировалась, теперь остатки переносятся(
42. Asya.Ozerova 40 30.09.20 21:29 Сейчас в теме
Мне Честно не понятно!
Почему в типовом 7-чном отчете так:
     Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
        Пока Запрос.Группировка("Склад") = 1 Цикл 
            СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
            СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
            СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
        КонецЦикла;
    КонецЦикла;


Почему Циклы "Наоборот"?

В 8-ке я бы Сделала в начале по складу, а потом по Номенклатуре...
44. Asya.Ozerova 40 30.09.20 21:32 Сейчас в теме
и так, что в Итоге!
Вот Запрос:
	ДатаЗапроса = "'01.01.2020'";
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
	|Фирма								= Регистр.ОстаткиТМЦ.Фирма;             
	|ФирмаКод							= Регистр.ОстаткиТМЦ.Фирма.Код;             
	|Номенклатура						= Регистр.ОстаткиТМЦ.Номенклатура;      
	|НоменклатураР						= Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Код;      
	|Склад								= Регистр.ОстаткиТМЦ.Склад;             
	|СкладКод							= Регистр.ОстаткиТМЦ.Склад.Код;             
	|Количество 						= Регистр.ОстаткиТМЦ.Количество;
	|Функция КоличествоКонОст 			= КонОст(Количество);
	|Группировка 						  Номенклатура Все;
	|Группировка 						  Склад Все ВошедшиеВЗапрос;
	|Условие (ФирмаКод 					= '00017');  
	|Условие (НоменклатураР				= 'р2649');  
	|Условие (Номенклатура.ЭтоГруппа() 	= 0);  
	|Условие (СкладКод 					= '00060');";  
	Запрос.Выполнить(ТекстЗапроса);
	Пока Запрос.Группировка("Номенклатура") = 1 Цикл 
		Пока Запрос.Группировка("Склад") = 1 Цикл 
			СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
			СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
			СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
		КонецЦикла;
	КонецЦикла;
	
Показать

В Ответе: Номенклатуры ВСЕ, а остатки НУЛЕВЫЕ!
т.е. вернулись к тому от чего пришли(
45. user1464234 30.09.20 21:36 Сейчас в теме
Группировки Номенклатура без групп;
Склад без групп
Условие номенклатура.этогруппа = 0 - а что, так можно было?
46. Asya.Ozerova 40 30.09.20 21:38 Сейчас в теме
(45)Не поняла(
в (44) текст запроса, где там такое условие?
48. Asya.Ozerova 40 30.09.20 22:09 Сейчас в теме
	ДатаЗапроса = "'01.01.2020'";
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
	|Номенклатура						= Регистр.ОстаткиТМЦ.Номенклатура;      
	|НоменклатураР						= Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Код;      
	|СкладКод							= Регистр.ОстаткиТМЦ.Склад.Код;             
	|Количество 						= Регистр.ОстаткиТМЦ.Количество;
	|Функция КоличествоКонОст 			= КонОст(Количество);
	|Группировка 						  Номенклатура Все;
	|Группировка 						  Склад Все ВошедшиеВЗапрос;
	//|Условие (ФирмаКод 					= '00017');  
	//|Условие (НоменклатураР				= 'р2649');  
	|Условие (Номенклатура.ЭтоГруппа() 	= 0);  
	|Условие (СкладКод 					= '00060');";  
	Запрос.Выполнить(ТекстЗапроса);
Пока Запрос.Группировка(1) = 1 Цикл
Пока Запрос.Группировка(2) = 1 Цикл
СтрокаЗагрузки = ОтчетЗагрузки.Добавить();
СтрокаЗагрузки.ВидОбъекта77 = Запрос.Номенклатура.Наименование;
СтрокаЗагрузки.Наименование77 = Запрос.КоличествоКонОст;
КонецЦикла;
КонецЦикла;
Показать

Уже нечего убирать!!!
Что не так!?
50. user1464234 30.09.20 22:14 Сейчас в теме
Группировка номенклатура без групп;
Группировка склад без групп;
Условия убираем все и включаем по одному, когда получим остатки, как и соответствующие им переменные запроса номенклатураР и складкод.
После выполнения запроса выгружаем его в тз и пишем сообщить количество строк в тз.
51. Asya.Ozerova 40 30.09.20 22:17 Сейчас в теме
(50)Вы мне можете немного времени уделить? Покажите? Я правда не понимаю(
58. Asya.Ozerova 40 30.09.20 22:28 Сейчас в теме
59. vlad_d 30.09.20 22:57 Сейчас в теме
Вот так еще попробуйте:

    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с "+ДатаЗапроса+" по "+ДатаЗапроса+";
    |Номенклатура                        = Регистр.ОстаткиТМЦ.Номенклатура;      
    |НоменклатураР                        = Регистр.ОстаткиТМЦ.Номенклатура.Родитель.Код;      
    |СкладКод                            = Регистр.ОстаткиТМЦ.Склад.Код;             
    |Количество                         = Регистр.ОстаткиТМЦ.Количество;
    |Функция КоличествоКонОст             = КонОст(Количество);
    |Группировка                           Номенклатура без групп;
    |Группировка                           Склад без групп;
    |Условие (ФирмаКод                     = '00017');  
    |Условие (НоменклатураР                = 'р2649');  
    //|Условие (Номенклатура.ЭтоГруппа()     = 0);  
    |Условие (СкладКод                     = '00060');";  
Показать
60. alex_bob 248 01.10.20 08:40 Сейчас в теме
А что дает такой же запрос в 1С77? Может реально остатков по таким условиям нет?
61. Asya.Ozerova 40 01.10.20 08:48 Сейчас в теме
(60)Ну... Мой запрос их и не дает(
В 7-ке есть регистр ОстаткиТМЦ по нему есть типовой 7-ный отчет который показывает остатки и они там есть.
Спрошу по другому: Как из 7-ки получить остатки по этому регистру?
62. alex_bob 248 01.10.20 08:53 Сейчас в теме
Всё-таки замените апострофы на удвоенные кавычки в условиях. Семерка может не давать синтаксической ошибки, но думать, что это дата.
63. Asya.Ozerova 40 01.10.20 09:13 Сейчас в теме
64. Asya.Ozerova 40 01.10.20 10:16 Сейчас в теме
А к функции из глобального модуля можно через СОМ обратиться?
Нашла такую функцию, вроде бы то что мне и нужно:
//******************************************************************************
// глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Номенклатура, Единица, ОстаткиТМЦ, ОстатокНаСкладе, ОстатокПоФирме, Склад,
// РезервыТМЦ = 0, УчитыватьРезерв = 0, Договор = 0, Заявка = 0) Экспорт
//
// Параметры:
// ФирмаДляОстатковТМЦ - элемент справочника "Фирмы" или список таких элементов, для которого надо получить остаток,
// Номенклатура - элемент справочника "Номенклатура", для которого надо получить остаток,
// Единица - элемент справочника "Единицы", определяем в чем надо вернуть остаток,
// ОстаткиТМЦ - регистр "ОстаткиТМЦ", отфильтрованный и рассчитанный нужным образом,
// ОстатокНаСкладе - возвращаемое значение, остаток на складе
// ОстатокПоФирме - возвращаемое значение, остаток по фирме
// Склад - элемент справочника "Склады", для которого надо получить остаток на складе
// РезервыТМЦ - регистр "РезервыТМЦ", отфильтрованный и рассчитанный нужным образом,
// необязателен, если не задан, то из остатка резерв не вычитается,
// УчитыватьРезерв - число, флаг учета резерва, если не пуст, то из остатка вычитается резерв,
// необязателен, по умолчанию 0.
// Договор - элемент справочника "Договора", определяет договор,
// резервы по которому надо включить в остаток (не обязателен),
// Заявка - документ "Заявка", определяет заявку,
// резервы по которой надо включить в остаток,
// анализируется если не задан Договор (не обязателен).
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Вычисляет остатки Номенклатуры на складе, по фирме, в соответствии с текущими установками фильтра.
//
user1464234; +1 Ответить
65. alex_bob 248 02.10.20 08:46 Сейчас в теме
Начал экспериментировать сам. Поставил 77, нашел ТиС.
Написал маленькую обработку со своими тестовыми данными.
У меня заработало только вот с такой конструкцией:
Запрос = ОЛЕ.CreateObject("Запрос");
	ДатаОстатков = "'01.10.2020'";   
	 
	Родитель = ОЛЕ.CreateObject("Справочник.Номенклатура");
        
        // Искомая группа номенклатуры имеет код 2
	Если Родитель.НайтиПоКоду(2) = 0 Тогда
		Сообщить("Группа не найдена"); 
	КонецЕсли;
	
	ИмяФайла = ОЛЕ.КаталогВременныхФайлов() + "1.val";
	
        // ТекущийЭлемент() в строчке ниже обязателен, иначе сохраняется пустое значение
	ОЛЕ.ЗначениеВФайл(ИмяФайла, Родитель.ТекущийЭлемент(), 1);

	Текст = "Период с " + ДатаОстатков + " по " + ДатаОстатков + ";
	|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; 
	|НоменклатураРодитель = Регистр.ОстаткиТМЦ.Номенклатура.Родитель; 
	|СкладКод = Регистр.ОстаткиТМЦ.Склад.Код; 
	|Склад = Регистр.ОстаткиТМЦ.Склад;
	|Количество = Регистр.ОстаткиТМЦ.Количество;
	|Функция КоличествоКонОст = КонОст(Количество);
	|Группировка Номенклатура;
	|Группировка Склад;
	|Условие (СкладКод = ""00001"");
	|Условие (НоменклатураРодитель = ЗначениеИзФайла(""" + ИмяФайла + """));";
	Запрос.Выполнить(Текст);
	Пока Запрос.Группировка("Номенклатура") = 1 Цикл
		Пока Запрос.Группировка("Склад") = 1 Цикл
			Сообщить(Запрос.Номенклатура.Наименование + ", " + Запрос.КоличествоКонОст);
		КонецЦикла;	
	КонецЦикла;	
Показать


То есть я через ЗначениеИзФайла передаю ссылочное значение в контекст запроса.
user1464234; +1 Ответить
66. user1464234 02.10.20 13:57 Сейчас в теме
(65) очень круто, спасибо! А в 8чном запросе тоже можно значениеизфайла? А таблицу значений так в запрос можно??
Например, левое соединение значениеизфайла(....).
68. Asya.Ozerova 40 03.10.20 23:06 Сейчас в теме
(65)
У меня заработало только вот с такой конструкцией

Да, на сегодня остановилась на Вашем варианте! Но... Мне не понятно, почему?
|Условие (СкладКод = ""00001"");

В запросе работает, а Родитель Номенклатуры по тому же Коду не отбирается?

Должна же быть какая-то причина, по которой так происходит!? Точнее... Не происходит(
70. Asya.Ozerova 40 04.10.20 10:52 Сейчас в теме
(65)
|Группировка Склад;
|Группировка Номенклатура Все ВошедшиеВЗапрос;
|Условие (СкладКод = ""00001"");
|Условие (НоменклатураРодитель = ЗначениеИзФайла(""" + ИмяФайла + """));";
Запрос.Выполнить(Текст);
Пока Запрос.Группировка("Склад") = 1 Цикл
Пока Запрос.Группировка("Номенклатура") = 1 Цикл


Кстати, если поменять Группировки и Номенклатурам добавить "ВошедшиеВЗапрос", то запрос обрабатывается в разы быстрее.
user1464234; +1 Ответить
67. alex_bob 248 02.10.20 19:49 Сейчас в теме
(66) В восьмерке для этого есть параметры запроса. Таблица значений через временную таблицу.
user1464234; +1 Ответить
69. alex_bob 248 04.10.20 07:34 Сейчас в теме
(68) Скорее всего дело в том, что если в запросе попалась строка номенклатуры с пустым родителем, (а у пустого родителя нет поля код) то запрос на этом отваливается но не дает ошибки.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот