Вход | Регистрация


1С:Предприятие ::

Метки:

Как сделать импорт из XLS-файла или ТаблицыЗначений в Справочник «Номенклат

Я
   Вжик
09.08.04 - 11:58
1С77. Бухгалтерия.Суть проблемы. Надо сделать импорт данных из Excel- файла в справочник Номенклатура. По этому поводу есть достаточно информации. Но в ней приводится пример импорта из Эксел-файла СРАЗУ в справочник Номенклатура, т.е. даже если я откажусь от проведения документа прихода товара, в Номенклатуре этот список останется. Возникает дилема: Либо надо (в случае отказа от проведения документа) очищать справочник, либо импортировать данные сначала в ТаблицуЗначений, отобразить импортированные данные в таблице документа, редактировать и (если все устраивает) записать в Справочник, сформировать проводки. Меня интересует второй вариант. Загвоздкой оказался вопрос: как сделать так, чтобы 1)при ручном выборе товара из Номенклатуры значения в таблицу документа попадали из справочника Номенклатура
Товары =СоздатьОбъект("Справочник.Номенклатура");
ТМЦ=Товары.Наименование;
Цена=Товары.Цена;
……….
2) при импорте – из ТаблицыЗначений
……
ТМЦ=ТЗ.Наименование
……..
Т.е в реквизитах табличной части документа я не могу указать , что Тип значения табличной части реквизита ТМЦ является Справочник.Номенклатура. Я должен  тип устанавливать программно. Так что написать в формуле в Свойствах Поля Ввода (ТМЦ)  и модуле документа?
Может есть у кого варианты? Спасибо
 
 
   Kopyl
 
1 - 09.08.04 - 12:17
Ну это у тебя получится имитация проведения- типа "как в 1С сделать имитацию работы 1С"
Проще взять вариант 1), и складывать новые справочники в отдельную папку, если отказались проводить документ, элементы так и остались в этой папочке, (назови ее "корзина"), а когда согласились документ провести, переложы элементы справочника в нужные папки...
   Вжик
2 - 09.08.04 - 23:19
Спасибо (1), но это не ответ.
   GrayT
 
3 - 09.08.04 - 23:27
Почему же не ответ? Так или иначе между заполнением документа и его проведением номенклатура должна где-нибудь храниться.
Можно конечно сэмулировать документ обработкой с ТЧ и если пользователь нажал сохранить и провести (или просто сохранить) то уже тогда формировать документ
   Вжик
4 - 10.08.04 - 00:15
Не ответ потому, что я знаю другие варианты. В настоящий момент система почти так и работает, как предложил (1). Но я хочу по другому. И отсюда вытекает первый вопрос: возможно ли это в принципе? Я думаю возможно. И коль возможно, то как это грамотно сделать? Я не спрашиваю как обойти проблему, я спрашиваю как решить её.
   GrayT
 
5 - 10.08.04 - 00:20
Обойти кучу ..... - это не решение проблемы "как не вляпаться в ...."?
   Матрейя
 
6 - 10.08.04 - 00:24
4. В справочнике Номенклатура - реквизит "ДокПрихода". ПриЗаписи доков удалять все элементы номенклатуры с пустым значением реквизита (если это нужно). При проведении доков - записывать данные реквизиты. При отмене проведения - помечать на удаление. При удалении дока - удалять (если нет ссылок).
   GrayT
 
7 - 10.08.04 - 00:27
Хорошо, сейчас стало с гигабайтными винтами. Раньше помню думали, засорять базу или не надо :)
   Матрейя
 
8 - 10.08.04 - 00:32
Теоретически - вместо справочника можно использовать только регистр. А вообще-то в (0) не совсем понятно описана задача.
   GrayT
 
9 - 10.08.04 - 00:36
Регистр? И что будет измерениями?
   Вжик
10 - 10.08.04 - 00:47
Спасибо (6). Еще раз повторяю: В настоящий момент система работает путем удаления "ненужных" товаров из справочника, который попал при импорте из файла. Но вопрос ведь в другом. Как сделать, что бы справочник не засорялся данными?
 
  Рекламное место пустует
   Вжик
11 - 10.08.04 - 00:56
Что же непонятного в задаче? Если вводить документ прихода товара данные в ручную, то для столбца Наименование таблицы документа тип будет Справочник.Номенклатура и соответствующим образом будет построена выборка данных из справочника. А если я хочу табличную часть документа заполнить из таблицы значений, то я не могу указать для Наименования тип Справочник.Номенклатура, так как выборку данных буду производить из таблицы значений, в которую предварительно импортировал данные. Все. Подробней некуда.
   Матрейя
 
12 - 10.08.04 - 00:56
9. Уникальный код (номердока+номерстроки к примеру) + дополнительный регистр сведений (наименование+характеристики и т.д.). Я делал подобную реализацию.
10. В реквизите дока "номенклатура " - допустим просто текстовое поле, а сама запись номенклатуры производится при проведении. При этом у номенклатуры все равно есть реквизит "докприхода". Но в этом случае надо подумать об какой-то системе ссылок - как вариант  реквизит табличной части дока - кодтовара, который формируется автоматически и записывается затем как код справочника номенкалтура.
   Матрейя
 
