Доброго дня, вопрос по платформе 8.3.5.1443 управляемые формы, конфигурация Управление небольшой фирмой для Украины, редакция 1.4.
Возникла необходимость сделать так, чтобы кассир видел остатки по номенклатуре на форме чека ККМ во время ее добавления (т.е. вместе с единицей измерения и ценой, которые заполняются из события ПриИзменении), потому что его не устраивает, когда он наполняет чек несколькими наименованиями, а потом чек не проводится, если есть нехватка на складе.
Контроль отрицательных остатков отключать не хотят.
В модуль формы документа событие ПриИзменении добавил
СтрокаТабличнойЧасти.Остаток =ОбщегоНазначения.РассчитатьОстаток(Объект.Организация,СтрокаТабличнойЧасти.Номенклатура,Объект.Дата);
&НаСервере
Функция РассчитатьОстаток(Организация,Номенклатура,Дата) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЗапасыОстатки.Организация,
| ЗапасыОстатки.Номенклатура,
| ЗапасыОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.Запасы.Остатки(&МоментВремени, ) КАК ЗапасыОстатки
|ГДЕ
| ЗапасыОстатки.Номенклатура = &Номенклатура
| И ЗапасыОстатки.Организация = &Организация"
);
Запрос.УстановитьПараметр("МоментВремени", Дата);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.Выполнить();
а = Результат.Выгрузить();
КонецФункции
В вашем случае нужно смотреть либо переменную а, либо нужно открыть выборку по результату запроса:
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Остаток);
КонецЦикла;
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Выборка.Остаток);
Иначе
Сообщить("Остатков нету");
КонецЕсли;
Ваша функция должна быть такой:
Функция РассчитатьОстаток(Организация,Номенклатура,Дата) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ЗапасыОстатки.Организация,
| ЗапасыОстатки.Номенклатура,
| ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК Остаток
|ИЗ
| РегистрНакопления.Запасы.Остатки(
| &Дата,
| &Номенклатура = Номенклатура
| И &Организация = Организация) КАК ЗапасыОстатки"
);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(),Выборка.Остаток,0);
КонецФункции
Vofka , logist, Ребят, огромное вам спасибо, крепкого здоровья вам . Про параметры запроса забыл, каюсь, сейчас все заработало)
Есть небольшие доработки. Отладку я запускал в толстом клиенте, а на рабочей базе запускается тонкий, код функции перенес в модуль ОбщегоНазначенияВызовСервера, и запрос должен брать остатки из регистра ЗапасыНаСкладах. Тогда в чеках ККМ будет отображаться актуальный остаток после каждого пробитого чека.
logist @ Сегодня, 13:19
,
Я, к сожалению, уже не помню все эти тонкости, поэтому влепил в общий модуль. Освежал в памяти остатки знаний в процессе написания этой проверки Ее действительно можно было разместить в форму, это не настолько крупная наработка и она только для чека ККМ делалась. Более широко используемые, универсальные, как говорил выше Vofka, уже лучше в общие модули добавлять. Еще раз благодарен вам за советы и поправки.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua