8.х Справочник "Номенклатура" v8.1

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Armagedron, 20 апр 2008.

  1. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток! Задача заключается в следующем:

    При добавлении строки копированием в ФормеСписка справочника Номенклатура должны копироваться все реквизиты из формы элемента на закладке "СчетаУчета" для того чтобы их каждый раз не вбивать руками. Подскажите хотя бы примерно как это можно реализовать(желательно пример кода). Поиском нашел обработку для этого. Жаль только что она для версии 7.7.
    Вот ссылка:
    Сайт
    И еще вот это:
    А больше ничего:(
    Помогите пожалуйста!
    З.Ы. Извентеляюсь перед админами за нарушение правил в предыдущем посте :unsure: Исправимся :)
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    У тебя в руках ответ на твой вопрос - создавай в модуле справочника предопределенную процедуру "ПриКопировании" и тащи с ее помощью все, что тебе нужно.

    Код:
    Процедура ПриКопировании(ОбъектКопирования)
    ЭтотОбъект.Наименование = "Подменим стандартное наименование нового справочника";
    // утащим для примера табличну ючасть
    Для каждого СтрИсходная из ОбъектКопирования.ТабличнаяЧасть Цикл
    стрНовая = ЭтотОбъект.ТабличнаяЧасть.добавить();
    стрНовая.Значение = СтрИсходная.Значение;
    // и далее по тексту, можно еще посмотреть на 
    // процедуры заполнения ТЗ
    // например Выгрзить()...
    КонецЦикла;
    КонецПроцедуры
    
    
  3. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    А как мне обратиться к Полю в ФормеЭлемента с ссылочным типом данных "ПланСчетовСсылка.Хозрасчетный" и скопировать
    Ну например "СчетУчетаБУ"? :unsure: (ведь ни реквизитов ни ТЧ)
    Я пытаюсь примерно так:

    Код:
    Процедура ПриКопировании(ОбъектКопирования)
    Т = Справочники.Номенклатура;
    ФО = Т.ПолучитьФорму("ФормаЭлемента");
    СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(...);
    Эл = ФО.ЭлементыФормы.Найти("СчетУчетаБУ");
    Эл = СчетаУчета.СчетУчетаБУ;
    КонецПроцедуры
    
    А мне нужно копировать именно счета.
    Не пойму
    Заранее благодарен!
  4. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Тебе нужно разобраться, где хранится данная информация. Иногда справочники связаны с регистрами сведений, другими справочниками, или еще какими объектами базы данных. При этом, когда открывается форма элемента - программа при открытии создает таблицы отображающие связанные данные. У новичка создается ощущение, что эти данные хранятся где то в самом справочнике, хотя это не так.

    Конфа какая?
  5. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    "Бухгалтерия для Украины", редакция 1.1

    Версия 1С - 8.1

    Именно поле "СчетУчетаБУ" имеет тип значения ПланСчетовСсылка.ХозРасчетный
  6. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    SOS HELP! F1 :unsure: пожалуйста B)
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Посмотри, ГДЕ хранятся данные в документе, которые тебе нужны.
    Далее, если это реквизиты документа, то доступ будет такой:

    ТвойРеквизит = ОбъектКопирования.<НужныйРеквизит>;
  8. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Дык в том то и дело что данные в документе не хранятся. Это ссылочный тип данных(план счетов):

    Так вот как мне к нему обратиться и при копировании ставить то, что было до копирования??? Пример кода если можно :unsure:

    Интересно может это вообще невозможно сделать?
  9. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Эээ... по моему изначально речь шла о справочнике "Номенклатура"
  10. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Если Вас не затруднит скиньте пожалуйста небольшой пример (код) как мне при копировании достать счета из регистра сведений в справочник "Номенклатура"?
    Буду примного благодарен!!!
  11. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Тебе еще раз повторяю - иногда справочники связаны с другими объектами базы данных. В твоем случае - номенклатуры связаны с регистром сведений СчетаУчетаНоменклатуры.
    Для того, чтобы утащить счета учета при копировании - во первых нужно будет создаваемый объект записать - иначе не будет происходить привязки. Вернее происходить то будут, но если юзверь передумает - появятся записи с битыми ссылками, что не желательно. А далее - брать запросом связанные с источником записи из регистра, и создавать еще записи, но связывать их уже с новым элементом. Код ищи сам - по форуму разбросаны как примеры запросов к регистру сведений, так и примеры создания записей в регистре.
  12. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    :unsure: Нифига не получилось но тему можно закрывать :)
  13. Рассада
    Offline

    Рассада

    Регистрация:
    28 фев 2008
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Думаю, что-то типа того:
    Код:
    Отбор = Новый Структура("Номенклатура", Номенклкатура);
    // Номенклкатура - исходная
    
    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);
    МенеджерЗаписи = РегистрыСведений.СчетаУчетаНоменклатуры.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураСчетов);
    МенеджерЗаписи.Номенклатура = ТвояНоваяНоменклатура;// объект уже записан
    МенеджерЗаписи.Записать();
    
  14. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Ооо спасибо добрый человек.
    Только вот чет ошибку выдает.
    Пришу вот так вот:
    Код:
    //Перед открытием формы элемента
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    Если ЭтоНовый()
    И ЗначениеЗаполнено(ПараметрОбъектКопирования) Тогда
    Отб = Новый Структура("Номенклатура",ЭтотОбъект.НаименованиеПолное);
    
    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отб);
    МенеджерЗаписи = РегистрыСведений.СчетаУчетаНоменклатуры.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураСчетов);
    МенеджерЗаписи.Номенклатура = НаименованиеПолное;
    МенеджерЗаписи.Записать(); 	     
    КонецЕсли;
    КонецПроцедуры
    
    Выдает ошибку:
    {Справочник.Номенклатура.Форма.ФормаЭлемента(180)}: Ошибка при вызове метода контекста (Получить): Недопустимое значение параметра (параметр номер '1')
    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отб);

    В чем дело подскажите?
  15. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Несоответствие типов данных? А что же тогда придумать? :unsure:
  16. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Еще пытаюсь делать выборку запросом:
    Код:
    Если ЭтоНовый()
    И ЗначениеЗаполнено(ПараметрОбъектКопирования) Тогда
    Запрос = Новый Запрос; 
    Запрос.Текст = "ВЫБРАТЬ
    |СчетаНоменклатуры.СчетУчетаБУ,
    |СчетаНоменклатуры.СчетУчетаЗабалансовыйБУ
    |ИЗ РегистрСведений.СчетаУчетаНоменклатуры КАК СчетаНоменклатуры
    |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |ПО СчетаНоменклатуры.Номенклатура = Наименование";
    Запрос.Выполнить().Выбрать().Следующий();
    //Отб = Новый Структура("Номенклатура",Наименование);
    // Отб = Новый Структура();            
    //СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отб);
    МенеджерЗаписи = РегистрыСведений.СчетаУчетаНоменклатуры.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи,Запрос);
    МенеджерЗаписи.Номенклатура = Наименование;
    МенеджерЗаписи.Записать(); 	     
    КонецЕсли;
    
    Добавляет пустую строку в регистр :(
    Выручайте! Как сделать правильно?
  17. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Не может быть чтобы никто этого не знал???
  18. Рассада
    Offline

    Рассада

    Регистрация:
    28 фев 2008
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Андрей, Отб = Новый Структура("Номенклатура",ЭтотОбъект.НаименованиеПолное);
    - не то. Надо передавать ссылку
    Отб = Новый Структура("Номенклатура", ЭтотОбъект.Ссылка);
  19. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Исправил строку на передачу ссылки:

    Код:
    Отбор = Новый Структура("Номенклатура",ЭтотОбъект.Ссылка);
    
    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);[code]
    
    Все равно выдает такую же ошибку
    
    {Справочник.Номенклатура.Форма.ФормаЭлемента(188)}: Ошибка при вызове метода контекста (Получить): Недопустимое значение параметра (параметр номер '1')
    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);
    по причине:
    Недопустимое значение параметра (параметр номер '1')
  20. TopicStarter Overlay
    Armagedron
    Offline

    Armagedron

    Регистрация:
    9 апр 2008
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Ска = ЭтотОбъект.Ссылка.Наименование;
    Отбор = Новый Структура("Номенклатура",Ска);

    СтруктураСчетов = РегистрыСведений.СчетаУчетаНоменклатуры.Получить(Отбор);

    Так тоже ругается :(

Поделиться этой страницей