Совсем никак, или все таки можно после создания заказа найти для него "коллекции" отгрузок и оплат и удалить их программно? Какие-то события вроде бы как есть для заказа - OnSaleOrderBeforeSaved и OnSaleOrderSaved.
Судя по вот этой статье - можно создать заказ без Оплат и Отгрузок (всегда создается лишь некая системная отгрузка) -
Как я понял, вид выбранной для оплаты заказа покупателем платежной системы перекочевал из свойства заказа в Оплату, так что без Оплаты наверное не обойтись. У меня с Оплатами одна проблема - после того как заказ был получен из БУС в 1с, в 1с же и отредактирован и отправлен обратно в БУС, привязанная к заказу оплата в БУСе не пересчитывается.
На примере:
Клиент создал заказ на 10000 рублей, менеджер его проверил по остаткам, правильности выбора и т.д., созвонился с покупателем, скорректировал заказ, поменял количество товара или заменил что-то - заказ в 1с стал 15000 рублей. После обмена с БУС - товарный состав заказа на сайте - 15000 рублей, но привязанная к нему Оплата - так и осталась 10000 рублей. Чем там думают в Битриксе - непонятно. Надо делать обработку события сохранения заказа при обмене с 1с и пересчитывать стоимость привязанной Оплаты, чтобы правильно отображать клиенту финансовую информацию. Но это время, деньги и по большому счету исправление косяков Битрикса, решить которые через техподдержку не получится, не та квалификация в техподдержке.
Игорь Семенов написал: Чем всё закончилось? Компания "Битрикс" изложит своё виденье и пути решения проблемы? Очень хотелось бы услышать аргументированный ответ: зачем сайту оплаты и отгрузки, если они ему не нужны?
Свое видение изложил Александр Денисюк (он в Битриксе программирует модуль обмена для 1с) в ветке "Важная информация по модулям обмена".
На вопрос - "зачем это делалось, ни одного восторженного отзыва нет на форуме от нового обмена" - он сказал, что довольные новым обменом владельцы сайтов просто не пишут на форуме. Видимо предполагается, что такие люди есть, которые пищат от восторга, что им на сайт придется выгружать помимо номенклатуры и заказов, еще и кучу никому не нужных документов с очень жесткими требованиями по синхронизации баз данных в 1с и в БУС, чтобы этот обмен был беспроблемным.
На вопрос, зачем гнать на сайт кучу документов из 1с, которые там не нужны от слова "совсем", ничего вразумительного ответить не мог. Сдается мне, что функционал просто сделан под некий бюджет на разработку - деньги освоены, "оплата+отгрузка" в БУС 16 версии сделаны, ну а нужны они реально или нет, дело вообще десятое. Вроде бы как решали проблемы с частичными оплатами (типа клиенты хотят оплатить один заказ из разных источников денежных средств, но не могут, нет возможности в БУС) и частичными отгрузками (вроде как частями клиенту заказ отправляем, а клиент это хочет видеть в личном кабинете) и эти "проблемы" решала 16 версия битрикса.
На мой взгляд - решили проблему сферического коня в ваккуме, а реальным владельцам сайтов - создали реальные проблемы.
Важная информация по модулям обмена, В этой теме будет выкладываться интересная и важная информация по модулям обмена с 1С:Предприятие. Просьба не флудить.
Дмитрий Чебыкин написал: Я думаю вы (не вы лично, а компания) ошиблись в том, что решили из БУСа делать "онлайн-бухгалтерию-торговлю и склад", причем по дефолту, а не отдельной подсистемой, которую можно выключить.
Модуль обмена очень гибкий и удобный. Не хотите - не используйте, напишите свой сами, или допишите существующий. Можно даже использовать встроенный от самих 1С, но там гораздо меньше функционала.
Единственное что мне нужно было не стандартного - не создавать отгрузку при создании заказа. Как раз проблемы с 1С были, но это из за бизнес-процессов у клиента. Дописывается на стороне БУС.
Вам лишь бы в комменты стрельнуть, а суть не важна? Вы гибкости не видели просто, если вам это гибким кажется. А в комменте вообще свалили в одну свалку обмен номенклатурой, документами, попытку БУСа сделать строгой учетной системой, и что-то что вы смогли сделать у клиента у которого - 1с и бизнес-процессы. Характерно, что вы отлаженный бизнес клиента называете "проблемы с 1с" в свете интеграции с БУС, а БУС у вас очень гибкий. Ну-ну. БУСУ до 1с как до Китая в плане учета.
Александр Воробьев, не знаю, что такое "ТП первого уровня", а подсказывать, где в админке найти ту или иную настройку - это не ТП. Вот сижу и думаю, если спрошу, работает ли On***CatalogImport1C в случае, когда идет обмен заказами (или это чисто для каталога прием), не вызовет ли это культурный шок у ТП (обмен заказами можно запускать независимо от заказа в отдельном обмене). Да и в моем случае, могли бы ответить, что обработка событий происходит тогда, когда $USER уже известен и в обработку событий в init.php можно делать разную логику в зависимости от пользователя - отработает нормально.
Александр Воробьев, премного благодарен за разъяснения. От анекдота все равно не откажусь, ибо техподдержке был задан вопрос - можно ли обработать события изменения заказа (корзины заказа), отдельной логикой, если они происходят в результате обмена с 1с. Ответ был отрицательный и пришлось ковырять order_loader.php, чтобы изменять заказ в БУС из 1с так, как нужно мне.
Александр Воробьев написал: Если. Конкертный пользователь означает обмен и только обмен, тогда и проблемы то нет. Переменная $inExchage совсем не нужна - просто анаизируем текущего юзера...
Важная информация по модулям обмена, В этой теме будет выкладываться интересная и важная информация по модулям обмена с 1С:Предприятие. Просьба не флудить.
Александр Денисюк написал: Тогда снимайте флажки, чтобы выгружались и загружались оплаты. В 1С они снимаются, в настройках.
А что мне делать с созданными ОПЛАТА и ОТГРУЗКА, когда клиент заказ на сайте сделал? Они автоматом создаются при оформлении заказа через публичную часть, от них как избавиться? Никак, просто шаблон списка заказов отредактировать (скрыть отображение)? И если теперь вид оплаты в ОПЛАТЕ записывается, как мне его назад в свойство заказа вернуть? И если сумма заказа поменялась, то надо чтобы и для вида платежной системы эта сумма тоже пересчиталась. Иначе как клиенту заплатить правильную сумму через обработчик платежной системы? Это наверное уже больше не к вам вопрос, а к тем кто на стороне БУСа логику пишет.
Я думаю вы (не вы лично, а компания) ошиблись в том, что решили из БУСа делать "онлайн-бухгалтерию-торговлю и склад", причем по дефолту, а не отдельной подсистемой, которую можно выключить.
Важная информация по модулям обмена, В этой теме будет выкладываться интересная и важная информация по модулям обмена с 1С:Предприятие. Просьба не флудить.
Александр Денисюк, нет лучше вы скажите - для чего мне это делать? Моих клиентов устраивает простая схема - заказ создан, отредактирован, оплачен, отгружен. Вот не интересует их, как я заношу все это дело в моей учетной программе. Если клиенту интересно кому, за что и когда он платил - пусть просит акт сверки и смотрит свой банк-клиент, а я товары продаю, а не веду на сайте расширенную историю взаимоотношений с ним. Вы предлагаете в БУС создать некую копию 1с базы, в плане документов - скажите - ЗАЧЕМ? Мне это не нужно, совершенно, да и если было бы нужно, я бы искал способ выгружать в ЛК клиента к заказу нужные документы из 1с сразу в печатных pdf формах. Но это я бы искал сам, поскольку моя хотелка. А вы то мне зачем навязываете, что мне делать с моими документами из 1с? Или вы осведомлены о каких-то законодательных инициативах, в которых внутренняя учетная программа обязана предоставлять информацию в вебе? Ну что еще сказать, не знаю ....
Александр Воробьев, написано интересно, можно вас попросить написать не коротко. Как я понял, обуславливать обработку для OnBeforeIBlockElementUpdate в зависимости от пользователя, все равно нельзя (или нет?). Вы говорите, что на хите (в хите, у хита - как правильно?) надо отследить наступление события OnBeforeCatalogImport1C и далее опять же в рамках хита выполнять все нужные действия для OnBeforeIBlockElementUpdate. Если так, то нельзя ли сразу пользователя (считаем, что для обмена у нас отдельный пользователь) на хите определить и задать аналогично $inExchange?
Александр Воробьев, нет не так. Что будет если обмен прервется? Где вы OnSuccessCatalogImport1C получите? И что будет, если во время обмена я отредактирую свойство элемента инфоблока через админку? Анекдот актуален, к сожалению.
Важная информация по модулям обмена, В этой теме будет выкладываться интересная и важная информация по модулям обмена с 1С:Предприятие. Просьба не флудить.
Алексей Воронежцев, вернитесь лучше назад на рабочий обмен. В техподдержке безнадежно тупят по поводу вопросов, связанных с обменом с 1с, у них установка, что "все работает" и "проблема на вашей стороне".
Александр Денисюк, спасибо вам за качественные ответы на вопросы. От Битрикс хотелось бы увидеть не вебинар в стиле "в 2014 году мы отменим интернет и будет только битрикс24". Нужны типовые сценарии применения настроек обмена в 1с и в БУС для разных ситуаций.
Например, мой случай.
Заказ в 1с я получаю из БУС и хочу менять его в 1с и передавать измененный назад в БУС
Я не хочу СОЗДАВАТЬ заказ в 1с и передавать на сайт, я работаю только с заказами, созданными на сайте
Мне не интересно передавать на сайт содержимое моей 1с для клиента - я имею ввиду ОПЛАТЫ и ОТГРУЗКИ, меня интересуют только статусы заказов - а именно - создан, обрабатывается, оплачен, отгружен, закрыт. Я не знаю, кому нужны были все эти сущности, связанные с множественными отгрузками и оплатами. На форуме ни одного комментария в стиле "ну наконец-то" - я не увидел. Зато лексики, близкой к ненормативной - хватает.
Получается в терминологии БУС - мне нужна либо только одна ОПЛАТА и ОДНА отгрузка, либо мне они не нужны совсем к заказам (как это было раньше в 15 версии). Как это сделать - непонятно.
Если уж создавать новый заказ в БУС из 1с (ну совсем тупой клиент, не умеющий пользоваться сайтом или вип-клиент, которому лень бродить по сайту), то глядя на то как тяжело команде БУСа даются синхронизации, предлагаю создавать новый заказ не из заказа 1с, а например из счета на оплату (это совсем другой документ по своему типу), а уж потом заказ при обмене в 1с создастся сам. Тем самым вы избежите много геморроя синхронизации.
Если я меняю содержимое заказа в 1с, и не хочу передавать на сайт другие документы, кроме заказа, надо чтобы в БУС кроме заказа менялась и ОПЛАТА и ОТГРУЗКА, сейчас ОПЛАТА вроде как меняется, но своеобразно - например заказ был 8000, после редактирования в 1с - стал 15000, и выгрузился на сайт нормально - 15000, после выгрузки ОПЛАТА на общую сумму стала 15000, но внутри нее тип оплаты - только на 8000. Как с этим быть?
Когда есть сценарии настроек для разных вариантов взаимодействия 1с -БУС, становится понятно, что авторы продукта проработали свое решение, а не с потолка взяли. А когда только кино, то становится понятно совсем другое.
Никак в текущей реализации фреймворка. В связи с этим вспоминается анекдот, перефразируя который его можно рассказать и так: "Приходит к нормальному программисту программист ядра одной известной CMS и говорит: - Слушай, глянь на программу, меня задолбали уже с претензиями, у меня на тестах все работает! Я учел все что можно. Где у меня ошибка?! Нормальный внимательно изучает листинг и мрачно выдает: - В ДНК, @@@@@! "
В init.php простейшую функцию вставить, которая для ID цены будет отдавать ее нужное короткое название. Сколько у вас там типов цен - не более 10, забить их жестко и все.
Ну вообще не правда, а ИСТИНА, так точнее. И в вашем случае мы получаем следующее - если в момент обмена с 1с зайти в админку и поменять у товара вес, то у него должно измениться количество. Более того, если вдруг сессия оборвалась (всякое бывает) - OnSuccessCatalogImport1C скорее всего не наступит, и у вас так и будет OnProductUpdate увеличивать количество продукта, при любом его изменении. Правильнее под обмен заводить специального пользователя и проверять есть ли с ним сессия реальная,а не просто взводить флаг по OnBeforeCatalogImport1C. Это вам в ТП так подсказали? Мда
Важная информация по модулям обмена, В этой теме будет выкладываться интересная и важная информация по модулям обмена с 1С:Предприятие. Просьба не флудить.
Я правильно понял, что если во время обмена с 1с через админку зайти в карточку товара и отредактировать его вес, например, то автоматом у него количество добавится?
Так же условия фильтра могут объединяться не только по условию "И", но и "ИЛИ".
Для этого в качестве фильтруемого поля надо указать "LOGIC". Может принимать два значения: "AND" и "OR". По умолчанию - "AND". Например выберем маленькие зрелые и большие не зрелые апельсины:
Дмитрий, тупость в проектировании базы изначально нельзя оптимизировать. Вам написан ответ на одном из форумов (не битрикс... а другом), надо менять организацию данных в инфоблоках, а не плодить одни и те же сущности..
Имеется БУС последней версии редакция "Бизнес", 1C Компл.авт. 1.1, модуль обмена - 6.0.3.4
Логика работы магазина следующая - есть каталог, покупатели создают заказы, количественный учет включен, покупка при отсутствии товара запрещена. Мы продаем только то, что есть на складе, поэтому такая настройка. Заказы из БУС выгружаются в 1с и все изменения в заказе происходят только в 1с. Выгрузка оффлайновых заказов в БУС (т.е. те которые изначально создались в 1с - отключена)
Вобщем, все сделано для того, чтобы клиенту предоставить все возможности сделать актуальный заказ на сайте. Но все равно не избежать ситуаций, когда клиент сделал заказ, а потом просит изменить в нем что-то в товарном составе. Короче - сделанные заказы приходится изменять.
Изменения заказа происходят по разным причинам - клиент может отказаться от какого-то товара, попросить добавить новый товар в заказ, на складе пересорт и товарные остатки, выгруженные на сайт, были некорректны. Все изменения в заказе происходят на стороне 1с, менеджером магазина в процессе общения с покупателем по разным каналам связи. После того, как с покупателем все утрясено по составу заказа, хотелось бы ИЗМЕНЕННЫЙ заказ из 1с выгрузить на сайт, чтобы он появился в личном кабинете покупателя и отработали почтовые события.
Но это не всегда получится сделать, потому что
БУС начинает сверять остатки у себя на сайте, с тем что приходит из 1с в измененном заказе. Если остатков у него не хватает, заказ не обновится, в логе 1с будет ошибка
Если товар в заказе из 1с на сайте будет НЕАКТИВНЫМ в момент обмена, заказ опять не обновится в БУС, а в логе опять ошибка.
БУС будет списывать товар в резервы из измененного заказа, а мне не надо менять текущие резервы
Логика такого поведения непонятна. Заказ уже не создается на сайте, а импортируется из стороннего приложения, более того, из учетной системы, чей приоритет в учете намного выше, чем у БУС. Иными словами - задача БУС молча принять заказ от "старшего" брата и показать заказ клиенту в личном кабинете, но этого не происходит.
Судя по логу ошибок, при получении модифицированного заказа из 1с, БУС не пишет эти изменения напрямую в заказ, а прогоняет через корзину, потому что текст описания ошибок берется из \bitrix\modules\sale\lang\ru\lib\basket.php :
$MESS["SALE_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY"] = "Ошибка проверки доступного количества товара \"#PRODUCT_NAME#\""; $MESS["SALE_BASKET_AVAILABLE_FOR_PURCHASE_QUANTITY"] = "Доступное для покупки количество товара \"#PRODUCT_NAME#\": #AVAILABLE_QUANTITY#";
Как я понимаю, на стороне сайта определяется, что за заказ прислала 1с, определяется покупатель и его корзина, и видимо через корзину БУС пытается обновить заказ. А стандартные правила сайта (активность товара и остатки товара в БУСе в данный момент) накладывают ограничения.
Мне надо чтобы при обновлении заказа из 1с, правила по количественному учету, списания в резерв и по активности товара ИГНОРИРОВАЛИСЬ.
Можно ли это сделать через обработчики событий в init.php? Если да, то каких событий? Если с помощью событий нельзя, то через кастомизацию импорта в CSaleOrderLoader?
Подскажите, если не сложно, у меня пока предел в изысканиях.
Нужны разные правила для оформления заказа из "паблика" и при импорте из 1c, В каком месте подправить order_loader.php, или как проигнорировать количественный учет
Вы вообще ничего не поняли, тему не засоряйте. Сайт дайте ваш любой, чтобы я вам заказов с количеством 999 шт. по каждой позиции наделал, может тогда поймете. Вы пишите что-то свое, не поняв мою задачу. А по поводу отдельной системы учета - вы просто не в теме про учет в битриксе и его "шедевра" -в виде "отгрузка -отгружена" и "оплата - оплачена".
PS
До кучи еще выяснилось, что БУС не обновит заказ из 1с, если в момент обмена, в заказе из 1с будут товары, которые на сайте НЕАКТИВНЫ. В общем импорт заказа скорее всего "повторяет" логику оформления заказа через публичку, только в фоновом режиме. Видимо разработчикам так было проще, запилить логику импорта как имитацию процесса создания заказа обычным пользователем со стороны публичной части.
В общем нужна кастомизация импорта, создал тему здесь.
Нужны разные правила для оформления заказа из "паблика" и при импорте из 1c, В каком месте подправить order_loader.php, или как проигнорировать количественный учет
Битрикс может и давно высказался, только вы не поняли, что меня интересует. И написали совсем не в тему, уж извините. Прочитайте еще раз. Меня интересует трансляция (из 1с в личный кабинет покупателя) заказа, оформленного не по "правилам" количественного учета - это если вкратце. Но лучше прочитать подробнее и не торопясь все сообщение в начале темы.
Нужны разные правила для оформления заказа из "паблика" и при импорте из 1c, В каком месте подправить order_loader.php, или как проигнорировать количественный учет
Когда в настройках сайта включен количественный учет и запрещена покупка при отсутствии товара, то это сделано для того, чтобы покупатель, заходя на сайт, не мог положить в корзину и соответственно оформить заказ на то количество, которое превышает остатки товара, которые мы передаем на сайт из 1с. Эта настройка разумная и правильная.
Но совсем другое дело, когда клиент сделал заказ на сайте (пусть даже согласно упомянутых выше настроек), а потом в процессе общения с менеджером его (заказ) подкорректировали - добавили или убавили позиции и их количество. Первоначально заказ выгрузился в 1с, а потом с заказом работает менеджер магазина и изменяет он заказ уже в 1с - меняет состав и количество товара.
В этом случае, состав и количество, которое можно добавить в заказ, определяются уже настройками 1с, политикой фирмы и т.п. - а никак не теми настройками для покупок, которые мы определили для БУС для публичной части сайта.
Теперь к сути. Настройки БУС в части количественного учета и покупки товара - должны быть настройками именно для сайта и его паблика. Если заказ начал редактироваться в 1с - правила по количественному учетуне должны мешать изменять заказ в 1с.
"Они и не мешают!" - скажете вы, и будете не правы. Потому что, когда измененный в 1с заказ начнет выгружаться обратно в БУС, то БУС проверит этот заказ, и если в заказе количество товара будет больше, чем у него числится на данный момент на остатке (свободном или общем - не знаю не проверял) - заказ на сайте не изменится, а в логе будет ошибка, что не хватает нужного количества для той или иной позиции.
Такое поведение обмена в корне неправильно.
Ведь за клиента заказ доработан менеджером через учетную программу, короче дооформлен уже не на сайте.
Зачем в этом случае заказу, который доделан не на сайте через публичную часть, а в 1с сверяться с правилами для заказов, оформляемых через паблик БУСА? С клиентом заказ согласован в переписке, осталось только выгрузить ему заказ в его личный кабинет, чтобы он его увидел и он знал за что он платит. И БУС никак не должно волновать, что какому-то клиенту оформляют заказ "не по правилам". За БУС уже все решили, его дело - отобразить правильно заказ в личном кабинете и отработать почтовые события.
Поэтому для обмена заказами 1с-БУС мне надо отключить проверку правил количественного учета, для случая, когда в БУСе обновляется заказ, первоначально созданный на сайте, но доработанный в 1с. Или вообще ее отключить - я не передаю на сайт оффлайновые заказы (в том смысле, что сделанные изначально в 1с, у меня все заказы рождаются в 1с через БУС).
Как я понял, импорт заказов происходит в order_loader.php
Прошу подсказать как его можно подправить, чтобы решить поставленную задачу. И где хранятся переменные (и как к ним обращаются), отвечающие за настройки количественного учета?
Спасибо всем кто смог дочитать, буду признателен за комментарии.