![]() |
1С 8.2 Прыгают остатки в результатах запроса. подскажите!!! Вот кусок процедуры. В ней пробивается (проводится чек) и печатается складской корешок чека. Проблем с временем судя по всему связана с Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата)), которая стоит в конце запроса. Если несколько раз подряд пробиваю один и тот же товар, то остатки вдруг начинают прыгать. Как правильно сделать??? Результат = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР, "PrintReceipt", ВходныеПараметры, ВыходныеПараметры); Если Результат Тогда // Установить полученное значение номера чека реквизиту документа. ОбъектЧекККМ.НомерСменыККМ = ВыходныеПараметры[0]; ОбъектЧекККМ.НомерЧекаККМ = ВыходныеПараметры[1]; ОбъектЧекККМ.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый; ОбъектЧекККМ.Дата = ТекущаяДата(); Если Не ЗначениеЗаполнено(ОбъектЧекККМ.НомерЧекаККМ) Тогда ОбъектЧекККМ.НомерЧекаККМ = 1; КонецЕсли; ЧекПробит = Истина; Иначе ТекстСообщения = НСтр("ru = 'При печати чека произошла ошибка. |Чек не напечатан на фискальном регистраторе. |Дополнительное описание: |%ДополнительноеОписание%'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ДополнительноеОписание%", ВыходныеПараметры[1]); КонецЕсли; //Печать "Складского корешка" // Готовим данные ВходныеПараметры = Новый Массив; ВыходныеПараметры = Неопределено; НомерСекции = 1; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток Как Остаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&КонецДняТек | ,Склад = &Склад | И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки"; Запрос.УстановитьПараметр("Склад", ОбъектЧекККМ.Магазин.СкладПродажи); Запрос.УстановитьПараметр("Номенклатура", ОбъектЧекККМ.ТабличныеЧасти.Товары.ВыгрузитьКолонку("Номенклатура")); Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата)); Сообщить(КонецДня(ОбъектЧекККМ.Дата)); РезультатОстатка = Запрос.Выполнить(); ВыборкаОстатка = РезультатОстатка.Выбрать(); |
Ваабще-то, чек несколько раз не пробивают. Государство обижается. |
(1) Да чек пробивается один раз, я имел в виду несколько чеков подряд с одним и тем же товаром |
(0) Чек же вроде пробит и проведен. 1. было 1000, продали 100, осталось 900 и показывает в корешке 900 2. было 900, продали опять 100, осталось 800 а показывает в корешке почему-то опять 900 |
3-Путевый лист > Оптимизация, однако. Результат запроса бережно сохраняется, если после него не было съема данных ;) |
4-VZ Ну а в коде-то мне что надо поменять??? |
4-VZ И почему происходит такая фигня? |
Чисто бабахну "с потолка". Может на "клиенте" надо обновление данных с "сервера" сделать? Как оно делается, я не знаю... |
Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата)) в этом варианте помойму последняя секунда дня не попадает, попробуйте Запрос.УстановитьПараметр("КонецДняТек",Новый Граница(КонецДня(ОбъектЧекККМ.Дата),ВидГраницы.Включая)); А В ИЕРАРХИИ (&Номенклатура) зачем используете данный вид проверки вхождения более тормознутый (помойму достаточно В (&Номенклатура)), у Вас ведь список значений с номенклатурой из таб. части. |
8-Write. Надо попробовать но кажется я так тоже пробовал. Вот причем тут конец дня вообще? я вывожу конец дня. Он мне показывает 17.01.2013 23:59:59. А ведь реально было время 2 часа дня. Вроде ж есть функция МоментВремени(). А ей нельзя воспользоваться? |
9-Путевый лист > Бери в качестве границы времени сам документ. Вот он и даст точное время :) |
(9) Если ты хочешь получить остатки на момент текущего чека тогда нужно использовать Запрос.УстановитьПараметр("КонецДняТек",Новый Граница(ОбъектЧекККМ.МоментВремени(),ВидГраницы.Включая)), но если у тебя не было движений по регистру после чека в течении дня то результат должен быть одинаковый и с предыдущим вариантом. |
10-VZ мне же надо именно после документа, то есть остатки уже должны измениться. И мне не важно время, мне важна актуальность остатков |
11-Write МоментВремени() не является свойством ОбъектЧекККМ. Но я уже по всякому пробовал. Не работает стабильно А хотелось бы понять, а то как обезьяна с очками |
Границу по текущему документу установить можно и нужно. А вообще, не совсем понятно, почему у чеков текущее время съезжает в последнюю секунду дня - это же должно быть реальное оперативное время с клиентской машины? |
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) МоментВремени (PointInTime) Синтаксис: МоментВремени() Возвращаемое значение: Тип: МоментВремени. Описание: Получает момент времени документа. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: // (в модуле документа ПроведениеПоПартиям) Запрос = Новый Запрос; Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.Текст = "ВЫБРАТЬ | ПроведениеПоПартиям.Ссылка КАК РегламентныйДокумент |ИЗ | Документ.ПроведениеПоПартиям КАК ПроведениеПоПартиям | |ГДЕ | ПроведениеПоПартиям.МоментВремени >= МоментВремени"; Выборка = Запрос.Выполнить().Выбрать(); |
(13) ОбъектЧекККМ - это документ? Параметр &КонецДняТек можно убрать на время, будет возвращать актуальные остатки, посмотреть изменяются или нет. Сделать отладку, пройтись по каждому параметру и посмотреть их значения. Можно набросать внешний отчет в СКД по виртуальной таблице ОстаткиИОбороты, с периодичностью Авто, выбрать поля Номенклатура, Регистратор, ПериодСекунда, КоличествоНачальныйОстаток, КоличествоОборот, КоличествоКонечныйОстаток, в настройках создать отчет с группировками номенклатура, детальные записи. Сформируешь будет видно по каждому чеку нач. остаток, оборот, кон. остаток. |
Текущее время: 04:27. Часовой пояс GMT +3. |