Пример получения остатков по складу по запросу по почте из программы 1С 7.7.

21.09.17

Разработка - Запросы

Пример получения остатков по складу по запросу по почте из программы 1С 7.7. Для получения остатков необходимо пользователю с любого почтовика (с любого "мыла") отправить текст сообщения GiveMyStockBalance_ForAnalize на почтовый адрес определенный в Константа.СерверПолучения. Программа выдаст остатки (можно переписать функцию для выдачи любых данных) в формате xls на почту указанную в константе Константа.СерверОтправки. Программа может быть полезна в тех организациях где трудно или невозможно осуществить прямой доступ к 1С сотрудников для просмотра необходимых данных. Также можно организовать некий почтамт - запрос для клиентов - при посылке определенного логина клиентом на его почту будет автоматически выслана информация, например, акт сверки с клиентов, или процент выполнения его заказа и т.д.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример процедуры
.ert 33,00Kb ver:1
5
5 Скачать (3 SM) Купить за 2 450 руб.
//******************************************************************************    
Функция СоздатьSMTP_ROBOT (ДляПриема = 0)
    Попытка
        Если (ДляПриема = 0) Тогда
            SMTP_ROBOT = СоздатьОбъект("AddIn.SMTP");
        Иначе
            SMTP_ROBOT = СоздатьОбъект("AddIn.Pop3");
        КонецЕсли;            
        Возврат (SMTP_ROBOT);
    Исключение
        Сообщить (ОписаниеОшибки ());
        Возврат ("err");
    КонецПопытки;
    Возврат ("");
КонецФункции
//
//******************************************************************************    
Функция глВернутьПутьКСохраняемомуФайлу (КаталогВложений, НомерДок) Экспорт
    КаталогВложений    = КаталогИБ () + "MessageSMTP";
    GUID            = Прав (ТекущееВремя (), 2);
    Вложения        = КаталогВложений + "\SendMessage_" + СОКРЛП (НомерДок) + "_" + СОКРЛП (GUID) + ".xls";
    Возврат (Вложения);    
КонецФункции
//
//******************************************************************************
Функция глОтправитьПоПочтеОстаткиНаСкладе (ВхДатаОстатков, ФильтрСклад) Экспорт
    Перем КаталогВложений;
    
    ДатаОстатков    = мин (ВхДатаОстатков, ПОлучитьДатуТА ());
    
    ЛогинОбмена        = СОКРЛП(Константа.ЛогинОбменаПолучательАвтоОстаткиСклад);
    
    Если (ПустаяСтрока (ЛогинОбмена) = 1) Тогда
        Возврат (0);
    КонецЕсли;
    
    Тема            = "Остатки на " + Строка (ДатаОстатков) + " по складу " + СОКРЛП (ФильтрСклад);
    
    Тело            = Тема;
    
    Запрос             = СоздатьОбъект("Запрос");
    
    ТекстЗапроса     =
    "//{{ЗАПРОС(ЗапросПоОстаткамДляВнешенгоЗапроса)
    
    |Период с ДатаОстатков по ДатаОстатков;
    
    |МПЗ             = Регистр.МестаХранения.МПЗ;
    |МестоХранения     = Регистр.МестаХранения.МестоХранения;
    
    |Количество     = Регистр.МестаХранения.Количество;
    
    |Функция КонОст = КонОст(Количество);
    
    |Группировка МПЗ без групп;
    
    |Условие(МестоХранения = ФильтрСклад);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат (0);
    КонецЕсли;
    
    Табл                                            = СоздатьОбъект ("Таблица");
    Табл.ИсходнаяТаблица ("ОстаткиТМЦ");
    Табл.Опции (0, 0, 4, 0);
    Табл.ТолькоПросмотр (1);
    Табл.ВывестиСекцию  ("Шапка");
    
    Пока Запрос.Группировка(1) = 1 Цикл
        Табл.ВывестиСекцию  ("Строка");
    КонецЦикла;
    Табл.ВывестиСекцию  ("Подвал");
    
    Вложения                                        = глВернутьПутьКСохраняемомуФайлу(КаталогВложений, "ОстаткиТМЦПоЗапросу");
    
    Табл.Записать (Вложения, "xls");
    
    Ответ                                            = 0;
    
    Если (ФС.СуществуетФайл (Вложения) = 1) Тогда
        Попытка
            //
            SMTP_ROBOT                                = СоздатьSMTP_ROBOT (0);
            Если         (SMTP_ROBOT = "") Тогда
                Возврат (0);
            ИначеЕсли     (SMTP_ROBOT = "err") Тогда
                Возврат (0);
            КонецЕсли;                
            //
            SMTP_ROBOT.РабочийКаталог                = СокрЛП(КаталогВложений);
            SMTP_ROBOT.УстановитьКодировкуИСпособКодирования(14, 1);
            SMTP_ROBOT.MakeContentDescriptionTag    = 0;
            SMTP_ROBOT.ПочтоваяПрограмма             = "1С 7.7.";
            SMTP_ROBOT.ИспользоватьПрокси            = 0;
            SMTP_ROBOT.ИспользоватьSSL                = Константа.ИспользоватьSSL;
            SMTP_ROBOT.ИспользоватьTSL                = Константа.ИспользоватьTSL;
            SMTP_ROBOT.ВестиЛогФайл                 = 1;
            SMTP_ROBOT.ИмяЛогФайла                    = КаталогИБ () + "LogDialMail.txt";
            //
            SMTP_ROBOT.СоздатьПисьмо (СокрЛП(Константа.ЛогинОтправки),
                                     СокрЛП(ЛогинОбмена),
                                     "",
                                     СОКРЛП(Тема),
                                     "1С 7.7.",
                                     СОКРЛП(Тело),
                                     Вложения);
            //
            Если (SMTP_ROBOT.Подключиться(СокрЛП(Константа.СерверОтправки),
                                          Константа.ПортОтправки,
                                          СокрЛП(Константа.ЛогинОтправки),
                                          СокрЛП(Константа.ПарольОтправки),
                                          3) = 0) Тогда
                Сообщить ("Не удалось подключиться к почтовому серверу");
                Ответ    = 0;
                SMTP_ROBOT.ОчиститьРабочийКаталог();
                Перейти ~Выход;
            КонецЕсли;
            //
            НомерПисьма                                = 1;
            Пока (SMTP_ROBOT.КоличествоПисемВРабочемКаталоге > 0) цикл
                Если (SMTP_ROBOT.ОтправитьПисьмо(1,1)                     SMTP_ROBOT.УдалитьПисьмоИзРабочегоКаталога();                
                    SMTP_ROBOT.ОчиститьРабочийКаталог();
                    Возврат (0);
                КонецЕсли;
                НомерПисьма    = НомерПисьма + 1;
            КонецЦикла;
            //
            SMTP_ROBOT.Отключиться();
            //
            SMTP_ROBOT.ОчиститьРабочийКаталог();        
            //
            Ответ    = 1;
            //
        Исключение
            Ответ    = 0;
        КонецПопытки;
    ~Выход:
        Если (ФС.СуществуетФайл (Вложения) = 1) Тогда
            ФС.УдалитьФайл (Вложения);
        КонецЕсли;        
    КонецЕсли;
    
    Возврат (Ответ);    
КонецФункции
//
//******************************************************************************
Функция ПроверитьНаПочтеЗапросНаВыдачуОстатков ()
    Если (Константа.StopОтправкиСкладскихОстатков = 1) Тогда
        Возврат (0);
    КонецЕсли;
    Если (ПустаяСтрока (Константа.СерверПолучения) = 0) И (ПустаяСтрока (Константа.ЛогинПолучения) = 0) И (ПустаяСтрока (Константа.ПарольПолучения) = 0) И (Константа.СкладПросмотраGiveMyStockBalance.Выбран () = 1) Тогда        
        SMTP_ROBOT                    = СоздатьSMTP_ROBOT (1);
        Если         (SMTP_ROBOT = "") Тогда
            Возврат (0);
        ИначеЕсли     (SMTP_ROBOT = "err") Тогда
            Возврат (0);
        КонецЕсли;    
        Если (SMTP_ROBOT.Подключиться(СокрЛП(Константа.СерверПолучения),
                                      110,
                                      СокрЛП(Константа.ЛогинПолучения),
                                      СокрЛП(Константа.ПарольПолучения),
                                      3) = 0) Тогда
            Возврат (0);
        КонецЕсли;    
        СпрЗапросовПоОстаткам        = СоздатьОбъект ("Справочник.ЗапросыПоОстаткамПоПочте");
        ТекстКоманды                = ВРЕГ("GiveMyStockBalance_ForAnalize");
        Попытка
            Для НомерПисьма = 1 По SMTP_ROBOT.КоличествоПисем Цикл
                Если (SMTP_ROBOT.ПолучитьЗаголовокПисьма (НомерПисьма) = 1) Тогда                
                    SMTP_ROBOT.ПолучитьПисьмо (НомерПисьма, 0, 0);
                    IDПисьма            = СОКРЛП(SMTP_ROBOT.createddate) + СОКРЛП(SMTP_ROBOT.createdtime);
                    ТелоПисьма            = ВРЕГ(СОКРЛП (SMTP_ROBOT.subject));
                    Отправлять            = 0;
                    Если (Найти (ТелоПисьма, ТекстКоманды) > 0) Тогда
                        Отправлять        = 1;
                    КонецЕсли;
                    Если (Отправлять) = 0 Тогда                
                        ТемаПисьма        = ВРЕГ(СОКРЛП (SMTP_ROBOT.ТелоПисьма));
                        Если (Найти (ТемаПисьма, ТекстКоманды) > 0) Тогда
                            Отправлять    = 1;                                      
                        КонецЕсли;
                    КонецЕсли;
                    Если (Отправлять) = 1 Тогда
                        Если (СпрЗапросовПоОстаткам.НайтиПоНаименованию (IDПисьма, 0, 1) = 0) Тогда
                            СпрЗапросовПоОстаткамОбж                = СоздатьОбъект ("Справочник.ЗапросыПоОстаткамПоПочте");
                            СпрЗапросовПоОстаткамОбж.Новый ();
                            СпрЗапросовПоОстаткамОбж.Наименование     = IDПисьма;
                            СпрЗапросовПоОстаткамОбж.ДатаЗаписи        = Строка (ТекущаяДата ()) + " " + ТекущееВремя ();
                            СпрЗапросовПоОстаткамОбж.Пользователь    = ИмяПользователя ();
                            СпрЗапросовПоОстаткамОбж.Получатель        = Константа.ЛогинОбменаПолучательАвтоОстаткиСклад;
                            СпрЗапросовПоОстаткамОбж.Записать ();
                            Если (SMTP_ROBOT.УдалитьПисьмо (НомерПисьма) = 0) Тогда
                                Константа.StopОтправкиСкладскихОстатков = 1;
                            Иначе
                                глОтправитьПоПочтеОстаткиНаСкладе (ТекущаяДата (), Константа.СкладПросмотраGiveMyStockBalance);
                            КонецЕсли;
                            Прервать;
                        КонецЕсли;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        Исключение
        КонецПопытки;
        SMTP_ROBOT.Отключиться ();
        Возврат (1);
    Иначе
        Возврат (-1);
    КонецЕсли;
КонецФункции
//
//*****************************************************************************
// !!!!!!!!!!!!!  В глобальном модуле (в процедуре ПриНачалеРаботыСистемы ()) вставьте:
//Если (ЗагрузитьВнешнююКомпоненту(КаталогИБ () + "DialMail.dll") = 0) Тогда
//    Сообщить ("Не могу загрузить компоненту DialMail.dll !!!", "!!");
//КонецЕсли;


// !!!!!!!!!!!!! Также подцепите в команду ОбработкаОжидания процедуру ПроверитьНаПочтеЗапросНаВыдачуОстатков (). Например, вот так: ОбработкаОжидания ("ПроверитьНаПочтеЗапросНаВыдачуОстатков", 100)

Обмен по запросу по почте остатками

См. также

Запросы Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    38828    Serginio    22    

44

Универсальные функции Запросы Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    22213    json    3    

22

Зарплата Запросы Программист Расчет 7.7 1С:Зарплата и кадры 7.7 Абонемент ($m)

Обзор методов реализации условий и функций с условиями в обращениях к журналу расчетов при помощи прямого запроса.

1 стартмани

06.12.2012    14322    nicotin    5    

9

Запросы Платформа 1С v7.7 Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Абонемент ($m)

Универсальный отчет для конфигураций на платформе 1С 7.7. Умеет обращатся к справочникам, документам, регистрам и журналам расчетов. Удобен для быстрого получения каких либо данных, которые можно получить посредствам запроса. Предусмотренна возможность сохранения настроек.

1 стартмани

14.04.2012    34326    309    set2333    16    

11

Запросы Программист Оперативный учет 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Россия Бесплатно (free)

Первая статья из цикла статей "Прямые запросы:...". Рассказывается о применении класса ПрямойЗапрос и компоненты 1С++ для ускорения функции глВернутьЦену() в типовой конфигурации Торговля и склад. Платформа 7.7.

15.11.2011    16706    leshik    21    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Franco 83 26.03.14 15:19 Сейчас в теме
Нужно ещё или шифровать или сжимать и паролить. Представьте - уйдёт сотрудник к конкуренту и продолжит получать сведения об остатках.
2. protexprotex 139 26.03.14 15:23 Сейчас в теме
(1) Franco, Ну так если сотрудник уходит - то просто меняется пароль на "мыло" (почту) на которую приходят письма при запросе у 1С (на которое 1С-ка отправляет письма при внешнем запросе). Ну и можно еще анализировать от кого приходят письма чтобы от левых почтовых ящиков не брать запросы. Поле деятельности - целое поле. Это была просто идея реализованная у клиентов и переработанная под их нужды.
Оставьте свое сообщение