7.7 1C 7.7 при обработке запроса не считается количество и сумма товара, имеющего имя в одно сл

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Sergio2002, 22 мар 2013.

  1. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Добрый день, коллеги!!!
    В глобальном модуле сделал процедуру:
    - Отправляю автоматом по почте отчет, в котором по запросу формируется информация построчно
    об артикуле, количеству, цене, сумме, наименованию товара (сгруппированного по наименованию).
    В итоговой строчке пишу какое общее количество товара продано,
    а строчкой ниже - на какую общую сумму этот товар.

    Совершенно случайно заметил, что в итоговый счет не попал товар, ИМЕЮЩИЙ НАИМЕНОВАНИЕ
    В ОДНО СЛОВО, КАК ТОЛЬКО ЕМУ ДОБАВЛЯЮ ПРОБЕЛ И ЗНАК ЛЮБОЙ (Т.Е. 2-ух и более-словное наименование),
    то все нормально считается.
    В строчках отчета в письме этот товар показывается нормально и артикул, и количество, и цена, и сумма, и наименование.

    Резюме: не хочет считаться по количеству и сумме товар, который имеет наименование в одно слово.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Приведите пример кода. От наименования ничего не должно зависеть. Вы же работаете с объектами (элементами справочника).
  3. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Вот по этому запросу я получаю на почту суммы и количество, где не цифры почему-то не видятся если товар
    имеет наименование в одно слово (пробелы перед или после, длинна наименования тоже не влияют).
    Только если когда ставлю 2-ух словестное наименование, тогда все нормально считает.
    Код:
    [code]Запрос1 = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ТекущийДокумент = Документ.ПоступлениеТоваров.ТекущийДокумент;
    |МестоХранения = Документ.ПоступлениеТоваров.МестоХранения;
    |Товар = Документ.ПоступлениеТоваров.Товар;
    // |РаздУ = Документ.ПоступлениеТоваров.Товар.РазделительУчета;
    |Количество = Документ.ПоступлениеТоваров.Количество;
    |Цена = Документ.ПоступлениеТоваров.Цена;
    |Функция ЦенаСумма = Сумма(Цена);
    |Функция КоличествоСумма = Сумма(Количество);
    |Группировка Товар;
    |Группировка ТекущийДокумент;
    |Условие(МестоХранения = Константа.СкладДляПочты);
    |"//}}ЗАПРОСМ
    ;      
    
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    ПочтаДок.ДобавитьСтроку("***********************************************************************************************"); 
    ПочтаДок.ДобавитьСтроку(" ДАННЫЕ ПО ВОЗВРАЩЕННЫМ БЛЮДАМ ");
    ПочтаДок.ДобавитьСтроку("-----------------------------------------------------------------------------------------------");
    ПочтаДок.ДобавитьСтроку(" АртикулП   "+"   КоличествоП   "+"  ЦенаП  "+"          СуммаП  "+"   ТоварП    ");
    
    СчЗаказовПост=0;
    СчЦеныПост=0;
    Пока Запрос1.Группировка(1) = 1 Цикл
    // Заполнение полей Товар    
    Если Запрос1.Товар.ЭтоГруппа() = 0 Тогда   
    // Заказик="АртикулП "+Запрос1.Товар.Код+" КоличествоП "+Запрос1.КоличествоСумма+" ЦенаП "+Запрос1.Товар.Цена+" СуммаП "+Запрос1.ЦенаСумма+" ТоварП "+Запрос1.Товар.Наименование+" ";
    // ТекстПисьма=ТекстПисьма+Заказик;
    ПочЗаказик3=Запрос1.Товар.Код+"..."+(Формат(Запрос1.КоличествоСумма,"Ч7.2,."))+" шт."+(Формат(Запрос1.Товар.Цена,"Ч010.2,."))+" руб..."+(Формат(Запрос1.ЦенаСумма,"Ч010.2,."))+" руб..."+Запрос1.Товар.Наименование+" ";
    ПочтаДок.ДобавитьСтроку(ПочЗаказик3);
    Если   СтрЧислоВхождений(Запрос1.Товар.Наименование," ") <> 0 Тогда
    СчЗаказовПост=СчЗаказовПост+Запрос1.КоличествоСумма;
    КонецЕсли;
    Если   СтрЧислоВхождений(Запрос1.Товар.Наименование," ") <> 0 Тогда
    СчЦеныПост=СчЦеныПост+Запрос1.ЦенаСумма;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    ПочтаДок.ДобавитьСтроку("------------------------------------------------------------------------------------------------");   
    ПочЗаказик4="Всего заказано БЛЮД:....."+(Формат(СчЗаказовПост,"Ч8.2,."))+" шт.";
    ПочтаДок.ДобавитьСтроку(ПочЗаказик4);
    ПочЗаказик5="БЛЮД на ОБЩУЮ СУММУ:....."+(Формат(СчЦеныПост,"Ч010.2,."))+" руб.";
    ПочтаДок.ДобавитьСтроку(ПочЗаказик5);
    ПочтаДок.ДобавитьСтроку("************************************************************************************************");
    ИтоговаяСумма=СчЦены - СчЦеныПост; 
    ПочИтог = "РАЗНИЦА СУММ МЕЖДУ ПРОДАННЫМ И ВОЗВРАЩЕННЫМ :...."+(Формат(ИтоговаяСумма,"Ч010.2,."))+" руб.";
    ПочтаДок.ДобавитьСтроку(ПочИтог);
  4. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    В предыдущем письме описал какую-то галиматью.
    При подсчете общего количества товара и сумм в счет не попадают цифры, принадлежащие товару с НАИМЕНОВАНИЕМ в одно слово.
    Самое интересное, что в перечне построчном эти товары есть, а в строчке общих сумм они не попадают, как только меняю НАИМЕНОВАНИЕ
    на 2-ух словестное, в этом случае все отлично.
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Зачем стоит проверка на наличие пробела в наименовании???
    Поэтому и не работает.
    Надо так:
    Код:
      
    ....    
    ПочЗаказик3=Запрос1.Товар.Код+"..."+(Формат(Запрос1.КоличествоСумма,"Ч7.2,."))+" шт."+(Формат(Запрос1.Товар.Цена,"Ч010.2,."))+" руб..."+(Формат(Запрос1.ЦенаСумма,"Ч010.2,."))+" руб..."+Запрос1.Товар.Наименование+" ";
    ПочтаДок.ДобавитьСтроку(ПочЗаказик3);
    //убрали условие
    СчЗаказовПост=СчЗаказовПост+Запрос1.КоличествоСумма;
    //убрали условие
    СчЦеныПост=СчЦеныПост+Запрос1.ЦенаСумма;
    ..
    
  6. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Да действительно, не доглядел. У меня в другом месте идет запрос на выбор конкретных блюд с одинаковым некоторым содержанием в начале имени, поэтому
    я тупо скопировал и не задумался над этим, исключив просто наименование и оставил пробел. Все ок.
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Так фильтр нужно в запросе ставить, а не в выборке)))
  8. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    вот что еще выяснилось после того как я включил возможность формирования отчета и отправки этого отчета по почте.
    На сервере создал обработку, в которой формируется отчет и отправляет его по почте. Все нормально работает.
    Как только по РДП к серверу подключается другой пользователь и пытается сделать тоже самое, выскакивает предупреждение

    ПочтаДок.Записать(ПочтаОтвета);
    {Обработка.ОтчетыПочтой.Форма.Модуль(198)}: Неверное имя файла! (здесь - в процедуре я пометил эту строку)
    Вот эта обработка (отчет вырезал):
    <code>

    Процедура ОтчетПоПочте()

    Флаг=0;
    Попытка
    Флаг=ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll");
    Исключение
    Возврат;
    КонецПопытки;
    Если Флаг=0 Тогда
    Сообщить("Не удалось загрузить ROM-Mail.dll");
    Возврат;
    КонецЕсли;
    ВК=СоздатьОбъект("AddIn.AddInMail");
    ВК.СерверОтправки=СокрЛП(Константа.СерверОтправки);
    ВК.ПортОтправки=СокрЛП(Константа.ПортОтправки);
    ВК.Логин=СокрЛП(Константа.Логин);
    ВК.Пароль=СокрЛП(Константа.Пароль);
    ВК.АутентификацияПриОтправке=1;
    Если ВК.Подключиться("Отправка")=0 Тогда
    Предупреждение("Не удалось подключиться к серверу!",5);
    Возврат;
    КонецЕсли;
    ВК.АдресОтправителя=СокрЛП(Константа.АдресОтправителя);
    ВК.ИмяОтправителя=СокрЛП(Константа.ИмяОтправителя);

    ВК.Тема="Заказы "+СокрЛП(Константа.НазваниеОрганизации)+" на "+СокрЛП(Строка(ВыбКонПериода+1));
    ВК.ДобавитьАдрес............... (добавлены адреса получателя)
    .......(здесь отчет)
    ......

    ТекстПисьма="";

    ПочтаОтвета=СокрЛП(Константа.КаталогОбмена) +"\mailotchet.txt";
    ПочтаДок = СоздатьОбъект("Текст");

    ............
    ............

    (вот эта строка 198)ПочтаДок.Записать(ПочтаОтвета);
    ТекстПисьма="Отчет о заказе БЛЮД ";
    ВК.Тело=ТекстПисьма;

    ВК.Вложения=ВК.Вложения+ПочтаОтвета+";";

    ВК.Кодировка="windows-1251";
    ВК.ТипПисьма=2;
    Если ВК.Отправить()=1 Тогда
    //// Предупреждение("Сообщение отправлено!",5);
    Иначе
    //// Предупреждение("Не удалось отправить сообщение!",5);
    КонецЕсли;
    ВК.Отключиться();
    КонецПроцедуры
    </code>
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Ну дЫк файл то открыт другим пользователем.... Следовательно заблокирован с точки зрения ОСи
    Выхода три
    1) Для каждого пользователя свой файл
    2) Создать флаг (константу или файл). Проверять его наличие и говорить что в данный момент отчет сформировать невозможно
    3) Флагом является сам файл. Проверять его наличие перед началом записи. Если файл есть - значит его кто-то формирует. После отправки только не забудьте удалить
  10. TopicStarter Overlay
    Sergio2002
    Offline

    Sergio2002 Опытный в 1С

    Регистрация:
    5 мар 2013
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    я сам разобрался, - открыв общий сетевой доступ к папке с этим файлом.

Поделиться этой страницей