PDA

Просмотр полной версии : Импорт комплектов из StoreHouse через Ole



pau74
27.12.2013, 00:28
Здравствуйте,

Установлена StoreHouse 4. (4.63 склад, 4.63 сервер)
Среди функций Ole-сервера (interface.txt) не нашел функций импорта списка комплектов.
Возможно кто-либо решал этот вопрос.

Спасибо.

sibgaba
27.12.2013, 08:37
А импорт нужен куда и зачем? Если это разовая процедура, то проще через отчет все сделать...

pau74
27.12.2013, 18:51
Импорт нужен в 1с.
Можно ли через отчет выгрузить все реквизиты комплекта?

Brambrulet
27.12.2013, 20:51
Не знаю что вы называете реквизитами.

Не очень понимаю, что вы собираетесь с технологичками делать в 1С.

Можно получить список комплектов: Отчёты->Списки->Список_комплектов.

Anchuta73
23.10.2014, 17:44
Добрый день! Мне нужно перенести комплекты из SH4 в 1С:Предприятие 8.3, т.к. перестаем работать в программе SH. Точнее скажу, все, что было за весь 2014 год нужно перенести в 1 С импортом. Возможно ли это вообще?????

SH
23.10.2014, 18:22
Я так понимаю, мы с Вами по телефону говорили.
Да, тут дилер вообще помогать не обязан, т.к. вопрос выходит за рамки продуктов UCS.
Готового решения я не знаю. Вряд ли.
Но вообще - задача решаема. Надо писать. Если объем можно перебить руками за 2 недели - то дешевле будет перебить руками.

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

Anchuta73
23.10.2014, 18:47
У нас конфигурация общепитовская стоит в 1С, так что возможно все перенести туда! А куда писать то? Наш диллер в г.Ульяновске трубки не берет, и не помогает ни в чем!? Если Вы нам поможете в этом, то мы лучше Вам заплатим за такую работу от которой толк будет!

SH
23.10.2014, 23:50
Дорого выйдет. Я говорю - лучше вручную перебить.
А тут - вы будете платить, мы будем писать, потом будем тестировать, исправлять ошибки... За те две недели все вручную вобьете без проблем.

Anchuta73
24.10.2014, 11:38
Легко Вам сказать!:wall:

SH
24.10.2014, 12:44
Не, ну, если вы готовы заплатить - пишите на почту.

Сергеев Алексей
10.03.2015, 18:50
Добрый день!
Купили в этом году RK7 и ST4, для автоматизации учета в кафе при Бизнес Центре.
До этого кафе работало более 8 лет, в следствии чего имеется очень обширное меню (около 1000 наименований блюд).
Меню закачали в SH4 из файла, а вот с ТТК не знаю что делать. Заносить в ручную - долго. Можно ли их откуда-то загрузить, с последующей правкой?

SH
10.03.2015, 18:55
Можно ли их откуда-то загрузить, с последующей правкой?
Можно считать, что нет. Ради разовой загрузки писать обработчик нерентабельно ни по времени, ни по деньгам.

(около 1000 наименований блюд).
И все актуальные?

sibgaba
11.03.2015, 08:44
Век живи - век учись, да так неучем и помрешь...

На днях случайно откопал на сапорте:

http://support.ucs.ru/ru/node/7817

Копипаст сюда не встает, если доступа нет, то пишите Алексею.

Вкратце: в статье описана утилита для импорта справочников товаров и комплектов их книги Excel.

SH
11.03.2015, 11:11
Да, а я уже успел забыть про эту штуку.
Тем не менее, так как требуется соблюдение формата, то приведение своих записей к требуемому и последующая проверка, плюс неизбежное исправление допущенных ошибок - ну, неделя на это уйдет. А за неделю все можно и вручную вбить.
Кроме того, начинать работу можно не дожидаясь, пока будут перенесены все карты. Даже с учетом бизнес-ланчей, вряд ли актуальных позиций на неделю более 200. Скорее - меньше.

Narratius
01.03.2016, 20:50
Добрый день!
Аналогичный вопрос - получение через OLE содержимого справочника "Комплекты". Либо себестоимости комплекта...

sibgaba
01.03.2016, 22:13
получение через OLE содержимого справочника "Комплекты". Либо себестоимости комплекта...
Стандартный вопрос: А зачем?

Себестоимость как таковая нигде не хранится, она всегда рассчитывается из актуального товародвижения.
И даже если вы вытащите к/к то что бы рассчитать себес вам нужно все товародвижение (т.е. все документы, и не только приходные, но и расходные).

Если RK7, то может быть проще импортить себес туда а от туда доставать через XML?

Narratius
02.03.2016, 14:20
Для построения экзотических отчетов для начальства.
Я понимаю, что себестоимость - это расчетная единица. Для ее получения в OLE есть все, кроме справочника "Комплекты".
Коли в самом SH есть возможность получить себестоимость комплекта, выглядит логичным, что "можно" вытащить эту "ручку" в OLE и передавать в нее ID комплекта :) Это идеальный вариант, чтобы не тянуть кипу накладных :)

sibgaba
02.03.2016, 18:32
Коли в самом SH есть возможность получить себестоимость комплекта
"получить" это не правильное слово. Неоткуда ее получать. Не хранится она нигде. Ее можно только рассчитать (что SH и делает каждый раз когда вы открываете комплект).

Поэтому

вытащить эту "ручку" в OLE и передавать в нее ID комплекта
Не сработает. OLE ничего не считает, он дает доступ к данным которые есть в БД. Себестоимости комплекта там нет.


Для построения экзотических отчетов для начальства.
А что за отчет (просто интересно кто как извращается).

Narratius
02.03.2016, 20:11
Давайте расставим точки над i - что такое OLE? Это доступ через протокол к процедурам и функциям, которые выполняют какие-то действия (логин, запрос к базе за данными и тп), поэтому утверждение, что OLE ничего не считает мягко сказать неверно.

SH
03.03.2016, 01:05
Ну так видимо нет такого запроса через OLE, который бы что-то посчитал. Хотя технически Вы правы - возможность есть.

Narratius
04.03.2016, 13:20
То, что в настоящий момент такой ручки нет, я уже понял. Поэтому возникло два вопроса:
Насколько трудоемко добавить в OLE процедуру получения себестоимости комплекта?
Насколько трудоемко добавить в OLE процедуры получения состава справочника "Комплекты"?
Первый вариант предпочтительнее.

SH
04.03.2016, 13:37
Оба варианты невозможны. OLE-сервер - часть движка shouse, никто его менять не будет.

Narratius
04.03.2016, 13:41
Хорошо. Как можно решить эти задачи по-другому?

SH
04.03.2016, 14:16
Возвращаемся к вопросу:
Стандартный вопрос: А зачем?
Что за экзотический отчет, о чем он?

Narratius
04.03.2016, 14:50
Я сугубо технический специалист, поэтому заранее извиняюсь, если буду использовать неправильные термины :)
Насколько я понял, начальство хочет снизить ассортимент продуктов и выполнить какой-то углублённый ABC-анализ.
Ну а теперь моя очередь вернуться к началу - "как можно получить себестоимость комплекта или состав справочника "Комплекты"?"

SH
04.03.2016, 15:33
Вот, уже лучше.
Начинаем с того, что ABC-анализ делается на основании продаж, а не справочника. Если бы Вы вытянули все из "Комплектов", то оказали бы своему начальству медвежью услугу - они бы получили углубленный анализ неправильных данных.
Так что - Вам следует вытягивать документы, в частности - комплектации, и работать с ними.

Narratius
04.03.2016, 17:19
Как мне объяснили, только по продажам делают стандартный отчёт. Дальше они хотят посмотреть, высокомаржинальные или низуомаржинальные блюда составляют группу А. В зависимости от этого вырабатывать стратегию - либо убирать блюда с высокой маржинальностью (а это, в основном, те, у которых ингредиенты живут недолго), или, наоборот, уходить в премиум-сегмент, снижая долю низкомаржинальных блюд. А чтобы посчитать маржу нужна себестоимость.

sibgaba
04.03.2016, 18:22
ttttttt

ABC-XYZ анализ.
Стандартный отчет SH. существует 100500 лет. Отличие от простого ABC в том что как раз учитывается маржинальность.
Более того, в настройках фильтра отчета можно самому указать границы групп.

SH
04.03.2016, 21:32
Ес, еще можно shutils поставить - мне там больше нравится ABC-анализ.

Narratius
09.03.2016, 13:33
Спасибо за ответы, коллеги!
Наверняка же есть альтернативные способы. У меня два выбора - или сделать то, что просит заказчик, получив с него денежку, либо учить заказчика "жить", вернув аванс. Мне больше нравится первый путь, поэтому ещё раз прошу помочь вытащить нужные данные. Тем более, раз есть отчёт, значит, наверное, можно его построение инициировать через тот же OLE и получить данные, пригодные для машинной обработки. Если для этого нужно доработать OLE-модуль - давайте обсуждать стоимость. Аванс-то пока я не вернул :)

SH
09.03.2016, 13:59
Тогда я могу только еще раз повторить, что надо вытаскивать не предполагаемую себестоимость из комплекта, а рассчитанную из документов.

Narratius
09.03.2016, 14:02
Что такое "предполагаемая себестоимость"? Насколько я понял из документации, в комплекте указаны лишь товары и их количество, а себестоимость считается на основе накладных исходя из количества. Идеальный вариант (чтобы алгоритм вычисления был одинаковый) - получить себестоимость комплекта из OLE по тем же правилам, что она считается в SH

SH
09.03.2016, 17:22
Предполагаемая себестоимость - это себестоимость, отображаемая в карточке комплекта на основе себестоимости товаров либо самых старых на остатке (фифо), либо по последнему приходу.
То есть, допустим, у нас было три прихода товара: по 50 рублей, 300 рублей и 100 рублей.
В карточке комплекта, в зависимости от настроек, мы увидим либо 50 рублей, либо 100 рублей, в зависимости от настройки - это и есть предполагаемая себестоимость.
После того, как проведем списание, у нас спишется 450 рублей, что в среднем даст себестоимость единицы в 150 рублей - это рассчитанная себестоимость.
Для АВС-анализа (и вообще, любого анализа продаж) правильно брать последнюю - и в карточке комплекта Вы ее не увидите.
Себестоимость из комплекта можно брать только для планирования, и то с оговорками.

Narratius
10.03.2016, 11:29
Все это опять возвращает нас к комплектам - без них ни о какой себестоимости и речь не может идти... Как их получить?

sibgaba
10.03.2016, 12:22
Да не нужны они (комплекты) вам.

Если вы хотите анализировать фактическую маржу, то вам нужна не расчетная себестоимость из комплекта, а фактическая, из первичных документов.

Получить ее можно из документов комплектации.

Narratius
10.03.2016, 14:48
Звучит все замечательно. Теперь давайте попробуем решить мою проблему на конкретном примере. Пусть нашим блюдом, себестоимость (маржу, не суть) которого мы хотим узнать, будет пельмень ручной работы. Не вдаваясь в подробности рецептуры, предположим, что пельмень (RID1) состоит из муки (RID2), мяса (RID3) и соли (RID4) (такой примитивный комплект, о котором на самом деле ничего не известно). Вызываем функцию DocList за последний месяц, отбираем из списка накладных только накладные с типом 12 (комплектация). Даже если нам повезло, и в накладных указаны лишь мука, мясо и соль, перед нами встает новая задача - как теперь отобрать только те накладные, которые относятся к пельменям, а не, к примеру, блинчикам с мясом или пирожкам?

SH
10.03.2016, 14:56
Да никак. Надо брать все комплектации и разбирать их.

Narratius
10.03.2016, 15:05
Как разбирать? По какому критерию? Как отличить мясо для котлет от мяса для пельменей? Вернее, как узнать, сколько мяса пошло на котлеты, а сколько на пельмени?

sibgaba
10.03.2016, 16:23
Как разбирать? По какому критерию? Как отличить мясо для котлет от мяса для пельменей? Вернее, как узнать, сколько мяса пошло на котлеты, а сколько на пельмени?
А зачем все это если в Комплектации уже есть себестоимость пельменей?
Я ХЗ как оно там в OLE выглядит, но если непосредственно в складе открыть документ комплектации то на закладке товары будут эти самые пельмени и их себестоимость которая сложилась из муки и всего остального.

Можно (и наверное нужно) еще дальше пойти и работать с документами р/н, которые покрывают реализацию, а не К. Ибо там будут непосредственно проданные пельмени, их количество, себестоимость и фактическая продажная цена.

Narratius
10.03.2016, 17:06
Я ХЗ как оно там в OLE выглядит
Спасибо за ответ :)
Но задача, которую нужно решить - получить всю необходимую для анализа информацию через OLE. Потому что планируется автоматизированный мониторинг.

SH
10.03.2016, 17:11
Потому что планируется автоматизированный мониторинг.
Звучит интересно. Напишите мне, может, мы поучаствуем.

sibgaba
10.03.2016, 17:42
Да пожалуйста...

Через ole все и решается:
- Получаете список документов р/н (по хорошему их нужно отфильтровать по корреспонденту, что бы убрать лишнее)
- из содержимого документов выгребаете проданные блюда, их количество, себестоимость и продажную цену.

Комплект не нужен.

---------- Добавлено в 19:42 ---------- Предыдущее сообщение было размещено в 19:41 ----------


