Имя: Пароль:
1C
1С v8
Все та же отправка на почту файлов.
, ,
0 Luffy
 
05.11.15
08:14
Ребят, помогите пожалуйста сделать задание. Нужно отправить контрагенту два файла, файлы отправляются без проблем, только необходимо для определенного контрагента отправить один стандартно файл, а другой нужно сделать так чтоб система сама определила нужно, отправлять этот файл или нет. Адрес получаю из регистра сведений контактная информация с помощью функции, как получили адрес создаются  два файла в каталоге, а отправкой занимается процедура, где передается каталог с этими файлами, вот нужно задать определенное условие, либо на уровне где создаются файлы и не создавать один файл в случае выполнения условия, или на уровне процедуры отправки письма, где можно по индексу обратиться к коллекции и удалить одно из писем, вопрос в том какое это будет условия, я пока не знаю, рассчитываю на вашу помощь.
Там отправляется письмо счет фактура торг 12, а другой файл с в шапке наименованием организации, ИНН, адрес, дата, номер док, сумма по документу, в строках номенклатура, цена, код, все о сертифекатах, и т.д, так вот некоторым контрагентам этот файл не нужен. Я сделал условие создав в свойствах ОтправкаФайлаПоЭлектроннойПочте со значениями да и нет, при да отправляет, при нет удаляет это письмо из коллекции, но руководителю не понравилось, потому что может какой нибудь контрагент потребовать для него другой файл создать и отправить, а нужно написать код, где система отправляла, для этого такой файл, для другого другой.
1 Мимохожий Однако
 
05.11.15
08:16
Отправка по почте файлов
лень было найти прошлую ветку?!
2 Горогуля
 
05.11.15
08:16
не код тебе нужно написать, а понять, что нужно. а потом сформулировать. и только потом уже думать о коде
3 Luffy
 
05.11.15
08:17
//Код получения адреса и создание файлов!
    
ЭлАдрес = ПолучитьАдресИзКонтактнойИнформации(мКонтрагент, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыКонтрагентаДляОбменаДокументами);
                        
                        Если ЭлАдрес <> "" Тогда          
                        
                        мКаталогВременныхФайлов = КаталогВременныхФайлов() + "Doc_xls\";
                         СоздатьКаталог(мКаталогВременныхФайлов);    
                        ИмяФайлаТН = мКаталогВременныхФайлов + "TH.xls";
                            
                            ТабДокумент.Записать(ИмяФайлаТН, ТипФайлаТабличногоДокумента.XLS);
                            
                            Если тзШК ТОгда
                                ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());
                                ТабДокументШК = ПечатьШК(Объект);
                                
                                НапечататьДокумент(ТабДокументШК, 1, флСразуНаПечать, ?(ЭтоДокумент, ОбщегоНазначения.СформироватьЗаголовокДокумента(Объект.Ссылка), Строка(Объект)), Объект.Ссылка);
        
                                ИмяФайлаШК = мКаталогВременныхФайлов + "ШК.xls";
                                    
                                ТабДокументШК.Записать(ИмяФайлаШК, ТипФайлаТабличногоДокумента.XLS);
                            КонецЕсли;
        
                ИмяФайла = мКаталогВременныхФайлов;
                ИмяФайлаБезПути = тзРТИУ;    
                ИмяФайлаБезПути = ПреобразоватьВЛатиницу(УдалениеВедущихНулей(тзРТИУ.Номер, тзРТИУ.Организация.Префикс)) + ".nkl";
                ИмяФайла = ИмяФайла + ИмяФайлаБезПути;                        
                ФайлЗаписи = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
                СтрокаДЛяПередачи = ВыгрузитьРеализацииКлиенту(тзРТИУ);
                
                Если СтрокаДЛяПередачи <> "" Тогда
                    
                    ФайлЗаписи.Записать(СтрокаДЛяПередачи);
                    ФайлЗаписи.Закрыть();
                    
                КонецЕсли;
                        
                        //отправим письмо
                            Если ИмяФайлаШК = Неопределено Тогда
                                НапишемПисьмо (ЭлАдрес, ИмяФайлаТН, ИмяФайла, , тзРТИУ.Организация.НаименованиеСокращенное, тзРТИУ);
                            Иначе
                                НапишемПисьмо (ЭлАдрес, ИмяФайлаТН, ИмяФайла, ИмяФайлаШК, тзРТИУ.Организация.НаименованиеСокращенное, тзРТИУ);
                            КонецЕсли;
                            
                            УдалитьФайлы(мКаталогВременныхФайлов);
                        КонецЕсли;
                    Иначе
                        Объект.Печать(Расшифровка, 1, флСразуНаПечать);
                    КонецЕсли;
                    Распечатано = истина;
                Исключение
                    Сообщить("Не удалось распечатать первый раз ТОРГ12!");
                КонецПопытки;                
                
            КонецЕсли;
4 Горогуля
 
05.11.15
08:17
я сделал, но не понравилось, потому что может потребовать, а нужно написать, где отправляла
в студии есть переводчик с монгольского?
5 Luffy
 
05.11.15
08:19
//Код отправки файлов

Процедура НапишемПисьмо (Адрес, ДокументТН = Неопределено, ФайлИДК = Неопределено, ДокументШК = Неопределено, ОтКогоДокументы, ДокументРТУ)
    
    //Создадим письмо
        
    Письмо = Новый ИнтернетПочтовоеСообщение;
    
    
    //Если ДокументТН = Неопределено И ДокументШК = Неопределено ТОгда
    //    Возврат;
    //ИначеЕсли
    Письмо.Вложения.Добавить(ДокументТН,"Документ");  
    
    Если ДокументШК <> Неопределено ТОгда
        Письмо.Вложения.Добавить(ДокументШК,"ШК");
    КонецЕсли;
    
    Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ЗначенияСвойствОбъектов1.Значение
            |ИЗ
            |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1
            |        ПО РеализацияТоваровУслуг.Контрагент = ЗначенияСвойствОбъектов1.Объект
            |ГДЕ
            |    РеализацияТоваровУслуг.Ссылка = &Ссылка";
        
        Запрос.УстановитьПараметр("Ссылка", ДокументРТУ);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            
            Если ВыборкаДетальныеЗаписи.Значение.Наименование = "Да" Тогда
                
                Письмо.Вложения.Добавить(ФайлИДК,"Документ");
                
            ИначеЕсли ВыборкаДетальныеЗаписи.Значение.Наименование = "Нет" Тогда  
                
                Письмо.Вложения.Удалить(1);
                                               НужноОтправлятьФайл()
            КонецЕсли;
        
    КонецЦикла;
    
    Письмо.Тема =  "Документы";

    ТекстПисьма = "Письмо отправлено роботом. Отвечать не стоит! По всем вопросам обращайтесь по имеющимся у вас контактным данным!";
        

    //Для каждого элемента массива отправим письмо
    
        
    Профиль          = Новый ИнтернетПочтовыйПрофиль;
    Профиль.АдресСервераSMTP  = "172.17.8.1";
    Профиль.ПортSMTP          = "25";
    Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    Профиль.Пользователь = "1cmail";
    Профиль.Пароль = "Gjxnf1C";
    Профиль.ПользовательSMTP = "1cmail";
    Профиль.ПарольSMTP = "Gjxnf1C";
    Профиль.ВремяОжидания = 180;
    
    
    Почта = Новый ИнтернетПочта();

    Попытка
        Почта.Подключиться(Профиль);
    Исключение
        Сообщить("Сервер не отвечает..." + ОписаниеОшибки());
    КонецПопытки;    

    //отправка
    Письмо.Тексты.Добавить(ТекстПисьма);

    Письмо.Получатели.Добавить(Адрес);
    
    Письмо.Отправитель.ОтображаемоеИмя = "Документы от "+ОтКогоДокументы;
    Письмо.Отправитель.Адрес = "[email protected]";
    Письмо.Отправитель.Пользователь = "1cmail";
    Письмо.Отправитель.Сервер = "mail.irkmw.ru";
    Письмо.ОбратныйАдрес.Добавить("[email protected]");
    
    
    Попытка
        Почта.Послать(Письмо);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;    
КонецПроцедуры
6 Luffy
 
05.11.15
08:22
Нужна универсальная идея и код.
7 ДенисЧ
 
05.11.15
09:02
(6) Нужны универсальные деньги для этого
8 Fish
 
05.11.15
09:03
(6) Если идея состоит в "нужно написать код, где система отправляла, для этого такой файл, для другого другой.", то код элементарный:

Если ЭтотКонтрагент Тогда
ОтправитьТакойФайл();
Иначе
ОтправитьДругойФайл();
КонецЕсли;

И не благодари.
9 Luffy
 
05.11.15
09:10
(8) Распиши по подробней пожалуйста, это че нужно две функции создавать или если каждый контрагент будут требовать создавать для них разные файлы, тогда нужно для каждого файла отдельную функцию писать
10 Fish
 
05.11.15
09:15
(9) Можешь и одну функцию создать, а в неё параметры передавать.
11 Горогуля
 
05.11.15
09:17
(10) боюсь, мозг не выдержит
12 Лефмихалыч
 
05.11.15
09:17
(0) по-русски простыми словами напиши, в каких случаях и что нужно отправлять
13 Luffy
 
05.11.15
09:27
(12) Смотри есть два файла, один отправляется в любом случае, другой файл нужно сверяться по требованиям контрагента, нужен он или нет, если нужен тогда отправляем, если нет не отправляем. Я выполнил это условие, но на будущие может возникнуть так, что какой нибудь контрагент, скажет создать и отправить для него другой файл и того 3 файла, Один удалится из коллекции, а другие 2 файла отправятся ему, а ему нужен только один файл.
14 Fish
 
05.11.15
09:31
(13) Всё равно ничего не понятно.
И зачем файл УДАЛЯТЬ из какой-то коллекции, если можно изначально его туда не добавлять, раз он не нужен?
15 Лефмихалыч
 
05.11.15
09:31
(13) и вопрос при этом в чем именно?
где-то в конфигурации должно храниться что-то, связанное с контрагентом, по чему ты будешь определять, что именно отправлять. Коллекцию файлов к отправке собираешь на основании этого чего-то. Потом просто так берешь и каждому свое отправляешь.
16 Лефмихалыч
 
05.11.15
09:32
автор, ты или подробности выкладывай все, включая конфу, либо уже бабахайся сам со своими загадками
17 Luffy
 
05.11.15
09:48
(16) Могу на почту тебе обработку скинуть.
18 Лефмихалыч
 
05.11.15
12:40
(17) не надо. Здесь пиши
19 Luffy
 
05.11.15
12:58
(18) Окей, чуть позже напишу, сейчас не могу.