13 - 10.08.04 - 00:58
+12. То есть в доке в табличной части 2 реквизита, тип значения строка: код и наименование
   Вжик
14 - 10.08.04 - 01:29
(13) Ну есть у меня в шапке документа поле Код, которое используется для создания группы товара, есть в самом справочнике товара код. Ну и что? Тип значения в табличной части я и сам указал, что не Справочник.Номенклатура, т.е. либо Неопределённый, либо строка. А дальше то что?
   Матрейя
 
15 - 10.08.04 - 01:37
14. Зачем неопределенный? Просто строка - 2 реквизита: кодНом и ИмяНом. В момент проведения создаешь элементы справочника Номенклатура с наименованием ИмяНом и кодом = КодНом. При редактировании  табличной части дока - делаешь поиск элемента Номенклатуры по КодНом (уникальный) и при открытии формы списка справочника активизируешь курсор на нем. Что непонятно? Элементы создаются только при проведении. В самом доке - только представления элементов. Осталось только переделать процедуру проверки ссылок при удалении элемента справочника номенклатуры.
   Вжик
16 - 10.08.04 - 02:18
Вы наверное очень умный, коль начинаете с момента проведения. А мне бы сначала. Например: 1.Создаёшь в документе реквизит табличной части "Товар"
2.Присваиваешь ему тип значения "Строка"
3.В свойствах поля вода "Товар" Формула:............-для того то
4.Что бы заполнить табличную часть вручную, т.е. данными из справочника Номенклатура, в процедуре Выбор() надо согласовать типы данныхследующим образом ...........
5.Что бы заполнить табличную часть из ТаблицыЗначений в процедуре Импорт() надо согласовать типы данныхследующим образом ...........
   NS
 
17 - 10.08.04 - 02:51
(0)Атас... начни с чего-нибудь попроще... попробуй написать на 1С решение квадратного уравнения ;-)
   Вжик
18 - 10.08.04 - 02:55
(17) Спасибо за рекомендацию.
   Вжик
19 - 10.08.04 - 09:55
Больше ни у кого нет мыслей?
   AndrewZL
20 - 10.08.04 - 10:35
"Мне объяснили как сделать правильно, но я хочу иначе..."(с) Разработчик "Magic Box for 1C"
   Вжик
21 - 10.08.04 - 14:19
(20)Мне никто не дал к сожалению ответ как сделать правильно. Пытались только рассказать как сделать иначе. Удивляюсь! Неужели мне первому в голову пришла идея не засорять справочник. И еще больше удивляюсь, что эта идея считается неправильной.
   SAS_Chelny
 
22 - 10.08.04 - 15:48
А транзакциине катят?
   Вжик
23 - 10.08.04 - 21:11
(22) Поподробней, если можно.
   Матрейя
 
24 - 10.08.04 - 21:31
21. Что в твоем понимании правильный ответ? Демонстрационная конфигурация?
   Вжик
25 - 10.08.04 - 22:24
(24) Я позволю себе не описывать критерии правильного ответа, кроме одного - это ответ на то, о чем спрашивают. А вот образец идеального для меня ответа я привел в 16 посте.
Демонстрационная конфигурация? - я на это не расчитываю, да и вся конфигурация ни к чему, но с другой стороны - почему бы и нет, если она содержит пример реализации моего вопроса.
   427
 
26 - 10.08.04 - 22:26
Фигня какая то... (с) Бекас.
   Матрейя
 
27 - 10.08.04 - 23:11
25. По своему идеальному образцу рекомендую самому себе и ответить.
   Вжик
28 - 11.08.04 - 00:19
Во-первых. Если бы я мог сам себе быстро ответить, то сюда не писал бы.
Во-вторых. Постом 25 я не хотел никого обидеть.
В-третьих. Когда решу брошу код сюда. Я не глупый, не жадный и не обидчивый.
Большое спасибо всем, кто принял участие в решении моей проблемы. Успехов Вам!
   NS
 
29 - 11.08.04 - 00:41
Бред... несколько раз перечитал ветку...
Так ничего и не понял... чего ты хочешь?
Если в документ записать - то
Наим=ТЗ.Наименование;
если спр.найтипонаименованию(наим,..,..)=0 Тогда
  спр.Новый();
  ....
  спр.Записать();
КонецЕсли;
док.товар=спр.текущийДокумент();
   maloy
 
30 - 11.08.04 - 02:00
Была какая-то похожая задачка на аттестации по бухгалтерии, когда предлагалось в документе накапливать и хранить данные в табличной части, а отображать их в ТЗ.
Я попробывал бы сделать так:
1.В документе (ПрихНакл), пока он непроведённый показываем ТЗ, импортируем туда данные из Excel. Если, допустим, указаны какие-нибудь уникальные коды товара в накладной поставщика, то по ходу можно сразу пытаться сопоставлять с существующими элементами номенклатуры (шобы не плодить каждый раз новые). Чего не хватает добавить в эту табличку ручками. При проведении (или при записи, логичнее при записи)создаем элементы номенклатуры, которых не хватает. Потом как обычно: операция, проводки...
После записи, ТЗ можно спрятать, показать табличную часть и дальше работать как с обычным документом.
2.Просто пишем обработку которая по завершении работы генерит вместо себя ПриходнуюНакладную и всё. Тогда не надо курочить типовую конфу.
   Вжик
31 - 11.08.04 - 03:01
Большое спасибо (30) и особенно (29).
NS, мне кажется, что ты понял меня правильно. Класс! Только не сочти за труд - поясни последнюю строчку.
   Вжик
32 - 11.08.04 - 10:01
NS, откликнись.
   Вжик
33 - 11.08.04 - 22:21
Может кто другой (кто понял) последнюю строчку в 29 посте "разжуёт"
 
 
   427
 
34 - 11.08.04 - 22:25
текущийЭлемент... очепятка...
   Анакреон
35 - 25.09.04 - 15:21
Транзакции катят
   Aleron
36 - 25.09.04 - 15:42
Ну Вы Блин даете! Я тоже не пойму сперва ты об одном затем о другом спрашиваешь
Вот те код записи Номенклатуры в таб часть документа:
Если Стр.ПолучитьЗначение(1)="Строка" Тогда
    Если ЕстьДокумент=1 Тогда
       Продолжить;
    КонецЕсли;     
        Спр=СоздатьОбъект("Справочник.ТМЦ");
    Если Спр.НайтиПоРеквизиту("СтарыйПолныйКод",Стр.ПолучитьЗначение(2),1)=0 Тогда
    Сообщить("Не найден товар по  коду "+Стр.ПолучитьЗначение(2)+", наименование "+Стр.ПолучитьЗначение(3)+". Создан новый товар.");
    Спр.Новый();
    Спр.ИспользоватьДату('01.01.1980');
    Спр.СтарыйПолныйКод=Стр.ПолучитьЗначение(2);
    Спр.Наименование=Стр.ПолучитьЗначение(3);
    Спр.Валюта_Прод=Константа.ОсновнаяВалюта;
    Спр.Валюта_Прих=Константа.ОсновнаяВалюта;
    Спр.СтавкаНДС=Константа.БазНДС;
    Спр.ВидДеятельности=Константа.БазВидДеятельности;
    а=Стр.ПолучитьЗначение(11);
    Если а="Товар" Тогда
    Спр.ВидТМЦ=Перечисление.ВидыТМЦ.ЗначениеПоИдентификатору(а);
    Спр.Счет=СчетПоКоду("28.1");
    Спр.СчетЗатрат=СчетПоКоду("90.2");
    ВЗ=Создатьобъект("Справочник.ВидыЗатрат");
    ВЗ.НайтиПоНаименованию("Прямые материальные затраты",1);
    Спр.ВидЗатрат=ВЗ.ТекущийЭлемент();
    Иначе
    Если а="Услуга" Тогда
    Спр.ВидТМЦ=Перечисление.ВидыТМЦ.а;
    Спр.СчетЗатрат=СчетПоКоду("90.3");
    Спр.Счет=СчетПоКоду("90.3");
    КонецЕсли;
    КонецЕсли;
    Спр.БазЕдиница=Перечисление.Единицы.ЗначениеПоИдентификатору(Лев(Стр.ПолучитьЗначение(4),(СтрДлина(Стр.ПолучитьЗначение(4))-1)));
    Спр.Записать();
    КонецЕсли;
    Док.НоваяСтрока();
    Док.ТМЦ=Спр.ТекущийЭлемент();
    Спр=СоздатьОбъект("Справочник.ЕдиницыИзмерения");
    Спр.ИспользоватьВладельца(Док.ТМЦ);
    Если Спр.НайтиПоНаименованию(Стр.ПолучитьЗначение(4),1,1)=0 Тогда
    Сообщить("Не найдена единица измерения: "+Стр.ПолучитьЗначение(4)+"Создана новая.");
    Спр.Новый();
    Спр.Наименование=Стр.ПолучитьЗначение(4);
    Спр.Коэффициент=1;
    Спр.Записать();
    КонецЕсли; 
    Док.Ед=Спр.ТекущийЭлемент();
    Док.Кво=Стр.ПолучитьЗначение(5);
    Док.Коэффициент=Стр.ПолучитьЗначение(6);
    Док.ЦенаБезНДС=Стр.ПолучитьЗначение(7);
    Док.СуммаБезНДС=Стр.ПолучитьЗначение(9);
    Док.СуммаБезНДСВал=Стр.ПолучитьЗначение(10)*Док.Курс;
    Док.СуммаСНДС=Стр.ПолучитьЗначение(10);
    Док.НДС=Стр.ПолучитьЗначение(10)-Стр.ПолучитьЗначение(9);
    КонецЕсли;



Список тем форума
  Рекламное место пустует
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует