|
|
|
Получение остатков товара в чеке ккм | ☑ | ||
|---|---|---|---|---|
|
0
GrishaRus
23.03.24
✎
11:03
|
Добрый день пытаюсь получить остаток по товару и внести ее в колонку "Остаток"
вот код Если ОформленияСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаНоменклатуры.Номенклатура,
| ТаблицаНоменклатуры.ХарактеристикаНоменклатуры,
| ТаблицаНоменклатуры.Склад
|ПОМЕСТИТЬ ТаблицаВЗапрос
|ИЗ
| &ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
|;
|
|ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад,
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки(
| ,
| (Номенклатура, ХарактеристикаНоменклатуры, Склад) В
| (ВЫБРАТЬ
| ТаблицаВЗапрос.Номенклатура,
| ТаблицаВЗапрос.ХарактеристикаНоменклатуры,
| ТаблицаВЗапрос.Склад
| ИЗ
| ТаблицаВЗапрос КАК ТаблицаВЗапрос)) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Номенклатура.Услуга = ЛОЖЬ";
ТаблицаНоменклатуры = Товары.Выгрузить();
ТаблицаНоменклатуры.Колонки.Добавить("Склад",Новый ОписаниеТипов("СправочникСсылка.Склады"));
ТаблицаНоменклатуры.ЗаполнитьЗначения(Склад,"Склад");
Запрос.УстановитьПараметр("ТаблицаНоменклатуры", ТаблицаНоменклатуры);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
//Сообщить ("Нет смогли определить остатки");
Возврат;
КонецЕсли;
ТаблицаОстатков = Результат.Выгрузить();
ТаблицаОстатков.Индексы.Добавить("Номенклатура,ХарактеристикаНоменклатуры");
СтруктураПоиска = Новый Структура;
МассивСтрок = Новый Массив;
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
СтруктураПоиска.Вставить("Номенклатура" , ОформлениеСтроки.ДанныеСтроки.Номенклатура);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", ОформлениеСтроки.ДанныеСтроки.ХарактеристикаНоменклатуры);
СтруктураПоиска.Вставить("Склад" , Склад);
МассивСтрок = ТаблицаОстатков.НайтиСтроки(СтруктураПоиска);
Остаток=0;
Если МассивСтрок.Количество() > 0 Тогда
Остаток = МассивСтрок[0].КоличествоОстаток;
КонецЕсли;
ОформлениеСтроки.Ячейки.Остаток.УстановитьТекст(Остаток);
Сообщить (Остаток);
КонецЦикла;
КонецПроцедуры
выдает остаток 0 хотя это не так |
|||
|
1
Волшебник
23.03.24
✎
11:02
|
Зачем так много кода?
Закачайте остатки в соответствие одним маленьким запросом с отбором по массиву ссылок. Или в таблицу значений, но обязательно проиндексируйте её. Затем достаньте остаток очень быстро. |
|||
|
2
Волшебник
23.03.24
✎
11:02
|
Кстати, зачем в чеке ККМ остаток? Там нужно отгружаемое количество, остаток точно не нужен
|
|||
|
3
Волшебник
23.03.24
✎
11:03
|
(0) Когда приводите фрагменты кода, то не глотайте названия процедур, а то теряется контекст
|
|||
|
4
GrishaRus
23.03.24
✎
11:05
|
(1) это конечно все хорошо, но данный код взят из инета и написан был для РМК и там говорят он работает, я знаю что он и в чеке ккм должен работать но я еще не догнал как нужно изменить запрос что бы он заработал :D
|
|||
|
5
GrishaRus
23.03.24
✎
11:06
|
(2) для удобства хотелось бы видеть свободный остаток без необходимости заходить в номенклатуру или в подбор
|
|||
|
6
АНДР
23.03.24
✎
11:37
|
(1) пункт 3.2 https://its.1c.ru/db/v8std/content/777/hdoc
|
|||
|
7
Волшебник
23.03.24
✎
11:39
|
(6) А я не про временные таблицы, а про таблицу значений
|
|||
|
8
АНДР
23.03.24
✎
11:44
|
(7) Точно, я невнимателен.
|
|||
|
9
rphosts
23.03.24
✎
16:39
|
(4) первое правило бойскаута: после тебя должно быть чище чем было до тебя
|
|||
|
10
Михаил Козлов
23.03.24
✎
16:49
|
(0) Вы определяете остатки по временной таблице ТаблицаНоменклатуры (параметр в запросе), а она у Вас пустая.
|
|||
|
11
Волшебник
23.03.24
✎
18:43
|
(5) В чеке этого не нужно. Там надо пробивать что принесли
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |