Версия для печати темы (https://pro1c.org.ua/index.php?s=dc66d83ff7f7d81c4e7726bafa28e375&showtopic=40767)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Интеграция сайта с 1С.

Автор: berkut_0 04.10.17, 11:01

Здравствуйте.
Спойлеров здесь я не обнаружил, так что просто немалое количество текста без группировки ...

Предисловие ...
Я компьютерщик/сисадмин/программист в одной конторе. С недавних пор мне на голову упало всё то, что касается 1С.
Собственно, саму 1С я увидел "только вчера", но мне к такому не привыкать (так у меня во многом).

Моя задача: интеграция сайта с 1С.
Мой арсенал:
- 1С:Предприятие 8.3 (8.3.10.2299), конфигурация Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1 (5.1.05.08);
- сервер (VPS) с сайтом автомобильной тематики.
Как я вижу результат выполнения задачи: из 1С выгружается прайс-лист (по расписанию, или при изменении данных), загружается на FTP, а север уже сам выполняет обработку файла (с пинка, или с определённой периодичностью),

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

На счёт одной папки - это в принципе можно исправить (пере)группировкой ... Но насяльника не хочет, хотя подвязок никаких нет (пока что).


Что я вижу дальше ...
Разработка собственной внешней обработки для формирования и выгрузки прайс-листа.
Я добрался до конфигуратора, создал новую внешнюю обработку, прилепил форму, и вот смотрю на эту форму как баран на зелёные ворота, вижу в модуле объекта, что нужно писать код.
На данном этапе я уже наблюдаю общее сходство с обычным (не 1С) программированием - те же формы, кнопочки, обработчики =)

Собственно код я писать умею, но в данном случае я не знаю, что писать. Я понимаю, что мои запросы ушли далеко от уровня "Hello world", но кому сейчас легко, я то уже работаю, а не на парах сижу ...

Чего мне не хватает ...
Справочной литературы по типу MSDN - какие функции, свойства, параметры функций - что они означают.
Что касается синтаксиса - я не думаю, что это большая проблема (хотя хрен его знает).
Например функция
Справочники.Номенклатура.ВыбратьИерархически(Родитель,Владлец,Отбор,Порядок);

Если полагаться только на название - то это та функция, которая должна мне вернуть нечто, касающееся номенклатуры, по которой нужно будет дополнительно откуда то брать ценники (кстати откуда ?).
Если так и есть - то что мне нужно передавать в качестве параметров ? Мне нужно выгрузить все позиции из папки "Автохимия" например. И дальше - откуда и куда грузить цены ?
В общем, тут много вопросов, и мне нужно их решить.

Это только формирование прайса.
Следующий этап - выгрузка в файл (CSV) на FTP.

Буду признателен за любую оказанную помощь.


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 4
 

Автор: pablo 04.10.17, 12:37

Справочная литература по типу MSDN уже вшита в саму 1с (а-ля Delphi). В отношении литературы - поиск по форуму не отключали.

Автор: podcast 04.10.17, 12:40

berkut_0 @ Сегодня, 12:01 * ,
Посмотрите Выгрузка в формате CommerceML, там вроде есть выгрузка Прайса, по синтаксису в конфигураторе есть Синтаксис помощник, там всё есть, если есть хоть какое то понимание программирования то в принципе поймёте.

Автор: logist 04.10.17, 14:29

Цитата(podcast @ 04.10.17, 13:40) *
Посмотрите Выгрузка в формате CommerceML

В Альфа-авто нет такой выгрузки.

По теме: ход действий выбран правильно, пишите свою обработку.

Автор: Flexy 04.10.17, 14:38

Цитата(logist @ 04.10.17, 14:29) *
В Альфа-авто нет такой выгрузки.

Не знаю, штатно или интегрировали, но я видел в Альфе обработку "Выгрузка товаров на сайт в формате CommerceML". И она работала. Т.е. если даже ее нет в типовой Альфе, проще ее туда прикрутить чем писать с нуля.

Автор: logist 04.10.17, 14:46

Цитата(Flexy @ 04.10.17, 15:38) *
но я видел в Альфе обработку "Выгрузка товаров на сайт в формате CommerceML".

Специально посмотрел в типовой АА5 - нет такой.

Автор: caballero 04.10.17, 18:11

Интеграция с сайтом (особенно в две стороны) - гемор, который 1С не могут нормально разрулить даже со своим битриксом.

Автор: berkut_0 04.10.17, 22:03

Цитата(caballero @ 04.10.17, 19:11) *
особенно в две стороны

Мне двухстороннее и не надо ... Я вообще этого не понимаю - управление должно происходить там, где это более важно, а всё остальное подчиняется. Учёт всех товаров выполняется в централизованой базе, в данном случае - в 1С. Значит и оттуда должно быть управление.
Ну или тоже самое если представить, что у автомобиля будет два руля - первый слева, второй справа ... Аналогия конечно неправильная, так как критический уровень взаимных помех (и тем не менее, такая опция была бы полезной в отельных, столь же критических ситуациях). Но суть та же.

Я выделил подзадачи, которые вполне себе реализуемы.
Цитата(berkut_0 @ 04.10.17, 12:01) *
из 1С выгружается прайс-лист (по расписанию, или при изменении данных), загружается на FTP, а север уже сам выполняет обработку файла (с пинка, или с определённой периодичностью)

Мне же не хватает знаний и опыта работы в 1С.

Автор: logist 05.10.17, 3:13

Цитата(caballero @ 04.10.17, 19:11) *
Интеграция с сайтом (особенно в две стороны) - гемор, который 1С не могут нормально разрулить даже со своим битриксом.

Та ладно, вы просто не умеете "готовить" wink.gif

Автор: Егор Динин 05.10.17, 9:11

Цитата(caballero @ 04.10.17, 19:11) *
Интеграция с сайтом (особенно в две стороны) - гемор, который 1С не могут нормально разрулить даже со своим битриксом.

Сформировать и прочитать файл - вроде как элементарные вещи. Да, типовые вещи в некоторых случаях могут не работать, надо допиливать.
Цитата(berkut_0 @ 04.10.17, 23:03) *
Учёт всех товаров выполняется в централизованой базе, в данном случае - в 1С. Значит и оттуда должно быть управление.

Когда сайт выходит в топ и на сайте оформляется более 50 заказов в день встает вопрос об импорте заказов в 1С (вместе емейлами и телефонами заказчиков)

Автор: berkut_0 05.10.17, 11:56

Цитата(Егор Динин @ 05.10.17, 10:11) *
встает вопрос об импорте заказов в 1С

В целом, это тоже решаемо ... Я вижу следующие подзадачи:
1 - на сайте по необходимости формируются файлы импорта в 1С;
2 - раз в час/день/месяц/год - обработка заходит в указанное место на FTP, и выполняет необходимый импорт по необходимым базам (что то типа расчётные счета/чеки/выходные накладные). В качестве бонуса и от скучной жизни - можно выполнять перепроверку по остаткам-заказам, и пересчитывать остатки; зато это будет автоматически, и всё в той же 1С.
Но для этого нужна более серьёзная обработка в самой 1С.
Цитата(Егор Динин @ 05.10.17, 10:11) *
вместе емейлами и телефонами заказчиков

А это зачем ? Оно всё есть на сайте, и в 1С оно попросту ни к чему.

Автор: Flexy 05.10.17, 13:05

Цитата(logist @ 04.10.17, 14:46) *
Специально посмотрел в типовой АА5 - нет такой.

Альфа 4.1. Есть.




 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Автор: logist 05.10.17, 13:06

Цитата(Flexy @ 05.10.17, 14:05) *
Альфа 4.1

Цитата(berkut_0 @ 04.10.17, 12:01) *
конфигурация Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1 (5.1.05.08);

Автор: Flexy 05.10.17, 13:11

Цитата(logist @ 05.10.17, 13:06) *
конфигурация Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1 (5.1.05.08);

Тьфу...Не заметил. 32541510.gif

Автор: berkut_0 05.10.17, 13:33

Цитата(Flexy @ 05.10.17, 14:11) *
Тьфу...Не заметил

Обмен с сайтом у меня тоже есть. До него я конечно ещё не добрался, но надеюсь что и не понадобится ...

Автор: Flexy 05.10.17, 13:46

Цитата(berkut_0 @ 05.10.17, 13:33) *
Обмен с сайтом у меня тоже есть. До него я конечно ещё не добрался, но надеюсь что и не понадобится ...

А зачем изобретать велосипед с нуля, если в Вашей конфигурации есть обработка выгрузки?

Автор: berkut_0 05.10.17, 14:03

Цитата(Flexy @ 05.10.17, 14:46) *
А зачем изобретать велосипед с нуля, если в Вашей конфигурации есть обработка выгрузки?

Ну как бы у меня нет экспорта в прайс ...
А так - сделать всё одной кнопкой.

Мне на другом форуме помогли чутка (дали код формирования прайса, и выгрузки файла на FTP), так что я продолжаю пытаться разобраться ...
Сейчас я пытаюсь выгрузить прайс по номенклатуре; отковырял код обработки "Печать этикеток и ценников", там собственно есть формирование запроса и подгрузка того, что мне нужно. Только там заполнение табличной части, а я собираюсь сразу в файл =).
Но вот столкнулся с такой незадачей: такой же запрос возвращает 0 строк.
В обработчике-доноре группа выбирается посредством реквизита, а в моём - строковая константа.
При отладке обработчика-донора название группы в переменной в отладчике показано без кавычек



а при отладке моей обработки - с кавычками



Собственно, подскажите пожалста, как быть ?


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Автор: salton 05.10.17, 14:11

berkut_0 @ Сегодня, 15:03 * ,

Цитата(berkut_0 @ 05.10.17, 15:03) *
В обработчике-доноре группа выбирается посредством реквизита, а в моём - строковая константа.
При отладке обработчика-донора название группы в переменной в отладчике показано без кавычек (скрин "Отладка_1.png"); а при отладке моей обработки - с кавычками (скрин "Отладка_2.png").
Собственно, подскажите пожалста, как быть ?

В первом случае - ссылка на справочник Номенклатура. Во втором Вы подсовываете строку.
Попробуйте вместо этого получить ссылку на объект ТекГруппа = СпрНоменклатура.НайтиПоНаименованию("Аксессуары",Истина,,);
Или же на форме обработки создайте поле ввода с источником = СпрНоменклатура и выбирайте группу.
А дальше в запросе перебирайте номенклатуру в иерархии...

Автор: berkut_0 05.10.17, 14:44

salton @ Сегодня, 15:11 * ,
Спасибо ...

Вопрос почти в тему: как правильно распознавать объекты, которые возвращаются из функций ?
Например:

Функция СоздатьЗапрос(БлаБлаБла)
    Запрос = Новый Запрос(БлаБлаБла);
    // какие нибудь дополнительные параметры запроса
    Возврат Запрос;
КонецФункции

Процедура КакаяНибудьОбработка()
    Запрос = СоздатьЗапрос(Параметр);
    // а дальше переменная Запрос не имеет выпадающего списка полей и методов, как это изначально задумывается, а хочется работать как с запросом =)
КонецПроцедуры

Я так понимаю, это из-за отсутствия типизации переменных. Здесь есть приведение переменной к какому либо типу данных ?
Я видел "КАК", попробовал - не получилось.

Автор: salton 05.10.17, 15:05

Цитата(berkut_0 @ 05.10.17, 15:44) *
Вопрос почти в тему: как правильно распознавать объекты, которые возвращаются из функций ?

А зачем? Я так понимаю распознавать - вы имеете ввиду узнать какой тип переданного значения? Зачем это нужно, если мы и так знаем, что хотим передать или что получим от функции...

Чтобы привести к какому нибудь-типу... к примеру меняем тип поля ввода на форме:

Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив,,);
ЭлементыФормы.НашеПоле.ТипЗначения = ОписаниеТиповС;




Цитата(berkut_0 @ 05.10.17, 15:44) *
Функция СоздатьЗапрос(БлаБлаБла)
    Запрос = Новый Запрос(БлаБлаБла);
    // какие нибудь дополнительные параметры запроса
    Возврат Запрос;
КонецФункции


если сильно хочется то что-то типа так:

Функция СоздатьЗапрос(БлаБлаБла)
    Запрос = Новый Запрос;
    // какие нибудь дополнительные параметры запроса
         ВозвращаемоеЗначение =  Запрос.Выполнить().Выгрузить()
    Возврат ВозвращаемоеЗначение;
КонецФункции

и тут я уже знаю что функция вернет мне результат запроса выгруженный в ВозвращаемоеЗначение. Не надо гадать на гуще какой же объект мне вернула функция.

Автор: berkut_0 06.10.17, 10:34

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

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


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

 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 8
 


Модераторам, которые прикрепляют плашки с правилами:
1 - на форуме я не нашёл ничего вроде "Управление вложениями";
2 - лепить полноразмерные изображения (особенно по этому посту) будет слишком громоздко, ну или я что то не понимаю; с маленькими картинками ещё согласен ...
P. S. Правила читал.

Автор: salton 06.10.17, 15:05

Цитата(berkut_0 @ 06.10.17, 11:34) *
Как достать недостающие данные ?

Если под недостающими данными Вы имеете ввиду Количество и ПоследнююЦенуПродажи, то...
1. Если Количество - это остаток по регистру накопления ТоварыНаСкладах (или какой-то там в Альфа-Авто)
2. Последюю цену продажи нужно искать в регистре накопления продажи или если есть то в регистре сведений ЦеныНоменклатуры

Автор: berkut_0 06.10.17, 16:21

Цитата(salton @ 06.10.17, 16:05) *
это остаток по регистру накопления ТоварыНаСкладах

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

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

Изначально я искал нужный мне код номенклатуры (сравнение строк), но это уже выполняется заметно долго.
Сейчас я выполняю поиск нужной номенклатуры (сравнение ссылок) - вроде работает быстрее, но всё равно - это не правильно ...
Предполагается, что можно выполнить изначальный отсев по группе номенклатуры (как я писал выше), или можно как то забрать данные по конкретной номенклатуре. Ни то ни другое я сделать не могу ввиду нехватки знаний и примеров 09000000.gif blink.gif crazy.gif

Автор: salton 06.10.17, 16:27

berkut_0 @ Сегодня, 16:57 * ,
Отбирать нужно прямо в запросе:

ВЫБРАТЬ
    СпрНоменклатура.Наименование,
    ОстаткиТоваровКомпании.КоличествоОстаток
ИЗ
    РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпании
        ЛЕВОЕ СОЕДИНЕНИЕ СпрНоменклатура.Номенклатура КАК Номенклатура
        ПО ОстаткиТоваровКомпании.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
    СпрНоменклатура.ЭтоГруппа = Ложь
    И СпрНоменклатура.ПометкаУдаления = Ложь
    И СпрНоменклатура.ВидНоменклатуры НЕ В(&ВидНоменклатуры)


ЛЕВОЕ СОЕДИНЕНИЕ - объединяет две таблицы запроса.
Первая Номенклатура, вторая - Остатки.
При объединении берутся остатки только по номенклатуре которая есть в первой таблице.

Если что не ясно - можно глянуть в интернете по поводу Объединения - главное направление поиска есть )

Автор: berkut_0 06.10.17, 16:48

Цитата(salton @ 06.10.17, 17:27) *
Отбирать нужно прямо в запросе

Я прошу прощения, но мне не понятно в вашем запросе, где выполняется отбор по группе/конкретно заданной номенклатуре ...
Я написал этот запрос - мне написало мол "Не найдена таблица" в строке с левым соединением. Может я неправильно передаю (или вовсе не передаю) туда ту таблицу, которая у меня после моего первого запроса ?

Автор: salton 06.10.17, 16:56

Цитата(berkut_0 @ 06.10.17, 17:48) *
но мне не понятно в вашем запросе, где выполняется отбор по группе/конкретно заданной номенклатуре ...

нигде...

чтобы отбирало по группе нужно:

СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)


В данном примере будут получены все записи справочника Номенклатура, находящиеся в группе &Группа, включая ее саму, ее подчиненные группы и элементы, принадлежащие подчиненным группам.


Автор: logist 09.10.17, 15:05

Цитата(berkut_0 @ 06.10.17, 11:34) *
1 - на форуме я не нашёл ничего вроде "Управление вложениями";

В темах где они нужны (это разделы Хранилища) - они есть.

Цитата(berkut_0 @ 06.10.17, 11:34) *
2 - лепить полноразмерные изображения (особенно по этому посту) будет слишком громоздко, ну или я что то не понимаю; с маленькими картинками ещё согласен ...

Форуму не один год, и если мы решили что вставлять изображения так - это нормально, значит так и надо делать.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua