Версия для печати темы (https://pro1c.org.ua/index.php?s=910d293673e37858c05cd5b3831217eb&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С не могут нормально разрулить даже со своим битриксом.
Та ладно, вы просто не умеете "готовить"
Автор: Егор Динин 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);
Тьфу...Не заметил.
Автор: 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)
это остаток по регистру накопления ТоварыНаСкладах
Да, я накопал РегистрыНакопления.ОстаткиТоваровКомпании.Остатки();
Это таблица значений, первая колонка которой - Ссылки на конкретную номенклатуру, а третья колонка - нужное мне количество.
Но оттуда мне приходят все остатки всех товаров по всей номенклатуре.
Как выполнить выборку только тех остатков, которые входят в ту же группу номенклатуры ?
В этой функции есть параметр "Отбор", попытался по синтаксис-помощнику заполнить - ошибка контекста. Попытался соорудить собственный запрос - ошибка что то типа результат хранить можно только во временной таблице.
Изначально я искал нужный мне код номенклатуры (сравнение строк), но это уже выполняется заметно долго.
Сейчас я выполняю поиск нужной номенклатуры (сравнение ссылок) - вроде работает быстрее, но всё равно - это не правильно ...
Предполагается, что можно выполнить изначальный отсев по группе номенклатуры (как я писал выше), или можно как то забрать данные по конкретной номенклатуре. Ни то ни другое я сделать не могу ввиду нехватки знаний и примеров
Автор: 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