|
v7: Выгрузка номенклатуры для сайта | ☑ | ||
---|---|---|---|---|
0
maxxxl-ms
18.07.12
✎
15:16
|
Здравствуйте, проблема вот в чём: есть в 7 1С стандартная обработка Выгрузка номенклатуры.ert и необходимо по ней производить выгрузку списка каталогов для сайта из документа excel с подбором из номенклатуры, при этом вбивая все каталоги в выбор номенклатуры вручную и нажимать enter для ввода в таблицу группы. Можно ли связав с excel как нибудь автоматизировать данный процесс доработав код или у кого может быть есть похожие примеры?
|
|||
1
mikecool
18.07.12
✎
15:17
|
сломал мозг, но не понял о чем речь
|
|||
2
Amra
18.07.12
✎
15:18
|
(1) +100
|
|||
3
Ёпрст
18.07.12
✎
15:18
|
Прочитал 2 раза - не осилил, что откуда и куда
|
|||
4
povar
18.07.12
✎
15:19
|
(0) жесть, Штирлиц отдыхает
|
|||
5
povar
18.07.12
✎
15:19
|
(3) это шифровка в центр
|
|||
6
План счетов
18.07.12
✎
15:26
|
>> вручную и нажимать enter
попробуй: Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "{ENTER}" |
|||
7
mikecool
18.07.12
✎
15:27
|
какой вброс от автора...
никто не протелепатировал еще? |
|||
8
maxxxl-ms
18.07.12
✎
15:28
|
Ладно разъясню, я выгружаю каталоги магазина на сайт битрикс в формате .cvs. Но прежде чем получить этот файл для выгрузки мне необходимо подбором по номенклатуре вручную искать каталоги из excel в номенклатуре и после нажимая ентер они попадают в ТаблицаДляПодбора. Так примерно:
Процедура ОбработкаПодбора(Элемент, Конт) Если ТаблицаДляПодбора = Группы Тогда Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; Иначе Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
9
maxxxl-ms
18.07.12
✎
15:29
|
Весь код:
Перем ТаблицаДляПодбора; // Имя таблицы в которую производится подбор номенклатуры //****************************************************************************** // КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл) // // Параметры: // ПолноеИмяФайла - строка: каталог и имя файла. // Каталог - если передан, в него будет возвращено имя каталога. // Файл - если передан, в него будет возвращено имя файла. // // Возвращаемое значение: // 0 - если указанного каталога не существует // 1 - если указанный каталог существует // // Описание: // Если каталог не существует, то пользователю предлагается его создать. // Функция КаталогИмяФайла(ПолноеИмяФайла, Каталог, Файл) Каталог=""; Файл=ПолноеИмяФайла; Если ПустоеЗначение(Файл) = 1 Тогда // Файл еще не задан, сгенерим его из направления Если Направление.ТекущаяСтрока() = 1 Тогда Файл = "ves"; ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда Файл = "prom"; ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда Файл = "zap"; Иначе Файл = "tech"; КонецЕсли; КонецЕсли; Разд=Найти(Файл, "\"); Пока 0 < Разд Цикл Каталог=Каталог+Лев(Файл, Разд); Файл=Сред(Файл, Разд+1); Разд=Найти(Файл, "\"); КонецЦикла; Каталог=Каталог+"."; Если СтрДлина(Каталог)<4 Тогда ИначеЕсли ФС.СуществуетФайл(Каталог)=1 Тогда ИначеЕсли "Да"=Вопрос(Каталог+" |Указанный каталог не существует! Создать?","Да+Нет") Тогда ФС.СоздатьКаталог(Каталог); Иначе Каталог=""; Возврат(0); КонецЕсли; Возврат(1); КонецФункции // КаталогИмяФайла() Процедура ПриВыбореНаправления() Если (ПустоеЗначение(ИмяФайлаВыгрузки1) = 1) и (ПустоеЗначение(ИмяФайлаВыгрузки1) = 1) Тогда Если Направление.ТекущаяСтрока() = 1 Тогда ИмяФайлаВыгрузки1 = "ves1"; ИмяФайлаВыгрузки2 = "ves2"; ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда ИмяФайлаВыгрузки1 = "prom1"; ИмяФайлаВыгрузки2 = "prom2"; ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда ИмяФайлаВыгрузки1 = "zap1"; ИмяФайлаВыгрузки2 = "zap2"; Иначе ИмяФайлаВыгрузки1 = "tech1"; ИмяФайлаВыгрузки2 = "tech2"; КонецЕсли; КонецЕсли; КонецПроцедуры Функция ОбработатьСтроку(ТекСтрока = "") // Удаляет пробелы и заменяет запятые на ; Результат = СтрЗаменить(СтрЗаменить(СокрЛП(ТекСтрока),";",","),"""",""); Возврат Результат; КонецФункции // Обрабатывает цену, округляет до "круглого" значения если выбран соответствующий режим и отличие не превышает 5 копеек Функция ОбработатьЦену(Цена) Перем Результат; Результат = Окр(Цена,0); Если (ABS(Результат-Цена) > 0.05) Тогда Результат = Цена; КонецЕсли; Возврат Результат; КонецФункции // ОбработатьЦену Процедура Сформировать() Перем ТЗ; Перем Вид, Часы, Минуты, Секунды, Кодир, Тип, Заголовок; Если КаталогИмяФайла(ИмяФайлаВыгрузки1, "", "") = 0 Тогда Активизировать(ИмяФайлаВыгрузки1); Возврат; КонецЕсли; Если КаталогИмяФайла(ИмяФайлаВыгрузки2, "", "") = 0 Тогда Активизировать(ИмяФайлаВыгрузки2); Возврат; КонецЕсли; Если ИмяФайлаВыгрузки1 = ИмяФайлаВыгрузки2 Тогда Предупреждение("Файлы должны быть разными"); Возврат; КонецЕсли; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "Номенклатура = Справочник.Номенклатура.ТекущийЭлемент; | Обрабатывать НеПомеченныеНаУдаление; | ГруппаТМЦ = Справочник.Номенклатура.Родитель; | Группировка ГруппаТМЦ упорядочить по ГруппаТМЦ.Код без групп; | Группировка Номенклатура упорядочить по Номенклатура.Код Без Групп; |";//}}ЗАПРОС Если Группы.РазмерСписка() > 0 Тогда ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура в Группы);" КонецЕсли; Если флТолькоВключаемые = 1 Тогда ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура.НеВключатьВпрайс = 0);" КонецЕсли; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Сообщить("Ошибка выполнения запроса"); Возврат; КонецЕсли; Рег = СоздатьОбъект("Регистр.ОстаткиТМЦ"); Текст1=СоздатьОбъект("Текст"); Текст1.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока(), Кодир)); ТекущееВремя(Часы, Минуты, Секунды); Время=Шаблон("[Часы#Ч(0)2]:[Минуты#Ч(0)2]:[Секунды#Ч(0)2]"); //Текст1.ДобавитьСтроку("Кодировка="+Кодир); //Текст1.ДобавитьСтроку("ДатаСоздания="+Формат(ТекущаяДата(), "ДДДММГГГГ")); //Текст1.ДобавитьСтроку("ВремяСоздания="+Время); Текст2=СоздатьОбъект("Текст"); Текст2.КодоваяСтраница(Кодировка.ПолучитьЗначение(Кодировка.ТекущаяСтрока(), Кодир)); //Текст2.ДобавитьСтроку("Кодировка="+Кодир); //Текст2.ДобавитьСтроку("ДатаСоздания="+Формат(ТекущаяДата(), "ДДДММГГГГ")); //Текст2.ДобавитьСтроку("ВремяСоздания="+Время); // Вроде как шаблон СтрокаВыгрузки = "IE_XML_ID;IE_NAME;IE_ID;IE_ACTIVE;IE_ACTIVE_FROM;IE_ACTIVE_TO;IE_PREVIEW_PICTURE;IE_PREVIEW_TEXT;IE_PREVIEW_TEXT_TYPE;IE_DETAIL_PICTURE;IE_DETAIL_TEXT;IE_DETAIL_TEXT_TYPE;IE_CODE;IE_TAGS;"; СтрокаСвойств = ""; Если Направление.ТекущаяСтрока() = 1 Тогда СтрокаСвойств = "IP_PROP16;IP_PROP17;IP_PROP18;IP_PROP19;"; ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда СтрокаСвойств = "IP_PROP24;IP_PROP25;IP_PROP26;IP_PROP27;"; ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда СтрокаСвойств = "IP_PROP36;IP_PROP37;IP_PROP38;IP_PROP39;"; Иначе СтрокаСвойств = "IP_PROP40;IP_PROP41;IP_PROP42;IP_PROP43;"; КонецЕсли; СтрокаВыгрузки = СтрокаВыгрузки + СтрокаСвойств + "IC_GROUP0;IC_GROUP1"; Текст1.ДобавитьСтроку(СтрокаВыгрузки); // Вроде как шаблон СтрокаВыгрузки = "IE_XML_ID;IE_NAME;IE_ACTIVE;IE_ACTIVE_FROM;IE_ACTIVE_TO;IE_SORT;IE_PREVIEW_TEXT;IE_PREVIEW_TEXT_TYPE;IE_DETAIL_TEXT;IE_CODE;CP_QUANTITY;CP_QUANTITY_TRACE;CP_WEIGHT;"; СтрокаВыгрузки = СтрокаВыгрузки + СтрокаСвойств + "IC_XML_ID0;IC_GROUP0;IC_GROUP1;IC_CODE0;CV_PRICE_1;CV_CURRENCY_1;CV_PRICE_2;CV_CURRENCY_2"; Текст2.ДобавитьСтроку(СтрокаВыгрузки); Форма.ИспользоватьСлой("Основной, Прогресс"); Запрос.Выгрузить(ТЗ,3); глМаксЭлемент = ТЗ.КоличествоСтрок(); ТекущийЭлемент = 0; КолвоСтрок = 0; Прогрессор = глСоздатьПрогрессор(Контекст); ТекЦена = СоздатьОбъект("Справочник.ТипыЦен"); Пока Запрос.Группировка("ГруппаТМЦ") = 1 Цикл Пока Запрос.Группировка("Номенклатура") = 1 Цикл ТекущийЭлемент = ТекущийЭлемент + 1; ТМЦ = Запрос.Номенклатура; ТМЦ.ИспользоватьДату(РабочаяДата()); Если (флАссортимент = 1) и (ТМЦ.МинОстаток <= 0) Тогда Продолжить; КонецЕсли; Если флОстаток = 1 Тогда Остаток = Рег.СводныйОстаток(,ТМЦ,,,"Количество"); Если (Остаток <= 0) Тогда // Пропуск нулевых остатков Продолжить; КонецЕсли; КонецЕсли; флНовинка = 0; флСпецпредложение = 0; Если Новинки.НайтиЗначение(ТМЦ) > 0 Тогда флНовинка = 1; КонецЕсли; Если Спецпредложение.НайтиЗначение(ТМЦ) > 0 Тогда флСпецпредложение = 1; КонецЕсли; // Розничная цена ЦенаОпт = 0; ПечЦенаОпт = ""; Если ТекЦена.НайтиПоКоду("00004")=1 Тогда Если глВернутьЦену(ТМЦ, ТекЦена,РабочаяДата(),ЦенаОпт) =1 тогда ЦенаОпт = ОбработатьЦену(ЦенаОпт*(1+глНачисляемыйНДС(ТМЦ.СтавкаНДС))); ПечЦенаОпт=глФРМ(ЦенаОпт); иначе ПечЦенаОпт=""; Продолжить; КонецЕсли; Иначе Сообщить("Не найдена розничная цена"); Продолжить; КонецЕсли; глОбновитьПрогрессор(Прогрессор,ТекущийЭлемент/глМаксЭлемент*100); Форма.Обновить(1); СтрокаКода = ТМЦ.Код; СтрокаНаименования = СокрЛП(ТМЦ.ПолнНаименование); Описание = ОбработатьСтроку(СокрЛП(ТМЦ.КаталожныйНомер) + " "+СокрЛП(ТМЦ.Применяемость) + " " + СтрокаКода); Группа = СокрЛП(глВернутьРодителя(ТМЦ).Комментарий); Если СтрДлина(Группа) = 0 Тогда Сообщить("Группа для "+ ТМЦ.Код+" "+ТМЦ.Наименование+" не описана. Пропущена","."); Продолжить; КонецЕсли; Если Найти(Группа,"*") = 0 Тогда Группа1 = ""; Группа0 = СокрЛП(Группа); Иначе Группа1 = СокрЛП(Прав(Группа,СтрДлина(Группа)-Найти(Группа,"*"))); Группа0 = СокрЛП(Лев(Группа,Найти(Группа,"*")-1)); КонецЕсли; ГруппаМА = ТМЦ.ГруппаМА; КолвоМА = ТМЦ.МинОстаток; // IE_XML_ID; СтрокаВыгрузки = ""+СтрокаКода+";"; // IE_NAME; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(СтрокаНаименования)+";"; // IE_ID; СтрокаВыгрузки = СтрокаВыгрузки+ТекущийЭлемент+";"; // IE_ACTIVE; СтрокаВыгрузки = СтрокаВыгрузки+"Y;"; // IE_ACTIVE_FROM; СтрокаВыгрузки = СтрокаВыгрузки + Формат(ТекущаяДата(),"ДД.ММ.ГГГГ")+";"; // IE_ACTIVE_TO; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_PREVIEW_PICTURE; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_PREVIEW_TEXT; СтрокаВыгрузки = СтрокаВыгрузки + Описание+";"; // IE_PREVIEW_TEXT_TYPE; СтрокаВыгрузки = СтрокаВыгрузки + "text;"; // IE_DETAIL_PICTURE; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_DETAIL_TEXT; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_DETAIL_TEXT_TYPE; СтрокаВыгрузки = СтрокаВыгрузки + "text;"; // IE_CODE; СтрокаВыгрузки = СтрокаВыгрузки + СтрокаКода+";"; // IE_TAGS; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IP_PROP16; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IP_PROP17; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IP_PROP18; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IP_PROP19; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IC_GROUP0; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа0) + ";"; // IC_GROUP1; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа1) + ";"; Текст1.ДобавитьСтроку(СтрокаВыгрузки); // Второй файл // IE_XML_ID; СтрокаВыгрузки = ""+СтрокаКода+";"; // IE_NAME; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(СтрокаНаименования)+";"; // IE_ACTIVE; СтрокаВыгрузки = СтрокаВыгрузки+"Y;"; // IE_ACTIVE_FROM; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_ACTIVE_TO; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_SORT; СтрокаВыгрузки = СтрокаВыгрузки + "500;"; // IE_PREVIEW_TEXT; СтрокаВыгрузки = СтрокаВыгрузки + Описание+";"; // IE_PREVIEW_TEXT_TYPE; СтрокаВыгрузки = СтрокаВыгрузки + "text;"; // IE_DETAIL_TEXT; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IE_CODE; СтрокаВыгрузки = СтрокаВыгрузки + СтрокаКода+";"; // CP_QUANTITY; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // CP_QUANTITY_TRACE; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // CP_WEIGHT; Вес = ТМЦ.БазоваяЕдиница.Вес*1000; СтрокаВыгрузки = СтрокаВыгрузки + Вес+";"; // IP_PROP16; Признак = ""; Если флСпецпредложение = 1 Тогда Признак = "да"; КонецЕсли; СтрокаВыгрузки = СтрокаВыгрузки + Признак+";"; // IP_PROP17; Признак = ""; Если флНовинка = 1 Тогда Признак = "да"; КонецЕсли; СтрокаВыгрузки = СтрокаВыгрузки + Признак+";"; // IP_PROP18; Признак = ""; Если ГруппаМА = Перечисление.ГруппаАссортимента.ГруппаА Тогда Признак = "да"; КонецЕсли; СтрокаВыгрузки = СтрокаВыгрузки + Признак +";"; // IP_PROP19; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IC_XML_ID0; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // IC_GROUP0; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа0) + ";"; // IC_GROUP1; СтрокаВыгрузки = СтрокаВыгрузки + ОбработатьСтроку(Группа1) + ";"; // IC_CODE0; СтрокаВыгрузки = СтрокаВыгрузки + ";"; // CV_PRICE_1; СтрокаВыгрузки = СтрокаВыгрузки + ПечЦенаОпт+ ";"; // CV_CURRENCY_1; СтрокаВыгрузки = СтрокаВыгрузки + "RUB;"; // CV_PRICE_2; // Оптовая цена ЦенаОпт = 0; ПечЦенаОпт = ""; Если ТекЦена.НайтиПоКоду("00002")=1 Тогда Если глВернутьЦену(ТМЦ, ТекЦена,РабочаяДата(),ЦенаОпт) =1 тогда ЦенаОпт = ОбработатьЦену(ЦенаОпт*(1+глНачисляемыйНДС(ТМЦ.СтавкаНДС))); ПечЦенаОпт=глФРМ(ЦенаОпт); иначе ПечЦенаОпт=""; КонецЕсли; КонецЕсли; СтрокаВыгрузки = СтрокаВыгрузки + ПечЦенаОпт+ ";"; // CV_CURRENCY_2" СтрокаВыгрузки = СтрокаВыгрузки + "RUB;"; Текст2.ДобавитьСтроку(СтрокаВыгрузки); КолвоСтрок = КолвоСтрок + 1; КонецЦикла; КонецЦикла; Текст1.ДобавитьСтроку(""); Текст2.ДобавитьСтроку(""); глСтатусСтрока(Контекст,"Выгрузка завершена"); глОбновитьПрогрессор(Прогрессор,100); Текст1.Записать(ИмяФайлаВыгрузки1); Текст2.Записать(ИмяФайлаВыгрузки2); глСброситьПрогрессор(Прогрессор); Форма.ИспользоватьСлой("Основной,Подвал"); Сообщить("Файлы сформированы. Выведено "+КолвоСтрок+" элементов номенклатуры","!!"); КонецПроцедуры //****************************************************************************** // Предопределенная процедура // Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, ФлагОбработки) Перем Каталог, Файл; Если ЭлементДиалога="ИмяФайлаВыгрузки1" Тогда КаталогИмяФайла(ИмяФайлаВыгрузки1, Каталог, Файл); Если ФС.ВыбратьФайл(0, Файл, Каталог, "Файл выгрузки", "C разделителями (*.csv)|*.csv", "csv")=1 Тогда ИмяФайлаВыгрузки1=Каталог+Файл; КонецЕсли; ИначеЕсли ЭлементДиалога="ИмяФайлаВыгрузки2" Тогда КаталогИмяФайла(ИмяФайлаВыгрузки2, Каталог, Файл); Если ФС.ВыбратьФайл(0, Файл, Каталог, "Файл выгрузки", "C разделителями (*.csv)|*.csv", "csv")=1 Тогда ИмяФайлаВыгрузки2=Каталог+Файл; КонецЕсли; КонецЕсли; КонецПроцедуры // ПриНачалеВыбораЗначения() //****************************************************************************** // Предопределенная процедура. // Процедура ПриОткрытии() Форма.ИспользоватьСлой("Основной,Подвал"); Кодировка.ДобавитьЗначение(0, "Windows"); Кодировка.ДобавитьЗначение(1, "DOS"); Направление.ДобавитьЗначение(0, "Импортные товары"); Направление.ДобавитьЗначение(1, "Промышленные товары"); Направление.ДобавитьЗначение(2, "Запасные части"); Направление.ДобавитьЗначение(3, "Сельхозтехника"); флТолькоВключаемые = 1; КонецПроцедуры // ПриОткрытии() //****************************************************************************** // Процедуры управления добавления данных с списки значений Процедура ПоКнопкеДобавитьГруппу(Режим) ТаблицаДляПодбора = Группы; ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим); КонецПроцедуры Процедура ПоКнопкеДобавитьНовинки(Режим) ТаблицаДляПодбора = Новинки; ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим); КонецПроцедуры Процедура ПоКнопкеДобавитьСпецпредложение(Режим) ТаблицаДляПодбора = Спецпредложение; ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим); КонецПроцедуры Процедура ОбработкаПодбора(Элемент, Конт) Если ТаблицаДляПодбора = Группы Тогда Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; Иначе Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
10
maxxxl-ms
18.07.12
✎
15:55
|
У меня есть окно Номенклатура(Подбор) в котором я вбиваю в области "код" номер каталога из 4 цифр и далее enter чтобы добавить каталог в таблицу для подбора, как можно сделать чтобы был автоматический подбор нужных каталогов и занесение их в таблицу для подбора? Подскажите пожалуйста.
|
|||
11
maxxxl-ms
19.07.12
✎
11:07
|
Имееться обработка Выгрузка номенклатуры.ert, в ней часть кода такая:
+ Code // Предопределенная процедура. // Процедура ПриОткрытии() Форма.ИспользоватьСлой("Основной,Подвал"); Кодировка.ДобавитьЗначение(0, "Windows"); Кодировка.ДобавитьЗначение(1, "DOS"); Направление.ДобавитьЗначение(0, "Импортные товары"); Направление.ДобавитьЗначение(1, "Промышленные товары"); Направление.ДобавитьЗначение(2, "Запасные части"); Направление.ДобавитьЗначение(3, "Сельхозтехника"); флТолькоВключаемые = 1; КонецПроцедуры // ПриОткрытии() //****************************************************************************** // Процедуры управления добавления данных с списки значений Процедура ПоКнопкеДобавитьГруппу(Режим) ТаблицаДляПодбора = Группы; ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",1, Режим); КонецПроцедуры Тут мы выбираем из справочника номенклатура каталоги товаров, при этом производя выборку из списка путём ручного ввода(поиска) по каталогу и затем нажимаем enter чтобы добавить товар в ТаблицаДляПодбора, вот за это отвечает думаю этот код: Процедура ОбработкаПодбора(Элемент, Конт) Если ТаблицаДляПодбора = Группы Тогда Если (Элемент.Вид() = "Номенклатура") и (Группы.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 1) Тогда Группы.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; Иначе Если (Элемент.Вид() = "Номенклатура") и (ТаблицаДляПодбора.Принадлежит(Элемент) = 0) и (Элемент.ЭтоГруппа() = 0) Тогда ТаблицаДляПодбора.ДобавитьЗначение(Элемент.ТекущийЭлемент(),Элемент.Наименование); КонецЕсли; КонецЕсли; КонецПроцедуры Так вот сама задача состоит в том, можно ли сделать так чтобы из справочника номенклатура в ТаблицаДляПодбора, выборка происходила автоматически без ввода вручную, например заранне ввести весь список каталогов и чтобы оттуда черпались каталоги, сравнивались с теми что есть в номенклатуре и вносились в ТаблицаДляПодбора? Подскажите может есть что то подобное в качестве примера. |
|||
12
Ёпрст
19.07.12
✎
11:10
|
(11) можно.
Только этот список хранить надо где-то, в текстовом файлике, в справочнике,документе, в табличке БД, еще где. |
|||
13
vladko
19.07.12
✎
11:10
|
перебирай элементы справочника и вноси нужные группы и элементы в таблицы в процедуре ПриОткрытии()
|
|||
14
Ёпрст
19.07.12
✎
11:10
|
либо просто получать всю номенклатуру запросом по определенным условиям
|
|||
15
Lea_Lear
19.07.12
✎
11:19
|
Сам же все нам порассказал сам же о чем то и просит - чудно...Вот же решение у тя в (11) : "из справочника номенклатура в ТаблицаДляПодбора, выборка происходила автоматически без ввода вручную, например заранне ввести весь список каталогов и чтобы оттуда черпались каталоги, сравнивались с теми что есть в номенклатуре и вносились в ТаблицаДляПодбора" ну дык и сделай! делов то!
|
|||
16
maxxxl-ms
19.07.12
✎
11:39
|
Так сделать то можно, но факт в том как это сделать? У меня каталоги вбиты в документ excel, а там их порядка 100 значений и эти значения надо считывать оттуда перемещаясь по документу excel примерно и вбивая их в номенклатуру, а затем в ТаблицаДляПодбора. Не судите строго с 1С только начал разбираться, раньше работал с Делфи, думал тут будет проще с 1С после делфи, оказалось много ньюансов и мало примеров работы.
|
|||
17
Ёпрст
19.07.12
✎
11:42
|
(16) дык считывай при открытии (или по кнопке) свой каталог из excel файлика, ищи по наименованию/коду/внутреннему системному представлению/по id /еще как свою номенклатуру и пихай в табличку подбора.
|
|||
18
maxxxl-ms
19.07.12
✎
11:51
|
А как это будет выглядеть примерно в 1с?
Перем Книга; Процедура Сформировать() Попытка Эксель= СоздатьОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); Возврат; КонецПопытки; Книга=Эксель.WorkBooks.Open("C:\Documents and Settings\Admin\Рабочий стол\изэкселяводинсупращаторовбиватор\импортl.xls"); Эксель.Visible = 1; Лист=Книга.WorkSheets(1); Значение=Лист.Cells(1,3).Value; КонецПроцедуры Примерно такой рабочий код я сделал для считывания ячейки из документа excel, но потом как это значение найти в номенклатуре по коду и занести в ТаблицаДляПодбора? И сделать это в цикле наверно нужно перемещаясь по ячейкам excel и считывая каждое значение, затем искать его по коду и внося в ТаблицаДляПодбора. Или же можно сразу считать все ячейки excel и совпадения их по коду внести в ТаблицаДляПодбора? |
|||
19
Ёпрст
19.07.12
✎
12:00
|
(18) да как угодно,всё зависит от того, что ты в экселевской табличке хранишь.
Если просто наименование или код, то поиск по наименованию/коду. Можешь и внутреннее системное представление объекта хранить в экселе в служебной колонке, тогда и искать ничего не надо быдет. |
|||
20
maxxxl-ms
19.07.12
✎
12:08
|
Можешь и внутреннее системное представление объекта хранить в экселе в служебной колонке, тогда и искать ничего не надо быдет.
А как это будет выглядеть? |
|||
21
Ёпрст
19.07.12
✎
12:33
|
||||
22
Ыщъ
19.07.12
✎
13:12
|
Ошибка здесь: "C:\Documents and Settings\Admin\Рабочий стол\изэкселяводинсупращаторовбиватор\импортl.xls"
Надо: "C:\Documents and Settings\Admin\Рабочий стол\изэкселяводинсупращаторовибратор\импортl.xls" |
|||
23
maxxxl-ms
19.07.12
✎
13:22
|
Нет там ошибок и ты написал одно и тоже.
|
|||
24
maxxxl-ms
19.07.12
✎
13:52
|
изэкселяводинсупращаторовибратор\импортl.xls
Ха вибратор смешно)))) |
|||
25
maxxxl-ms
19.07.12
✎
15:23
|
Так устал описывать уже. Последовательность действий такая:
Открываю excel документ [URL="http://upwap.ru/2619599"]ссылка на excel[/URL]. Вхожу в 1С:Предприятие 7.7, открываю обработку Выгрузка номенклатуры.ert[URL="http://upwap.ru/2619604"]ссылка на Выгрузка номенклатуры.ert[/URL], затем нажимаю на кнопку открытия подбора номенклатуры кнопка с 5-ю точками, там вбиваю по коду номер номенклатуры из excel и затем enter и номенклатура попадает в таблицу для отбора, и так нужно с каждым каталогом отдельно. Можно ли сделать считывание из excel циклом и вбивание автоматом? Схему последовательности действий наглядно ещё показал тут на рисунке: [URL="http://upwap.ru/2619680"]ЗАДАЧА[/URL] |
|||
26
maxxxl-ms
19.07.12
✎
15:25
|
Так устал описывать уже. Последовательность действий такая:
Открываю excel документ http://upwap.ru/2619599. Вхожу в 1С:Предприятие 7.7, открываю обработку Выгрузка номенклатуры.erthttp://upwap.ru/2619604], затем нажимаю на кнопку открытия подбора номенклатуры кнопка с 5-ю точками, там вбиваю по коду номер номенклатуры из excel и затем enter и номенклатура попадает в таблицу для отбора, и так нужно с каждым каталогом отдельно. Можно ли сделать считывание из excel циклом и вбивание автоматом? Схему последовательности действий наглядно ещё показал тут на рисунке: http://upwap.ru/2619680 |
|||
27
Ёпрст
19.07.12
✎
15:36
|
(26) можно.
Более того, если в поделке Выгрузка номенклатуры.ert в свойствах формы воткнешь 2 галки - режим сохранения настройки и панель инструментов, то все найденные группы при повторном открытии формы ужо будут сохранены автоматически. |
|||
28
Злой Бобр
19.07.12
✎
15:57
|
(0) Можно. Примеров найти поиском непроблема.
Вопрос в том - а нафига тебе эсель? Ну поставь в номенклатуре признак "выгружать на сайт" и забудь про эксели. Вот уж действительно рвут гланды через Ж... |
|||
29
maxxxl-ms
19.07.12
✎
17:07
|
(26) можно.
Более того, если в поделке Выгрузка номенклатуры.ert в свойствах формы воткнешь 2 галки - режим сохранения настройки и панель инструментов, то все найденные группы при повторном открытии формы ужо будут сохранены автоматически. Не работает, пробовал разные варианты, настройки не сохраняються. (0) Можно. Примеров найти поиском непроблема. Вопрос в том - а нафига тебе эсель? Ну поставь в номенклатуре признак "выгружать на сайт" и забудь про эксели. Предприятию надо через эксель. |
|||
30
Злой Бобр
19.07.12
✎
18:22
|
(29) Дык этим идиотам наверное никто и несказал что можно напрямую грузить, минуя прокладки.
|
|||
31
maxxxl-ms
20.07.12
✎
08:49
|
Блин, неужели никто не может кодом помочь мне? Я не так силён в 1С и не знаю как это реализовать, примерно хотя бы.
|
|||
32
Ёпрст
20.07.12
✎
09:45
|
||||
33
Ёпрст
20.07.12
✎
09:47
|
тока верхние процы-пустышки заремь в коде..
Ну и, если нужны другие листы/колонки.. добавишь по аналогии |
|||
34
maxxxl-ms
20.07.12
✎
10:39
|
Ёпрст4, дружище спасибо ты спас мои глаза! РАБОТАЕТ! Чуть сейчас листы подправлю и будет кайф!
|
|||
35
Ёпрст
20.07.12
✎
10:46
|
И это, вот тут галку воткни - не надо будет каждый раз грузить при открытии, всё будет ужо заполненным:
http://s2.ipicture.ru/uploads/20120720/av2WzSHy.jpg |
|||
36
maxxxl-ms
20.07.12
✎
10:47
|
Ёпрст4, спасибо с меня магар!
|
|||
37
maxxxl-ms
20.07.12
✎
10:49
|
Теперь попробую сделать выгрузку с разных листов, по типу каталога и может быть в конце по кнопке сформировать автоматом формирование каталогов.
|
|||
38
Ёпрст
20.07.12
✎
10:52
|
(37) так можно:
Рекордсет.Source = " |Select F1 from ["+лист+"$] |Union ALL |Select F1 from ["+лист2+"$] |Union ALL |Select F1 from ["+лист3+"$] ..... "; F1 - это первый столбец, нужны другие - F2,F3 и т.д |
|||
39
maxxxl-ms
20.07.12
✎
10:56
|
Другие столбцы мне не нужны. А вот условие например как написать что если у меня сейчас в пункте направление наменклатуры выбраны Импортные товары, то считывать из excel лист1?
|
|||
40
Ёпрст
20.07.12
✎
10:57
|
(39) дык разный текст запроса скармливай по условию и усё..
|
|||
41
Ёпрст
20.07.12
✎
10:59
|
Если <Импорт> Тогда
ТекстЗапроса = .. ИначеЕсли ТекстЗапроса = .. Или можешь писать так Текст запроса = "select Вася from Федя" Если Если <Импорт> Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Федя","Лист..."); или "разрывай" текст запроса по условию.. Короче, развлекайся |
|||
42
maxxxl-ms
20.07.12
✎
10:59
|
Если Направление.ТекущаяСтрока() = 1 Тогда
Процедура ГрузанутьНоменклатурку() Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); лист = "пром"; Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист1+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); КонецПроцедуры КонецЕсли; Так правильно? |
|||
43
maxxxl-ms
20.07.12
✎
11:00
|
А понял, сейчас попробую.
|
|||
44
maxxxl-ms
20.07.12
✎
11:01
|
Хорошо поразвлекаюсь.
|
|||
45
Ёпрст
20.07.12
✎
11:01
|
(42) так не видно, где переменной лист1 присваиваешь чего -то
|
|||
46
maxxxl-ms
20.07.12
✎
11:03
|
Кстати почему у меня считывает со второго листа, ведь стоит тут как бы первый если назван лист: Рекордсет.Source = "Select F1 from ["+лист1+"$] ";
|
|||
47
Fragster
гуру
20.07.12
✎
11:04
|
сделаю удаленно за 40000 рублей
|
|||
48
maxxxl-ms
20.07.12
✎
11:05
|
Вернее указано лист, по идее читать он должен с первого листа, а у меня читает со второго: Рекордсет.Source = "Select F1 from ["+лист+"$] ";
|
|||
49
Ёпрст
20.07.12
✎
11:06
|
(48) у тебя выше в коде
лист = "пром"; вот с листа "пром" и читает |
|||
50
Ёпрст
20.07.12
✎
11:06
|
что такое лист1, и где ты этой переменной присваиваешь значение - не видно
|
|||
51
maxxxl-ms
20.07.12
✎
11:14
|
А разобрался. Отточил до совершенной задачи:
Процедура ГрузанутьНоменклатурку() Если Направление.ТекущаяСтрока() = 1 Тогда Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); лист = "импортные"; Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); ИначеЕсли Направление.ТекущаяСтрока() = 2 Тогда Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); лист = "пром"; Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); ИначеЕсли Направление.ТекущаяСтрока() = 3 Тогда Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); лист = "авто и сельхоз"; Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); ИначеЕсли Направление.ТекущаяСтрока() = 4 Тогда Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); лист = "техника"; Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); КонецЕсли КонецПроцедуры // ГрузанутьНоменклатурку |
|||
52
Ёпрст
20.07.12
✎
11:18
|
(51) как то у тебя мозги набекрень работают
:) Процедура ГрузанутьНоменклатурку() лист = Направление.ТекущаяСтрока(); Если лист= 1 Тогда лист = "импортные"; ИначеЕсли лист = 2 Тогда лист = "пром"; ИначеЕсли лист = 3 Тогда лист = "техника"; Иначе Предупреждение("Облом, Альфредо!",60); Возврат; КонецЕсли; Если ФС.СуществуетФайл(СокрЛП(ИмяФайлаВыгрузки3))=0 Тогда Возврат; КонецЕсли; Адо=CreateObject("ADODB.Connection"); Рекордсет=CreateObject("ADODB.recordset"); Адо.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(ИмяФайлаВыгрузки3)+";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; Адо.Open(); Рекордсет.ActiveConnection = Адо; Рекордсет.CursorType = 3; Рекордсет.LockType = 2; Рекордсет.Source = "Select F1 from ["+лист+"$] "; Рекордсет.Open(); спр = СоздатьОбъект("Справочник.Номенклатура"); Пока Рекордсет.Eof()=0 Цикл Если Спр.НайтиПоКоду(Рекордсет.Fields("F1").Value,0)=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Группы.ДобавитьЗначение(Спр.ТекущийЭлемент()); КонецЕсли; КонецЕсли; Рекордсет.MoveNext(); КонецЦикла; Рекордсет.Close(); Адо.Close(); КонецПроцедуры // ГрузанутьНоменклатурку |
|||
53
Ёпрст
20.07.12
✎
11:19
|
Да, если че, можно в одном запросе обойти все листы и все колонки(или нужные)...
|
|||
54
maxxxl-ms
20.07.12
✎
11:26
|
Ёпрст4, нормально вроде работают, просто 1с для меня новинка.
|
|||
55
maxxxl-ms
20.07.12
✎
11:28
|
Ну работает же)))
|
|||
56
Ёпрст
20.07.12
✎
11:42
|
(55) вот так и на автовазе ведра собирают - "ну ездиют же!"
|
|||
57
maxxxl-ms
20.07.12
✎
11:46
|
Русский дух)))
|
|||
58
maxxxl-ms
20.07.12
✎
11:46
|
С размахом сделал я код))
|
|||
59
maxxxl-ms
20.07.12
✎
13:21
|
Почему то из листа авто и сельхоз не все значения читает, а лишь часть. И после того когда я нажимаю сформировать пишет ошибку:
Если (ABS(Результат-Цена) > 0.05) Тогда {D:\1C\EXTFORMS\_НА_ВОТ.ERT(145)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата) |
|||
60
maxxxl-ms
20.07.12
✎
13:27
|
Почему такая ошибка возникает? Когда вручную вбиваю каталоги, ошибки нет. Может есть у кого предположения? Рагается на это:
// Обрабатывает цену, округляет до "круглого" значения если выбран соответствующий режим и отличие не превышает 5 копеек Функция ОбработатьЦену(Цена) Перем Результат; Результат = Окр(Цена,0); Если (ABS(Результат-Цена) > 0.05) Тогда Результат = Цена; КонецЕсли; Возврат Результат; КонецФункции // ОбработатьЦену |
|||
61
maxxxl-ms
20.07.12
✎
17:32
|
Ошибку исправил, всё работает. Из за процов была что в начале.
|
|||
62
DGorgoN
20.07.12
✎
18:14
|
(61) Если не вдаваться в подробности
Функция ОбработатьЦену(Цена) Перем Результат; Результат = 0; Попытка Результат = Окр(Цена,0); Если (ABS(Результат-Цена) > 0.05) Тогда Результат = Цена; КонецЕсли; Исключение Сообщить(Ошибка в цене); КонецПопытки; Возврат Результат; КонецФункции // ОбработатьЦену |
|||
63
maxxxl-ms
20.07.12
✎
18:47
|
Понял почему из листа авто и сельхоз не все значения читало, потому там не с первой колонки было считывание.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |