0. SkyLink2012 253 01.01.70 03:00 Сейчас в теме

СТАБИЛЬНАЯ Загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа в Excel (код открыт скачать можно бесплатно)

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

Как быть, если по различным причинам такой возможности нет?

У каждого пользователя профессиональной версии 1С:Предприятие 8 подобная обработка уже есть! На диске ИТС!

Типовая обработка «ЗагрузкаДанныхИзТабличногоДокумента.epf», находиться в разделе «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа».

Обратите внимание, начиная с Февраля 2010 г. на диске ИТС данная обработка для конфигураций на платформе 8.1 находиться в другом разделе: «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Платформа 1С:Предприятие 8.1» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа».

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. boygena 09.11.11 13:21 Сейчас в теме
Очень удобно и работает без ошибок. Пока ошибок еще не нашел =))) Поставил +
2. SkyLink2012 253 10.11.11 17:44 Сейчас в теме
Да, иметь под рукой диск ИТС или найти по ФТП-поиску обработку - решение многих проблем.
3. sevipa 20.11.11 01:09 Сейчас в теме
Да, походу это единственный путь, как без доработок используя только типовые возможности непросто загрузить номенклатуру и цены, а загрузить с предсказуемым результатом... вот только научить этому порядку менеджеров отдела снабжения будет достаточно проблематично. Даже имея подобную инструкцию... А так +
4. kirillkr 28 20.11.11 23:32 Сейчас в теме
Замечательное описание. Огромное спасибо.

Кстати, а никто не видел такую же обработку для управляемых форм?
5. PaulV 26.11.11 20:38 Сейчас в теме
Споткнулся на пункте 14: мне нужен был поиск по артикулу.

Решил так:
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ТекущиеДанные.Номенклатура.Артикул);
Результат=СсылкаНоменклатуры.ЕдиницаХраненияОстатков;
6. SkyLink2012 253 26.11.11 21:42 Сейчас в теме
Да, пришлось тоже поменять при загрузке (условие: коды разные, наименования:попадаются одинаковые) Едениц для Отчетов:

Еденица для отчетов
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоКоду(ТекущиеДанные["Код"]); 
 БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796);
 ТекСпр=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору",БазоваяЕдиницаИзмерения,,СсылкаНоменклатуры);
 Если ТекСпр.Пустая() Тогда НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); 
 НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения); 
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения; 
 НайденнаяЕдиницаОбъект.Коэффициент = 1; 
 НайденнаяЕдиницаОбъект.Владелец = СсылкаНоменклатуры; 
 Попытка НайденнаяЕдиницаОбъект.Записать(); 
 Результат = НайденнаяЕдиницаОбъект.Ссылка; 
  Исключение Сообщить("1Не удалось записать"+ТекущиеДанные["Наименование"]); 
 КонецПопытки; 
 Иначе Результат =ТекСпр.Ссылка; 
  КонецЕсли;

Показать



Еденица для хранения остатков
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоКоду(ТекущиеДанные["Код"]); 
 БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796);
 ТекСпр=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору",БазоваяЕдиницаИзмерения,,СсылкаНоменклатуры);
 Если ТекСпр.Пустая() Тогда НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); 
 НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения); 
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения; 
 НайденнаяЕдиницаОбъект.Коэффициент = 1; 
 НайденнаяЕдиницаОбъект.Владелец = СсылкаНоменклатуры; 
 Попытка НайденнаяЕдиницаОбъект.Записать(); 
 Результат = НайденнаяЕдиницаОбъект.Ссылка; 
  Исключение Сообщить("2Не удалось записать"+ТекущиеДанные["Наименование"]); 
 КонецПопытки; 
 Иначе Результат =ТекСпр.Ссылка; 
  КонецЕсли;
 
 
Показать
7. Volga1904 11.12.11 19:26 Сейчас в теме
Очень удобное описание, спасибо
8. SkyLink2012 253 13.12.11 09:08 Сейчас в теме
Я бы с удовольствием еще-бы добавил описания и ключевых поисковых слов. Но боюсь, лишнее модераторы добавят в минус-слова
10. Модератор раздела Alraune 13.12.11 10:19 Сейчас в теме
(8) Так добавьте, не надо бояться )))
91. Bublik2011 9 17.08.13 10:09 Сейчас в теме
Ответ: SerGan757, надо писать в кавычках

цена1 = "0.86" ; 
цена2 = "8";
выражение1 =   цена2*цена1;



Но я бы воспользовалься функцией ПривестиСтрокуКЧислу . Гарантия избежать всевозможных ошибок.

цена1 = ОбщегоНазначения.ПривестиСтрокуКЧислу("0.86") ; 
цена2 = ОбщегоНазначения.ПривестиСтрокуКЧислу(8);
выражение1 =   цена2*цена1;


Вот функция ПривестиСтрокуКЧислу, которая находится УправлениеТорговлей-Общие-ОбщиеМодули-ОбщегоНазначения-ПривестиСтрокуКЧислу

Функция ПривестиСтрокуКЧислу(ЧислоСтрокой, ВозвращатьНеопределено = Ложь) Экспорт
	
	ОписаниеТипаЧисла = Новый ОписаниеТипов("Число");
	ЗначениеЧисла = ОписаниеТипаЧисла.ПривестиЗначение(ЧислоСтрокой);
	
	Если ВозвращатьНеопределено И (ЗначениеЧисла = 0) Тогда
		
		Стр = Строка(ЧислоСтрокой);
		Если Стр = "" Тогда
			Возврат Неопределено;
		КонецЕсли;
		
		Стр = СтрЗаменить(СокрЛП(Стр), "0", "");
		Если (Стр <> "") И (Стр <> ".") И (Стр <> ",") Тогда
			Возврат Неопределено;
		КонецЕсли;
	КонецЕсли;
	
	Возврат ЗначениеЧисла;	
	
КонецФункции

Показать
9. Magicanin 13.12.11 09:36 Сейчас в теме
Где скачать? Не вижу ничего)
11. Pawlick 14.12.11 15:22 Сейчас в теме
5 лет иметь под рукой ТАКОЙ функционел и не использоватьего!?

Ребятам из компании 1С - МИНУС за отсутствие рекомендаций по использованию;

Ребятам из Компании "Онлайн" - БРАВО!
sergio199; Bublik2011; +2 Ответить
12. SkyLink2012 253 14.12.11 16:13 Сейчас в теме
Буду очень счастлив, если порекомендуете статью или способ импорта знакомым
14. w22u 30 25.12.11 16:42 Сейчас в теме
(12) эту статью порекомендую своим знакомым, только если есть возможность быстрее победить неустановившиеся единицы хранения остатков через эту разработку: http://infostart.ru/public/61676/
почему бы не воспользоваться?
13. RakovskiyK 19.12.11 16:41 Сейчас в теме
тааак. беру на тест очередную обработку. :)
Bublik2011; +1 Ответить
15. Bublik2011 9 28.12.11 18:33 Сейчас в теме
w22u таки беспроблемно грузятся и еденицы. Мне, правда, пришлось, в отличие от Skylink2k выборку делать по кодам, а не по артикулу и номенклатуре. В аттаче есть файл настройки.
Прикрепленные файлы:
ed_xranenija_ostatkow.mxlz
16. Bublik2011 9 28.12.11 18:37 Сейчас в теме
SkyLink2k Предлагаю включить в описание загрузку изображений и картинок в 1с 8 УТ из Excel. Загрузка идет в Хранилище информации. Если поменять переменную - загрузка картинок пойдет в отдельный файл.

В аттаче - файл настроек для той-же обработки в Номенклатуру. Во вкладке "настройка"-"восстановить настройки из файла.."- открыть этот файл из аттача. В "События"-"При записи" должна быть такая функция:

Если Объект.БазоваяЕдиницаИзмерения.Пустая()=Ложь Тогда
	
	ЗапросЕдИзм = Новый Запрос();
	ЗапросЕдИзм.Текст = ""
	|ВЫБРАТЬ
	|	ЕдиницыИзмерения.Ссылка
	|ИЗ
	|	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
	|ГДЕ
	|	ЕдиницыИзмерения.Владелец = &Владелец
	|	И ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору"";
	
	ЗапросЕдИзм.УстановитьПараметр(""Владелец"", Объект.Ссылка);
	ЗапросЕдИзм.УстановитьПараметр(""ЕдиницаПоКлассификатору"",Объект.БазоваяЕдиницаИзмерения.Ссылка);
	
	Выборка = ЗапросЕдИзм.Выполнить().Выбрать();
	Если Выборка.Количество() <= 0 Тогда
		
		Ед = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
		Ед.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения.Ссылка;
		Ед.Вес = 1;
		Ед.Владелец = Объект.Ссылка;
		Ед.Коэффициент = 1;
		Ед.Наименование = Объект.БазоваяЕдиницаИзмерения.Наименование;
		Ед.Записать();
		Объект.ЕдиницаДляОтчетов = Ед.Ссылка;
		Объект.ЕдиницаХраненияОстатков = Ед.Ссылка;
	КонецЕсли;
КонецЕсли;

НомерСтолбцаИзображение = 8;
НомерСтолбцаОписаниеИзображение = 3; 


ЗапросСуществующих = Новый Запрос();
ЗапросСуществующих.Текст = ""
|ВЫБРАТЬ
|	ХранилищеДополнительнойИнформации.Ссылка
|ИЗ
|	Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
|	ХранилищеДополнительнойИнформации.Объект = &Объект
|	И ХранилищеДополнительнойИнформации.Наименование = &Наименование"";

Объект.Записать();

ФайлКартинки = Новый Файл(СокрЛП(ТекстыЯчеек[НомерСтолбцаИзображение]));
 //Предупреждение(ФайлКартинки.Существует());
Если ФайлКартинки.Существует() Тогда
	//Предупреждение(""!"");
	ЗапросСуществующих.УстановитьПараметр(""Объект"", Объект.Ссылка);
	ЗапросСуществующих.УстановитьПараметр(""Наименование"", СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]));
	Выборка = ЗапросСуществующих.Выполнить().Выбрать();
	Если Выборка.Количество() <= 0 Тогда
	//	Предупреждение(""!!"");
		ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
		ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
		ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(ТекстыЯчеек[НомерСтолбцаИзображение]),Новый СжатиеДанных);
		ХранилищеОбъект.Объект = Объект.Ссылка;
		ХранилищеОбъект.Наименование = СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]);
		ХранилищеОбъект.ИмяФайла = ТекстыЯчеек[НомерСтолбцаИзображение];
		ХранилищеОбъект.Записать();
		Объект.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
	КонецЕсли;
КонецЕсли;

Показать
Прикрепленные файлы:
load_image.mxlz
isheninp; decide; МимохожийОднако; +3 Ответить
18. SkyLink2012 253 19.01.12 16:08 Сейчас в теме
(16) Bublik2011, сердечное спасибо за замечание)
17. МимохожийОднако 122 09.01.12 08:17 Сейчас в теме
Хорошее описание, которого не хватает на ИТС. Может быть, есть еще где-нибудь подобные описания?
19. SkyLink2012 253 19.01.12 16:13 Сейчас в теме
(17) МимохожийОднако, есть в копирайтах и в комментариях. А на какую тему подобное описание интересно? Очень хочу, чтобы статья была полезная , необходимая и решающая большинство проблем.
20. МимохожийОднако 122 19.01.12 19:50 Сейчас в теме
(19)Сходу ответить сложно. Думаю, статистика наиболее популярных "баянистых" вопросов вокруг универсальных обработок и отчетов с ИТС и типовых конфигураций может натолкнуть на наиболее популярную тематику. Например, для меня интересен набор методов при использовании Универсальной обработки подбора объектов.
21. progres488 25.01.12 21:58 Сейчас в теме
Ребят а кто как бориться если в артикле стоит 0 перед число, у меня ексель съедает ноль и пото мне находит номенклатуру ко артиклу
22. SkyLink2012 253 27.01.12 17:15 Сейчас в теме
(21) progres488, а что если столбец в Екзеле присвоить формат столбца - текстовый?
23. InShallaH 50 10.02.12 16:06 Сейчас в теме
Действительно удобно. Но, к сожалению, для большинства менеждеров проще попросить написать большую красную кнопку "Сделать Все".
24. Yakud3a 20.02.12 05:18 Сейчас в теме
Всё просто и понятно, молодца, как то не обращал внимания на эту обработку на ИТС
25. BalVlad 21.02.12 08:47 Сейчас в теме
Отличная статья с подробным описанием. Спасибо и плюс.
26. takeshi3 27.02.12 13:27 Сейчас в теме
29. Анна79 19.03.12 09:21 Сейчас в теме
А вы можете сделать такую большую красную кнопку? "Сделать все!!!" Спасибо обработка просто отличная, да еще и бесплатная...
30. kvp 16.04.12 15:17 Сейчас в теме
Спасибо! действительно отлично все описано, и эту обработку раньше игнорировала, а выходит очень даже полезная.
31. Stamper 37 18.04.12 19:06 Сейчас в теме
использовать UNIREPS -- это очень правильно
горы времени экономит
32. DoctorRoza 02.05.12 18:08 Сейчас в теме
Вы можете выложить эту статью в более удобном формате, например, в word'e? Я имею в виду Ваш исходный файл, источник, а не сохраненную страницу из браузера. Материал нужный, как раз отличное пособие для пользования обработкой. Заранее благодарю!
33. SkyLink2012 253 03.05.12 09:26 Сейчас в теме
(32) DoctorRoza, к вечеру накатаю, хорошо? Прошу, наберитесь терпения. Очень счастлив, что статья будет полезна и избавит Вас и ваших друзей от ошибок и вбухивания средств-времени впустую. :)
34. DoctorRoza 03.05.12 10:14 Сейчас в теме
35. NE_ZNAIY 28.05.12 17:14 Сейчас в теме
Ещё одно спасибо за труд.
36. lawko 02.06.12 14:32 Сейчас в теме
Также отплюсовал, т.к. просто поражен был тем, что может выдать эта обработка, которая буквально "валялась" на виду, но и в голову не приходило, что можно добиться таких результатов. Огромнейшее спасибо за статью!
Из ручного труда осталось вбивать лишь значения свойств товара и загрузка изображений.
Еще раз большое спасибо!
37. CaSH_2004 354 20.06.12 02:31 Сейчас в теме
Замечательная статья, но вот вопрос: зачем в теме сабжа указано
код открыт скачать можно бесплатно

если суть просто в описании?
Какой код и что скачивать?
38. SkyLink2012 253 20.06.12 09:53 Сейчас в теме
(37) CaSH_2004, прошу Вас, воспринимайте это как элемент SEO оптимизации. :)
40. vitaliyua 19.09.12 11:56 Сейчас в теме
А как быть с созданием групп? Например, переносим справочник номенклатуры, в настройках Обработки негде указывать, группа это или элемент. Как быть?
43. SkyLink2012 253 02.10.12 17:11 Сейчас в теме
(40) vitaliyua, А если попробовать так:
1) в первой колонке - название Группы, во второй колонке - родитель (наименование или код?)

2) В настройке: в строке Наименование-
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); 
НоваяГруппа.Наименование = СокрЛП(ТекстыЯчеек[1]); 
НоваяГруппа.Родитель =ТекущиеДанные["Родитель"];


в Настройке Родитель - искать по колонке № 2 искать по Наименованию
44. gravizapa 02.10.12 17:38 Сейчас в теме
(43) да просто с помощью той же самой обработки я делал описание, по сути то же самое,только описание другое
42. SkyLink2012 253 02.10.12 17:04 Сейчас в теме
(41) gravizapa, Ваш способ модификации обработки - это очень актуально. Создавайте свою ветку. Не надо рассеивать внимание , Вам очень это необходимо сделать. Ваш способ - он более устойчив и скоростнее , как и загрузка из Excel через ADO )) А в этой ветке уж по старинке, что есть в комплекте с основной конфигурацией.

Зачем создавать лишнее, если есть доступный и бесплатный инструмент?
45. oksevi 10.10.12 15:40 Сейчас в теме
Спасибо за подробное описание.
Осваиваем.
Подскажите, пожалуйста, можно ли и каким образом еще один из параметров в прайс-листе добавить как дополнительный реквизит номенклатуры? Конфигурация 1С:Бухгалтерия 8
46. AlexO 126 10.10.12 16:07 Сейчас в теме
все бы хорошо, но кроме номенклатуры, типовая грузит все другие справочники крайне плохо - не ищет по строковым полям, задваивает позиции, переносит только после идеального соответствия номера и наименования.
Да и по поводу загрузки "связанных" справочников - тоже вопросы.
Так что все равно нужно писать свои обработки.
и фразы
наш специалист из отдела внедрения, за пару минут предложил такой код:

очень умиляют, спасибо :)
видимо, и остальные специалисты, и в самой 1С в том числе, также пишут весь код "за пару минут".
47. Bublik2011 9 13.10.12 12:07 Сейчас в теме
(46) AlexO, предлагаю, чтобы не задваивалось, прерывание ставитьпо признаку. Извините, у меня так пока

        Если Лев(ТаблицаЗначенийМассив[НомерСтроки].КодТовара,3)<>"001"  Тогда
                  Продолжить;
        КонецЕсли;


Но лучше загрузка и синхронизация справочников 1с по ГУИД (Уникальный идентификатор) в качестве подстраховки

1. Найти из УникальныйИдентификатор код элемента
Функция НайтиЭлементПоИД (строкаИД)
				ГУИД=Новый УникальныйИдентификатор(строкаИД);
		Для Каждого МД Из Метаданные.Справочники Цикл
			РезСсылка=Справочники[МД.Имя].ПолучитьСсылку(ГУИД);			
			Если РезСсылка.ПолучитьОбъект()<>Неопределено Тогда
				Возврат РезСсылка.Код;
			КонецЕсли;
		КонецЦикла;	 
КонецФункции
Показать



2.Найти УникальныйИдентификатор по коду

Функция НайтиЭлементПоКоду(строкаКод)
	НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(строкаКод));
Если НЕ НоменклатураСсылка.Пустая() Тогда
   Сообщить("GUID = " + НоменклатураСсылка.УникальныйИдентификатор());
КонецЕсли; 
КонецФункция



Для обработки загрузка, естественно, вводятся только одна-две , э-э-э-э, отличия . Первое - "ТекстыЯчеек[1]".

а) в поле "представление реквизита" - например "комментарий"
б) режим загрузки - "вычислять"
в) в поле "выражение"
Сообщить("В табличном документе есть данные - 1столбец:"+Строка(ТекстыЯчеек[1])+"  2столбец:"+Строка(ТекстыЯчеек[2])+" 3столбец"+Строка(ТекстыЯчеек[3])); 


И второе отличие ЗагрузкаДанныхИзТабличногоДокумента.epf найти по Уникальному Идентификатору - в выражение вместо "Возврат" пишется "Результат". То есть для ЗагрузкаДанныхИзТабличногоДокумента это будет иметь вид:

//Функция НайтиЭлементПоИД (строкаИД) //это тоже не надо
				ГУИД=Новый УникальныйИдентификатор(строкаИД);
		Для Каждого МД Из Метаданные.Справочники Цикл
			РезСсылка=Справочники[МД.Имя].ПолучитьСсылку(ГУИД);			
			Если РезСсылка.ПолучитьОбъект()<>Неопределено Тогда
//Возврат РезСсылка.Код; // ТУТ уже вставляется все что возможно Код Наименование Комментарий НаименованиеПолное
Результат РезСсылка.Код
			КонецЕсли;
		КонецЦикла;	 
//КонецФункции //и это не надо
Показать


Поиск по уникальному идентификатору занимает долгое время, зато уж гарантированно)) Для парсера или для синхронизации уж точно пригодится. Технология XML c ИдЭлемента - это наверно в другой ветке.
112. Deroswent 26.01.15 18:14 Сейчас в теме
Очень уж глючная эта обработка. Точнее не глючная а "унифицирована"... у меня например вылетает с ошибкой
Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ПередЗаписью': {Справочник.Номенклатура.МодульОбъекта(46)}: Ошибка при вызове метода контекста (ПроверитьДопустимостьИзмененияРеквизитовСправочника): Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ПроверитьДопустимостьИзмененияРеквизитовСправочника ().

И как бы я не боролся с ней - все бесполезно. Свежие идеи есть?
darkvampire1991; +1 Ответить
113. SkyLink2012 253 01.02.15 18:56 Сейчас в теме
(112) Deroswent, утверждаю обратное :) Обработка не совсем глючная.

Постоянно загружается по 10 накладных в день.

Ставьте проверку и обработку ошибок. Поможет в Вашем случае? Что особенного?

КолонкаШтрихкоды=3; //если пусто -1
КолонкаРисунок=-4   ; //если пусто - ставим отрицательно

Если КолонкаШтрихкоды>0 И ЗначениеЗаполнено(СокрЛП(ТекстыЯчеек[КолонкаШтрихкоды])) Тогда
	Если НЕ ОбщегоНазначения.ТолькоЦифрыВСтроке(ТекстыЯчеек[КолонкаШтрихкоды]) Тогда
		
		//Запись= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
		
		Попытка
			Объект.Записать(Истина);
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки;			
		
		
		
	КонецЕсли;		
КонецЕсли;

Показать


Эта обработка прекрасна и очаровательна на файловой БД.

Вас не затруднит напомнит про ПроверитьДопустимостьИзмененияРеквизитовСправочника () ? Это кажется, из "Управление Торговлей для Украины 3" ? Не видел эту функцию. Есть идея, выполнить проверку допустимости запросом, например. Это уже не топик, простите, как и прочие "костыли".
Соглашусь, "задваивает" элементы. Чтобы не допустить "задваивания", приходится ставить отметку поле поиска - "код", например. В тяжелых случаях - "вычислять"

	Запрос=новый Запрос; Запрос.Текст="
	|  ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ
	|	Номенклатура.Артикул = &Артикул  
	|	И Номенклатура.Поставщик ПОДОБНО &Поставщик
	|";
	Запрос.УстановитьПараметр("Артикул",СтрКодАртикул);
    Запрос.УстановитьПараметр("Поставщик",СтрКодПоставщик);
    РезультатЗапроса = Запрос.Выполнить();
		Если НЕ РезультатЗапроса.Пустой() Тогда
		   Результат = РезультатЗапроса.Выгрузить()[0].Ссылка;
		КонецЕсли;
Показать
darkvampire1991; +1 Ответить
114. AlexO 126 02.02.15 13:07 Сейчас в теме
(113)
Это кажется, из "Управление Торговлей для Украины 3" ?
Вы их наизусть, что ли, помните? ))
Чтобы не допустить "задваивания", приходится ставить отметку поле поиска - "код"
У кого код задваивает, у кого - наименование.
Это каждый должен смотреть у себя по своим данным, универсального решения быть не может.
В тяжелых случаях - "вычислять"
Бесполезно так вычислять - можно найти массу похожих.
Единственный вариант - сделать многоступенчатую проверку и идентификацию: проверка по коду и наименованию, нет - только по наименованию (полностью), нет - похожесть. Найдено - еще раз перепроверить из найденного по коду. И только в этом случае записывать.
Особо "нестандартные" случаи - просто выводить информацией, что и как не совпало.
Только так, это - единственный вариант, закрывающий 90% обменов.
остальное - только вручную настраивать под "нюансы" кокнретной базы (конкретные данные обмена).
48. azeraus 06.11.12 10:02 Сейчас в теме
Хорошая статья с подробными описаниями, очень помогло, но я бы хотел спросить, КАК МОЖНО АВТОМАТИЧЕСКИ СОЗДАТЬ ДОГОВОРА КОНТРАГЕНТОВ при загрузке в справочник контрагентов. Извините за таков "простой вопрос" просто в 1С пока разбираюсь не очень.
49. Bublik2011 9 06.11.12 10:55 Сейчас в теме
(48) azeraus, Если задача создать справочник с договорами контрагентов. Я бы предложил поочередно внести контрагентов с минимально необходимыми реквизитами, а затем список договоров. Мог-бы видеоролик предложить или идею скриншот приаттачить, если перечислите, какие данные-реквизиты интересуют для обновления.
50. azeraus 06.11.12 15:43 Сейчас в теме
(49) Bublik2011, База новая, у контрагентов в списке договоров нет ни одного пункта.Контрагентов загрузил (проставил - юр.лицо, наименование, полное наименование, галочка "Покупатель"). Я бы хотел на вкладке счета и договора создать новый договор контрагента и указать его основным с проставлением следующих реквизитов:
1. Наименование "Основной договор"
2. Вид договора "С покупателем"
3. Ведение взаиморасчетов "По договору в целом", валюта "тенге"
4. Условия договора "Без дополнительных условий"
Как это все можно сделать?
Ваша идея насчет скриншотов или видеоролика очень бы мне помогла.
Заранее спасибо!
51. Bacemo 06.11.12 16:11 Сейчас в теме
52. VladimirVladimir 4 20.11.12 17:41 Сейчас в теме
Подскажите как добавить новые группы номенклатуры из файла. Спасибо.
55. Мощный 09.12.12 11:23 Сейчас в теме
(52) VladimirVladimir, Если в ехеле будут каким-то образом идентифицироваться группа ( или отступом, или обьединением ячннк или цвнтом, или шрифтом, то проблем как понимаеие нет - все в один проход
57. alex54 09.12.12 11:34 Сейчас в теме
(55) Мощный, спасибо, кажется малость доходит, но в моем случае все-равно надо дорабатывать эксел, типа раскрасить все в разные цвета или добавить пустые строки... я правильно понимаю?
65. Bublik2011 9 09.12.12 15:32 Сейчас в теме
(52) VladimirVladimir, Действительно, сложно наверно. Вероятно обязательно указать ЕденицуИзмерения. А для группы это не предусмотрено.

Наверно создать группу лучше в два этапа
1. Создать группы
2. Назначить каждой группе родителя


Вот пример:
1. Создаете файл: каждая строка - название группы без спец символов вроде кавычек. Допускается тире, цифры, пробел.

Название группы1
Вторая группа
Автозапчасти
Велосипеды
Шины


Создаете обработку (или из аттача берите) с текстом для кнопки "Выполнить"

	
	  файл = Новый ТекстовыйДокумент;
	  адресФайла="C:\ТекстСНовымиГруппами.txt";
	Попытка файл.Прочитать(адресФайла);
	Исключение 
		Предупреждение("файл по данному адресу не найден");	
	КонецПопытки;
Для Сч=1 По файл.КоличествоСтрок() Цикл	
		ОбработкаПрерыванияПользователя();
		Стр = файл.ПолучитьСтроку(Сч);
		Состояние("обработка файла "+Строка(Сч));
	НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
	//НоваяГруппа.Код = Строка(ТекстыЯчеек[2]);
	НоваяГруппа.Наименование = СокрЛП(Стр);	
	НоваяГруппа.Записать();
КонецЦикла;

Показать
Прикрепленные файлы:
СозданиеГруппы.epf
85. passtools 28.03.13 13:36 Сейчас в теме
(65) Bublik2011, Для какой версии СозданиеГруппы.epf ? Он у меня выводит ошибку. Мой УТ 10.3

Вот что выводит.

{Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка подключения внешних метаданных: Ошибка загрузки документа.
Внешняя обработка не может быть прочитана текущей версией программы.
Прикрепленные файлы:
53. alex54 09.12.12 09:01 Сейчас в теме
хорошая штука, но мне нужно указать помимо начальной строки - еще и конечную, чтоб загрузить весь прайс, а потом частями загружать в нужные папки
а так приходиться перед этим лопатить эксел предварительно, что тоже не удобно

можно это дело как-то поправить?

заранее огромное спасибо
54. Мощный 09.12.12 11:19 Сейчас в теме
(53) alex54,
а зачем начальная и конечная? если есть начальная, т.е. строка ехеля каким-то образом выделенная, например наименование группы размещенное по какому-то фиксированному адресу, например, в обьединении ячеек.. Тогда до признака окончаниия строк или следующей такой ячейки реализуется а один проход
59. alex54 09.12.12 12:18 Сейчас в теме
(54) Мощный, что-то ничего не выходит ((( грузит весь список, хотя разделение есть, что-то я не догоняю (((







60. Мощный 09.12.12 13:30 Сейчас в теме
(59) alex54, к сожалению у меня нет такой обработки с ИТС, а ежли есть, то искать просто некогда.. Обработки пишу сам.. Поэтому не сочтите за труд, ежли такая обработка есть перешлите на досуге подделаю.. tihon1t@mail.ru
А что касаемо алгоритма с группами, сброшу сегодня попозже, ну например с опознаванием ячеек на обьединение
Если не лень сбросьте и исходную, и доделанную постараюсь понять почему весь список попадает без учет разделения
67. SkyLink2012 253 09.12.12 15:52 Сейчас в теме
(60) Мощный,


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


Наверное мне кажется, но вижу, что "Устанавливать"-"Свечи". Потому и "весь список попадает без учет разделения".


А что касаемо алгоритма с группами, сброшу сегодня попозже, ну например с опознаванием ячеек на обьединение


Поверьте пожалуйста, создано столько замечательных обработок с различными объектами. Обновлены методы работы с объектами,например, понравилась статья "Загрузка из EXCEL в 1С тремя методами. Часть I. MS ADODB.Connection". Но все равно приходится, черт побери, да, приходится иногда загружать с помощью "Универсальной загрузки справочников". Проще и надежнее. Извините, если ошибаюсь.
62. Bublik2011 9 09.12.12 15:03 Сейчас в теме
(59) alex54, Было-бы здорово, если-бы заранее в строку прописать для товара кроме артикула еще и родителя (см фото)



Иначе придется придумать, куда (наверное в "при обработку и загрузке") засунуть переменную "НазваниеКаталогПродукции". На деле это будет так:


-В первой строке есть название. Название АВТОСВЕЧИ установить в переменную НазваниеКаталогПродукции.
-Во второй строке нет названия, есть товар. Для товара установить Родителя с названием из переменной НазваниеКаталогПродукции.
-Во третьей строке нет названия, есть товар. Для товара установить Родителя с названием из переменной НазваниеКаталогПродукции.
-В Строке ХХ ....


Вот один из шаблонов для определения группы товара

Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ 
|	Номенклатура.Наименование,
|	Номенклатура.Ссылка как Результат,
|	Номенклатура.ЭтоГруппа	
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.ЭтоГруппа
|	И Номенклатура.Наименование = &Наименование
|";
Запрос.УстановитьПараметр("Наименование","Прочее");
РезультатЗапрсаВМассиве = Запрос.Выполнить().Выбрать();

Если 		Выборка.Количество()=0  Тогда
		Вопрос("Не найдено ни одного родителя, необходимо создать новый или записывать в отдельную группу ДляРазбросаПоКаталогам. Сейчас прервать загрузку?", РежимДиалогаВопрос.ДаНет)
	  Если Ответ = КодВозвратаДиалога.Да Тогда
            Возврат; //выйти из цикла или процедуры
	  КонецЕсли;
ИначеЕсли Выборка.Количество()>1 Тогда
	Предупреждение("Найдено более двух родителей. Надо с этим что-то предпринять..",60);
КонецЕсли;

Пока РезультатЗапрсаВМассиве.Следующий() Цикл
        	Результат= РезультатЗапроса.Результат 
	//Объект = РезультатЗапроса.ссылка.ПолучитьОбъект();
         //Объект.наименование = что-то с элементом
         //Объект.записать();
  КонецЦикла; 
Показать


Вот еще несколько шаблонов, кроме "Работа с Текстом (Строкой) 1с" при загрузке прайса:

Сообщить(" в текущих данных Код сейчас  "+Строка(ТекущиеДанные["Код"]));
Сообщить(" в текущих данных Владелец сейчас  "+Строка(ТекущиеДанные["Владелец"]));

Сообщить(" в ТекстыЯчеек[1] сейчас  "+Строка(Строка(ТекстыЯчеек[1])));
Сообщить(" в ТекстыЯчеек[2] сейчас  "+Строка(Строка(ТекстыЯчеек[2])));



Понимаете, сейчас только осталось в программный код перевести рассказ "-В первой строке есть названи и т.д. (см выше)" Задача интересная - определить переменную таким образом, чтобы она изменялась или читалась из прайса. Вот вижу еще один маневр:


Если значение из колонки два пустая, следовательно, в колонке 1 - название группы


	   Если СтрДлина(СокрЛП(Строка(Строка(ТекстыЯчеек[2]))))=0 Тогда	   
текстПеременнаяРодительДляСледующихСтрок=Строка(ТекстыЯчеек[1]));
			  //хочется в Результат и наити по наименованию 
			  //засунуть Результат=Строка(ТекстыЯчеек[2])); 
			  //но надо ссылку найти	    ссылПеременнаяРодительДляСледующихСтрок=Справочники.Номенклатура.НайтиПоНаименованию(Строка(ТекстыЯчеек[2]));
		         Если ссылПеременнаяРодительДляСледующихСтрок.ЭтоГруппа Тогда			 
				 	Результат=ссылПеременнаяРодительДляСледующихСтрок; 
			 КонецЕсли; 
	   КонецЕсли; 
Показать


В-общем, надо будет поэксперементировать с вкладками "События-Перед записью объекта" и "События-При записи объекта". Ответ наверно чуть позже.


Если известно, что количество стобцов всегда одинаковое и всегда соответсвует, тогда скину свою обработку. У меня так и есть: "Обработка для поставщика 1", "Обработка для поставщика 2". Только я требую от поставщиков прайсы с кодами или со штрихкодами. Так можно избежать ошибки при количестве товаров в базе более 25000
64. Мощный 09.12.12 15:26 Сейчас в теме
(62) Bublik2011, извините но реальному усру это .. не торт в общем.. Все должно быть намного проще, т.е. ехелька без предобработки
И по хорошему, представленную вещчть надо бы переделать процентов на 95
66. Bublik2011 9 09.12.12 15:41 Сейчас в теме
(64) Мощный, ну так интересно.. Консоль-же переделали ведь. Очень предпочитаю придерживатьмя тематике группы. Да, бывают моменты - сложно создать группу. Бывают crazy вроде меня, которые усложняю моменты, делают проверку соответсвии в тех местах, где не это не требуется. :) Мне иногда парсить прайсы с сайтов приходится и искать товары по УникальномуИдентификатору. Конечно, ерунда, есть решение проще. В остальном - этот продукт "Загрузка данных" - просто идеален. Загрузка Справочника номенклатуры мз Excel в стандартном виде - незаменимая вещь. Она доступна и решает 80% проблем. Позволяет избежать лишних затрат. Очень рад, что мне тоже нравится эта обработка. Рассматриваю эту универсальную стандартную обработку, идущую в комплекте с 1с как эдакий черновик, после чего можно сформулировать Техническое Задание.
68. Мощный 09.12.12 16:00 Сейчас в теме
(66) Bublik2011, Так я и говорю, что исключительно для внутреннего употребления, как правило для обучения.. То есть технологическая..
72. alex54 18.12.12 15:57 Сейчас в теме
(68) Мощный, есть что нового ?
73. Bublik2011 9 16.01.13 04:47 Сейчас в теме
(72) alex54, Сколько бы обработок вроде ЗагрузкаданныхизТабличногоДокумента конечно не появлялось, эта остается классикой. Грех просто предьявлять претензии, исходный код открыть - изучай, не хочу... Еще чем мне нравится эта обработка - тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С.

Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format). Теперь возможно загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа в OpenOffice ODF (Open Document Format). Как можно загрузить в 1с8 из OpenOffice ? Можно прочитать http://infostart.ru/public/158951/
56. alex54 09.12.12 11:31 Сейчас в теме
мне присылают прайсы, как правило, где номенклатура в алфавитном порядке без разделения
вот я и хочу, обозначив 1 и последнюю строку, выделенную часть загрузить в одну папку, затем выделив другую часть - загрузить в другую



к примеру аккумуляторы в одну папку
амортизаторы в другую ..... и т.д.

приходиться каждый раз лишнее удалять... загружать, а потом опять открывать документ по-новой (((

может я делаю что-то не так? подскажите
58. alex54 09.12.12 11:36 Сейчас в теме
а вот была бы возможность выбрать заданный диапазон в обработке - было бы круто ) загрузил файл и меня начальную и конечную ячейки - загружай что хочешь и куда хочешь
61. alex54 09.12.12 13:34 Сейчас в теме
63. Мощный 09.12.12 15:21 Сейчас в теме
69. alex54 09.12.12 17:06 Сейчас в теме
ребят, не надо создавать группы в обработке, они созданы, это не так уж и сложно сделать вручную и родителя

обработка все делает на ура, единственно что нужно, так это задать диапазон загрузки

со строки такой - до строки такой.......... и все

и не надо во всем прайсе дописывать родителя, я его устанавливаю в из готовых заготовок

это еще и потому, что у разных поставщиков на одинаковую номенклатуру - разные родители или вообще нет

вот есть у меня прайс на 5000 наименований и даже разделение есть по группам (как задумал поставщик) а у меня другие для этого группы (родитель)
я устанавливаю куда грузить и задаю диапазон в прайсе....все.... остальное там идеально

если надо, я прикреплю обработку, которая есть у меня, сюда
70. alex54 09.12.12 17:19 Сейчас в теме
попробовал вот эту обработку http://infostart.ru/public/125082/

архи неудобная, НО, что там удачно, так это возможность задать диапазон загрузки

если это реализовать в данной версии - цены бы не было )
71. alex54 10.12.12 20:04 Сейчас в теме
есть что нового по теме? из бюджетных ничего пока подобрать не могу (
74. kirillkr 28 18.01.13 17:49 Сейчас в теме
А как можно перед добавлением строки в табличную часть выполнить код - надо ли добавлять новую строку или нет.
Например, мне выкладывают прайс лист и помимо номенклатуры выдают все шк, т.е. одинаковых строк отличающихся только ШК - уйма. Как сделать так, чтобы в ценообразование загружать каждую номенклатуру единожды?
75. fgremlin 11.02.13 20:06 Сейчас в теме
А на управляемых интерфейсах запускал кто нибудь эту обработку? Что-то у меня не получилось... :( поделитесь опытом!
76. NikolasI 25.03.13 11:50 Сейчас в теме
Полезная обработка.
Сейчас пытаюсь забить при помощи нее Номенклатуру поставщика. Не получается - помогите кто сможет.
То есть у нас есть своя номенклатура, в ней артикулы совпадают с поставщиком, наименования некоторые отличаются.
Соответсвенно надо произвести поиск поля Наименования по артикулу справочника Номенклатура.

Написал такое:

СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",ТекущиеДанные.Номенклатура.Артикул);
Результат=СсылкаНоменклатуры.Наименование;


Выдает такое:
Поле объекта не обнаружено (Номенклатура)
Загружен элемент справочника: <>


Что не так делаю?
77. fgremlin 25.03.13 12:12 Сейчас в теме
(76) NikolasI,
А куда грузишь? Редакция, конфигурация?
78. fgremlin 25.03.13 12:25 Сейчас в теме
(76) NikolasI,
Теоретически там код писать не нужно...
В представлении реквизита "Номенклатура" ставишь искать по полю табличного документа (артикул) - из твоей таблицы с данными, в поле "искать по" выбираешь "Артикул", и все, должен привязывать к нужному родителю в номенклатуре найдя его по артикулу...
Смотрел в редакции УТ 11, в живую не проверял, но раньше пробовал таким образом другие справочники грузить.
79. NikolasI 25.03.13 13:51 Сейчас в теме
Оу!
Спасибо! :)
Видимо я перемудрил...
80. passtools 26.03.13 00:42 Сейчас в теме
Как добавлять рисунки картинки по артиклу? Все рисунки и товары илеют одинаковые артикулы.
81. Bublik2011 9 26.03.13 14:55 Сейчас в теме
(80) passtools, например записать изображение можно отдельной обработкой


		ОбъектСсылка=Справочники.Номенклатура.НайтиПоКоду(КодЭлемента);
		ОбъектСправочник=ОбъектСсылка.ПолучитьОбъект();

	 ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
		ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
		ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(СокрЛП(ПолеВвода2+ВходныеДанные+".jpg")),Новый СжатиеДанных);
		ХранилищеОбъект.Объект = ОбъектСсылка;
		ХранилищеОбъект.Наименование = СокрЛП(ОбъектСсылка.Наименование);
		ХранилищеОбъект.ИмяФайла = СокрЛП("РасположениеФайлов"+".jpg");
		ХранилищеОбъект.Записать();
				
		ОбъектСправочник.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
        ОбъектСправочник.Записать();

Показать


Или применить ее в этой теме, где ОбъектСсылка - это найденный товар по артикулу . Вечером посмотрю другие шаблоны ..

В смысле- "одинаковые артикулы" ? У меня было такое, пришлось по Кодам или по УникальнымИдентификаторам искать. Подробнее?
84. passtools 27.03.13 16:00 Сейчас в теме
(81) Bublik2011, " где ОбъектСсылка - это найденный товар по артикулу " он у меня не находит изображения. Мне кажется надо прописать где ОбъектСсылка не по коду, а надо по артикулу. Вот только я в программировании НОЛЬ. не знаю что точно прописать, чтобы искал файлы по артикулу а не по коду. Может так ОбъектСсылка=Справочники.Номенклатура.НайтиПоАртикулу(АртикулЭлемента); А то выдает такую ошибку Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,55)}: Переменная не определена (КодЭлемента) Код который Вы выложили я вставил в обработчик, указав в настройке Основное изображение -> Вычислить.
82. passtools 26.03.13 15:09 Сейчас в теме
Bublik2011 В смысле- "одинаковые артикулы" ? Я наверное не точно передал смысл. " Одинаковые артикулы " Я имел в виду, что у каждого товара свой артикул, и названия рисунков так же имеют тот же артикут товара. Названия рисунка это артикул товара. Так же некоторые товары имеют несколько фото с добавлением _1.jpg _2.jpg _3.jpg
83. Bublik2011 9 27.03.13 13:31 Сейчас в теме
(82) passtools, да, это удобно загрузить номенклатуру с изображениями от контрагентов и обновлять свою базу.Но недавно избавился от гемора по сжатию файловой базы и чистки Справочники.ХранилищеЗначений. Может не надо так много грузить?) Если такое количество картнок надо для сайта, то лучше качественное и большое фото держать вне файловой базы и подгружать при выгрузке из отдельного файла. Как? Это другой вопрос))

А пока, думаю, чтобы найти несколько фото с добавлением _1.jpg _2.jpg _3.jpg, можно
1)перебирать каталог
2)явно указать в строке таблицы и проверять: пустая строка ? есть файл? например так
ФайлКартинки = Новый Файл(СокрЛП("c:\Мои документы\Jooob\foto\"+(Строка(ТекстыЯчеек[2]))+"__"+(Строка(ТекстыЯчеек[5]))+"_a.jpg"));
Если ФайлКартинки.Существует() Тогда
......	
КонецЕсли;


3) в аттаче архив - НАДО проверить на одном товаре. Может не работать, синтаксис, опять-таки((

Чорт! Ну ей Богу, если срочно, то лучше обработку создать с перебором файлов, если в названии файла есть артикул - запись.
Прикрепленные файлы:
РаботаСИзображениями_MXLZ.zip
86. Bublik2011 9 28.03.13 16:11 Сейчас в теме
я обязательно напишу подробно решение этого вопроса-по артикулам. мне не лень, просто физически за комп не могу приземлиться)) С утра 29.03 попытаюсь порекомендовать простое решение. Поверьте, оно есть. Решение очень простое. Буду весьма рад, что типовая обработка работы со справочниками пригодится в приенении. Я аж прям фэн этого решения от 1С ))) Пока рекомендую взглянуть на http:// help1c . com/faq8.html - работа с примитивными справочниками.

Пожалуйста, вместо скриншота ошибки - скриншот какие данные есть, на примере http://forum.infostart.ru/ajax/show_comment.php?t=45830&c=54 .
87. fgremlin 02.04.13 16:42 Сейчас в теме
Господа практикующие программеры, подскажите:
каким кодом можно корректно сформировать упаковки для номенклатуры. Использую индивидуальные наборы для номенклатуры (что-бы для каждой позиции указывать количество в упаковке).
Использую 1С:Предприятие 8.2 (8.2.17.153) Управление торговлей, редакция 11.0 (11.0.9.15)
Предполагаю поступать таким образом:
1. Для начала формирую конечные единицы (шт.), грузить в справочник "Упаковки", тут трудность только в формировании наименования. В конфигурации это делается таким кодом:
СокрЛП(СокрЛП(ЕдиницаИзмерения) + " (" + Формат(Коэффициент,"ЧРД=.") + " " + СокрЛП(ЕдиницаИзмеренияВладельца) + ")")

2. Сформировать упаковки, тут две трудности:
а. Выбрать и установить конечную единицу измерения (родительскую)
б. Сформировать наименование из родительской единицы измерения и текущей.

И все эти единицы требуется проверять на наличие и если такие существуют, то грузить их не требуется...

Может кто делал подобное?
88. fgremlin 02.04.13 17:55 Сейчас в теме
(87) fgremlin,
Понемногу решаю вопрос, результаты буду выкладывать тут, чтобы сохранялась информация для тех, кто столкнется с подобными проблемами.
При описании предполагаю, что читающий осознал все вышеописанное в самой статье и в обсуждениях:
Итак, грузим "конечные" единицы (шт) потому, что их потом потребуется использовать в качестве родителей для более крупных упаковок:
скрин настроек обработки во вложении, обратите внимание на то, что
1. поле "наименование" спущено в самый низ для того чтобы наименованию было из чего формироваться ("Единица измерения", "Коэффициент") и по нему проверяется наличие данной упаковки
2. Поиск происходит в том числе по полю "Владелец" что-бы владелец подставлялся из справочника номенклатуры (работает по наименованию)
3. Заполнял поля только необходимые для меня, остальные добавляйте "по вкусу".

код формирования наименования такой:
Результат = СокрЛП(СокрЛП(ТекущиеДанные.ЕдиницаИзмерения) + " (" + Формат(ТекущиеДанные.Коэффициент,"ЧРД=.") + " " + СокрЛП(ТекущиеДанные.ЕдиницаИзмерения) + ")");



p.s. В понимании некоторых процессов могу заблуждаться, прошу коллег попровлять меня.
p.p.s. ... to be continued...
Прикрепленные файлы:
89. fgremlin 03.04.13 11:57 Сейчас в теме
(87) fgremlin,
Продолжаем разговор:
гружу упаковки (которые состоят из конечных упаковок)
Скрин настроек во вложении.
Комментарии и код:
1. Как и в прошлой загрузке Владелец ищется по наименованию номенклатуры из колонки таблицы.
2. Родитель (конечная упаковка из которой состоит текущая) ищется и заполняется кодом:

//Ищем конечную единицу для номенклатуры:
Штука = Справочники.ЕдиницыИзмерения.НайтиПоКоду(796);
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоКоду(ТекущиеДанные.Владелец.Код);
Если Не(СсылкаНоменклатуры.Пустая()) Тогда
	КонУпаковка = Справочники.УпаковкиНоменклатуры.НайтиПоРеквизиту("ЕдиницаИзмерения",Штука,,СсылкаНоменклатуры);
	Если КонУпаковка.Пустая() Тогда 
		Сообщить("Нет конечной упаковки!!!");	
	КонецЕсли;
Иначе
    Сообщить("Не найдена номенклатура");	
КонецЕсли;

Сообщить(""+КонУпаковка.Ссылка.Наименование);
Результат = КонУпаковка.Ссылка;
Показать


3. Ставим флаг "Состоит из других упаковок"
4. "Единица измерения" из классификатора ставлю вручную, но ничего не мешает поискать по коду или наименованию в классификаторе...
5. Количество в упаковке берем из колонки таблицы.
6. Коэффициент пересчитываем из текущих данных таким кодом:

//Пересчитываем коэффициенты на основании конечной единицы
КонечныйКоэффициент = ТекущиеДанные.Родитель.Коэффициент;
КоличествоУпаковок = ТекущиеДанные.КоличествоУпаковок;
Результат = КонечныйКоэффициент*КоличествоУпаковок;


7. Ну и, конечно же наименование, которое формируется из текущих данных по штатным алгоритмам таким кодом и вроде даже проверяется на уникальность не позволяя задвоить упаковку:


Результат = СокрЛП(СокрЛП(ТекущиеДанные.ЕдиницаИзмерения) + " (" + Формат(ТекущиеДанные.Коэффициент,"ЧРД=.") + " " + СокрЛП(ТекущиеДанные.Родитель.ЕдиницаИзмерения) + ")");


Ну, вот как-то так.
В общем и целом данной обработкой можно делать много чего.
Надеюсь кому нибудь это пригодится.
При загрузке использовались исключительно материалы данной статьи и ветки форума, за что авторам огромное спасибо.
Прикрепленные файлы:
SkyLink2012; Bublik2011; +2 Ответить
90. SerGan757 16.08.13 22:08 Сейчас в теме
кто поможет? почему не работает? нужно цену из накладной умножить на коэффициент, но уперся и мучаюсь...

цена1 = 0.86; 
цена2 = ТекстыЯчеек[24];
выражение1 =	цена2*цена1;
Результат = Вычислить(выражение1);

Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,3)}: Ошибка в выражении
Преобразование значения к типу Число не может быть выполнено
92. SerGan757 17.08.13 10:25 Сейчас в теме
СПАСИБО РАБОТАЕТ!!!вот результат
цена1 ="0.85"; 
цена2 = ОбщегоНазначения.ПривестиСтрокуКЧислу(ТекстыЯчеек[4]);
Результат = цена1*цена2;
93. valya977 5 16.10.13 01:05 Сейчас в теме
Довольно часто пользуюсь данной обработкой.Спасибо за полный и понятный показ действий очень удобно и экономит много времени.
94. valya977 5 16.10.13 02:49 Сейчас в теме
А есть возможность делать отбор по номенклатуре (не загружать то что уже есть в справочниках)?
95. Bublik2011 9 16.10.13 14:46 Сейчас в теме
Предпочел-бы запросом делать отбор по номенклатуре, чтобы не загружать то что уже есть в справочниках. Тогда можно фильтровать по нескольким признакам.

Вот вариант, без создания единиц хранения остатков при создании. Подходит? Не проверял, как работает, но синтаксических ошибок нет. Предусмотрен вариант ошибки , что артикул или строка, по которому ведется поиск, незаполнен.

АртикулДляПоиска=СокрЛП(ТекстыЯчеек[40]);

Если НЕ ЗначениеЗаполнено(АртикулДляПоиска) Тогда
	Режим = РежимДиалогаВопрос.ДаНет;		
			Ответ = Вопрос("Пустая строка для поиска, возможен иной результат", Режим);
			Если Ответ = КодВозвратаДиалога.Да Тогда
			    //
			Иначе		
				Возврат 0;					
			КонецЕсли;
КонецЕсли;

	
Запрос=новый Запрос;
Запрос.Текст="
|  ВЫБРАТЬ  
|	Номенклатура.Ссылка,
|	Номенклатура.Код,
|	Номенклатура.Артикул,
|	Номенклатура.Поставщик
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.Артикул = &kjhgfd
//|	И Номенклатура.Поставщик = &fghjk
|";
Запрос.УстановитьПараметр("fghjk",АртикулДляПоиска);

РезультатЗ = Запрос.Выполнить().Выгрузить();
РезультатЗапроса = Запрос.Выполнить();

		//Если НЕ РезультатЗапроса.Пустой() Тогда
		//	СтрокаРезультата = РезультатЗапроса.Выгрузить()[0];	
		//	  	Ссылка=СтрокаРезультата.Ссылка ;
		//КонецЕсли;

	Если  РезультатЗапроса.Пустой() Тогда			
			Объект=Справочники.Номенклатура.СоздатьЭлемент();
	  		Объект.Артикул=АртикулДляПоиска;
			Объект.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
					Попытка 
						Объект.Записать();
						Результат=Объект.Ссылка;				
					Исключение 
						Сообщить("Не удалось записать  "+СокрЛП(ОписаниеОшибки()));
					КонецПопытки; 					
	Иначе 				
		СтрокаРезультата = РезультатЗапроса.Выгрузить()[0];	
	    Результат=СтрокаРезультата.Ссылка ;  		 					
	КонецЕсли;	

Показать
96. Bublik2011 9 02.03.14 14:57 Сейчас в теме
Как видите, реквизиты «Единица для отчетов» и «Единица хранения остатков» остались не заполненными.


Попробовал загружать номенклатуру без идентификации по артикулу и коду. Вот, например код, который вставляется "Нумерация объектов-События-При записи объектов"

Мне понравилась идея вместо постоянной писанины обработок сразу создать номенклатуру, штрихкод, единицы измерения БЕЗ ПОВТОРНЫХ запусков. Ну. знаете, например, чекбокс "не создавать новые" и т.п. Но быдьте осмотрительны, ИДЕНТИФИКАЦИИ по коду\артикулу нет. Это уже самостоятельно :)

КолонкаШтрихкоды=-3; //если не заполнена или неохота записывать -1
 //если пусто -1


Спр=Объект.Ссылка.ПолучитьОбъект();
СсылкаНоменклатуры=Объект.Ссылка;
						БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
						ТекСпр=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору",БазоваяЕдиницаИзмерения,,СсылкаНоменклатуры);
						//Сообщить(ТекСпр.Пустая());
						
						Если ТекСпр.Пустая() Тогда 
						НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); 
								НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения); 
								НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения; 
								НайденнаяЕдиницаОбъект.Коэффициент = 1; 
								НайденнаяЕдиницаОбъект.Владелец = СсылкаНоменклатуры;
								Попытка НайденнаяЕдиницаОбъект.Записать();
									СпрКод=Справочники.Номенклатура.НайтиПоКоду(СсылкаНоменклатуры.Код).ПолучитьОбъект();
									Объект.ЕдиницаДляОтчетов = НайденнаяЕдиницаОбъект.Ссылка;
									Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиницаОбъект.Ссылка;							
									Объект.ЕдиницаИзмеренияМест= НайденнаяЕдиницаОбъект.Ссылка;
						    Исключение Сообщить("Не удалось записать еденицу "+" "+ ОписаниеОшибки()); 
							КонецПопытки;
						 //Сообщить(Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору",БазоваяЕдиницаИзмерения,,СсылкаНоменклатуры).Пустая());
						КонецЕсли;		
Объект.Записать();


Если КолонкаШтрихкоды>0 И ЗначениеЗаполнено(СокрЛП(ТекстыЯчеек[КолонкаШтрихкоды])) Тогда	
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
|	Штрихкоды.Штрихкод,
|	Штрихкоды.Владелец.Ссылка,
|	Штрихкоды.Владелец.Код Код,
|	Штрихкоды.ХарактеристикаНоменклатуры.Ссылка,
|	Штрихкоды.ХарактеристикаНоменклатуры.Наименование
|ИЗ
|	РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
|	Штрихкоды.Штрихкод = &lkjhgfds
//|	И Штрихкоды.ХарактеристикаНоменклатуры.Наименование ПОДОБНО &srgdthfyjuki
|";
Запрос.УстановитьПараметр("lkjhgfds",СокрЛП(ТекстыЯчеек[КолонкаШтрихкоды]));
//Запрос.УстановитьПараметр("srgdthfyjuki",СокрЛП(?(Результат.ВГраница()>=ХаракНоменклатуры, СокрЛП(Результат[ХаракНоменклатуры]), "")));
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса.Пустой() Тогда
		СтрокаРезультата = РезультатЗапроса.Выгрузить()[0];	
		длорпавы = СтрокаРезультата.Код;
		Xcvghjkjbv("нашли владельца штрихкода, "+Строка(длорпавы)+" "+Строка(СтрокаРезультата.ВладелецСсылка)) ;
	Иначе		
	    				Запись= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
						Запись.Штрихкод                       = СокрЛП(ТекстыЯчеек[КолонкаШтрихкоды]);
						Запись.Владелец                       = СсылкаНоменклатуры;
						Запись.ТипШтрихкода                 = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
						Запись.ЕдиницаИзмерения                 = СсылкаНоменклатуры.ЕдиницаХраненияОстатков;
						Запись.Качество                       = Справочники.Качество.НайтиПоНаименованию("Новый");
 							Попытка
						Запись.Записать(Истина);
							Исключение
								Xcvghjkjbv("Не удалось записать ШК: "+" для элемента: "+Строка(Объект)+" "+СокрЛП(Объект.Код)+" ||| "+ ОписаниеОшибки());
							КонецПопытки;
		
		
		
		
		
		
	КонецЕсли;
КонецЕсли;	

Показать


97. Isperator 28.03.14 15:37 Сейчас в теме
Полезная статья. Мне как раз помогла.
98. Kutnor 24.04.14 16:36 Сейчас в теме
скажите пожалуйста, а как загружать с характеристиками? Я попробовал у меня штрихкоды загрузились, а характеристики к ним нет.
Вот ошибка:
Ячейка[R2C5](Характеристика номенклатуры): Не найден
Добавлена запись № 1.

прикрепляю файл который пробовал загрузить.
Прикрепленные файлы:
тест.xls
101. Bublik2011 9 25.04.14 01:46 Сейчас в теме
(98) Kutnor, это сообщение изменю, пока сделайте бэкап базы.

Думаю, подход к делу надо изменить. В настройках.
1) Качество - устанавливать
2) Единицы измерения - вычислять
99. Kutnor 24.04.14 16:39 Сейчас в теме
вот еще файл настроек.
я пропустил 2 первых этапа, т.к. у меня уже цена на товар есть и сам товар есть, нужно просто в него добавить штрихкоды и характеристики.
Штрихкоды добавились, а характеристики нет.
Прикрепленные файлы:
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Ижевск
зарплата от 70 000 руб. до 94 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день