|
Сопоставление Наименования с Номенклатурой | ☑ | ||
---|---|---|---|---|
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С |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |