Александр Денисюк написал: ЦитатаАлександр написал: А хотелось бы, чтобы этого не происходило. Есть какое-нибудь решение?Дорабатывайте бус. Или не выгружайте товары, а только цены.
Добрый день. Александр Денисюк, спасибо, будем пробовать (хотя ответ, конечно, типа "отвали"). Вообще интересно, неужели раньше никто таким вопросом не задавался? Зачем каждый раз нужно выгружать название, описание, картинки и т.п., ведь они на сайте практически никогда не меняются, а если что-то и надо изменить-подправить, то на сайте это сделать и удобнее. Меняется же лишь цена и количество, их и нужно постоянно отслеживать и выгружать. То есть, сопоставлять измененные объекты в 1С и на сайте по какому-то идентификатору, выгружать новые значения цены и количества, а остальное не трогать. Так, мне кажется, и правильнее, и быстрее. Или я чего-то недопонимаю?
+1. В базе 12 тыс позиций, и выгрузка полная идет часами! Пробовал убрать картинки, чтобы облегчить, а фиг! Все картинки пропали с сайта
Аналогичная ситуация, в БД куча номенклатур, которые никогда не будут использоваться.
Александр Денисюк, нашел ошибку в модулях обмена (версия 4.0.5.1). Если на сайте создать заказ и оплатить его, т.е. между созданием и оплатой обмен пройти не успевает, то во время загрузки в ПКО не установится документ основание. Функция ПолучитьДокумент(МенеджерВременныхТаблиц, "Заказ", ДокументXML) ищет документ во временной таблице "ВремДокументы", которая была сформирована во время начала обмена и документ еще не существовал.
Проблему решил. Я брал фото из номенклатуры и вставлял в предложения с одним и тем же именем файла. Т.е. файл выгружался 1, а его имя я вставлял в несколько мест (в import.xml и несколько раз в offers.xml). После загрузки фото битрикс удаляет файл фотографии, соответственно когда доходило до загрузки предложений файла уже небыло.
Здравствуйте. Необходимо реализовать привязку фотографий к конкретным характеристикам номенклатуры в УТ 11 и передавать в Бус. С реализацией в 1С проблем нет. Вопрос в том, как это передавать в Бус, без изменений в самом Бус. В нем есть возможность указывать фото конкретным предложениям. Соответственно должна быть возможность указать это в файлах обмена, т.к. обмены должны проходить не только с 1С. Это подтверждает сообщение.
Пробовал в файл offers.xml, описывающий предложения, добавить фото по аналогии с файлом import.xml:
bnzaaai пишет: Так же столкнулся с такой проблемой. Что удалось накопать под отладкой: В общем модуле Б_ОбменССайтомСервер строка "Если ФайлДляВыгрузки.НадоВыгружать тогда" дает ложь и не происходит запись двоичных данных самой картинки. Смысл этой проверки в этом месте, когда в xml уже вставлены ссылки на картинки?
Смысл в том, что ссылка на картинку должна быть(чтобы у картинок они не пропали), а картинка выгружается только 1 раз(если сайт говорит, что все ок)(дальше только принудительно). Смысла нет ее постоянно выгружать на сайт или куда то еще.
bnzaaai пишет: При регистрации пользовательских справочников всегда вызывается запрос и прочие манипуляции, даже если объект уже зарегистрирован выше. Сделайте проверку, объект зарегистрирован выше - это не пользовательский справочник и этот участок кода не выполнять.
2/3 справочников, которые зарегистрированы выше, не могут быть пользовательскими.
Тут тоже вы меня не поняли.
У вас сперва идет проверка типовых объектов, если он удовлетворяет условиям - объект регистрируется. В этот момент можно взвести переменнную "ИзмененияЗарегистрированы" . Если объект зарегистрирован - он не пользовательский справочник, какой смысл выполнять код:
Код
// Регистрация пользовательских справочников
Попытка
СписокИсключений = Новый СписокЗначений;
СписокИсключений.Добавить("Номенклатура");
СписокИсключений.Добавить("Валюты");
СписокИсключений.Добавить("Контрагенты");
СписокИсключений.Добавить("Склады");
СписокИсключений.Добавить("ТипыЦенНоменклатуры");
СписокИсключений.Добавить("ХранилищеДополнительнойИнформации");
СписокИсключений.Добавить("ХарактеристикиНоменклатуры");
СписокИсключений.Добавить("ЦеновыеГруппы");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Б_ОбменССайтомВыгружаемыеПоляСправочников.Справочник,
| Б_ОбменССайтомВыгружаемыеПоляСправочников.Ссылка КАК Узел
|ИЗ
| ПланОбмена.Б_ОбменССайтом.ВыгружаемыеПоляСправочников КАК Б_ОбменССайтомВыгружаемыеПоляСправочников";
ТзнУзлов = Запрос.Выполнить().Выгрузить();
ВремТзнСпр = ТзнУзлов.Скопировать();
ВремТзнСпр.Свернуть("Справочник");
Для каждого ТекСпр из ВремТзнСпр Цикл
Если СписокИсключений.НайтиПоЗначению(ТекСпр.Справочник) = Неопределено тогда
Если ТипОбъекта = Тип("СправочникОбъект." + ТекСпр.Справочник) тогда
НайденныеСтроки = ТзнУзлов.НайтиСтроки(Новый Структура("Справочник",ТекСпр.Справочник));
МассивУзлов = Новый Массив;
Для каждого ТекУзел из НайденныеСтроки Цикл
Если МассивУзлов.Найти(ТекУзел.Узел) = Неопределено тогда
МассивУзлов.Добавить(ТекУзел.Узел);
КонецЕсли;
КонецЦикла;
ПланыОбмена.ЗарегистрироватьИзменения(МассивУзлов, Объект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Не удалось зарегистрировать изменение для элемента " + Строка(Объект.Ссылка) + ". Элемент не будет отправлен на сайт Битрикс в режиме изенений.");
Сообщить(ОписаниеОшибки());
КонецПопытки;
Вставьте этот код в условие если НЕ ИзмененияЗарегистрированы тогда
bnzaaai пишет: Вызывайте "ПолучитьМассивУзловДляРегистрации"только в случае необходимости, если убедились что тип объекта участвует в обмене.
Такого не будет, т.к. частенько настройки меняются и изменения могут потеряться.
Вы меня не поняли. У вас так:
Код
массив узлов = ПолучитьМассивУзловДляРегистрации();
если ТипОбъекта = Номенклатура тогда
зарегистрироватьИзменнеия(массивУзлов)
...
КонецЕсли;
Я предлагаю перенести после условия:
Код
если ТипОбъекта = Номенклатура тогда
массив узлов = ПолучитьМассивУзловДляРегистрации();
зарегистрироватьИзменнеия(массивУзлов)
иначеЕсли ТипОбъекта = ... тогда
массив узлов = ПолучитьМассивУзловДляРегистрации();
зарегистрироватьИзменнеия(массивУзлов)
...
КонецЕсли;
Иначе для объектов, которые не передаются (не выполниться ни одно из условий "если ТипОбъекта = ..." всегда вызывается ПолучитьМассивУзловДляРегистрации(). Кода больше, но нет лишних вызовов функции.
Минаев Дмитрий пишет: Написал в тех поддержку. Параллельно разбираюсь сам. Сделал выгрузку в локальную папку, а не на сайт, в папке с выгрузкой файлов с картинками нет, но в XMLес товарами есть строки:
Должно ли так быть? И это путь к картинке где? Подумал что на сайте но не смог найти .
Да, должно быть так. Картинки были обработаны, а потом удалены с папки на сайте.
Так же столкнулся с такой проблемой. Что удалось накопать под отладкой: В общем модуле Б_ОбменССайтомСервер строка "Если ФайлДляВыгрузки.НадоВыгружать тогда" дает ложь и не происходит запись двоичных данных самой картинки. Смысл этой проверки в этом месте, когда в xml уже вставлены ссылки на картинки?
В обработчике код не оптимально написан. Как уже выше сказали на событие подписаны куча лишних объектов. При этом для каждого события всегда выполняется:
Два раза вызывается функция "ПолучитьМассивУзловДляРегистрации" с запросом (ПланыОбмена.Б_ОбменССайтом.Выбрать()). Переделайте на один вызов.
Вызывайте "ПолучитьМассивУзловДляРегистрации" только в случае необходимости, если убедились что тип объекта участвует в обмене.
При регистрации пользовательских справочников всегда вызывается запрос и прочие манипуляции, даже если объект уже зарегистрирован выше. Сделайте проверку, объект зарегистрирован выше - это не пользовательский справочник и этот участок кода не выполнять.
В 1С есть общие модули с кэшированием результата функций (повторное использование возвращаемых значений). Будет лучше вынести все функции с запросами туда, это увеличит производительность при массовом изменении объектов (на запись каждого объекта в БД не будет вызываться запрос).
Борис Кулаков пишет: 2.Картинки для характеристик тоже нам прикрутил программист на стороне 1С, подсунул в xml из картинок товара, разнесся их по цветам!
Можно про это подробнее? Интересует как должен выглядеть в итоге файл offers.xml. Попробовал в предложение добавить: