Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отображение остатка по товару в чеке ККМ "на лету"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
bobr_dobr
Доброго дня, вопрос по платформе 8.3.5.1443 управляемые формы, конфигурация Управление небольшой фирмой для Украины, редакция 1.4.
Возникла необходимость сделать так, чтобы кассир видел остатки по номенклатуре на форме чека ККМ во время ее добавления (т.е. вместе с единицей измерения и ценой, которые заполняются из события ПриИзменении), потому что его не устраивает, когда он наполняет чек несколькими наименованиями, а потом чек не проводится, если есть нехватка на складе.
Контроль отрицательных остатков отключать не хотят.
В модуль формы документа событие ПриИзменении добавил

СтрокаТабличнойЧасти.Остаток =ОбщегоНазначения.РассчитатьОстаток(Объект.Организация,СтрокаТабличнойЧасти.Номенклатура,Объект.Дата);


в ОбщегоНазначенияКлиентСервер

&НаСервере

Функция РассчитатьОстаток(Организация,Номенклатура,Дата) Экспорт
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    ЗапасыОстатки.Организация,
    |    ЗапасыОстатки.Номенклатура,
    |    ЗапасыОстатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |    РегистрНакопления.Запасы.Остатки(&МоментВремени, ) КАК ЗапасыОстатки
    |ГДЕ
    |    ЗапасыОстатки.Номенклатура = &Номенклатура
    |    И ЗапасыОстатки.Организация = &Организация"
    );
    Запрос.УстановитьПараметр("МоментВремени", Дата);
     Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
     Запрос.УстановитьПараметр("Организация", Организация);
    Результат = Запрос.Выполнить();
    а = Результат.Выгрузить();  
  
   КонецФункции


Отладку запускаю в толстом клиенте, но в результате запроса в табло не цифры, а то, что на скрине.

В консоли запросов все нормально, получаю остаток и остальные данные запроса.
Просьба подсказать, что не так сделал, ибо давно уже не ковырял конфигурации, тем более управляемые формы. А может вообще эта реализация кривая и есть более гуманные способы upset.gif
Vofka
В вашем случае нужно смотреть либо переменную а, либо нужно открыть выборку по результату запроса:

Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
   Сообщить(Выборка.Остаток);
КонецЦикла;


Если же вы уверены, что в результате запроса будет максимум 1 строка, то можно так:
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
   Сообщить(Выборка.Остаток);
Иначе
   Сообщить("Остатков нету");
КонецЕсли;
logist
Ваша функция должна быть такой:
Функция РассчитатьОстаток(Организация,Номенклатура,Дата) Экспорт
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    ЗапасыОстатки.Организация,
    |    ЗапасыОстатки.Номенклатура,
    |    ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК Остаток
    |ИЗ
    |    РегистрНакопления.Запасы.Остатки(
    |            &Дата,
    |            &Номенклатура = Номенклатура
    |                И &Организация = Организация) КАК ЗапасыОстатки"
    );
    Запрос.УстановитьПараметр("Дата",            Дата);
    Запрос.УстановитьПараметр("Номенклатура",    Номенклатура);
    Запрос.УстановитьПараметр("Организация",    Организация);
    Выборка = Запрос.Выполнить().Выбрать();
    Возврат ?(Выборка.Следующий(),Выборка.Остаток,0);  
  КонецФункции
bobr_dobr
Vofka , logist, Ребят, огромное вам спасибо, крепкого здоровья вам smile.gif. Про параметры запроса забыл, каюсь, сейчас все заработало)
bobr_dobr
Есть небольшие доработки. Отладку я запускал в толстом клиенте, а на рабочей базе запускается тонкий, код функции перенес в модуль ОбщегоНазначенияВызовСервера, и запрос должен брать остатки из регистра ЗапасыНаСкладах. Тогда в чеках ККМ будет отображаться актуальный остаток после каждого пробитого чека.
logist
Цитата(bobr_dobr @ 22.03.17, 12:39) необходимо зарегистрироваться для просмотра ссылки
код функции перенес в модуль

Зачем вообще использовали общие модули, это же функция для одной формы, её можно было смело разместить в той же форме, предварив &НаСервереБезКонтекста
Vofka
Цитата(logist @ 22.03.17, 13:19) необходимо зарегистрироваться для просмотра ссылки
это же функция для одной формы

Сейчас. А завтра, послезавтра...?
bobr_dobr
logist @ Сегодня, 13:19 необходимо зарегистрироваться для просмотра ссылки ,
Я, к сожалению, уже не помню все эти тонкости, поэтому влепил в общий модуль. Освежал в памяти остатки знаний в процессе написания этой проверки smile.gif Ее действительно можно было разместить в форму, это не настолько крупная наработка и она только для чека ККМ делалась. Более широко используемые, универсальные, как говорил выше Vofka, уже лучше в общие модули добавлять. Еще раз благодарен вам за советы и поправки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.