Во время работы с данными поставщиков часто возникает необходимость загрузить данные о наличии товаров и его стоимости в 1с. В данном посте речь пойдёт про обработку, с которой мы работаем во время загрузки данных из excel-файлов. Обработка предназначена для загрузки и сохранения в базе 1С цен и остатков номенклатуры. Решение предназначено для работы в конфигурациях «Управление торговлей» и «Управление торговым предприятием».
Обратная связь с клиентом с помощью сервиса E-sputnik
on 27.10.2014in 1Сtags: 1с, Интеграцияwith No Comments
У нашего клиента возникла задача улучшения обратной связи с покупателями интернет-магазина. В рамках задачи предполагалась автоматическая отправка письма после доставки заказа с перечнем товаров и ссылками на сайт для написания отзывов. Задача была выполнена с помощью сервиса esputnik.com.
Сервис позволяет отправлять sms и email сообщения. На стороне сервиса пользователь может создать шаблоны, на основании которых будет происходить формирование писем. Благодаря возможности API производить замену текста письма во время отправки у нас получилось сформировать письма более персонального характера. Например, после отправки заказа клиенту через 5 дней 1с отправляет письмо с перечнем товаров, которые покупались клиентом.
Код отправки email клиенту с перечнем товаров:
Функция ОтправитьПисьмоНаОснованииЗаказа(Заказ) Экспорт
ПочтаКому = СокрЛП(Заказ.Контрагент.ЭлектронныйАдрес);
ИмяКому = СокрЛП(Заказ.Контрагент.Наименование);
ОтКого = СокрЛП(Константы.ОтправительЕСпутник.Получить();
ТЗ = Заказ.Товары.Выгрузить();
ТЗ.Свернуть("Товар");
СтрокаТовары = "";
Для каждого Стр из Тз Цикл
СтрокаТовары = СтрокаТовары +"
"+ Стр.Номенклатура.Наименование +"
";
КонецЦикла;
ПараметрJSON = "{"; //"groupId"" : ,";
ПараметрJSON = ПараметрJSON + """params"" : [ ";
ПараметрJSON = ПараметрJSON + "{""key"" : ""Имя"",";
ПараметрJSON = ПараметрJSON + """value"" : """+ИмяКому+"""},";
ПараметрJSON = ПараметрJSON + "{""key"" : ""Товар"",";
ПараметрJSON = ПараметрJSON + """value"" : """+СтрокаТовары+"""}],";
ПараметрJSON = ПараметрJSON + """recipients"" : ["""+ПочтаКому+"""],";
ПараметрJSON = ПараметрJSON + """fromName"" : """+ОтКого+"""" + "}";
ИДШаблона = Константы.ИДШаблонаЕСпутник.Получить();
Страница = "https://esputnik.com.ua/api/v1/message/"+ИДШаблона+"/send";
Ответ = ОтправитьЗапрос(ПараметрJSON,Страница,"POST");
Возврат Ответ;
КонецФункции
Мы подготовили обработку, которая работает на типовой конфигурации «Управление торговлей 3.0». В данной обработке вы сможете найти методы, которые вызываются в коде-примере. Функционал обработки:
- Отправка sms и email сообщений одному или нескольким контрагентов;
- Авто-замена параметра сообщения на имя Контрагента;
- Получение текущего баланса сервиса e-sputnik;
- Работа с шаблонами для email рассылки, которые сохранены на стороне сервиса e-sputnik.
- Получения статусов отправленных сообщений.
Скачать обработку:
esputnik_ut_3_0.epf (15,6 KiB, 699 скачиваний)
Правильность ввода email
on 17.10.2014in 1Сtags: 1с, RegExpwith 2 комментария
Во время работы с контактными данными покупателей часто обрабатываются email адреса.
Программная проверка правильности заполнения email во время заполнения пользователем уменьшит риск невозможности отправки уведомлений клиенту. Для проверки можно использовать механизм регулярных выражений.
Код проверки:
Функция ПроверкаКорректностиЭлектроннойПочты()
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Ложь;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
RegExp.Pattern="^[a-zA-Z0-9_'+*/^&=?~{}\-](\.?[a-zA-Z0-9_'+*/^&=?~{}\-])*\@((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\:\d{1,3})?)||(((([a-zA-Z0-9][a-zA-Z0-9\-]+[a-zA-Z0-9])|([a-zA-Z0-9]{1,2}))[\.]{1})+([a-zA-Z]{2,6})))$";
Если RegExp.Test(Адрес) Тогда
Сообщить("Адрес корректный!!!");
Иначе
Сообщить("Адрес не корректный!!!");
КонецЕсли;
КонецФункции // ПроверкаКорректностиЭлектроннойПочты()
Подготовка файлов обновлений, немного автоматизации
on 14.10.2014in 1Сtags: 1с, Организация работы, Хранилище конфигурацииwith 7 комментариев
Все доработки конфигураций в нашей команде выполняются через хранилище конфигурации, но вот подключить рабочую базу Клиента к хранилищу к сожалению не всегда представляется возможным.
Чтобы уменьшить время, которое тратится на подготовку файлов обновлений (cf) сделали bat-файл, который сохраняет конфигурацию хранилища в файл и выгружает на ftp-ресурс. В данном подходе применяется пакетный режим запуска и команда ConfigurationRepositoryDumpCfg. Стоит отметить что для работы данной команды может использоваться пустая конфигурация не подключенная к хранилищу, версия которого выгружается. То есть используя одну пустую конфигурацию можно произвести выгрузку нескольких хранилищ. В администрировании хранилища надо создать пользователя с минимальными правами логин и пароль которого прописываются в ConfigurationRepositoryN и ConfigurationRepositoryP.
Пример команды сохранения конфигурации хранилища в файл:
"C:\Program Files (x86)\1cv82\8.2.17.157\bin\1cv8.exe" CONFIG /F"Z:\Projects\Repo\Base" /N "" /P ""
/ConfigurationRepositoryF "http://danila.org.ua:8080/storage/repository.1ccr/Project1\"
/ConfigurationRepositoryN "User" /ConfigurationRepositoryP "Password"
/ConfigurationRepositoryDumpCfg "Z:\UpdateFiles\Project1.cf"
Чтобы иметь возможность забрать файлы обновления без подключения к рабочей машине используется выгрузка на ftp-ресурс, которая вызывается командой «ftp» в том же bat-файле. Для выполнения данной команды должен быть создан файл ftp.txt с параметрами подключения к ftp-серверу и указанием выгружаемых cf-файлов. Файл ftp.txt должен быть расположен в одной директории с bat-файлом. Содержимое файла ftp.txt:
open ftp.danila.org.ua
USER UserFTP PasswordFTP
binary
mput z:/UpdateFiles/*.cf
BY
Команда для запуска выгрузки cf-файлов на ftp-сервер прописывается так:
ftp -i -n -s:ftp.txt
Печать с мобильного приложения 1с
on 06.10.2014in 1Сtags: 1с, Мобильное приложение, Печатьwith 6 комментариев
В рамках разработки мобильного приложения кладовщика столкнулись с необходимостью печати этикеток для обклейки заказа. В данном посте я поделюсь подходами, которые удалось реализовать для решения поставленной задачи. Так как задача решалась постепенно с разным набором оборудования получилось в результате два метода:
- Отправка на печать через запущенную сессию 1с на компьютере.
- Отправка на печать с мобильного приложения.
В обоих методах используется генерация этикетки на стороне центральной базы. Такой подход был принят с учетом условий:
- Этикетка на заказ должна печататься всегда одинаковая;
- Кладовщик не всегда следит за необходимостью обновить конфигурацию в мобильном приложении;
- Процесс приема заказов подразумевает наличие соединения мобильного приложения с центральной базой.
Открываем яндекс-навигатор из мобильного приложения 1с
on 22.09.2014in 1Сtags: 1с, Мобильное приложение, Навигаторwith 4 комментария
Добрый день.
Мобильная платформа 1с не стоит на месте за что большая благодарность и уважение разработчикам. Благодаря появлению объекта ЗапускПриложенияМобильногоУстройства в мобильной платформе 1с у нас появилась возможность запускать сторонние приложения на устройстве, передавая при этом необходимую информацию. Пользуясь такой возможностью в мобильном приложении курьера добавили функцию открытия яндекс-навигатора из формы заказа. Данная функция позволяет строить маршрут от текущего месторасположения пользователя к точке доставки заказа.
Как это работает можно посмотреть на видео:
Сохраняем word и pdf документ из 1с
on 04.09.2014in 1Сtags: 1с, Печатьwith 4 комментария
Пользователю потребовалось создавать файл договора с контрагентом программно из 1с. В результате должны формироваться файлы word и pdf. Все данные для договоров уже были у нас в справочниках (наименование, дата договора, номер договора и т.д). Задача сводится к формированию готовых файлов на основании шаблона word-документа. Для заполнения шаблона данными было принято правило: параметры, которые подлежат в тексте шаблона замене заключаются в квадратные скобки [ ].
Для обращения к файлу используем COMОбъект Word.Application. Для сохранения файла в pdf формат решено было использовать возможности самого wordа. Ниже код, который из хранилища значений получает шаблон, производит замену параметров и сохраняет файлы. Данный код должен находится в модуле объекта, так как для получения значения параметра используется метод Вычислить().
ДанныеМакета = Справочники.ДоговорыСКонтрагентами.МакетДоговора.Получить();
ИмяФайла = "D:\file.docx";
ИмяФайлаПДФ = "D:\file.pdf";
ДанныеМакета.Записать(ИмяФайла);
MSWord = Новый COMОбъект("Word.Application");
MSWord.Visible = Ложь;
MSWord.Documents.Open(ИмяФайла);
Документ = MSWord.Application.Documents(1);
Документ.Activate();
ТекстМакета = Документ.Content.Text;
//Получим массив параметров
МассивПараметров = РазбитьСтроку(ТекстМакета, "[", "]");
ТаблицаЗначенийПараметров = Новый ТаблицаЗначений;
ТаблицаЗначенийПараметров.Колонки.Добавить("НазваниеПараметра");
ТаблицаЗначенийПараметров.Колонки.Добавить("ПреобразованноеЗначение");
Для Каждого ТекПараметр Из МассивПараметров Цикл
Попытка
СсылкаНаОбъект = Вычислить(ТекПараметр);
СтрПреобразование = ТаблицаЗначенийПараметров.Добавить();
СтрПреобразование.НазваниеПараметра = ТекПараметр;
СтрПреобразование.ПреобразованноеЗначение = СсылкаНаОбъект;
Исключение
Сообщить("Невозможно интерпретировать параметр ["+ ТекПараметр+ "]");
КонецПопытки;
КонецЦикла;
//Заменим названия параметров на значения
Замена = Документ.Content.Find;
Для Каждого ТекСтрока Из ТаблицаЗначенийПараметров Цикл
Попытка
Замена.Execute("["+ ТекСтрока.НазваниеПараметра +"]", , , , , , , , , ТекСтрока.ПреобразованноеЗначение, 2);
Исключение
Сообщить("Невозможно преобразовать параметр ["+ ТекСтрока.НазваниеПараметра +"]");
КонецПопытки;
КонецЦикла;
//Сохраним в word
Документ.Save();
//Сохраним в pdf
Документ.SaveAs(ИмяФайлаПДФ, 17);
MSWord.Application.Quit();
Печать для Укрпочты
on 01.09.2014in 1Сtags: 1с, Служба доставкиwith No Comments
Данная обработка позволит формировать печатные формы для Укрпочты .
Обработка может работать как в толстом клиенте так и управляемом приложении. Обработка запускается как внешняя обработка и данные про доставку вводятся вручную. Если вам надо печатать доставки на основании заказов в 1с, тогда потребуется интеграция механизмов данной обработки в вашу конфигурацию.
Печать документов для Укрпочты (140,9 KiB, 689 скачиваний)
Слияние форматированных документов
on 28.08.2014in 1Сtags: 1с, Форматированный документwith No Comments
Приветствую.
Для ускорения работы логистов курьерской службы реализовывалась задача формирования email на основании шаблона. Этот функционал используется в случае ответа пользователем на однотипные вопросы по доставке заказов. Так как в 1с-конфигурации письма отправляются в html-формате я столкнулся с необходимостью соединить два форматированных документа. Первый форматированный документ это сам текст шаблона, а второй — подпись пользователя, которая должна быть во всех письмах. На помощь в этой задаче приходит следующий код:
Процедура СоединитьФорматированныеДокументы(ИсходныйДокумент,ДокументПолучатель)
Для Каждого Параграф Из ИсходныйДокумент.Элементы Цикл
НовыйПараграф = ДокументПолучатель.Элементы.Добавить();
НовыйПараграф.ГоризонтальноеПоложение = Параграф.ГоризонтальноеПоложение;
НовыйПараграф.МеждустрочныйИнтервал = Параграф.МеждустрочныйИнтервал;
НовыйПараграф.Отступ = Параграф.Отступ;
НовыйПараграф.ТипПараграфа = Параграф.ТипПараграфа;
Для Каждого ЭлементПараграфа Из Параграф.Элементы Цикл
Если Тип(ЭлементПараграфа) = Тип("ТекстФорматированногоДокумента") Тогда
НовыйТекст = НовыйПараграф.Элементы.Добавить(ЭлементПараграфа.Текст);
НовыйТекст.НавигационнаяСсылка = ЭлементПараграфа.НавигационнаяСсылка;
НовыйТекст.ЦветТекста = ЭлементПараграфа.ЦветТекста;
НовыйТекст.ЦветФона = ЭлементПараграфа.ЦветФона;
НовыйТекст.Шрифт = Новый Шрифт(ЭлементПараграфа.Шрифт);
ИначеЕсли Тип(ЭлементПараграфа) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
НовыйПараграф.Элементы.Добавить(, Тип("ПереводСтрокиФорматированногоДокумента"));
ИначеЕсли Тип(ЭлементПараграфа) = Тип("КартинкаФорматированногоДокумента") Тогда
НоваяКартинка = НовыйПараграф.Элементы.Добавить(ЭлементПараграфа.Картинка, Тип("КартинкаФорматированногоДокумента"));
НоваяКартинка.НавигационнаяСсылка = ЭлементПараграфа.НавигационнаяСсылка;
НоваяКартинка.Ширина = ЭлементПараграфа.Ширина;
НоваяКартинка.Высота = ЭлементПараграфа.Высота;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура СформироватьПоШаблону(Команда)
РезультатВыбора = ПолучитьФорму("Справочник.ШаблоныПисем.ФормаВыбора").ОткрытьМодально();
Если РезультатВыбора <> Неопределено Тогда
//Очистим содержимое
ТекстПисьмаФорматированныйДокумент.Удалить();
//Добавим шаблон
СоединитьФорматированныеДокументы(РезультатВыбора.ФорматированныйДокументШаблона,ТекстПисьмаФорматированныйДокумент);
//Добавим подпись
СоединитьФорматированныеДокументы(Подпись,ТекстПисьмаФорматированныйДокумент);
КонецЕсли;
КонецПроцедуры
API службы доставки meest-express. Поиск города
on 26.08.2014in 1Сtags: 1с, API, Служба доставкиwith 4 комментария
В рамках одного проекта появилась возможность поработать со службой доставки Мист-Експресс. Хочется отметить хорошую содержательную документацию по API. В данном посте опишу общие принципы работы с API данной службы доставки и для примера возьму метод City, который используется для поиска городов в базе Мист-Експресс.
Вся работа с API данной службы доставки происходит посредством отправки xml-запросов на сервер по адресу http://api1c.meest-group.com/services/1C_Query.php. Для метода city xml должен выглядеть таким образом:
Во всех запросах sign это подпись, которая форимруется по правилу: md5 ( login + password + function + where). Для формирования xml-запроса будем использовать объект ЗаписьXML платформы 1с: Предприятие. Отправку xml-запроса на сервер службы доставки будем проводить с помощью объекта HTTPСоединение.
Для формирования md5 в 1с будем использовать следующий код:
Функция MD5Eng(КодируемаяСтрока)Экспорт
оMD5 = Новый COMОбъект("System.Security.Cryptography.MD5CryptoServiceProvider");
оEnc = Новый COMОбъект("System.Text.UTF8Encoding");
оStr = Новый COMОбъект("System.Text.StringBuilder");
Массив = оEnc.GetBytes_4(КодируемаяСтрока);
Массив = оMD5.ComputeHash_2(Массив);
КолЭлементовМассива = Массив.GetLength();
Для Ит = 0 ПО КолЭлементовМассива - 1 Цикл
оStr.AppendFormat("{0:x02}", Массив.GetValue(Ит));
КонецЦикла;
оMD5 = NULL;
оEnc = NULL;
Возврат оStr.ToString();
КонецФункции // MD5Eng()
Пример поиска города по строке «Черкас»:
Весь код можно посмотреть в обработке-примере. В обработке прописаны данные тестового клиента и функция для поиска города по первым символам. Обработку можно скачать тут:
meest_express_city.epf (9,8 KiB, 1 001 скачиваний)