Имя: Пароль:
1C
 
Сопоставление Наименования с Номенклатурой
, ,
0 Олеся999
 
26.02.15
07:14
Скрин : http://lvkr.ru/f/KAQU9s/1024.jpg

Подскажите пожалуйста как можно сделать сопоставление  "Наименование тх" с "Номенклатурой (Наименование)".  Нужно что бы когда прописывалось  "Наименование тх",  подставлялась "Номенклатурой (Наименование)".
1 Рэйв
 
26.02.15
07:20
приИзменении "Наименование тх" ищи и подставляй номенклатуру.
2 Andrewww123
 
26.02.15
07:20
(0) При в событии "ПриИзменении" поля "Наименование тх" найти нужную номенклатуру по реквизиту и ссылку подставить в текущую строку в поле "Номенклатура".
3 Олеся999
 
26.02.15
07:34
(2) "Наименование тх" тип строка
     "Номенклатура"  тип справочник номенклатура
4 Andrewww123
 
26.02.15
07:36
(3) Справочники.Номенклатура.НайтиПоРеквизиту(). Ищешь по реквизиту "Наименование тх" и получаешь ссылку на номенклатуру.
5 Cube
 
26.02.15
07:38
(0) А колонка "Номенклатура" обязательна для заполнения или могут быть строки с незаполненной номенклатурой?
6 Олеся999
 
26.02.15
07:40
(5) Обязательные
7 ShoGUN
 
26.02.15
07:46
А "наименование тх" - это какой реквизит в номенклатуре? С наименованием-то оно не совпадает, судя по скриншоту.
8 Cube
 
26.02.15
07:48
(6) Тогда:
1. Вообще удали колонку "Наименование тх".
2. В справочнике "Номенклатура" укажи реквизит "Наименование тх" как возможное поле поиска.
3. Всё, пусть вводят свое наименование тх прямо в ячейку с номенклатурой. Если такая номенклатура есть, то она подставится, если нет, то пусть заводят номенклатуру...

Для информативности можно вывести реквизит номенклатуры "Наименование тх" в отдельную колонку, но он будет для чтения (вводить туда с клавиатуры нельзя).
9 Олеся999
 
26.02.15
07:56
(8) Просто  в документ Остатки я загружаю  данные из xls через обработку.  То есть "Наименование тх" Заполняются в первую очередь.  И "Наименование тх"  и  "Номенклатурой (Наименование)" могут сильно различаться. Смысл такой вот :)
10 Cube
 
26.02.15
07:58
(9) Так в обработке и сделай сразу поиск номенклатуры по реквизиту. А те, которые не нашла обработка либо создавай автоматически, либо выводи их наименования тх в сообщения и предлагай пользователю создать их, а потом уж загружать.

Зачем делать двойную работу?
11 ShoGUN
 
26.02.15
07:59
(10) Чёт я подозреваю, что у неё нет "Наименования тх" в справочнике в нужном виде. И тут нужен полнотекстовый поиск %)
12 Cube
 
26.02.15
08:00
+(10) Можно еще перед загрузкой проверить, вся ли номенклатура из файла есть в базе и если нет, то предложить пользователю создать недостающую номенклатуру, а потом уже загружать.
13 Олеся999
 
26.02.15
08:01
(10)Да нет, нужно именно в документе сделать ))
14 Dilgorp
 
26.02.15
08:03
(13) то есть после загрузки  ты заходишь в документ и правишь "Наименование тх" в соответствии со справочником "Номенклатура"?
15 Олеся999
 
26.02.15
08:05
(14) Ну можно сделать событие по нажатию кнопки. И цикл чтобы сопоставились названия.
16 Dilgorp
 
26.02.15
08:06
(15) почему именно в документе тогда?
17 ShoGUN
 
26.02.15
08:07
(13) Подтверди или опровергни (11), пожалуйста, так будет намного понятнее.
18 Олеся999
 
26.02.15
08:08
Потому что проводить нужно, и делать запись в регистр накопления.
19 Олеся999
 
26.02.15
08:18
(17) Маленько не поняла:)
Про это ? Скрин: http://lvkr.ru/f/yTgDEG/800.jpg
20 ShoGUN
 
26.02.15
08:23
(19) А, ну тогда всё просто. (4) после каждого загруженного "наименования тх". Только "Наименование тх" надо в индекс добавить. И ещё - у разных элементов номенклатуры - разные "наименования тх", надеюсь? Пересекающихся нет?
21 ShoGUN
 
26.02.15
08:24
Ну плюс можно обработчик "при изменении" повесить на реквизит "Наименование Тх" в документе чтобы можно было вручную искать и править.
22 Cube
 
26.02.15
08:27
(13) Почему?
23 Олеся999
 
26.02.15
08:31
(21) http://lvkr.ru/rajsH8.jpg
Нет наименования тх и номенклатура разные
24 Олеся999
 
26.02.15
08:34
(22) По тому что: 1)  (18).
                  2)  Там загрузчик универсальный.
25 Cube
 
26.02.15
08:37
(24) 1). Пост (18) вполне укладывается в концепцию (10). Не вижу проблем.
26 Cube
 
26.02.15
08:38
(24) 2). В смысле обработка загрузки из табличного документа с диска ИТС? Так она умеет искать номенклатуру по реквизитам ведь...
27 Олеся999
 
26.02.15
08:45
Неа обработка самописная  до меня писали
28 Cube
 
26.02.15
08:46
(27) Сильно сложная? Менять не хочешь её?
29 Олеся999
 
26.02.15
08:48
(28) Ну просто мне кажется в документе проще сделать ..а может только кажется не знаю :)
30 Maniac
 
26.02.15
08:51
http://subsystems.ru/upload/iblock/9c0/poisksootvetstviyponaimenovaniyam_05012015.png
http://subsystems.ru/upload/iblock/9ac/importexcel_new_sopost_2111-2014.png

Поиск по ключевым словам и установка номенклатуры поставщика, ревалентный подбор:

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

В Загрузчике реализована специальная возможность (обработка в обработке) сопоставления наименований товаров поставщиков с вашей номенклатурой в 1С.
Используется два варианта поиска.
Основное отличие вариантов заключается в форме отображения результатов - они зеркальные.  

Вариант №1: Сопоставление Импорт - Справочник.

Интерфейс варианта содержит сравнение импорта со справочником. Вы видите данные импорта и результат поиска в справочнике.

Команда вызывается нажатием кнопки Поиск соответствий.
Форма специально предназначена для визуального автоматического и полуручного назначения связей между номенклатурой поставщика и номенклатурой справочника.

Вариант №2: Сопоставление Справочник - Импорт.

Интерфейс варианта содержит сравнение справочника с импортом.
Новая форма поиска представляет из себя основную таблицу Вашего справочника номенклатуры и рядом таблицу прайса поставщика.
31 Олеся999
 
26.02.15
08:51
(28) http://www.fayloobmennik.net/4642168 Обработка
32 Maniac
 
26.02.15
08:53
Судя по первому скриншоту - конфигурация какая то собранная на коленке.
33 Cube
 
26.02.15
08:53
(29) Проще для пользователя будет нажать 1 кнопку из чтоб в документе сразу была номенклатура.

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


Не найдена номенклатура со следующими наименованиями тх:

R-0516-6846 <Нажмите сюда, чтобы создать>
R-4563-4525 <Нажмите сюда, чтобы создать>
R-9637-4526 <Нажмите сюда, чтобы создать>
34 Cube
 
26.02.15
08:54
(32) Так и есть.
35 Cube
 
26.02.15
09:17
(31) В функции формы ЗаписатьСпецификацию() в самом начале вставь что-то вроде:

    НайденныеСтроки = Объект.СоответствиеПолей.НайтиСтроки(Новый Структура("РеквизитВ1С", "Номенклатура"));
    Если НайденныеСтроки.Количество() > 0 Тогда
        ТаблицаНаименованийТх = Новый ТаблицаЗначений;
        ТаблицаНаименованийТх.Колонки.Добавить("НаименованиеТх", Новый ОписаниеТипов("Строка"));
        Для каждого Стр Из тзExcel Цикл
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)]);
        КонецЦикла;
        Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ТаблицаНаименованийТх.НаименованиеТх
                              |ПОМЕСТИТЬ ВТ_НаименованийТх
                              |ИЗ
                              |    &ТаблицаНаименованийТх КАК ТаблицаНаименованийТх
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ВТ_НаименованийТх.НаименованиеТх КАК НаименованиеТх,
                              |    Номенклатура.Ссылка КАК Номенклатура
                              |ИЗ
                              |    ВТ_НаименованийТх КАК ВТ_НаименованийТх
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                              |        ПО ВТ_НаименованийТх.НаименованиеТх = Номенклатура.НаименованиеТх
                              |ГДЕ
                              |    Номенклатура.Ссылка ЕСТЬ NULL ");
        Запрос.УстановитьПараметр("ТаблицаНаименованийТх", ТаблицаНаименованийТх);
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Количество() > 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не найдена номенклатура со следующими наименованиями тх:";
            Пока Выборка.Следующий() Цикл
                Сообщение.Текст = Сообщение.Текст + Символы.ПС + Выборка.НаименованиеТх;
            КонецЦикла;
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
36 Cube
 
26.02.15
09:19
+(35) Этот кусок проверяет, есть ли в базе номенклатура из файла и если нет, то сообщает об этом.
Вместо сообщения пользователю можно прикрутить другой код, например, по созданию недостающей номенклатуры.

А после этого кода можно чуть чуть подправить механизм, чтобы номенклатуру сам искал.
37 Cube
 
26.02.15
09:23
+(35) Ах да, и в таблице СоответствиеПолей вместо "НаименованиеТх" напиши "Номенклатура".
38 Олеся999
 
26.02.15
09:40
(35) А это в обработке нужно ?)писать?
39 Cube
 
26.02.15
09:42
(38) Да, это в обработке (31). Разрешаю не писать, а скопировать и вставить :) Ошибки, если есть, исправишь. Я ведь не проверял :)
40 Олеся999
 
26.02.15
09:44
(39) Хаха Спасибо :)) за разрешение)
41 Олеся999
 
26.02.15
09:48
(35) Это при открытии писать ?
42 Andrewww123
 
26.02.15
09:48
(0), скоро уже рабочий день кончится, а ты все не решишься :)
43 Cube
 
26.02.15
09:50
(41) Перечитывай первое предложение (35) ))
44 Олеся999
 
26.02.15
10:02
(35) Там два что ли разных запроса
  НайденныеСтроки = Объект.СоответствиеПолей.НайтиСтроки(Новый Структура("РеквизитВ1С", "Номенклатура"));
    Если НайденныеСтроки.Количество() > 0 Тогда
        ТаблицаНаименованийТх = Новый ТаблицаЗначений;
        ТаблицаНаименованийТх.Колонки.Добавить("НаименованиеТх", Новый ОписаниеТипов("Строка"));
        Для каждого Стр Из тзExcel Цикл
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)]);
        КонецЦикла;
        Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ТаблицаНаименованийТх.НаименованиеТх
                              |ПОМЕСТИТЬ ВТ_НаименованийТх
                              |ИЗ
                              |    &ТаблицаНаименованийТх КАК ТаблицаНаименованийТх
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////



и




   |ВЫБРАТЬ
                              |    ВТ_НаименованийТх.НаименованиеТх КАК НаименованиеТх,
                              |    Номенклатура.Ссылка КАК Номенклатура
                              |ИЗ
                              |    ВТ_НаименованийТх КАК ВТ_НаименованийТх
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                              |        ПО ВТ_НаименованийТх.НаименованиеТх = Номенклатура.НаименованиеТх
                              |ГДЕ
                              |    Номенклатура.Ссылка ЕСТЬ NULL ");
        Запрос.УстановитьПараметр("ТаблицаНаименованийТх", ТаблицаНаименованийТх);
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Количество() > 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не найдена номенклатура со следующими наименованиями тх:";
            Пока Выборка.Следующий() Цикл
                Сообщение.Текст = Сообщение.Текст + Символы.ПС + Выборка.НаименованиеТх;
            КонецЦикла;
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
45 Cube
 
26.02.15
10:04
(44) Это один запрос, состоящий из двух пакетов запроса.
46 Cube
 
26.02.15
10:05
+(45) Между ними просто движок мисты вставил лишний перенос строки - удали его (пустую строку удали).
47 Олеся999
 
26.02.15
10:09
{Форма.ФормаУпр.Форма(215,129)}: Неопознанный оператор
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)]<<?>>); (Проверка: Тонкий клиент)
Тут что вот ?))
48 Cube
 
26.02.15
10:12
(47) В конце строки пере точкой с запятой круглая скобка лишняя :)
Ну такое-то сама могла бы исправить :)
49 Олеся999
 
26.02.15
10:35
(48) Скопировала запрос исправила ошибки :) попробовала загрузить загружает ...но не делает сопоставление
50 Cube
 
