1с загрузка номенклатуры с доп реквизитами

В данной заметке хотелось бы рассмотреть вопрос: Как загрузить дополнительные реквизиты номенклатуры при помощи обработки с диска ИТС «Загрузка данных из табличного документа (управляемые формы)»?

В качестве примера, будем использовать конфигурацию 1С:ERP Управление предприятием 2, аналогичным смособом можно будет загрузить в Управление торговлей 11 или любую другую, подобную конфигурацию.

Дополнительные реквизиты хранятся в табличной части «ДополнительныеРеквизиты» справочника «Номенклатура». Из обработки «Загрузка данных из табличного документа» можно добраться только к табличной части одной, выбранной номенклатуре, через тип данных «Позиция номенклатуры».

Позиция номенклатуры

Но такой способ нам не подходит, т.к. мы будем загружать дополнительные реквизиты для списка номенклатуры. Для примера загрузим одну номенклатуру и два ее дополнительных реквизита: «Формат» и «Толщина».

Загрузка из табличного документа

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

Настройка загрузки реквизитов

Теперь немного займемся программированием. Откроем событие «При записи объекта» и добавим туда следующий программный код:

Объект.ДополнительныеРеквизиты.Очистить(); // Предварительно удаляем все доп. реквизиты. Если не нужно — закомментировать.ДопСвойства = Новый Соответствие;
ДопСвойства.Вставить(«11», 91); // Наименование свойства, номер ячейки
ДопСвойства.Вставить(«АКЦИЯ», 92);
ДопСвойства.Вставить(«Размер,мм», 93);
ДопСвойства.Вставить(«Формат», 94);
ДопСвойства.Вставить(«Номер цвета», 95);
ДопСвойства.Вставить(«Цвет», 96);
ДопСвойства.Вставить(«шт./м2», 97);
ДопСвойства.Вставить(«шт. / палетта», 98);
ДопСвойства.Вставить(«вес, кг/шт.», 99);

Для Каждого

ЭлементДопСвойства Из ДопСвойства ЦиклТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)», Ложь);
   
ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);
    Если Не
ЗначениеЗаполнено(ТекСвойство) Тогда
       
Сообщить(«Не удалось найти свойство: «»» + ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)»»»);
        Продолжить;
    КонецЕсли;
    Если Не
ЗначениеЗаполнено(ТекЗначение) Тогда
       
Сообщить(«Создаем новое значение «»» + ТекстыЯчеек[ЭлементДопСвойства.Значение] + «»» для свойства «»» + ТекСвойство + «»»»);
       
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
       
НовоеЗначение.Владелец = ТекСвойство;
       
НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];
       
НовоеЗначение.Записать();
       
ТекЗначение = НовоеЗначение.Ссылка;
    КонецЕсли;
МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ТекСвойство));
    Если
МассивСтрок.Количество() = 0 Тогда
       
ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();
    Иначе
       
ДопРеквизит = МассивСтрок[0];
    КонецЕсли;
   
ДопРеквизит.Свойство = ТекСвойство;
   
ДопРеквизит.Значение = ТекЗначение;

КонецЦикла;

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

В соответствие «ДопСвойста» нужно вставить столько записей, сколько требуется загрузить дополнительных реквизитов. В качестве ключа указываем текстовое наименование дополнительного реквизита, а в качестве значения — номе строки табличного документа, где это значение храниться.

Заполнение любых дополнительных реквизитов в любых справочниках и документах системы из табличного файла (excel, dbf, mxl) а также выгрузка во внешний файл и удаление значений дополнительных реквизитов.





  • Основное




  • Совместимость




  • Доп. информация
Артикул 464
Обновлено 21.12.2022
Исходный код Открыт
Изменение конфигурации Не требуется
Покупок 69
  • BAS ERP (UA)
  • BAS Комплексное управление предприятием 2 (UA)
  • BAS Управление торговлей 3 (UA)
  • Бухгалтерия предприятия 3.0
  • Зарплата и управление персоналом 3.1
  • Комплексная автоматизация 2.4 (BY)
  • Комплексная автоматизация 2.4 (KZ)
  • Комплексная автоматизация 2.4 и 2.5
  • Розница 2.2 и 2.3
  • Управление нашей фирмой 1.6
  • Управление нашей фирмой 3.0
  • Управление предприятием ERP 2.4 и 2.5
  • Управление торговлей 11.4 и 11.5
  • Управление торговлей 3 (BY)
  • Управление торговлей 3 (KZ)

Обработка позволяет заполнить ЛЮБЫЕ дополнительные реквизиты в ЛЮБЫХ справочниках системы из табличного файла (Excel, dbf и прочих). Допустим для номенклатуры назначены следующие дополнительные реквизиты, причем с разным типом значения.

дополнительные реквизиты номенклатуры

И у нас есть файл Excel, из которого будем заполнять реквизиты в карточках (в данном случае доп.реквизиты будем грузить в номенклатуру). Открываем обработку, в правой части вставляем содержимое файла в табличную область. Вставку можно делать с помощью буфера обмена или по кнопке Загрузить из файла (второй способ подходит только для файлов Microsoft Excel и OpenOffice Calc).

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

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

В нижней части нужно заполнить таблицу загружаемых реквизитов — выбрать какие именно реквизиты загружать, из каких колонок и нужно ли автоматически создавать ненайденные значения (актуально только для дополнительных реквизитов с типом Дополнительное значение).

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

После выполнения всех настроек нажимаем Заполнить. В результате в номенклатурной карточке успешно заполнятся дополнительные реквизиты.

карточка номенклатуры с дополнительными реквизитами

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

настройка номеров строк и колонок для загрузки реквизитов документа

Если в процессе выполнения загрузки возникнут какие-то ошибки/коллизии, они будут отражены в итоговом протоколе.

протокол об ошибках

Релиз 464.1.1.2 от 16.06.2020

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

дополнительные реквизиты вида номенклатуры заполнение таблицы настроек

Релиз 464.1.1.3 от 26.07.2020

При загрузке дополнительных реквизитов номенклатуры теперь можно выбрать вариант поиска нужных товаров. Доступны следующие варианты поиска:

  • по наименованию,
  • по коду,
  • по артикулу,
  • по артикулу и наименованию,
  • по штрихкоду.

настройка поиска нужных товаров

Появилась возможность не только загружать, но и выгружать дополнительные реквизиты из базы во внешний табличный файл (Excel, OpenOffice, MXL). Например, для того чтобы проверить/поправить/загрузить доп.реквизиты в другую базу.

Для этого сделана отдельная закладка на форме.

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

Для выборочной выгрузки сведений можно воспользоваться фильтром на форме (работает по ЛЮБЫМ реквизитам исходного справочника или документа).

К примеру выгрузим доп.реквизиты товаров (исключая услуги):

сохранение доп.реквизитов номенклатуры в файл

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

Релиз 464.1.1.4 от 27.01.2021

Теперь можно очищать значения дополнительных реквизитов в справочниках и документах системы. При этом можно использовать удобный фильтр для отбора нужных данных (например по владельцам и/или списку реквизитов). На скрине ниже показано удаление значений двух дополнительных реквизитов в номенклатурной справочнике.

настройка удаления реквизитов

После выполнения операции появится итоговый протокол:

протокол выполнения

Релиз 464.1.1.5 от 20.08.2021

Добавлена возможность сохранения настроек загрузки дополнительных реквизитов. Рядом с полем Имя объекта расположены две кнопки — одна для сохранения текущей настройки, другая для выбора сохраненной ранее настройки. Для любого справочника или документа можно сохранить неограниченное количество настроек.

Для номенклатурного справочника добавлен вариант поиска по артикулу и производителю. При этом можно указать как конкретного производителя, так и номер колонки таблицы, откуда его нужно взять.

поиск по артикулу и производителю

Добавлена возможность заполнения списка значений для дополнительных реквизитов с типом Дополнительное значение.

загрузка дополнительных значений

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

Релиз 464.1.1.6 от 14.03.2022

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

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

Чтобы оставить комментарий, зарегистрируйтесь и авторизуйтесь на сайте.

Файл обработки: tekdata-ru-zagruzka-rekvizita-spravochnika-1s-iz-excel-rabotaet-do-20231231.epf

Тестировалось в программе: 1С:Розница 2.2.11, 2.2.13, 2.3.4, 2.3.6, 2.3.7, 2.3.11; 1С:Управление торговлей 11.4.10, 11.4.14, 11.5.7, 11.5.8; 1С:Управление нашей фирмой 1.6.19, 1.6.24; 1С:Бухгалтерия предприятия 3.0.89        Как узнать версию программы?

Разработка скачивалась: Да

Закрытый программный код: Да (если на странице не указано обратное)

Работает только в операционной системе: Windows

Рекомендовано коллективом tekdata.ru

Внимание! Данная имеет ограничение по сроку действия!
Внимание! Данная обработка работоспособна до конца того года, в котором она была приобретена и после этой даты будет неработоспособна! Т.о. данную обработку необходимо приобретать каджый год заново.

Перед использованием обработки рекомендуется создать резервную копию базы!

Данная обработка является универсальной и с ее помощью загрузить произвольный реквизит выбранного справочника из Excel или другой таблицы в большинстве программ 1С:Предприятие 8.3.

С помощью данной обработки можно загрузить реквизиты типовых программ 1С:Преприятие 8.3, таких как:
1С:Управление торговлей 11.4,
1С:Розница 2.3,
1С:Управление нашей фирмой 1.6,
1С:Бухгалтерия 3.0.

Обработка загружает не абсолютно любой реквизит, но большинство из них.

В 2022 году добавили возможность загрузки дополнительного реквизита справочника.
При загрузке дополнительного реквизита, необходимо сначала заполнить этот дополнительный реквизит у любого элемента справочника (так обработка поймет тип значения этого дополнительно реквизита).
Обработка не анализирует принадлежность дополнительного реквизита к определенному виду (например к виду номенклатуры), поэтому желательно загружать именно общие дополнительные реквизиты для справочника.

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

В видео показано как работает обработка (на примере другой похожей обработки для справочника номенклатура в УТ 11.4)

Обработка Загрузка произвольного реквизита справочника 1С 8.3 может быть полезна для того, чтобы догрузить данные после загрузки одной из наших обработок загрузки данных из Excel.

Например Вы сможете загрузить реквизит Текстовое описание или Полное наименование, также можно догрузить информацию о производителе, бренде (марке) или поставщике. Возможно кому-то необходимо загрузить информацию о весе товара, это также можно сделать с помощью данной обработки.

Данная обработка поможет также упростить ручное изменение реквизитов, ведь при ручном изменении реквизитов в 1С необходимо открывать каждую карточку товара, затем находить нужный реквизит и только после этого изменить его, а затем еще нужно будет нажать кнопку Записать. Кроме того в некоторых программах, например в 1С:Розница 2.3, для того, чтобы изменить некоторые реквизиты необходимо разблокировать их нажав Еще — Разрешить редактирование реквизитов — Разрешить.

Гораздо проще выгрузить список справочника в Excel (нажав Еще — Вывести список в форме списка справочника), затем отредактировать значения в этом Excel-файле и затем загрузить значения данной обработкой. Это поможет сэкономить много времени.

Обработка запускается через Файл-Открыть.

Дополнительные условия приобретения данной обработки:

Условия приобретения данной разработки были указаны при покупке разработки.
Кроме того, для данной обработки существуют следующие особенности.
Данная обработка работоспособна до конца того года в котором она была приобретена. Т.е. если обработка была приобретена 1-го января 2021 года, то она будет работоспособна до 31 декабря 2021 года.

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

Обработка обращается к сайту tekdata.ru в процессе своей работы, поэтому необходимо чтобы на компьютере был доступ в интернет для программы 1С:Предприятие, а также, чтобы был доступен наш сайт tekdata.ru.

Наша обработка помогла Вам?   Оставьте, пожалуйста, комментарий ниже.

Бывает так, что надо заполнить дополнительный реквизит справочника, документа, ПВХ и т.д. значениями. Например, есть таблица соответствия кодов элементов справочника и значений доп.реквизита. Тогда , с помощью данной обработки, это легко сделать.
Мне пришлось заниматься переводом организации с учета в 1С на SAP, и вот тут-то мне пришлось заполнять доп.реквизиты кодами элементов в SAP, чтобы в дальнейшем выгружать проводки по остаткам.

Обработка на входе принимает следующие данные:

— путь к файлу соответствий. Файл должен быть текстовым (TextUnicode) с разделителями «табуляция». Это обусловлено тем, что теперь из Excel 2007(2010) в формат DBASE IV уже не сохранить, а в текст юникод — очень просто. Вот так примерно должно выглядеть содержимое файла, если будем заполнять доп. реквизит по ИНН и КПП

ИНН             КПП           КодСАП

0028033349 402302001 123456

0275005860 027501001 123457

0275048529 027501001 123458

0278034771 027801001 123459

0326023099 713302001 123460

— дополнительный реквизит (свойство объекта) из ПланаВидовХарактеристик — СвойстваОбъектов. При выборе автоматически определится тип объекта, для которого определен доп. реквизит;

— указать, каким способом необходимо искать объекты в базе. Есть два способа:

а). По коду объекта (кроме документов),
б). По значениям реквизитов. Реквизиты должны иметь базовый тип (строка, число, дата, булево). Например, можно искать контрагентов по ИНН и КПП.

Вот и всё. Теперь необходимо заполнить (обновить) таблицу соответствий, а затем нажать на кнопку [Выполнить]. Начнется процесс заполнения дополнительного реквизита на основании таблицы соответствий.

Примечание:

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


Задача:

Конфигурация 1с УНФ 1.6.13(для 1с УТ эта обработка тоже подойдет) Загрузить данные с сайта в 1С. 150’000 товаров. Если грузить напрямую то данные в 1с импортируются «криво», все уходит в дополнительные сведения «кучей».

Предварительная оценка:

Выгрузку с сайта сделали в csv. Проблема: Выгрузка csv вначале тоже была некорректной. Внутри полей встречались разделители и переносы строк.

Загружать буду своей обработкой.

Конфигурацию менять нельзя.

Картинки к товарам нужно закачивать в 1с по ссылке. Одну из картинок нужно назначать основной.

Дополнительные реквизиты обработка должна создавать автоматически.

Если значения доп реквизитов «Дополнительное значение», т.е. значения которые выбираются из списка, то список будем создавать по мере загрузки товаров. Если значение в списке есть, то подставляем в доп реквизит, если значения нет, создаем значение доп. реквизита и подставляем его.

Решение:

1 Приводим в порядок CSV файл.

Выгрузка csv вначале тоже была некорректной. Внутри полей встречались разделители и переносы строк. Это приводило к неправильному преобразованию в поля. Пришлось переделывать выгрузку. Для Excell она бы подошла, а вот 1с читает этот файл построчно и разбивает на поля по указанному разделителю.

Приведем выгрузку к понятному 1с виду.

Выгрузка до

1с выгрузка из csv

После обработки:

Процедура, которая привела выгрузку к нормальному виду. Выкладываю как есть. Разделитель «^» выбран т.к. он во всем тексте ни разу не встречался.

// приводим файл выгрузки в порядок
&НаКлиенте
Процедура УбратьЛишниеПереносы(Команда)
	Источник=новый ТекстовыйДокумент;
  Источник.Прочитать("d:items_new2.csv"); // ИмяФайла - путь к файлу на диске Победа

// Определяем количество колонок по шапке таблицы, для этого исползуем
// стандартную процедуру РазложитьСтрокуВМассивПодстрок
КоличествоКолонок=СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Источник.ПолучитьСтроку(1), ";").Количество();

// убираем лишние переносы и сохраняем в файл
ПривестиКНужномуФормату(Источник.ПолучитьТекст(),";", КоличествоКолонок);
возврат;


// Читаем данные файла, шапку можно отсечь потом
МассивКол = ПрочитатьCSV(Источник.ПолучитьТекст(),";", КоличествоКолонок);



Для каждого Товар из МассивКол Цикл

//переменная МассивКол содержит массив строк таблицы из файла CSV.
//Каждый элемент массива в свою очередь представляет массив колонок.
// В этом цикле можно сделать все необходимое с полученными данными.

КонецЦикла;

КонецПроцедуры


# область ОтформатироватьВыгрузку
&наКлиенте
Функция ПрочитатьCSV(Знач Строка, Разделитель, КоличествоКолонок)

Результат = Новый Массив; // массив строк

Скобка=ЛОЖЬ;
Начало=1;
Колонка=0;
СтрокаФайла=новый Массив; // массив колонок в строке

для Позиция=1 по СтрДлина(Строка) Цикл // обходим файл посимвольно

Символ=Сред(Строка, Позиция, 1);

//если встречается кавычка, фиксируем ее открытие, прекращаем итерацию и продолжаем цикл.
Если Символ="""" И Скобка=Ложь Тогда
Скобка=Истина;
Продолжить;
//Если встречается закрывающаяся кавычка, фиксируем ее закрытие и тоже продолжаем цикл
ИначеЕсли Символ="""" И Скобка=Истина ТОгда
Скобка=Ложь;
Продолжить;
КонецЕсли;

//Если встречается разделитель или перенос строки вне кавычек,
//вносим информацию в массив
Если (Символ=Разделитель ИЛИ Символ=Символы.ПС) И Скобка=Ложь Тогда
Конец=Позиция;
Колонка=Колонка+1;
СтрокаФайла.Добавить(Сред(Строка, Начало, Конец-Начало));

//Если набралось количество колонок, равное их количеству в шапке, записываем всю строку
//в массив и переходим к следующей
Если Колонка=КоличествоКолонок Тогда

Результат.Добавить(СтрокаФайла);
СтрокаФайла=Новый Массив;

Колонка=0;
КонецЕсли;

Начало=Позиция+1;
КонецЕсли;
КонецЦикла;

//Удаляем шапку таблицы из массива строк
Результат.Удалить(0);
Возврат Результат;

КонецФункции

&наКлиенте
процедура ПривестиКНужномуФормату(Знач Строка, Разделитель, КоличествоКолонок) // сохраняем в формат csv
	

	
Результат = Новый ТекстовыйДокумент; // массив строк

Скобка=ЛОЖЬ;
Начало=1;
Колонка=0;
СтрокаФайла=новый Массив; // массив колонок в строке

для Позиция=1 по СтрДлина(Строка) Цикл // обходим файл посимвольно

Символ=Сред(Строка, Позиция, 1);

//если встречается кавычка, фиксируем ее открытие, прекращаем итерацию и продолжаем цикл.
Если Символ="""" И Скобка=Ложь Тогда
Скобка=Истина;
Продолжить;
//Если встречается закрывающаяся кавычка, фиксируем ее закрытие и тоже продолжаем цикл
ИначеЕсли Символ="""" И Скобка=Истина ТОгда
Скобка=Ложь;
Продолжить;
КонецЕсли;

//Если встречается разделитель или перенос строки вне кавычек,
//вносим информацию в массив
Если (Символ=Разделитель ИЛИ Символ=Символы.ПС) И Скобка=Ложь Тогда
Конец=Позиция;
Колонка=Колонка+1;
СтрокаФайла.Добавить(Сред(Строка, Начало, Конец-Начало));

//Если набралось количество колонок, равное их количеству в шапке, записываем всю строку
//в массив и переходим к следующей
Если Колонка=КоличествоКолонок Тогда

// сделаем нужную строку
строкаДляЗаписи="";
для нн=0 по строкаФайла.Количество()-1 цикл
	если нн=0 тогда
	//СтрокаФайла[нн]=СтрЗаменить(СтрокаФайла[нн],""","");
	//СтрокаФайла[нн]=СтрЗаменить(СтрокаФайла[нн],";","^"); // удаляю все лишние ; и заменяю их ^ - этого символа в выгрузке нет
	строкаДляЗаписи=СтрЗаменить(СтрокаФайла[нн],символы.ПС," ");	
иначе
	//СтрокаФайла[нн]=СтрЗаменить(СтрокаФайла[нн],""","");
	//СтрокаФайла[нн]=СтрЗаменить(СтрокаФайла[нн],";","^");
	строкаДляЗаписи=строкаДляЗаписи+"^"+СтрЗаменить(СтрокаФайла[нн],символы.ПС," ");  // тут ; - разделитель	
	конецЕсли;
	
	конецЦикла;
	
Результат.ДобавитьСтроку(строкаДляЗаписи);
СтрокаФайла=Новый Массив;

Колонка=0;
КонецЕсли;

Начало=Позиция+1;
КонецЕсли;
КонецЦикла;

//Удаляем шапку таблицы из массива строк
//Результат.Удалить(0);
результат.Записать("l:PosleFormat.csv");


конецПроцедуры

2 Загрузка номенклатуры

Далее нужно разобраться с загружаемыми полями из файла csv.

Определить их свойства:

  • Название доп реквизита
  • Тип
  • Список это или простой тип строка, число, дата.
  • Загружать его или нет
  • Являются ли они доп реквизитами или будем подставлять в стандартные реквизиты
  • Множественный он или нет.

С множественными проблема т.к. в 1с без изменения конфигурации множественные просто так не загрузить. Поэтому решено множественные разбивать на несколько простых доп реквизитов.

Выгрузка csv содержит поля, которые нужно грузить в дополнительные реквизиты и основные реквизиты. Некоторые поля вообще не нужно грузить.

Чтобы удобнее было работать с полями сделал таблицу значений, где указал нужные свойства полей

Если грузить в номенклатуру только стандартные реквизиты, тогда эта таблица не нужна.

Загружаем данные из csv в 1с.

Обработка Первоначальная загрузка номенклатуры.zip

Что делает обработка

  • Создает номенклатуру
  • Заполняет основные реквизиты
  • Заполняет, а в случае отсутствия, создает доп реквизиты с указанным типом значения.
  • Если доп реквизит это список, то в случае отсутствия, нужное значение создается.
  • С сайта по ссылке скачиваются картинки и прикрепляются к номенклатуре. Указывается главная картинка.
  • Устанавливается цена

Эта обработка нуждается в адаптации под конкретные нужды, она не универсальная. Писал ее конкретно под клиента.

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

Характеристики в этой обработке не грузятся , т.к. клиент дал другую выгрузку для характеристик позже.

Характеристики грузил из другогих csv файлов.

Обработка создать характеристики и оприходовать остатки

Что делает обработка

  • Создает характеристики номенклатуры
  • Присваивает характеристикам имя в зависимости от значений
  • Оприходует товар по 1шт.

Эта обработка нуждается в адаптации под конкретные нужды, она не универсальная. Писал ее конкретно под клиента.

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

Заполнение доп. реквизитов через обработку Загрузка данных из ТД

Я
   oqjawa

16.07.19 — 14:47

Создал Доп реквизит с неограниченной длинной в справочнике номенклатура.

Загружаю в него значения с помощью обработки «загрузка данных из табличного документа» из экселя.

Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)», Ложь);

    ТекЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[ЭлементДопСвойства.Значение], Ложь);

    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда

        Сообщить(«Не удалось найти свойство: «»» + ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)»»»);

        Продолжить;

    КонецЕсли;

    Если Не ЗначениеЗаполнено(ТекЗначение) Тогда

        Сообщить(«Создаем новое значение «»» + ТекстыЯчеек[ЭлементДопСвойства.Значение] + «»» для свойства «»» + ТекСвойство + «»»»);

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

        НовоеЗначение.Владелец = ТекСвойство;

        НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];

        НовоеЗначение.Записать();

        ТекЗначение = НовоеЗначение.Ссылка;

    КонецЕсли;

    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ТекСвойство));

    Если МассивСтрок.Количество() = 0 Тогда

        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();

    Иначе

        ДопРеквизит = МассивСтрок[0];

    КонецЕсли;

    ДопРеквизит.Свойство = ТекСвойство;

    ДопРеквизит.Значение = ТекЗначение;

КонецЦикла;

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

записывается только около 100 символов, хотя длинна строки позволяет вместить больше текста..

Дело вовсе не в длине реквизита?

  

Партнерская программа EFSOL Oblako

   DmitriyDI

1 — 16.07.19 — 15:24

(0) Если это реквизит с типом строка, зачем добавлять для него элемент в ЗначенияСвойствОбъектов, просто тогда было бы:

ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

а тут получается уже не Доп реквизит с неограниченной длинной , а элемент справочника, где наименование помещает только 100 символов.

   oqjawa

2 — 16.07.19 — 15:41

а как по другому сделать?

   oqjawa

3 — 16.07.19 — 15:54

Вы правы длинна наименования действительно 100

   DmitriyDI

4 — 16.07.19 — 15:56

(2) Сделать доп реквизит, тип Строка Неограниченная,

Это убрать:

  Если Не ЗначениеЗаполнено(ТекЗначение) Тогда

        Сообщить(«Создаем новое значение «»» + ТекстыЯчеек[ЭлементДопСвойства.Значение] + «»» для свойства «»» + ТекСвойство + «»»»);

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

        НовоеЗначение.Владелец = ТекСвойство;

        НовоеЗначение.Наименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];

        НовоеЗначение.Записать();

        ТекЗначение = НовоеЗначение.Ссылка;

    КонецЕсли;

Тут сделать так:

ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

   oqjawa

5 — 16.07.19 — 16:02

переменная не определена (ДопРеквизит)

   DmitriyDI

6 — 16.07.19 — 16:04

Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)», Ложь);

    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда

        Сообщить(«Не удалось найти свойство: «»» + ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)»»»);

        Продолжить;

    КонецЕсли;

    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ТекСвойство));

    Если МассивСтрок.Количество() = 0 Тогда

        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();

    Иначе

        ДопРеквизит = МассивСтрок[0];

    КонецЕсли;

    ДопРеквизит.Свойство = ТекСвойство;

    ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

КонецЦикла;

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

   oqjawa

7 — 16.07.19 — 16:23

не удалось найти свойство.. и так для каждого доп реквизита

   oqjawa

8 — 16.07.19 — 16:25

странно если я вот тут:

  Если Не ЗначениеЗаполнено(ТекЗначение) Тогда

        Сообщить(«Создаем новое значение «»» + ТекстыЯчеек[ЭлементДопСвойства.Значение] + «»» для свойства «»» + ТекСвойство + «»»»);

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

        НовоеЗначение.Владелец = ТекСвойство;

        НовоеЗначение.ПолноеНаименование = ТекстыЯчеек[ЭлементДопСвойства.Значение];

        НовоеЗначение.Записать();

        ТекЗначение = НовоеЗначение.Ссылка.ПолноеНаименование;

    КонецЕсли;

он выводит немного больше текста но не весь.. хотя у реквизита Справочники.ЗначенияСвойствОбъектов.ПолноеНаименование длинна не ограничена

   DmitriyDI

9 — 16.07.19 — 16:27

(8) странно, что при том же коде он находит свойство), вот это странно)

   oqjawa

10 — 16.07.19 — 16:29

нет нет) я ваш код вставлял когда он на свойства ругался

Для Каждого ЭлементДопСвойства Из ДопСвойства Цикл

    ТекСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)», Ложь);

    Если Не ЗначениеЗаполнено(ТекСвойство) Тогда

        Сообщить(«Не удалось найти свойство: «»» + ЭлементДопСвойства.Ключ + » (» + Объект.ВидНоменклатуры + «)»»»);

        Продолжить;

    КонецЕсли;

    МассивСтрок = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ТекСвойство));

    Если МассивСтрок.Количество() = 0 Тогда

        ДопРеквизит = Объект.ДополнительныеРеквизиты.Добавить();

    Иначе

        ДопРеквизит = МассивСтрок[0];

    КонецЕсли;

    ДопРеквизит.Свойство = ТекСвойство;

    ДопРеквизит.Значение = ТекстыЯчеек[ЭлементДопСвойства.Значение];

КонецЦикла;

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

   DmitriyDI

11 — 16.07.19 — 16:31

(10) Видимо не туда вставил или не так, потому что мой код в плане поиска свойства ничем не отличается от указанного в шапке.

   oqjawa

12 — 16.07.19 — 16:40

Действительно, не туда вставил.. зато теперь выводит 1024 символа.. это и есть неограниченная длинна?

   hhhh

13 — 16.07.19 — 16:55

(12) ну так в конфе задано для ДопРеквизит.Значение. там ни фига не неограниченное.

   oqjawa

14 — 16.07.19 — 16:59

(13)странно, а руками спокойно позволяет вбить хоть больше 1024

   oqjawa

15 — 16.07.19 — 17:10

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

но когда я ставлю ограничение 1024 и пытаюсь руками написать больше.. тоже даёт мне это сделать

   DmitriyDI

16 — 16.07.19 — 17:18

(15) Надо попробовать сохранить больше чем 1024 и посмотреть в регистре ДополнительныеСведения как это выглядит и вообще сохранит ли он это значение?

   hhhh

17 — 16.07.19 — 17:22

(16) всёж таки он не в регистр пишет, а в тч допреквизиты.

   oqjawa

18 — 16.07.19 — 17:23

регистр пустой

   oqjawa

19 — 16.07.19 — 17:23

ни одной записи

   hhhh

20 — 16.07.19 — 17:24

(19) прикалываешься? тч дополнительные реквизиты, какой нахрен регистр?

   trooba

21 — 16.07.19 — 17:30

(20) Он путает доп свойства с доп реквизитами, а они действительно в разных местах

   oqjawa

22 — 16.07.19 — 17:33

(21) и в чем прикол?

   oqjawa

23 — 16.07.19 — 17:34

(22) это может быть как то связано с тем что я немогу загрузить больше 1024 символов?

   oqjawa

24 — 16.07.19 — 17:35

я сейчас серьёзно, не стебу, не язвлю скорее всего реально запутался

   trooba

25 — 16.07.19 — 17:36

(23) Это связано с тем, что доп реквизиты в табличной части объекта расположены, а доп свойства в регистре.

   oqjawa

26 — 16.07.19 — 17:39

ну мне же регистр и нафиг не нужен

   hhhh

27 — 16.07.19 — 17:43

они просто издеваются, у них везде 1024. Номенклатура полное наименование 1024, описание тоже 1024. вот такая вот БСП.

  

DmitriyDI

28 — 16.07.19 — 18:25

(18) да, в тч надо смотреть на запись) сохраняется больше 1024?

Понравилась статья? Поделить с друзьями:
  • 1с запрет на изменение реквизита документа
  • 1с запрос проверка на заполнение реквизита
  • 1с изменить реквизит справочника обработка
  • 1с история изменения реквизита справочника
  • 1с как обновить реквизит управляемой формы