Звучит интересно. Напишите мне, может, мы поучаствуем.
Тоже хочешь Золотой Грааль?
;)

SH
10.03.2016, 19:15
Мне золотой грааль не нужен, но то, что это было бы неплохо в онлайне видеть - факт.
Впрочем, мы это все равно будем в Ресталитике делать.

Narratius
10.03.2016, 19:46
Получаете список документов р/н
Наверное, я что-то не так делаю - получаю накладные по DocList, выбираю из них 1.103.10.1 = 4, вызываю Doc4 (и с 1.103.11.1, и с 8), но вместо себестоимости получаю 0...

sibgaba
10.03.2016, 21:53
О! Еще идея. Если у вас 7ой кипер и хочется в отчете текущую себестоимость, то ее можно брать из кипера по xml.

Narratius
14.03.2016, 17:16
То есть "ручка" есть, коли кипер ее вычисляет из СХ...

sibgaba
14.03.2016, 17:30
Вот право слово, складывается ощущение, что вы думаете, что мы тут все знаем как это сделать (забрать готовую себестоимость), но умышленно от вас скрываем где находится эта "ручка" :)

Знали бы - сказали.
Специально искать ее для вас - вряд ли найдутся желающие.

Кипер ее не "вычисляет", а "получает".
И вообще далеко не факт что Кипер делает это через OLE, может он напрямую из базы берет. Разработчик то, один и тот же...

SH
14.03.2016, 19:10
Собственно, насколько мне известно, OLE - это лишь внешний интерфейс для существующих процедур, там ничего специально не написано.
Но да, конкретно такую задачу - не решали даже. Была задача вытянуть посчитанную себестоимость из накладных - вытягивали накладные и разбирали.

Narratius
15.03.2016, 17:38
Была задача вытянуть посчитанную себестоимость из накладных - вытягивали накладные и разбирали

С этим у меня проблема - себестоимость всегда 0 :(

Narratius
27.03.2016, 22:22
Неужели нет никого, кто мог бы подсказать правильный алгоритм?

SH
27.03.2016, 23:00
Насколько мне известно, непосредственно из программистов, кто занимался OLE SH4, здесь был только brambrulet, но он в последнее время не заходит.
Мои программисты здесь не сидят, и просить их не буду - колхоз дело добровольное. Потому что все весьма сложно. Тут "подсказать алгоритм" - это сделать его.

Цитирую чат нашего программиста (А) с заказчиком аналогичной задачи (Q)

Q: Вообще вопрос возник так: в ркипер импортируется себестоимость из SH кнопкой
Q: Эта себестоимость устраивает, но никто не будет жать кнопку каждый день
Q: Фактически, раз ркипер умеет запрашивать у SH по команде эту цифру, значит она где-то в сторе хранится в явном виде
A: Не факт...
A: Ой не факт...
Q: Вряд ли она рассчитываться начинает по запросу
A: Скорее всего
A: Почти уверен, что так
Q: Тогда значит кипер умеет запускать эту процедуру
Q: В любом случае алгоритм такой есть. Раскопать бы )
A: По поводу расчета наверняка
A: SH очень много всего на лету быстро считать умеет
Q: Как бы понять что за команду формирует ркипер
Q: Ну и тогда просто ее повторить внешним скриптом ))
A: Ну чтото я не очень вижу прям экпорт в RK
A: Есть Экспорт свойст комплектов. Надо смотреть что он делает. А так свойства калькуляций
A: Они кстати могут сильно расходитя с тем что в RK приходит. Надо понимать какие цифры приходят. Нужен доступ к SH и RK. Чтоб понимать что за цифры в него грузятся и сравнивать их с результатами процедур
A: Кстати это зачастую единственный способ понять что за колонки возвращает SH - сравнивать цифры
Q: ну мы так и сделали ))
Q: мы сделали импорт в РК, сказали клиенту какие цифры пришли (себестоимость) и клиент подтвердил что правильно
A: Я имел ввиду результаты работы процедуры SHOle и сам SH
A: Потому что большинство полей не документировано
A: Поясняю
A: [ Photo ]
A: Это список процедур. Он сам по себе немаленький)
A: А вот что возвращает например CmHdr
A: [ Photo ]
A: Она возвращает 5 таблиц
A: Это список колонок
A: Так вот. Доков нету)
A: приходится играть в Шерлокхолмсов)
A: тут поле 200.5.1
A: поля таблиц не описаны
A: SH - это левелап)
A: Это квест)

Narratius
28.03.2016, 19:11
Все это очень увлекательно, но совершенно бесполезно. Возвращаясь к сообщению


Собственно, насколько мне известно, OLE - это лишь внешний интерфейс для существующих процедур, там ничего специально не написано.
Но да, конкретно такую задачу - не решали даже. Была задача вытянуть посчитанную себестоимость из накладныех - вытягивали накладные и разбирали.

хочется узнать, как вытянуть накладные, чтобы в них была посчитанная себестоимость. Раз уж такую задачу вы решали...

Sepu
21.07.2016, 01:08
сколько лет сколько зим, код на 1с для получения материалов вхожих в комплект по РИД на дату
AppID = "Sh4Ole.Sh4App"; sh = новый COMОбъект(AppID);
Addr = "00.00.000.000";
Port = "2007";
Таймаут = "30000"; // таймаут полминуты ну совсем плохой инет
Протокол = ":pTa"; // ТСП\ИП
sh.SetServerName (Addr + Протокол +Port+ "t"+ Таймаут);
if sh.DBLoginEx("Admin", "") <> 0 then
сообщить("Фейл логина");
возврат;
конецесли;
procname = "CmItemsRpt";
IndQuery = Sh.pr_CreateProc(ProcName);
if sh.GetExcMessage() <> "OK" тогда
сообщить(sh.GetExcMessage());
sh.DBLogout();
возврат;
конецесли;
sh.pr_SetValByName(IndQuery, 0, "200.1.0", 169); // 169 - RID комплекта
sh.pr_SetValByName(IndQuery, 0, "0.1.0", текущаядата()); // дата, на которую берем комплект
sh.pr_ExecuteProc(IndQuery);
IndexDS =1;
номерстрокидетализированн огокомплекта = 1;
while sh.pr_EOF( IndQuery,IndexDS )<>1 do
числ = sh.pr_FieldCount(IndQuery, IndexDS);
Сообщить("Номер строки: "+номерстрокидетализирован огокомплекта);
для сч = 0 по числ-1 цикл
ик = sh.pr_FieldName(IndQuery, IndexDS, сч);
сообщить("Колонка = " + ик + " Значение = " + sh.pr_ValByNumber(IndQuery, IndexDS, сч));
конеццикла;
номерстрокидетализированн огокомплекта= номерстрокидетализированн огокомплекта+1;
sh.pr_Next(IndQuery,IndexDS);
конеццикла;
sh.pr_CloseProc(IndQuery);
sh.DBLogout();

Sepu
22.07.2016, 21:30
очень странно, код неожиданно прерывается и имя переменной искажено, но если нажать на кнопку"ответить с цитированием", то в темплейте сообщения можно увидить компилируемый 1ской код

sibgaba
23.07.2016, 10:10
Движок форума не любит длинныхсловбезпроделов

AppID = "Sh4Ole.Sh4App"; sh = новый COMОбъект(AppID);
Addr = "00.00.000.000";
Port = "2007";
Таймаут = "30000"; // таймаут полминуты ну совсем плохой инет
Протокол = ":pTa"; // ТСП\ИП
sh.SetServerName (Addr + Протокол +Port+ "t"+ Таймаут);
if sh.DBLoginEx("Admin", "") <> 0 then
сообщить("Фейл логина");
возврат;
конецесли;
procname = "CmItemsRpt";
IndQuery = Sh.pr_CreateProc(ProcName);
if sh.GetExcMessage() <> "OK" тогда
сообщить(sh.GetExcMessage());
sh.DBLogout();
возврат;
конецесли;
sh.pr_SetValByName(IndQuery, 0, "200.1.0", 169); // 169 - RID комплекта
sh.pr_SetValByName(IndQuery, 0, "0.1.0", текущаядата()); // дата, на которую берем комплект
sh.pr_ExecuteProc(IndQuery);
IndexDS =1;
номерстрокидетализированн огокомплекта = 1;
while sh.pr_EOF( IndQuery,IndexDS )<>1 do
числ = sh.pr_FieldCount(IndQuery, IndexDS);
Сообщить("Номер строки: "+номерстрокидетализирован огокомплекта);
для сч = 0 по числ-1 цикл
ик = sh.pr_FieldName(IndQuery, IndexDS, сч);
сообщить("Колонка = " + ик + " Значение = " + sh.pr_ValByNumber(IndQuery, IndexDS, сч));
конеццикла;
номерстрокидетализированн огокомплекта=номерстрокид тализированногокомплекта+ 1;
sh.pr_Next(IndQuery,IndexDS);
конеццикла;
sh.pr_CloseProc(IndQuery);
sh.DBLogout();