26.02.15
10:41
(49) А ты (36) читала? :)
Это просто проверка. Если в базе есть вся номенклатура из файла, то дальше идет загрузка...

В самом простейшем варианте, надо заменить

Для Каждого СтрС Из Объект.СоответствиеПолей Цикл
    НС[СтрС.РеквизитВ1С] = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
КонецЦикла;

на

Для Каждого СтрС Из Объект.СоответствиеПолей Цикл
    Если СтрС.РеквизитВ1С = "Номенклатура" Тогда
        НС[СтрС.РеквизитВ1С] = Справочники.Номенклатура.НайтиПоРеквизиту("НаименованиеТх", Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)]);
    Иначе
        НС[СтрС.РеквизитВ1С] = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
    КонецЕсли;
КонецЦикла;
51 Cube
 
26.02.15
10:42
(50) Всё в той же функции, что и правки (35).
52 Олеся999
 
26.02.15
11:17
Заменила )) .Загружаю но там не подставляется номенклатура ...
53 Cube
 
26.02.15
11:43
(52) Где "там"?
У тебя должна колонка "Наименование тх" перестать заполняться, а номенклатура наоборот, должна начать заполняться.
54 Олеся999
 
26.02.15
11:56
(53) Ну у меня вот так http://lvkr.ru/f/3RDpcS/1024.jpg
55 Cube
 
26.02.15
12:00
(54) Картинка не открывается.
56 Cube
 
26.02.15
12:00
+(55) Открылась :)
57 Cube
 
26.02.15
12:01
(54) У тебя по-прежнему загружается "Наименование тх". Ты (37) читала?
58 zippygrill
 
26.02.15
12:20
Может кто нибудь по тимвюеру подключиться к ней? :)
59 1976vas
 
26.02.15
12:26
(58) И вообще в заглавии темы - Cube помоги, и сразу данные тимвьювера :)
60 Cube
 
26.02.15
12:27
(59) Не, я подключиться не могу, я ж на работе))))
В режиме чата - пожалуйста :)
61 1976vas
 
26.02.15
12:30
(60) Только фото обновлять регулярно :)
62 Cube
 
26.02.15
12:32
(61) Ну, это никогда не помешает)
63 Олеся999
 
27.02.15
07:01
http://lvkr.ru/f/QW06gC/1280.jpg
http://lvkr.ru/f/4fxxna/800.jpg
У меня почему то не загружает... Там же у Номенклатуры тип СправочникСсылка.Номенклатура должен же быть ?
64 Cube
 
27.02.15
07:43
(63) Да.
Ты (37) то читала? В обработке "Загрузка остатков технолоджи" на закладке "Соответствие полей" в колонке "Реквизит в 1С" вместо "НаименованиеТх" написала "Номенклатура"?
65 Олеся999
 
27.02.15
08:03
http://lvkr.ru/f/UAmkvA/1280.jpg
А где там ?
я только в  ОстаткиТехнолоджи->Табличные Части->Остатки->(НаименованиеТх) заменила на  (Номенклатура)
66 Cube
 
27.02.15
08:34
(65) Так в режиме Предприятие, а не в конфигураторе-то...
67 Олеся999
 
27.02.15
08:57
(66) Так у меня на форме нету закладки закладке "Соответствие полей" http://lvkr.ru/f/GbREZW/800.jpg
68 Олеся999
 
27.02.15
08:58
Или может я что то туплю :))
69 Cube
 
27.02.15
09:05
(67) (68) А, точняк, эта закладка скрыта, а СоответствиеПолей заполняется в коде...

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

Если НайденныеСтроки.Количество() > 0 Тогда

которое в (35) и в условие

Если СтрС.РеквизитВ1С = "Номенклатура" Тогда

которое в (50)...
70 Олеся999
 
27.02.15
10:01
(69) http://lvkr.ru/f/k55qYa/1280.jpg
НайденныеСтроки.Количество    пишет что  Поле объекта не обнаружено
71 Cube
 
27.02.15
10:37
(70) Ну так пиши НайденныеСтроки.Количество() :)

И это, что то ты путаешься в показаниях: на скринах (63) у тебя первая колонка документа "Номенклатура", а на скрине (70) - "НаименованиеТх". Как объяснишь?
72 Олеся999
 
27.02.15
10:42
Ну я  исправила Номенклатура на НаименованияТх  :)
Или там нужно было писать Номенклатура?
73 Олеся999
 
27.02.15
11:16
(71) Дак в обработке "ЗагрузкаОстатковТехнолоджи"
у же написано же:) НайденныеСтроки.Количество()





Вот код "ЗагрузкаОстатковТехнолоджи":


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    //список справочников базы
    ЭтаФорма.Элементы.Справочник.СписокВыбора.Очистить();
    
    МассивСправочников = ПолучитьСписокСправочников();
    
    Для Каждого Спр Из МассивСправочников Цикл
        ЭтаФорма.Элементы.Справочник.СписокВыбора.Добавить(Спр);
    КонецЦикла;
    
    //добавить основные параметры
    Объект.НастройкиЭксель.Очистить();
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Номер листа";
    СтрокаНастройки.Значение  = 1;
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = 1;

    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = 2;
    
    Объект.СоответствиеПолей[0].КолонкаВЭксель = 2;
    Объект.СоответствиеПолей[1].КолонкаВЭксель=  10 ;
    Объект.СоответствиеПолей[2].КолонкаВЭксель = 4 ;
    Объект.СоответствиеПолей[3].КолонкаВЭксель = 22 ;
  //Объект.СоответствиеПолей[4].КолонкаВЭксель = 32 ;
  //Объект.СоответствиеПолей[5].КолонкаВЭксель = 4 ;


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






//+++++++++++++++++

//+++++++++++++++++



&НаСервере
Функция ПолучитьСписокСправочников()
    
    МассивСправочников = Новый Массив;
    
    Для Каждого Спр Из Метаданные.Справочники Цикл
        МассивСправочников.Добавить(Спр.Имя);
    КонецЦикла;
    
    Возврат МассивСправочников;
    
КонецФункции

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Укажите файл импорта";
    ДиалогВыбора.Фильтр =
    "Файлы excel (*.xls;*.xlsx)|*.xls;*.xlsx|";
    
    Если (Не ДиалогВыбора.Выбрать()) Тогда
        Возврат;
    КонецЕсли;    
    
    Объект.ПутьКФайлу = ДиалогВыбора.ПолноеИмяФайла;

    //+++ Добавил при изменение файла искать по полям
    ЗаполнитьПараметры();
    
КонецПроцедуры

&НаКлиенте
Функция ЗаполнитьПараметры()
    
    xlLastCell = 11;
    НомерЛиста = 1;
    
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Объект.ПутьКФайлу);
        Состояние("Обработка файла...");
        ExcelЛист = Excel.Sheets(НомерЛиста);
    Исключение
        Сообщить("Ошибка. Не получилось прочитать файл.");
        Возврат ложь;
    КонецПопытки;
    
    ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
    RowCount = ActiveCell.Row;
    ColumnCount = ActiveCell.Column;
    НомерСтроки = 1;
    
    ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));

    ИскомоеЗначениеНомерFootprint = "ComponentName"; // метка старта
    НайденнаЯчейка = ДиапазонДанных.Find(ИскомоеЗначениеНомерFootprint);
    НомерFootprint  = НайденнаЯчейка.Row; // номер строки    
    
    ИскомоеЗначениеНомерApproved =  "stopp"; // метка стоп    
    НайденнаЯчейка = ДиапазонДанных.Find(ИскомоеЗначениеНомерApproved);
    НомерApproved = НайденнаЯчейка.Row;
    
    Excel.WorkBooks.Close();
    Excel = 0;

    Объект.НастройкиЭксель.Очистить();
    СтрокаНастройки = Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Номер листа";
    СтрокаНастройки.Значение  = 1;
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = НомерFootprint+1;

    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = НомерApproved+1;
КонецФункции // ЗаполнитьПараметры()



&НаСервере
Процедура ЗаполнитьРеквизитыСправочника()
    

    Для Каждого Стр Из Метаданные.Документы.ОстаткиТехнолоджи.ТабличныеЧасти.Остатки.Реквизиты Цикл
    
        Если Стр.Имя = "Номенклатура" Тогда
            
            Продолжить;
        КонецЕсли;
        
        СтрокаТаблицы = Объект.СоответствиеПолей.Добавить();
        СтрокаТаблицы.РеквизитВ1С = Стр.Имя;
    КонецЦикла;
    
КонецПроцедуры

&НаСервере
Функция ПолучитьРеквизитыСправочника()
    
    Рекв=Новый Массив;
    Для Каждого Стр Из Метаданные.Справочники[Объект.ТекСправочник].Реквизиты Цикл
     // Для Каждого Стр Из Метаданные.Справочники.СпецификацияТК.ТабличныеЧасти.ТаблицаSMD.Реквизиты Цикл

        Рекв.Добавить(Стр.Имя);
    КонецЦикла;
        
    Возврат Рекв;
    
КонецФункции

&НаКлиенте
Процедура Загрузить(Команда)
ФормаСпр = ПолучитьФорму("Документ.ОстаткиТехнолоджи.ФормаВыбора", );

ФормаСпр.Открыть();
    
    Элементы.Загрузить.ЦветФона = WebЦвета.Зеленый;    
    // Вставить содержимое обработчика.
    Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда
        Сообщить("Не выбран файл для загрузки!",СтатусСообщения.ОченьВажное);
        Возврат;
    КонецЕсли;
    
    НомерЛиста=Объект.НастройкиЭксель[0].Значение;
    Если Не ЗначениеЗаполнено(НомерЛиста) Тогда
        Сообщить("На закладке *Настройки эксель* не выбран номер листа",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    ПерваяСтрока=Объект.НастройкиЭксель[1].Значение;
    Если Не ЗначениеЗаполнено(ПерваяСтрока) Тогда
        Сообщить("На закладке *Настройки эксель* не выбрана первая строка",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    ПоследняяСтрока=Объект.НастройкиЭксель[2].Значение;
    Если Не ЗначениеЗаполнено(ПоследняяСтрока) Тогда
        Сообщить("На закладке *Настройки эксель* не выбрана последняя строка",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(Объект.ТекСправочник) Тогда
        Сообщить("Не выбран справочник!",СтатусСообщения.ОченьВажное);
        Возврат;
    КонецЕсли;

    ИмяОбъекта = Объект.ТекСправочник;
    
    //ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    //Лист = ФайлЭксель.Worksheets(НомерЛиста);
    
    ПрочитатьИСоздатьЭлементы(НомерЛиста,ПерваяСтрока,ПоследняяСтрока);
    //ПрочитатьИСоздатьЭлементы();
    
КонецПроцедуры

&НаСервере
Функция ЗаписатьСпецификацию()
    НайденныеСтроки = Объект.СоответствиеПолей.НайтиСтроки(Новый Структура("РеквизитВ1С", "Номенклатура"));
    Если НайденныеСтроки.Количество() > 0 Тогда
        ТаблицаНаименованийТх = Новый ТаблицаЗначений;
        ТаблицаНаименованийТх.Колонки.Добавить("НаименованиеТх", Новый ОписаниеТипов("Строка"));
        Для каждого Стр Из тзExcel Цикл
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)];
       КонецЦикла;
        Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ТаблицаНаименованийТх.НаименованиеТх
                              |ПОМЕСТИТЬ ВТ_НаименованийТх
                              |ИЗ
                              |    &ТаблицаНаименованийТх КАК ТаблицаНаименованийТх
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ВТ_НаименованийТх.НаименованиеТх КАК НаименованиеТх,
                              |    Номенклатура.Ссылка КАК Номенклатура
                              |ИЗ
                              |    ВТ_НаименованийТх КАК ВТ_НаименованийТх
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                              |        ПО ВТ_НаименованийТх.НаименованиеТх = Номенклатура.НаименованиеТх
                              |ГДЕ
                              |    Номенклатура.Ссылка ЕСТЬ NULL ");
        Запрос.УстановитьПараметр("ТаблицаНаименованийТх", ТаблицаНаименованийТх);
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Количество() > 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не найдена номенклатура со следующими наименованиями тх:";
            Пока Выборка.Следующий() Цикл
                Сообщение.Текст = Сообщение.Текст + Символы.ПС + Выборка.НаименованиеТх;
            КонецЦикла;
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
    
    //================================================
    
    ЭлементСпец = Объект.ТекСправочник.ПолучитьОбъект();
    ЭлементСпец.Остатки.Очистить();
    Для каждого Стр Из тзExcel Цикл
        НС = ЭлементСпец.Остатки.Добавить();
        Для Каждого СтрС Из Объект.СоответствиеПолей Цикл
    Если СтрС.РеквизитВ1С = "Номенклатура" Тогда
        НС[СтрС.РеквизитВ1С] = Справочники.Номенклатура.НайтиПоРеквизиту("НаименованиеТх", Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)]);
    Иначе
        НС[СтрС.РеквизитВ1С] = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
    КонецЕсли;
КонецЦикла;
    КонецЦикла;
    Попытка
        ЭлементСпец.Записать();
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
КонецФункции


&НаКлиенте
Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста,ПерваяСтрока,ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
    Флаг=0;
    Для ТекСтр = ПерваяСтрока По ПоследняяСтрока Цикл
        НС = тзExcel.Добавить();
        Для Каждого Стр Из Объект.СоответствиеПолей Цикл
            Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                Продолжить;
            КонецЕсли;
            
            //         Попытка
            ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
            НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
            
        КонецЦикла;
    КонецЦикла;
    Ошибки = ЗаписатьСпецификацию();
    
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЗаполнитьРеквизитыСправочника();
КонецПроцедуры

&НаКлиенте
Процедура Перезаполнить(Команда)
    
    ЗаполнитьПараметры()
КонецПроцедуры

&НаСервере
Процедура Команда1НаСервере()
    // Вставить содержимое обработчика.
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры
74 Олеся999
 
02.03.15
06:59
(71) А нужно ли делать у НаименованиеТх делать тип СправочникСсылка.Номенклатура ?
75 xXeNoNx
 
02.03.15
09:06
Олеся, забей)
76 xXeNoNx
 
02.03.15
09:10
Есть несколько альтернатив решения твоей задачи: 1. Найти мужа 1с-ника
77 Олеся999
 
02.03.15
09:32
(76) Да я хочу сама научиться:)  я 1С то занимаюсь 3-ий месяц всего.
78 Web00001
 
02.03.15
10:27
(76)Она вполне может быть замужем
(77)Так тебе для того и предлагают :) что бы у него была возможность познакомить тебя ближе с 1С
79 Олеся999
 
02.03.15
10:45
А если серьезно :) почему столбец НаименованиеТх с типом СправочникСсылка.Номенклатура  не заполняется ?
80 Web00001
 
02.03.15
11:13
(79)Потому что ты его не заполняешь или заполняешь неправильно, где то тут проблема скорее всего.
81 Олеся999
 
02.03.15
11:58
(80) Ну так это понятно, я и хочу понять где эта ошибка?
82 Web00001
 
02.03.15
14:23
(81)Где то в коде :) сложный день был. Разбирать портянку чужого кода не то, что лениво, сил уже нет. Напиши мне на почту если ничего не получится. Попробую помочь чем смогу.
83 Олеся999
 
03.03.15
07:01
НайденныеСтроки = Объект.СоответствиеПолей.НайтиСтроки(Новый Структура("РеквизитВ1С", "НаименованиеТх")); //ИСПРАВИЛА "Номенклатура" НА "НаименованиеТх" (Тип Справочники.Номенклатура)

    Если НайденныеСтроки.Количество() > 0 Тогда
        ТаблицаНаименованийТх = Новый ТаблицаЗначений;
        ТаблицаНаименованийТх.Колонки.Добавить("НаименованиеТх", Новый ОписаниеТипов("Строка"));
        Для каждого Стр Из тзExcel Цикл
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)];
       КонецЦикла;
         Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ТаблицаНаименованийТх.НаименованиеТх
                              |ПОМЕСТИТЬ ВТ_НаименованийТх
                              |ИЗ
                              |    &ТаблицаНаименованийТх КАК ТаблицаНаименованийТх
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ВТ_НаименованийТх.НаименованиеТх КАК НаименованиеТх,
                              |    Номенклатура.Ссылка КАК Номенклатура
                              |ИЗ
                              |    ВТ_НаименованийТх КАК ВТ_НаименованийТх
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                              |        ПО ВТ_НаименованийТх.НаименованиеТх = Номенклатура.НаименованиеТх");
        Запрос.УстановитьПараметр("ТаблицаНаименованийТх", ТаблицаНаименованийТх);                                          //ТАК ЖЕ ПОДПРАВИЛА ЗАПРОС
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Количество() > 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не найдена номенклатура со следующими наименованиями тх:";
            Пока Выборка.Следующий() Цикл
                Сообщение.Текст = Сообщение.Текст + Символы.ПС + Выборка.НаименованиеТх;
            КонецЦикла;
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;

Выдает ошибку :{Форма.ФормаУпр.Форма(234)}: Ошибка при вызове метода контекста (Выполнить)
        Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(15, 45)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ПО ВТ_НаименованийТх.НаименованиеТх <<?>>= Номенклатура.НаименованиеТх
84 Олеся999
 
03.03.15
10:27
Пробовала сделать  "НаименованиеТх"  и  "РеквизитВ1С" одного типа но тоже не получается :(
85 Timon1405
 
03.03.15
10:31
Выразить(ТаблицаНаименованийТх.НаименованиеТх КАК Строка(500))
86 Олеся999
 
03.03.15
10:49
(85) Дак нужно чтобы тип Справочники.номенклатура был
87 Олеся999
 
04.03.15
08:06
&НаСервере
Функция ЗаписатьСпецификацию()
    НайденныеСтроки = Объект.СоответствиеПолей.НайтиСтроки(Новый Структура("РеквизитВ1С", "Номенклатура"));

    Если НайденныеСтроки.Количество() > 0 Тогда
        ТаблицаНаименованийТх = Новый ТаблицаЗначений;
        ТаблицаНаименованийТх.Колонки.Добавить("НаименованиеТх", Новый ОписаниеТипов("Строка"));
        Для каждого Стр Из тзExcel Цикл
            ТаблицаНаименованийТх.Добавить().НаименованиеТх = Стр["Реквизит" + (НайденныеСтроки[0].ПолучитьИдентификатор() + 1)];
       КонецЦикла;
         Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ТаблицаНаименованийТх.НаименованиеТх
                              |ПОМЕСТИТЬ ВТ_НаименованийТх
                              |ИЗ
                              |    &ТаблицаНаименованийТх КАК ТаблицаНаименованийТх
                              |;
                              |
                              |////////////////////////////////////////////////////////////////////////////////
                              |ВЫБРАТЬ
                              |    ВТ_НаименованийТх.НаименованиеТх КАК НаименованиеТх,
                              |    Номенклатура.Ссылка КАК Номенклатура
                              |ИЗ
                              |    ВТ_НаименованийТх КАК ВТ_НаименованийТх
                              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                              |        ПО ВТ_НаименованийТх.НаименованиеТх = Номенклатура.НаименованиеТх");
        Запрос.УстановитьПараметр("ТаблицаНаименованийТх", ТаблицаНаименованийТх);
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Количество() > 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не найдена номенклатура со следующими наименованиями тх:";
            Пока Выборка.Следующий() Цикл
                Сообщение.Текст = Сообщение.Текст + Символы.ПС + Выборка.НаименованиеТх;
            КонецЦикла;
            Сообщение.Сообщить();
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
    
    //================================================
    Сообщение = Новый СообщениеПользователю;
    ЭлементСпец = Объект.ТекСправочник.ПолучитьОбъект();
    ЭлементСпец.Остатки.Очистить();
    Для каждого Стр Из тзExcel Цикл
        НС = ЭлементСпец.Остатки.Добавить();
        Для Каждого СтрС Из Объект.СоответствиеПолей Цикл
            Если СтрС.РеквизитВ1С = "Номенклатура" Тогда
                НайдСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("НаименованиеТх", Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)]);
                Если НайдСсылка.Пустая() Тогда
                    Сообщение.Текст = "Не нашли " + Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
                    Сообщение.Сообщить();
                Иначе
                    СтрС.РеквизитВ1С = НайдСсылка;
                КонецЕсли;
            Иначе
                НС[СтрС.РеквизитВ1С] = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Попытка
        ЭлементСпец.Записать();
    Исключение
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
КонецФункции

Теперь останавливается здесь : {Форма.ФормаУпр.Форма(263)}: Получение элемента по индексу для значения не определено
                НС[СтрС.РеквизитВ1С] = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
88 zak555
 
04.03.15
08:12
(87) что такое тзExcel  :
89 Олеся999
 
04.03.15
08:18
(88)
&НаКлиенте
Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста,ПерваяСтрока,ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
    Флаг=0;
    Для ТекСтр = ПерваяСтрока По ПоследняяСтрока Цикл
        НС = тзExcel.Добавить();
        Для Каждого Стр Из Объект.СоответствиеПолей Цикл
            Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                Продолжить;
            КонецЕсли;
            
            //         Попытка
            ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
            НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
            
        КонецЦикла;
    КонецЦикла;
    Ошибки = ЗаписатьСпецификацию();
    
КонецПроцедуры

Вообще это обработка загружающая из Excel в Документы 1С
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн