8.х Вывод сообщения пользователю

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Svetlanka, 6 авг 2013.

  1. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Есть документ "Заказ покупателя", в нем есть поля Планируемая дата изготовления и автор. И есть документ ОтчетПроизводства, в нем есть поле документ основания-документ Заказ покупателя. Когда Планируемая дата изготовления = текущей дате, Автору документа Заказ покупателя должно вывестись сообщение о том выполнен заказ или нет. Как это можно осуществить?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    1. Какая конфигурация в УПП например, нет таких полей в заказе покупателя, может Вы путатете с заказом на производство
    2. например реализовывается регламентированое задание, которое получает запросом на текущую дату Заказы на производство, которые должны быть исполнены и проверяет по регистру накопления Заказы на производсвто, остаок в по этому заказу нулевой или нет. Если не нулевой тогда рассылка исполнителям.
  3. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    А можно по подробней пожалуйста, на счет 2 пункта!
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Что именно подробней
    Создаете общий модуль или уже в каком то общем модуле пишите процедуру, которорая как сказал по регистру будет выбирать заказы у которых на сегодня дата исполнения и и есть остатки
    Затем из этих документов надо взять исполнителя (не знаю что у вас за конфа - в УПп это сотркдник), через сотрудника можно взять физ лицо и его е маил. т.е одним запросом можно получить список неисполненых заказов и мыло на которые надо отправить. Делаете рассылку через Объект Почта.
    Создаете регламентированное задание и подвязываете ему эту процедуру. устанавливаете рассписание данному заданию.
  5. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Нужно не на е маил скидывать, а что бы в 1с окно выходило с собщением
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну такая задача не совсем корректна, но как вариант, тогда в процедуре при начале работы системы пишите процедуру такую же что выше описал и Вызываете ее через обработчик ожидания, только какой Вы там ему интервал поставите
  7. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Процедура выполняется при начале работы системы. должны выводится заказы покупателей которые закрываются сегодня. Выходит ошибка:
    {МодульОбычногоПриложения(564)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
    Если Выборка.НеПроизведено > 0 тогда
    Хотя ЗаказПокупателяТовары.Количество и ОтчетПроизводстваЗаСменуПродукция.Количество типа число.
    Подскажите пожалуйста в чем может быть проблема?

    Процедура ВыводСообщения()

    Запрос = Новый Запрос;

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

    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("Автор",глЗначениеПеременной("глТекущийПользователь"));

    //РезультатЗапроса = Запрос.Выполнить();
    Выборка = Запрос.Выполнить().Выбрать();


    Если Выборка.ЗаказПокупателя = ложь
    Тогда
    Сообщить("Сегодня нет закрытие заказов");
    Иначе
    Если Выборка.НеПроизведено > 0 тогда
    Сообщить(Выборка.ЗаказПокупателя + Выборка.Номенклатура + Выборка.НеПроизведено + "не произведено");
    Иначе
    Сообщить( Выборка.Произведено + "выполнен");
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    1. Вы нигде не сдвигаете курсор выборки Выборка .Следующий()
    2. что это за условие Если Выборка.ЗаказПокупателя = ложь у Вас же Заказ покупателя - это ссылка

    Вам надо что то типа

    Пока Выборка.Следующий() Цикл

    Если Выборка.НеПроизведено > 0 тогда
    Сообщить(Выборка.ЗаказПокупателя + Выборка.Номенклатура + Выборка.НеПроизведено + "не произведено");
    Иначе
    Сообщить( Выборка.Произведено + "выполнен");
    КонецЕсли;КонецЦикла;
  9. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Опять выдает ошибку:
    {МодульОбычногоПриложения(561)}: Преобразование значения к типу Число не может быть выполнено
    Сообщить(Выборка.ЗаказПокупателя + Выборка.Номенклатура + Выборка.НеПроизведено + "не произведено");
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Попробуйте так

    Сообщить(""+Строка(Выборка.ЗаказПокупателя) +строка( Выборка.Номенклатура) +Строка( Выборка.НеПроизведено) + "не произведено");
  11. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Спасибо, это все получилось. Но теперь возникла новая задача. Если сможете помогите пожалуйста.
    Нужно что бы выводилось сообщение нескольким пользователям, которые оформили заказы покупателей с одинаковой номенклатурой и датой изготовления. И их заказы покупателей поместились в один заказ на производство.
    Как правильно программно оформить следующее условие:
    Если в заказе на производство больше одного заказа покупателя то выводится сообщение:
    Заказ покупателя 1 , Заказ покупателя 2 , Заказ покупателя 3 и тд Номенклатура …, общее количество произведенного, общее количество не произведенного(), Где:
    Общее количество произведенного – это сумма всех заказов покупателей(1+2+3+…);
    А Общее количество не произведенного – это Общее количество произведенного - Количество(из отчета производства за смену)
    как то так...
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    ну сделайте апрос или подзапрос
    ТЧ Заказ на производство и ТЧ Заказ покупателя, соедините их через закза в ТЧ заказ на производство и Ссылку ТЧ заказы покупателей и по номенклатуре
  13. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЕСТЬNULL(ОтчетПроизводстваЗаСменуПродукция.Количество, 0) КАК Произведено,
    | ЗаказПокупателяТовары.ДатаИзготовления,
    | ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0) - ЕСТЬNULL(ОтчетПроизводстваЗаСменуПродукция.Количество, 0) КАК НеПроизведено,
    | ЗаявкаНаПроизводство.Заказ.Автор КАК Автор,
    | ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
    | ЗаказПокупателяТовары.Ссылка КАК ЗаказПокупателя
    |ИЗ
    | РегистрНакопления.ЗаявкаНаПроизводство КАК ЗаявкаНаПроизводство
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.КорректировкаЗаказаНаПроизводство.Продукция КАК КорректировкаЗаказаНаПроизводствоПродукция
    | ПО ЗаявкаНаПроизводство.Регистратор = КорректировкаЗаказаНаПроизводствоПродукция.Ссылка
    | И ЗаявкаНаПроизводство.Номенклатура = КорректировкаЗаказаНаПроизводствоПродукция.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
    | ПО ЗаявкаНаПроизводство.Номенклатура = ЗаказНаПроизводствоПродукция.Номенклатура
    | И ЗаявкаНаПроизводство.Заказ = ЗаказНаПроизводствоПродукция.Заказ
    | И ЗаявкаНаПроизводство.Регистратор = ЗаказНаПроизводствоПродукция.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
    | ПО ЗаказПокупателяТовары.Номенклатура = ОтчетПроизводстваЗаСменуПродукция.Номенклатура
    | ПО ЗаявкаНаПроизводство.Заказ = ЗаказПокупателяТовары.Ссылка
    | И ЗаявкаНаПроизводство.Номенклатура = ЗаказПокупателяТовары.Номенклатура
    |ГДЕ
    | ЗаказПокупателяТовары.ДатаИзготовления МЕЖДУ &ДатаНачала И &ДатаОкончания
    | И ЗаявкаНаПроизводство.Заказ.Автор = &Автор
    - вот это мой запрос
    а это продолжение уже существующего

    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("Автор",глЗначениеПеременной("глТекущийПользователь"));

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
    Если Выборка.НеПроизведено > 0 тогда
    Предупреждение(" "+Строка(Выборка.ЗаказПокупателя)+" " +строка( Выборка.Номенклатура)+" " +Строка( Выборка.НеПроизведено)+" " + "не произведено");
    Иначе
    Предупреждение( " "+Строка(Выборка.ЗаказПокупателя)+" "+строка( Выборка.Номенклатура)+" " + "произведено");
    КонецЕсли;
    КонецЦикла;

    все правильно выводит если 1 заказ покупателя в заказе на производство, и если 1 отчет производства за смену. Но если 2 и более закаказа покупателя надо другое условие для вывода сообщения прописать. Что бы все заказы покупателей входящие в заказ на производство с одинаковой номенклатурой вывести в одном сообщение перечислением. и если 2 и более отчета производства за смену входящие в 1 заказ на производство, тоже объеденить суммировать колличество и высести количество в сообщение.
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Попробуйте добавить в поля данные заказы, скгруппировть по ним и уже исходя из этого делать обход выборки по группировкам
  15. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Я новичек, поэтому что то недопонимаю. И элементарных случаях туплю :sad: . Но как я понила примерно так изменить надо?!
    |ИТОГИ ПО
    | ЗаказПокупателя";

    ВыборкаЗаказПокупателя=Запрос.Выполнить(ОбходРезультатаЗапроса.ПоГруппировкам,"ЗаказПокупателя");
    Пока ВыборкаЗаказПокупателя.Следующий() Цикл
    //...
    КонецЦикла;
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну что похожее, я просто у меня в УПП нет РегистрНакопления.ЗаявкаНаПроизводство и по этому у себя в конфе я не могу это проделать
  17. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    а вместо //... надо добавить уже имеющееся условие Если Выборка.НеПроизведено > 0 тогда
    Предупреждение(" "+Строка(Выборка.ЗаказПокупателя)+" " +строка( Выборка.Номенклатура)+" " +Строка( Выборка.НеПроизведено)+" " + "не произведено");
    Иначе
    Предупреждение( " "+Строка(Выборка.ЗаказПокупателя)+" "+строка( Выборка.Номенклатура)+" " + "произведено");
    КонецЕсли;
    или нужно другое создать?
  18. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    посмотрите в примерах в синтаксис помощнике или еще где, когда выборка идет по результатм групировки, то там дожно быть две выборки

    Т.е у вас есть
    Группировка 1
    ДАННЫЕ1
    данные 2
    Группировка 2
    данные 3
    данные у

    когда вы делаете первую выборку то у вас в ней только Группировка 1 и Группировка 2
    Как только Вы попали в группировку - делайте еще одну выборку что бы был обход по детальным записям

    Как это выгляди - легко можно посмотреть - сделав конструктором отчета - простой отчетик с 2 -3 группировками, а потом зайти и посмотреть код
  19. TopicStarter Overlay
    Svetlanka
    Offline

    Svetlanka

    Регистрация:
    16 июл 2013
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Можете подсказать, как все заказы покупателей записать в одну переменную. что бы когда я выводила сообщение вывелись все заказы по условию, и общая сумма на этот заказ. Это надо как то циклически делать... но я не могу понять как(
  20. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну в какю то текстовую переменную пишите

    типа

    Заказы="";
    Цикл по Заказам

    Заказы=Заказы+Выборка.Ссылка+" ";

    КонецЦикла

    Сообщить ("Все заказы: "+Заказы);

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