Здравствуйте. Вопрос такой: могу ли я из 1С (8.3) подключиться к файловой базе данных, которая будет размещена где нибудь на VPS (FTP) ? В окне списка баз я не нашёл ничего того, что могло бы мне позволить подключаться непосредственно к FTP, но есть возможность подключения к веб-серверу. При создании же новой базы есть возможность разместить только локально или на веб-сервере 1С; хотя у нас на работе есть один поставщик, который даёт доступ к базе по ссылке (которая вроде как не от 1С), которую нужно вбивать при добавлении существующей базы в поле размещения веб-сервера. Как мне организовать такую же механику ?
P. S. Нагуглил https://infostart.ru/public/646384/ , пошёл жмакать "Публикация на веб-сервере", и мне 1С благополучно выдал "Веб-серверы не обнаружены", что вполне нормально, ибо целевой сервер уже настроен, и находится uде то в распоряжениb хостинга (VPS)
Здравствуйте. В рамках интеграции сайта с 1С я соорудил обработку, которая умеет формировать прайс, грузить его на FTP, и запускать скрипт-обработчик, который лежит на сервере (через HTTP).
И это при том, что в 1с я всего две недели - ага, хвастаюсь; умею пользоваться справочной литературой, поиском, и помощью на форумах (спасибо местным обитателям). Скрипт-обработчик соорудил так же самостоятельно =).
Теперь стоит задача - пинать этот обработчик, скажем, каждые пять минут. В регламентных заданиях у себя ничего необходимого не обнаружил (1С 8.3, конфигурация Альфа-Авто 5.1, файловая БД). Нагуглил запуск целой 1С с параметрами посредством ярлыка, но это слишком громоздко. Мне бы желательно, что бы обработчик запускался в рабочей 1С, допустим под той же учётной записью "Администратор", или спихнуть это дело на "Робот".
Я тут нарвался на консоль запросов, и тут что то даже получается. Сейчас у меня куча осложнений, и в целом - я почти справляюсь. Но есть одна проблема ... Начну с того, что я уже имею - мой текущий запрос:
ВЫБРАТЬ Таблица_КурсыВалют.Курс, Таблица_Номенклатура.Артикул, Таблица_Цены.Цена, Таблица_Остатки.КоличествоОстаток, Таблица_Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Таблица_Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК Таблица_Цены ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Таблица_КурсыВалют ПО Таблица_КурсыВалют.Валюта.Ссылка = Таблица_Цены.ТипЦен.ВалютаЦены.Ссылка ПО Таблица_Номенклатура.Ссылка = Таблица_Цены.Номенклатура.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки ПО Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура.Ссылка ГДЕ Таблица_Номенклатура.ЭтоГруппа = ЛОЖЬ И Таблица_Номенклатура.Родитель В ИЕРАРХИИ(&Категории) И Таблица_Цены.ТипЦен В(&ТипыЦен) И НЕ Таблица_Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры)
Все мои сложности в словах: мне нужно получить артикул, цену, количество, наименование, и (гвоздь сегодняшней программы) курс той валюты, которая указана в срезе цены заданной номенклатуры. У меня это вроде как получилось.
Сам в шоке.
Так как цену я получаю в валюте - мне и нужен курс, на который я потом буду множить получаемую цену. Проблема в том, что НЕ выгружаются те позиции, у которых не указаны цены/остатки. Они нужны для того, что бы потом туда поставить нули (так надо, для сайта =) ). Помогите вылечить плиз =)
Запрос=Новый Запрос("ВЫБРАТЬ | Таблица_Номенклатура.Ссылка, //| Таблица_ЦеныСрезПоследних.Цена, | Таблица_Остатки.КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК Таблица_Номенклатура //| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК Таблица_ЦеныСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК Таблица_Остатки |ПО //| Таблица_Номенклатура.Ссылка = Таблица_ЦеныСрезПоследних.Номенклатура | Таблица_Номенклатура.Ссылка = Таблица_Остатки.Номенклатура |ГДЕ | Таблица_Номенклатура.ЭтоГруппа = Ложь И | Таблица_Номенклатура.ПометкаУдаления = Ложь И | Таблица_Номенклатура.ВидНоменклатуры НЕ В (&ВидыНоменклатуры) И | Таблица_Номенклатура.Ссылка В ИЕРАРХИИ(&Категория)");
Комментированные строки - это те, которые мне нужно заставить работать. Если сделать их не комментированными - то будет ругаться мол " Ожидается имя таблицы <<?>>ГДЕ ". Я попробовал выполнить по отдельности - только для цен, и только для остатков - и оно работает. Но из этого сразу же проблема ... Без отбора (и без цен, и без остатков) я получаю 105 единиц номенклатуры, при отсеве по остаткам я получаю всё те же 105; а вот при отсеве по ценам - мне сыпет 199. Откуда ? Всего в подопытной группе 105 позиций. Это особенно критично, если придётся таки пилить два запроса.
podcast @ Вчера, 11:06
, Я так поступаю изначально ... Но это не так то и просто, когда код простынёй, не разбит на логические составляющие, и часто дублируется.
Я получаю структуру ТаблицаЗначений, в которой помимо всего прочего, первая колонка - ссылка на номенклатуру, а третья колонка - количество товаров по остаткам. Нужно мне это для того, что бы из всех остатков выдевыбрать только те, которые мне нужны - отсев по параметру запроса
В ИЕРАРХИИ(&СсылкаНаГруппу)
Иль может можно в запросе как то указывать не имя (в выборке), а индекс колонки ? (типа как в коде - Таблица[i][g]) Это я где то в интернете нарыл, что можно выполнять запрос в таблицу, которая у меня сформирована в моём коде.
В прочем, я не уверен, что смогу соорудить и такой запрос (перебираю варианты), и вот почему ... В моей предыдущей теме я так и не смог соорудить запрос(ы?), который вернул бы мне ссылки номенклатуры и их остатки; и это я ещё не добрался на РегистрыСведений.Цены.СрезПоследних().
P. S. На всякий случай: я в 1С работаю совсем уж недавно, в добровольно-принудительном порядке (хочешь - учись, не хочешь - вали с работы).
Я прошу прощения, но мне не понятно в вашем запросе, где выполняется отбор по группе/конкретно заданной номенклатуре ... Я написал этот запрос - мне написало мол "Не найдена таблица" в строке с левым соединением. Может я неправильно передаю (или вовсе не передаю) туда ту таблицу, которая у меня после моего первого запроса ?
это остаток по регистру накопления ТоварыНаСкладах
Да, я накопал РегистрыНакопления.ОстаткиТоваровКомпании.Остатки(); Это таблица значений, первая колонка которой - Ссылки на конкретную номенклатуру, а третья колонка - нужное мне количество. Но оттуда мне приходят все остатки всех товаров по всей номенклатуре.
Как выполнить выборку только тех остатков, которые входят в ту же группу номенклатуры ? В этой функции есть параметр "Отбор", попытался по синтаксис-помощнику заполнить - ошибка контекста. Попытался соорудить собственный запрос - ошибка что то типа результат хранить можно только во временной таблице.
Изначально я искал нужный мне код номенклатуры (сравнение строк), но это уже выполняется заметно долго. Сейчас я выполняю поиск нужной номенклатуры (сравнение ссылок) - вроде работает быстрее, но всё равно - это не правильно ... Предполагается, что можно выполнить изначальный отсев по группе номенклатуры (как я писал выше), или можно как то забрать данные по конкретной номенклатуре. Ни то ни другое я сделать не могу ввиду нехватки знаний и примеров
Дабы не плодить новые темы - напишу сюда же ... Есть следующий код:
Функция ЗагрузитьГрппу(СтрокаГруппы) ТипЗаполнения="ЗаполнитьПоГруппе";
ТекГруппа=Справочники.Номенклатура.НайтиПоНаименованию(СтрокаГруппы,Истина,,); Запрос=Новый Запрос("ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура // | как тянуть последнюю цену продажи ? // | как тянуть колиество ? |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура |ГДЕ | НЕ СпрНоменклатура.ЭтоГруппа И | НЕ СпрНоменклатура.ПометкаУдаления И | НЕ СпрНоменклатура.ВидНоменклатуры В (&ВидыНоменклатуры) | "+?(ТипЗаполнения="ЗаполнитьПоГруппе","И СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ТекГруппа)","")); Запрос.УстановитьПараметр("ТекГруппа",ТекГруппа); ВидыНоменклатуры=Новый Массив; ВидыНоменклатуры.Добавить(Перечисления.ВидыНоменклатуры.ПрочиеАктивы); ВидыНоменклатуры.Добавить(Перечисления.ВидыНоменклатуры.Услуга); Запрос.УстановитьПараметр("ВидыНоменклатуры", ВидыНоменклатуры);
Выгрузка = Запрос.Выполнить().Выгрузить(); Результат=""; КоличествоПозиций = Выгрузка.Количество(); СчётчикНоменклатуры = 0; Пока СчётчикНоменклатуры < КоличествоПозиций Цикл // может недостающие данные можно как то подтянуть здесь ? Результат=Результат+ Выгрузка[СчётчикНоменклатуры][0].Артикул+";"+ // сюда надо подцепить количество и последнюю цену продажи; названия полей нужно уточнять Выгрузка[СчётчикНоменклатуры][0].Наименование+";"+ Символы.ВК; СчётчикНоменклатуры=СчётчикНоменклатуры+1; КонецЦикла; Возврат Результат; КонецФункции
Собственно, код лепился из говна и палок с использованием помощи в интернете, разбором кода имеющихся (встроенных) обработчиков, ну и не без использования синтаксис-помощника. Но то что есть - уже работает. И это хорошо. Как достать недостающие данные ? Прикрепил скриншоты того, что у меня происходит в 1С:
Модераторам, которые прикрепляют плашки с правилами: 1 - на форуме я не нашёл ничего вроде "Управление вложениями"; 2 - лепить полноразмерные изображения (особенно по этому посту) будет слишком громоздко, ну или я что то не понимаю; с маленькими картинками ещё согласен ... P. S. Правила читал.
Вопрос почти в тему: как правильно распознавать объекты, которые возвращаются из функций ? Например:
Функция СоздатьЗапрос(БлаБлаБла) Запрос = Новый Запрос(БлаБлаБла); // какие нибудь дополнительные параметры запроса Возврат Запрос; КонецФункции
Процедура КакаяНибудьОбработка() Запрос = СоздатьЗапрос(Параметр); // а дальше переменная Запрос не имеет выпадающего списка полей и методов, как это изначально задумывается, а хочется работать как с запросом =) КонецПроцедуры
Я так понимаю, это из-за отсутствия типизации переменных. Здесь есть приведение переменной к какому либо типу данных ? Я видел "КАК", попробовал - не получилось.
А зачем изобретать велосипед с нуля, если в Вашей конфигурации есть обработка выгрузки?
Ну как бы у меня нет экспорта в прайс ... А так - сделать всё одной кнопкой.
Мне на другом форуме помогли чутка (дали код формирования прайса, и выгрузки файла на FTP), так что я продолжаю пытаться разобраться ... Сейчас я пытаюсь выгрузить прайс по номенклатуре; отковырял код обработки "Печать этикеток и ценников", там собственно есть формирование запроса и подгрузка того, что мне нужно. Только там заполнение табличной части, а я собираюсь сразу в файл =). Но вот столкнулся с такой незадачей: такой же запрос возвращает 0 строк. В обработчике-доноре группа выбирается посредством реквизита, а в моём - строковая константа. При отладке обработчика-донора название группы в переменной в отладчике показано без кавычек
В целом, это тоже решаемо ... Я вижу следующие подзадачи: 1 - на сайте по необходимости формируются файлы импорта в 1С; 2 - раз в час/день/месяц/год - обработка заходит в указанное место на FTP, и выполняет необходимый импорт по необходимым базам (что то типа расчётные счета/чеки/выходные накладные). В качестве бонуса и от скучной жизни - можно выполнять перепроверку по остаткам-заказам, и пересчитывать остатки; зато это будет автоматически, и всё в той же 1С. Но для этого нужна более серьёзная обработка в самой 1С.
Цитата(Егор Динин @ 05.10.17, 10:11)
вместе емейлами и телефонами заказчиков
А это зачем ? Оно всё есть на сайте, и в 1С оно попросту ни к чему.
Мне двухстороннее и не надо ... Я вообще этого не понимаю - управление должно происходить там, где это более важно, а всё остальное подчиняется. Учёт всех товаров выполняется в централизованой базе, в данном случае - в 1С. Значит и оттуда должно быть управление.
Ну или тоже самое если представить, что у автомобиля будет два руля - первый слева, второй справа ... Аналогия конечно неправильная, так как критический уровень взаимных помех (и тем не менее, такая опция была бы полезной в отельных, столь же критических ситуациях). Но суть та же.
Я выделил подзадачи, которые вполне себе реализуемы.
Цитата(berkut_0 @ 04.10.17, 12:01)
из 1С выгружается прайс-лист (по расписанию, или при изменении данных), загружается на FTP, а север уже сам выполняет обработку файла (с пинка, или с определённой периодичностью)
Здравствуйте. Спойлеров здесь я не обнаружил, так что просто немалое количество текста без группировки ...
Предисловие ... Я компьютерщик/сисадмин/программист в одной конторе. С недавних пор мне на голову упало всё то, что касается 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.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!