1С бот встает, не отвечает и копит сообщения при ошибочной команде
Здравствуйте!
Помогите оптимизировать рабочий код ниже. Бот получает команды в системе взаимодействия и на их основе заполняет справочники/документы. Проблема в том, что если пользователь ошибется и напишет кодовое слово неправильно/ напишет меньше или больше реквизитов чем в справочнике, то бот сразу встает и начинает банально копить сообщения. Приходится удалять код, использовать "Ответ.Текст = ТекстСообщения; Ответ.Записать();" чтобы бот выкинул все накопленные сообщения в систему взаимодействия. Я новичек в 1С и, к сожалению, лишь представляю как можно это исправить. Либо создать сброс накопленных сообщений боту, либо сделать более качественные условия в коде. В идеале нужно реализовать и то, и то. Пытался сделать и так и этак, но не получается. Надеюсь придете на помощь, заранее спасибо!!!
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)
Ответ = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
ТекстСообщения = Сообщение.Текст;
//РЕЖИМ РАБОТЫ БОТА И РАЗДЕЛИТЕЛИ ТЕКСТА СООБЩЕНИЯ ДЛЯ ПОТОКОВООЙ ЗАПИСИ
//БОТ - РАЗДЕЛИТЕЛЬ РЕЖИМА
//ЗАПИСЬ - РАЗДЕЛИТЕЛЬ ЗАПИСЕЙ, ВНОСИМЫХ В ОБЪЕКТ
//РЕКВИЗИТ - РАЗДЕЛИТЕЛЬ РЕКВИЗИТОВ ВНОСИМОЙ ЗАПИСИ
Режим1 = "НОМЕНКЛАТУРА";
Режим2 = "ЯЧЕЙКА";
Режим3 = "ПОЛКА";
Режим4 = "ПОСТУПЛЕНИЕ";
Режим5 = "СПИСАНИЕ";
//--------------СБРОС КОМАНД-------------------
//Ответ.Текст = ТекстСообщения;
//Ответ.Записать();
//---------------------------------------------
ВыборРежима = СтрРазделить(СтрЗаменить(ТекстСообщения, "НАЧАТЬ", Символы.ПС), Символы.ПС, Истина);
НоваяЗапись = СтрРазделить(СтрЗаменить(ВыборРежима[1], "ЗАПИСЬ", Символы.ПС), Символы.ПС, Истина);
Режим = СокрП(ВыборРежима[0]);
//ДОБАВЛЕНИЕ НОМЕНКЛАТУРЫ
Если Режим = Режим1 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Товары.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
НовыйЭлемент.ЕдиницаИзмерения = СокрЛП(ЗаписьРеквизита[1]);
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по номенклатуре успешно внесены";
Ответ.Записать();
КонецЕсли;
//ДОБАВЛЕНИЕ ЯЧЕЕК
Если Режим = Режим2 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Ячейки.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[1]);
НовыйЭлемент.МаксимальнаяНагрузка = ИтоговоеЧисло;
НовыйЭлемент.ДатаУстановки = ТекущаяДата();
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по ячейкам успешно внесены";
Ответ.Записать();
КонецЕсли;
//ДОБАВЛЕНИЕ СТЕЛЛАЖЕЙ
Если Режим = Режим3 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Стеллажи.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
НовыйЭлемент.ДатаУстановки = ТекущаяДата();
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[1]);
НовыйЭлемент.МаксимальнаяНагрузка = ИтоговоеЧисло;
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по стеллажам успешно внесены";
Ответ.Записать();
КонецЕсли;
//РЕГИСТРАЦИЯ ПОСТУПЛЕНИЯ
Если Режим = Режим4 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 5 Тогда
НовыйДокумент = Документы.Поступление.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
//СТЕЛЛАЖ
Выборка = Справочники.Стеллажи.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[0]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Стеллаж = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ЯЧЕЙКА
Выборка = Справочники.Ячейки.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[1]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Ячейка = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ПОСТАВЩИК
Выборка = Справочники.Поставщик.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[2]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Поставщик = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ТОВАР и ЕДИНИЦА ИЗМЕРЕНИЯ
Выборка = Справочники.Товары.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[3]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Товар = Выборка.Ссылка;
НовыйДокумент.ЕдиницаИзмерения = Выборка.Ссылка.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
//КОЛИЧЕСТВО
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[4]);
НовыйДокумент.Количество = ИтоговоеЧисло;
НовыйДокумент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Регистрация поступления успешна";
Ответ.Записать();
КонецЕсли;
//РЕГИСТРАЦИЯ СПИСАНИЯ
Если Режим = Режим5 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 4 Тогда
НовыйДокумент = Документы.Списание.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
//СТЕЛЛАЖ
Выборка = Справочники.Стеллажи.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[0]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Стеллаж = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ЯЧЕЙКА
Выборка = Справочники.Ячейки.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[1]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Ячейка = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ТОВАР и ЕДИНИЦА ИЗМЕРЕНИЯ
Выборка = Справочники.Товары.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[2]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Товар = Выборка.Ссылка;
НовыйДокумент.ЕдиницаИзмерения = Выборка.Ссылка.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
//КОЛИЧЕСТВО
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[3]);
НовыйДокумент.Количество = ИтоговоеЧисло;
НовыйДокумент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Регистрация списания успешна";
Ответ.Записать();
КонецЕсли;
//ПРОВЕРКА НА РЕЖИМ
Если Режим <> Режим1 и Режим <> Режим2 и Режим <> Режим3 и Режим <> Режим4 и Режим <> Режим5 Тогда
Ответ.Текст = "ТАКОГО РЕЖИМА НЕ СУЩЕСТВУЕТ!";
Ответ.Записать();
КонецЕсли;
КонецПроцедуры
Помогите оптимизировать рабочий код ниже. Бот получает команды в системе взаимодействия и на их основе заполняет справочники/документы. Проблема в том, что если пользователь ошибется и напишет кодовое слово неправильно/ напишет меньше или больше реквизитов чем в справочнике, то бот сразу встает и начинает банально копить сообщения. Приходится удалять код, использовать "Ответ.Текст = ТекстСообщения; Ответ.Записать();" чтобы бот выкинул все накопленные сообщения в систему взаимодействия. Я новичек в 1С и, к сожалению, лишь представляю как можно это исправить. Либо создать сброс накопленных сообщений боту, либо сделать более качественные условия в коде. В идеале нужно реализовать и то, и то. Пытался сделать и так и этак, но не получается. Надеюсь придете на помощь, заранее спасибо!!!
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)
Ответ = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
ТекстСообщения = Сообщение.Текст;
//РЕЖИМ РАБОТЫ БОТА И РАЗДЕЛИТЕЛИ ТЕКСТА СООБЩЕНИЯ ДЛЯ ПОТОКОВООЙ ЗАПИСИ
//БОТ - РАЗДЕЛИТЕЛЬ РЕЖИМА
//ЗАПИСЬ - РАЗДЕЛИТЕЛЬ ЗАПИСЕЙ, ВНОСИМЫХ В ОБЪЕКТ
//РЕКВИЗИТ - РАЗДЕЛИТЕЛЬ РЕКВИЗИТОВ ВНОСИМОЙ ЗАПИСИ
Режим1 = "НОМЕНКЛАТУРА";
Режим2 = "ЯЧЕЙКА";
Режим3 = "ПОЛКА";
Режим4 = "ПОСТУПЛЕНИЕ";
Режим5 = "СПИСАНИЕ";
//--------------СБРОС КОМАНД-------------------
//Ответ.Текст = ТекстСообщения;
//Ответ.Записать();
//---------------------------------------------
ВыборРежима = СтрРазделить(СтрЗаменить(ТекстСообщения, "НАЧАТЬ", Символы.ПС), Символы.ПС, Истина);
НоваяЗапись = СтрРазделить(СтрЗаменить(ВыборРежима[1], "ЗАПИСЬ", Символы.ПС), Символы.ПС, Истина);
Режим = СокрП(ВыборРежима[0]);
//ДОБАВЛЕНИЕ НОМЕНКЛАТУРЫ
Если Режим = Режим1 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Товары.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
НовыйЭлемент.ЕдиницаИзмерения = СокрЛП(ЗаписьРеквизита[1]);
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по номенклатуре успешно внесены";
Ответ.Записать();
КонецЕсли;
//ДОБАВЛЕНИЕ ЯЧЕЕК
Если Режим = Режим2 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Ячейки.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[1]);
НовыйЭлемент.МаксимальнаяНагрузка = ИтоговоеЧисло;
НовыйЭлемент.ДатаУстановки = ТекущаяДата();
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по ячейкам успешно внесены";
Ответ.Записать();
КонецЕсли;
//ДОБАВЛЕНИЕ СТЕЛЛАЖЕЙ
Если Режим = Режим3 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 2 Тогда
НовыйЭлемент = Справочники.Стеллажи.СоздатьЭлемент();
НовыйЭлемент.Наименование = СокрЛП(ЗаписьРеквизита[0]);
НовыйЭлемент.ДатаУстановки = ТекущаяДата();
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[1]);
НовыйЭлемент.МаксимальнаяНагрузка = ИтоговоеЧисло;
НовыйЭлемент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Данные по стеллажам успешно внесены";
Ответ.Записать();
КонецЕсли;
//РЕГИСТРАЦИЯ ПОСТУПЛЕНИЯ
Если Режим = Режим4 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 5 Тогда
НовыйДокумент = Документы.Поступление.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
//СТЕЛЛАЖ
Выборка = Справочники.Стеллажи.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[0]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Стеллаж = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ЯЧЕЙКА
Выборка = Справочники.Ячейки.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[1]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Ячейка = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ПОСТАВЩИК
Выборка = Справочники.Поставщик.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[2]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Поставщик = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ТОВАР и ЕДИНИЦА ИЗМЕРЕНИЯ
Выборка = Справочники.Товары.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[3]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Товар = Выборка.Ссылка;
НовыйДокумент.ЕдиницаИзмерения = Выборка.Ссылка.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
//КОЛИЧЕСТВО
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[4]);
НовыйДокумент.Количество = ИтоговоеЧисло;
НовыйДокумент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Регистрация поступления успешна";
Ответ.Записать();
КонецЕсли;
//РЕГИСТРАЦИЯ СПИСАНИЯ
Если Режим = Режим5 Тогда
Счетчик = 0;
Пока Счетчик < НоваяЗапись.Количество() Цикл
Буфер = НоваяЗапись[Счетчик];
ЗаписьРеквизита = СтрРазделить(СтрЗаменить(Буфер, "РЕКВИЗИТ", Символы.ПС), Символы.ПС, Истина);
Если ЗаписьРеквизита.Количество() = 4 Тогда
НовыйДокумент = Документы.Списание.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
//СТЕЛЛАЖ
Выборка = Справочники.Стеллажи.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[0]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Стеллаж = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ЯЧЕЙКА
Выборка = Справочники.Ячейки.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[1]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Ячейка = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
//ТОВАР и ЕДИНИЦА ИЗМЕРЕНИЯ
Выборка = Справочники.Товары.Выбрать();
Пока Выборка.Следующий() Цикл
Если СокрЛП(ЗаписьРеквизита[2]) = СокрЛП(Выборка.Наименование) Тогда
НовыйДокумент.Товар = Выборка.Ссылка;
НовыйДокумент.ЕдиницаИзмерения = Выборка.Ссылка.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;
//КОЛИЧЕСТВО
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло(ЗаписьРеквизита[3]);
НовыйДокумент.Количество = ИтоговоеЧисло;
НовыйДокумент.Записать();
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Ответ.Текст = "Регистрация списания успешна";
Ответ.Записать();
КонецЕсли;
//ПРОВЕРКА НА РЕЖИМ
Если Режим <> Режим1 и Режим <> Режим2 и Режим <> Режим3 и Режим <> Режим4 и Режим <> Режим5 Тогда
Ответ.Текст = "ТАКОГО РЕЖИМА НЕ СУЩЕСТВУЕТ!";
Ответ.Записать();
КонецЕсли;
КонецПроцедуры
По теме из базы знаний
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот