Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2022, 21:10

Интеграция сайта с 1С

Автор berkut_0, 03 окт 2017, 15:18

0 Пользователей и 1 гость просматривают эту тему.

berkut_0

Здравствуйте.
Я работаю системным администратором сервера, и администратором сайта, который собственно расположен на вверенном мне сервере.
С недавних пор мне поставили задачу - выполнить интеграцию с этим самым 1С. Поиски информации ни к цему меня не привели (наверное, не правильно спрашиваю у гугла). Этот 1С увидел только "вчера", но что то уже как то более менее понятно (что ничего не понятно).

Что есть в моём арсенале:
1 - "1С:Предприятие - Альфа-Авто; Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1" (версия 8.3);
2 - сервер (VPS) со всеми возможными доступами;
3 - сайт автомобильной тематики, размещённый на сервере.

Мои задачи - три довольно серьёзные для меня проблемы ...

1. Как выполнять автоматический экспорт прайса по нескольким группам (папкам) номенклатуры ?
Подчёркнутые слова означают - я нашёл только ручной "экспорт", и только по одной папке номенклатуры. Экспорт в кавычках - потому что это печать (штатный вывод в документ я не обнаружил); я согласен что это можно сделать на виртуальный принтер с выводом в документ, но это ещё один серьёзный хвост в проблеме автоматизации этого процесса.

2. Как выполнять экспорт этого прайса на FTP сервер ?
Собственно это и нужно делать автоматически; хотя бы по расписанию, допустим раз в час. Если получится по факту изменения подвязанных позиций - это будет вообще идеально.

3. Как выполнять запрос из 1С на конкретный адрес ?
Суть в том, что я хочу сделать выгрузку прайсов (их будет несколько по видам товаров), и вызвать обработку этих прайсов на сервере - php-скрипт с прямым обращением в БД.

Буду признателен за любую помощь в указанных направлениях =).

vitasw

Ремонтом автомобилей еще не занимаетесь? Судя по всему, с таким начальством - скоро начнете.
Для спеца там работы не очень много.

1) Делается минут за 10.
2) Тоже не сложно, но там могут быть нюансы. Ниже код отправки на ФТП. Отправка по расписанию = регламентное задание, завязано на п1.


Если СсылкаУзел.ФТПЗащищенноеСоединение Тогда
ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
Иначе
ssl = Неопределено;
КонецЕсли;


Попытка
Сервер = Новый FTPСоединение(СокрЛП(СсылкаУзел.ФТПСервер),, СокрЛП(СсылкаУзел.ФТПИмяПользователя), СокрЛП(СсылкаУзел.ФТППароль),,СсылкаУзел.ФТППассивноеСоединение,,ssl);
Исключение
#Если Клиент Тогда
Сообщить("Не удалось подключиться к серверу ФТП!",СтатусСообщения.Важное);
#Иначе
ЗаписьЖурналаРегистрации("Обмен с ФТП.",УровеньЖурналаРегистрации.Ошибка,,,Не удалось подключиться к FTP.");
#КонецЕсли

Возврат ;
КонецПопытки;


Сервер.Записать(ИмяФайла,"import.json");


berkut_0

Цитата: vitasw от 04 окт 2017, 12:31Ремонтом автомобилей еще не занимаетесь?
У нас тут СТО под боком :bleh:, но там свои люди, которые занимаются ремонтом и обслуживанием (слесари, шиномонтажники, и развальщики).
Цитата: vitasw от 04 окт 2017, 12:31Для спеца там работы не очень много.
Я это понимаю, и тем не менее ...
Цитата: vitasw от 04 окт 2017, 12:31Ниже код отправки на ФТП
Премного благодарен, за упрощение жизни и работы =).
Я уже ковыряю имеющиеся обработчики и формы в конфигураторе, дабы надыбать примеры заполнения по группе номенклатуры ...
Цитата: vitasw от 04 окт 2017, 12:31Делается минут за 10.
Это конечно же наглость с моей стороны, но всё же, было бы не плохо иметь пример реализации (который я собственно ищу в имеющихся обработчиках) - что откуда и куда нужно грузить ...
Мне нужно сделать всё это дело в файл CSV: артикул, цена (последняя), количество и наименование; остальная информация лишняя, а после наладки всего этого - лишним станет и наименование.

vitasw

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

Запрос.УстановитьПараметр("ВидЦены", ВидЦены);

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

пФайл = Новый ТекстовыйДокумент;   

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
пФайл.ДобавитьСтроку(ВыборкаДетальныеЗаписи.Наименование+";"+ВыборкаДетальныеЗаписи.Артикул+";"+Формат(ВыборкаДетальныеЗаписи.Цена,"ЧГ=0")+";");
КонецЦикла;

пФайл.Записать("<Нужное имя файла>",КодировкаТекста.UTF8);

berkut_0

Ещё вопрос, почти по теме ...
Как сохранить мою обработку в выделенной на картинке области ?
(картинку прилепил вложением)

oleg-x

В этом месте показываются последние открытые файлы.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

berkut_0

И вот ещё ...
Запрос подправил в соответствии с изначальной ошибкой, а ошибка осталась такая же, толко уже с моими правками :xfbnsdfb:
(картинки во вложениях)

Добавлено: 04 окт 2017, 18:05


Цитата: oleg-x от 04 окт 2017, 17:59В этом месте показываются последние открытые файлы.
Цитата: berkut_0 от 04 окт 2017, 17:46Как сохранить мою обработку в выделенной на картинке области ?
У меня там моя обработка не отображается ... Может потому что я работаю в отладке ?

oleg-x

Если вы завершаете сеанс через конфигуратор, то да. При принудительно закрытие программы 1с все настройки не сохраняются, также не будут показы последние открытые файлы. Если закрыть программу через крестик, то все ок будет.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

berkut_0

Дабы не плодить новые темы - напишу сюда же ...
Есть следующий код:

Функция ЗагрузитьГрппу(СтрокаГруппы)
ТипЗаполнения="ЗаполнитьПоГруппе";

ТекГруппа=Справочники.Номенклатура.НайтиПоНаименованию(СтрокаГруппы,Истина,,);
Запрос=Новый Запрос("ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Номенклатура
// | как тянуть последнюю цену продажи ?
// | как тянуть колиество ?
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
|ГДЕ
| НЕ СпрНоменклатура.ЭтоГруппа И
| НЕ СпрНоменклатура.ПометкаУдаления И
| НЕ СпрНоменклатура.ВидНоменклатуры В (&ВидыНоменклатуры)
| "+?(ТипЗаполнения="ЗаполнитьПоГруппе","И СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ТекГруппа)",""));
Запрос.УстановитьПараметр("ТекГруппа",ТекГруппа);
ВидыНоменклатуры=Новый Массив;
ВидыНоменклатуры.Добавить(Перечисления.ВидыНоменклатуры.ПрочиеАктивы);
ВидыНоменклатуры.Добавить(Перечисления.ВидыНоменклатуры.Услуга);
Запрос.УстановитьПараметр("ВидыНоменклатуры", ВидыНоменклатуры);

Выгрузка = Запрос.Выполнить().Выгрузить();
Результат="";
КоличествоПозиций = Выгрузка.Количество();
СчётчикНоменклатуры = 0;
Пока СчётчикНоменклатуры < КоличествоПозиций Цикл
// может недостающие данные можно как то подтянуть здесь ?
    Результат=Результат+
Выгрузка[СчётчикНоменклатуры][0].Артикул+";"+
// сюда надо подцепить количество и последнюю цену продажи; названия полей нужно уточнять
Выгрузка[СчётчикНоменклатуры][0].Наименование+";"+
Символы.ВК;
СчётчикНоменклатуры=СчётчикНоменклатуры+1;
КонецЦикла;
Возврат Результат;
КонецФункции


Собственно, код лепился из говна и палок с использованием помощи в интернете (и из этой темы тоже), разбором кода имеющихся (встроенных) обработчиков, ну и не без использования синтаксис-помощника.
Но то что есть - уже работает. И это хорошо.
Как достать недостающие данные ?
Прикрепил вложениями скриншоты того, что у меня происходит в 1С.
Добавлено: 06 окт 2017, 16:56


Я накопал РегистрыНакопления.ОстаткиТоваровКомпании.Остатки();
Это таблица значений, первая колонка которой - Ссылки на конкретную номенклатуру, а третья колонка - нужное мне количество.
Но оттуда мне приходят все остатки всех товаров по всей номенклатуре.

Как выполнить выборку только тех остатков, которые входят в ту же группу номенклатуры ?
В этой функции есть параметр "Отбор", попытался по синтаксис-помощнику заполнить - ошибка контекста. Попытался соорудить собственный запрос - ошибка что то типа результат хранить можно только во временной таблице.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск