Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   1С 8.2 Прыгают остатки в результатах запроса. подскажите!!! (http://forums.kuban.ru/f1040/1s_8_2_prygayut_ostatki_v_rezul-tatah_zaprosa_podskazhite-5285017.html)

Путевый лист 17.01.2014 12:19

1С 8.2 Прыгают остатки в результатах запроса. подскажите!!!
 
Вот кусок процедуры.
В ней пробивается (проводится чек) и печатается складской корешок чека. Проблем с временем судя по всему связана с Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата)), которая стоит в конце запроса.

Если несколько раз подряд пробиваю один и тот же товар, то остатки вдруг начинают прыгать. Как правильно сделать???

Результат = МенеджерОборудованияКлиент.ВыполнитьКоманду(ИдентификаторУстройстваФР,
"PrintReceipt",
ВходныеПараметры,
ВыходныеПараметры);


Если Результат Тогда

// Установить полученное значение номера чека реквизиту документа.
ОбъектЧекККМ.НомерСменыККМ = ВыходныеПараметры[0];
ОбъектЧекККМ.НомерЧекаККМ = ВыходныеПараметры[1];

ОбъектЧекККМ.СтатусЧекаККМ = Перечисления.СтатусыЧековККМ.Пробитый;
ОбъектЧекККМ.Дата = ТекущаяДата();
Если Не ЗначениеЗаполнено(ОбъектЧекККМ.НомерЧекаККМ) Тогда
ОбъектЧекККМ.НомерЧекаККМ = 1;
КонецЕсли;

ЧекПробит = Истина;
Иначе
ТекстСообщения = НСтр("ru = 'При печати чека произошла ошибка.
|Чек не напечатан на фискальном регистраторе.
|Дополнительное описание:
|%ДополнительноеОписание%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения,
"%ДополнительноеОписание%",
ВыходныеПараметры[1]);
КонецЕсли;


//Печать "Складского корешка"

// Готовим данные
ВходныеПараметры = Новый Массив;
ВыходныеПараметры = Неопределено;

НомерСекции = 1;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток Как Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&КонецДняТек
| ,Склад = &Склад
| И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Склад", ОбъектЧекККМ.Магазин.СкладПродажи);
Запрос.УстановитьПараметр("Номенклатура", ОбъектЧекККМ.ТабличныеЧасти.Товары.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата));
Сообщить(КонецДня(ОбъектЧекККМ.Дата));
РезультатОстатка = Запрос.Выполнить();
ВыборкаОстатка = РезультатОстатка.Выбрать();

VZ 17.01.2014 12:25

Ваабще-то, чек несколько раз не пробивают. Государство обижается.

Путевый лист 17.01.2014 12:34

(1) Да чек пробивается один раз, я имел в виду несколько чеков подряд с одним и тем же товаром

Путевый лист 17.01.2014 12:38

(0) Чек же вроде пробит и проведен.
1. было 1000, продали 100, осталось 900 и показывает в корешке 900
2. было 900, продали опять 100, осталось 800 а показывает в корешке почему-то опять 900

VZ 17.01.2014 12:53

3-Путевый лист > Оптимизация, однако. Результат запроса бережно сохраняется, если после него не было съема данных ;)

Путевый лист 17.01.2014 13:03

4-VZ Ну а в коде-то мне что надо поменять???

Путевый лист 17.01.2014 13:03

4-VZ И почему происходит такая фигня?

wowick 17.01.2014 14:30

Чисто бабахну "с потолка". Может на "клиенте" надо обновление данных с "сервера" сделать? Как оно делается, я не знаю...

Write 17.01.2014 20:00

Запрос.УстановитьПараметр("КонецДняТек",КонецДня(ОбъектЧекККМ.Дата)) в этом варианте помойму последняя секунда дня не попадает, попробуйте Запрос.УстановитьПараметр("КонецДняТек",Новый Граница(КонецДня(ОбъектЧекККМ.Дата),ВидГраницы.Включая));
А В ИЕРАРХИИ (&Номенклатура) зачем используете данный вид проверки вхождения более тормознутый (помойму достаточно В (&Номенклатура)), у Вас ведь список значений с номенклатурой из таб. части.

Путевый лист 17.01.2014 20:43

8-Write. Надо попробовать но кажется я так тоже пробовал.
Вот причем тут конец дня вообще? я вывожу конец дня. Он мне показывает 17.01.2013 23:59:59. А ведь реально было время 2 часа дня. Вроде ж есть функция МоментВремени(). А ей нельзя воспользоваться?

VZ 17.01.2014 23:26

9-Путевый лист > Бери в качестве границы времени сам документ. Вот он и даст точное время :)

Write 17.01.2014 23:49

(9) Если ты хочешь получить остатки на момент текущего чека тогда нужно использовать
Запрос.УстановитьПараметр("КонецДняТек",Новый Граница(ОбъектЧекККМ.МоментВремени(),ВидГраницы.Включая)), но если у тебя не было движений по регистру после чека в течении дня то результат должен быть одинаковый и с предыдущим вариантом.

Путевый лист 18.01.2014 08:38

10-VZ мне же надо именно после документа, то есть остатки уже должны измениться. И мне не важно время, мне важна актуальность остатков

Путевый лист 18.01.2014 08:56

11-Write МоментВремени() не является свойством ОбъектЧекККМ. Но я уже по всякому пробовал. Не работает стабильно А хотелось бы понять, а то как обезьяна с очками

Фрэнки 18.01.2014 09:47

Границу по текущему документу установить можно и нужно. А вообще, не совсем понятно, почему у чеков текущее время съезжает в последнюю секунду дня - это же должно быть реальное оперативное время с клиентской машины?

Фрэнки 18.01.2014 09:52

ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
МоментВремени (PointInTime)
Синтаксис:

МоментВремени()
Возвращаемое значение:

Тип: МоментВремени.

Описание:

Получает момент времени документа.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

// (в модуле документа ПроведениеПоПартиям)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.Текст =
"ВЫБРАТЬ
| ПроведениеПоПартиям.Ссылка КАК РегламентныйДокумент
|ИЗ
| Документ.ПроведениеПоПартиям КАК ПроведениеПоПартиям
|
|ГДЕ
| ПроведениеПоПартиям.МоментВремени >= МоментВремени";
Выборка = Запрос.Выполнить().Выбрать();

Write 18.01.2014 10:01

(13) ОбъектЧекККМ - это документ? Параметр &КонецДняТек можно убрать на время, будет возвращать актуальные остатки, посмотреть изменяются или нет. Сделать отладку, пройтись по каждому параметру и посмотреть их значения. Можно набросать внешний отчет в СКД по виртуальной таблице ОстаткиИОбороты, с периодичностью Авто, выбрать поля Номенклатура, Регистратор, ПериодСекунда, КоличествоНачальныйОстаток, КоличествоОборот, КоличествоКонечныйОстаток, в настройках создать отчет с группировками номенклатура, детальные записи. Сформируешь будет видно по каждому чеку нач. остаток, оборот, кон. остаток.


Текущее время: 04:27. Часовой пояс GMT +3.