Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 01:24
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Заполнение справочника данными из табличной части  (Прочитано 4366 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет.
Есть справочник Номенклатура и обработка с табличной частью, которая заполняется данными из Excell. После заполнения ТЧ обработки, данные из неё необходимо забить в справочник Номенклатура. Реализовано это следующим образом:
Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
            Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
    Номенклатура.Товар = СтрокаТЧ.Товар;
    Номенклатура.Количество = Число(СтрокаТЧ.Количество);
    Карта.Записать();
      КонецЦикла;
Код работает отлично, за исключением одного нюанса: если в исходной таблице Excell встречается номенклатура, которая уже есть в справочнике, то при заполнении справочника создаётся ещё один элемент номенклатуры с таким же названием, но другим количеством. Мне же необходимо, чтобы при заполнении справочника, в случае совпадения имён номенклатуры, новый элемент справочника не создавался, а текущее количество заменялось значением из таблицы.

Пример:
Если в таблице есть номенклатура "Шланг" с количеством "10", то при добавлении в справочнике появится 10 шлангов. Если после этого в таблице появится номенклатура "Шланг" с количеством "5", то в номенклатуре будет запись о 10 шлангах и о 5 шлангах. Мне же необходимо, чтобы после второго заполнения номенклатуры в ней оставался 1 элемент с именем "Шланг", но его количество изменялось с 10 на 5.
Каким образом можно реализовать такую проверку и замену?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Делайте найти по наименованию, если нашли то получайте объект и заполняйте, если нет, то создавайте.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Делайте найти по наименованию, если нашли то получайте объект и заполняйте, если нет, то создавайте.
Пробую так:
Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
      Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
      Дубликат = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура,ИСТИНА);
      Если Дубликат = "" Тогда
      Номенклатура.Товар = СтрокаТЧ.Товар;
  Номенклатура.Количество = Число(СтрокаТЧ.Количество);
      Иначе
  Дубликат = Дубликат.ПолучитьОбъект();
  Дубликат["Количество"] = Число(СтрокаТЧ.Количество);
      КонецЕсли;
      Номенклатура.Записать();
КонецЦикла;
   
На строке
Дубликат = Дубликат.ПолучитьОбъект();
ругается со словами "Элемент не выбран!"
В чём, собственно, проблема?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн Slin

  • Глобальный модератор
  • *****
  • Сообщений: 780
  • РЕПУТАЦИЯ: 247
  • КПД: 32%
  • Game over...
  • Регистрация: 2010-10-13
  • Сайт: 
  • Профессия: Программист 1С
Проблема в том, что Дубликат это пустая ссылка
ваш отрывок лучше переписать так
Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
      Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура,ИСТИНА);
      Если Не Номенклатура.Пустая() Тогда
          Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
          Номенклатура.Товар = СтрокаТЧ.Товар;
          Номенклатура.Количество = Число(СтрокаТЧ.Количество);
      Иначе
          Номенклатура = Номенклатура.ПолучитьОбъект();
          Номенклатура["Количество"] = Число(СтрокаТЧ.Количество);
      КонецЕсли;
      Номенклатура.Записать();
КонецЦикла;
skype: slin-dev

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Проблема в том, что Дубликат это пустая ссылка
ваш отрывок лучше переписать так
1 Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
      2 Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура,ИСТИНА);
      3 Если Не Номенклатура.Пустая() Тогда
          4 Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
          5 Номенклатура.Товар = СтрокаТЧ.Товар;
          6 Номенклатура.Количество = Число(СтрокаТЧ.Количество);
     7  Иначе
          8 Номенклатура = Номенклатура.ПолучитьОбъект();
          9 Номенклатура["Количество"] = Число(СтрокаТЧ.Количество);
      10 КонецЕсли;
      11 Номенклатура.Записать();
12 КонецЦикла;
Если я понял принцип работы этого кода верно, то получится что на 3 строке у нас идёт проверка, есть текущий объект в номенклатуре, или нет. И если он есть (НЕ пустая), то мы добавляем его вновь, от чего я изначально пытался избавиться. А если этого объекта нет, то мы пытаемся его найти из ничего и поменять значение реквизита "количество", которого, фактически, в этом случае существовать не будет. Я всё правильно понял?
В любом случае, на 8ю строку он ругается с тем же текстом.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Я всё правильно понял?
В синтакс-помощнике же описан метод.

Цитировать
СправочникМенеджер.<Имя справочника>.НайтиПоНаименованию (CatalogManager.<Имя справочника>.FindByDescription)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоНаименованию (FindByDescription)
Синтаксис:

НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)

...........................................

Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0), то будет возвращено Неопределено.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
В синтакс-помощнике же описан метод.
Да, я читал его описание. Даже успел переделать под образец из СП, но результат остался тем же. Сейчас код выглядит так:
Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
СтрокаПоиска = СтрокаТЧ.Товар;
Товар = Справочники.Номенклатура;
Дубликат = Товар.НайтиПоНаименованию(СтрокаПоиска);     
      Если Дубликат = Товар.ПустаяСсылка() Тогда
          Номенклатура.Товар = СтрокаТЧ.Товар;
          Номенклатура.Количество = Число(СтрокаТЧ.Количество);
      Иначе
          Номенклатура = Номенклатура.ПолучитьОбъект();
          Номенклатура["Количество"] = Число(СтрокаТЧ.Количество);
      КонецЕсли;
      Номенклатура.Записать();
КонецЦикла;
Но, как я написал выше, получить объект не получается.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
В третьей строке уберите " НЕ " и будет вам счастье.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Golickoff

  • ****
  • Сообщений: 359
  • РЕПУТАЦИЯ: 36
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
В третьей строке уберите " НЕ " и будет вам счастье.
Я сразу так и сделал -- не полетело.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн Дмитрий@

  • *****
  • Сообщений: 735
  • РЕПУТАЦИЯ: 134
  • КПД: 18%
  • Ссылка на примеры работ https://yadi.sk/d/ksVluPMB
  • Регистрация: 2015-02-27
    • Skype: ShuplecovDima
  • Сайт: 
  • Профессия: Программист 1С
А если так написать
Если Дубликат = Товар.ПустаяСсылка() ИЛИ Дубликат = Неопределено Тогда
Ссылка на примеры работ https://yadi.sk/d/ksVluPMB


 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6501
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2048
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 272
Последний ответ 12 Окт 2017, 14:02
от wise
Работа с формой Справочника "Физ.Лица" в ЗУП 2.5

Автор Митя_Просто_МитяРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3896
Последний ответ 15 Дек 2011, 00:04
от Vit1501
Чистка справочника "Налоги и взносы"

Автор dim3740Раздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 403
Последний ответ 17 Май 2017, 17:55
от Геннадий ОбьГЭС

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
142 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
50 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 161
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal