Имя: Пароль:
1C
1С v8
Помогите разобраться с проведением документа
0 kan81
 
21.02.13
11:22
Доброго времени суток.

Суть задачи: розничная торговля, в момент проведения документа "Отчет о розничных продажах" в последний день недели высылать электронное сообщение администратору магазина о сумме продаж за всю неделю.

Делал 3 разными способами, но не один не работает как надо.

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

 Если КонецДня(ЭтотОбъект.Дата) = КонецДня(КонецНедели(ЭтотОбъект.Дата)) Тогда

   Запрос_Продажи.УстановитьПараметр("НД" , НачалоНедели(ЭтотОбъект.Дата));
   Запрос_Продажи.УстановитьПараметр("КД" , КонецНедели(ЭтотОбъект.Дата));

   ...
               
 КонецЕсли;
       
КонецЕсли;

Если делать так, то всегда "выпадает" из отчета последний день - данные по продажам не попадают в него.

2. Через подписку на событие, событие "При записи"

Если НЕ Отказ Тогда

 Если Источник.Проведен Тогда

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

   Если КонецДня(Источник.Дата) = КонецДня(КонецНедели(Источник.Дата)) Тогда
               
     Запрос_Продажи.УстановитьПараметр("НД" , НачалоНедели(Источник.Дата));
     Запрос_Продажи.УстановитьПараметр("КД" , КонецНедели(Источник.Дата));
               
               
   КонецЕсли;

КонецЕсли;

Это самый "рабочий" вариант. При первом проведении документа также "выпадает" отчет о розничных продажах за последний день, при повторном проведении цифра становиться корректной. Но получается приходит 2 уведомления: первое не правильное, второе корректное.

3. Через подписку на событие, событие "ОбработкаПроведения"
Все тоже самое что и при 1 варианте - и результат тот же.



Помимо этих цифр передается масса других данных и всегда документ за последний день не попадает в отчет, а в случае 2 вариант попадает, но только после повторного проведения документа в базе.

Возможно ли как-то сделать так, чтобы корректно отсылались цифры с первого раза? Регламентные задания не подходят, т.к. отчет нужен именно в последний день (воскресенье), а не в понедельник. А продавец закрывает смену и сразу выключает комп.
1 Wobland
 
21.02.13
11:26
регзадания да, не подходят. им не объяснить, что нужно работать в воскресенье. //всё не читал
2 Шапокляк
 
21.02.13
11:29
(0) А почему запрос к регистру, а не к таблице оборотов? Задайте в параметрах таблицы в запросе границу и будет счастье в 1 варианте. Кстати, а при перепроведении за год что должно отправиться?
3 kan81
 
21.02.13
11:48
(2)

Изменил запрос:

   Запрос_Продажи = Новый Запрос;
   Запрос_Продажи.Текст = "
   |ВЫБРАТЬ
   |    СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
   |    СУММА(ПродажиОбороты.СтоимостьОборот) КАК Стоимость
   |ИЗ
   |    РегистрНакопления.Продажи.Обороты(&НД, &КД, , ) КАК ПродажиОбороты
   |";
           
   Массив = Новый Массив(2);
   Массив[0] = КонецНедели(Источник.Дата);
   Массив[1] = ВидГраницы.Включая;
               
   КД = Новый(Тип("Граница") , Массив);
               
   Запрос_Продажи.УстановитьПараметр("НД" , НачалоНедели(Источник.Дата));
   Запрос_Продажи.УстановитьПараметр("КД" , КД);

но результат тот же самый. Или я не совсем правильно понял?
4 Hans
 
21.02.13
11:51
(0) во втором случае у тебя движения скорее всего еще не записаны. Перед формированием отчета в обработке проведения сделай Движения.записать().
5 kan81
 
21.02.13
12:34
(4) Все заработало. Спасибо.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.