Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

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

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

Как программно завести материал в Норму расхода

Serg_aa
читатель
офлайн
Дата регистрации: 27.01.2008
Сообщений: 5
Пост №1
 
27.01.2008 01:58

Подскажите пожалуйста как завести программно материал(ссылку на материал) из справочника Материалы в справочник Нормы расходов. Я пишу программу на VB.NET.<br><br>'Открываю справочник материалы<br>o2 = o.CreateObject("Справочник.Материалы")<br>       If o2.ВыбратьЭлементы > 0 Then<br>       while o2.ПолучитьЭлемент > 0 <br>       If o2.ЭтоГруппа < 1 Then<br>       exit while<br>       End if<br>       End While<br>       End If<br>'Сейчас в о2.ТекущийЭлемент материал который нужно завести в справочник НормыРасходов<br> o4 = o.CreateObject("Справочник.Номенклатура")<br>       If o4.ВыбратьЭлементы > 0 Then<br>       while o4.ПолучитьЭлемент > 0 <br>       If o4.ЭтоГруппа < 1 Then<br>       o5 = o.CreateObject("Справочник.НормыРасходов")<br>       o5.ИспользоватьВладельца(o4)<br>       If o5.ВыбратьЭлементы > 0 Then<br>       While o5.ПолучитьЭлемент > 0 <br>       o5.Новый()<br>       o5.Наименование = spr2<br>                                                'На следующей строке прога падает<br>       o5.Элемент = o2.ТекущийЭлемент<br>       o5.Записать()<br>       End While<br>       end if<br>       end if<br>       End While<br>       End If

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №2
 
28.01.2008 15:40

Конфигурация то какая?<br>o5.Элемент - реквизит элемент в этом справочнике определенного вида?

Serg_aa
читатель
офлайн
Дата регистрации: 27.01.2008
Сообщений: 5
Пост №3
 
28.01.2008 22:42

о5.Элемент-это Справочник не определенного вида. Тип значения: <<Справочник>>.<br>А как узнать какая Конфигурация? Думаю что какая нибудь стандартная т.к. в нашем колхозе вряд ли<br>есть кто-то кто сделает конфигурацию с нуля.

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №4
 
29.01.2008 06:54

Варианты: 1С:Бухгалтерия, 1С:Производство+Услуги+Бухгалтерия, любая самописная конфигурация, любая стандартная переписанная конфигурация... В общем, лучше, если в вопросах вы будете указывать точную версию платформы и релиза своей конфигурации. Посмотреть их можно нажам на большой желтый знак вопроса в панели инструментов.<br><br>А с вопросом вашим, попробуйте перед установкой значения назначить вид реквизиту.<br><br>НазначитьВид(Реквизит,ВидСтрокой)

Serg_aa
читатель
офлайн
Дата регистрации: 27.01.2008
Сообщений: 5
Пост №5
 
30.01.2008 22:25

1)У нас написано вот что: <br>1С:Предприятие 7.7(сетевая версия)<br>Конфигурация: Бухгалтерский учет, редакция 4.5 (7.70.487)<br>Установленные компоненты: Бухгалтерский учет Оперативный учет Расчет<br><br>2)Я тоже было подумал об этой функции но на ней прога падает не пойму что делаю неправильно.<br>o = CreateObject("V77.Application")<br>o.Initialize("16440", "/DC:\1C_basa_UPP", " ")<br><br>o2 = o.CreateObject("Справочник.Материалы")<br>       If o2.ВыбратьЭлементы > 0 Then<br>       while o2.ПолучитьЭлемент > 0 <br>       If o2.ЭтоГруппа < 1 Then<br>       exit while<br>       End if<br>       End While<br>       End If<br>'Сейчас в о2.ТекущийЭлемент материал который нужно завести в справочник НормыРасходов<br> o4 = o.CreateObject("Справочник.Номенклатура")<br>       If o4.ВыбратьЭлементы > 0 Then<br>       while o4.ПолучитьЭлемент > 0 <br>       If o4.ЭтоГруппа < 1 Then<br>       o5 = o.CreateObject("Справочник.НормыРасходов")<br>       o5.ИспользоватьВладельца(o4)<br>       If o5.ВыбратьЭлементы > 0 Then<br>       While o5.ПолучитьЭлемент > 0 <br> 'На следующей строке прога падает<br> o.НазначитьВид(o5.Элемент, "Материалы")<br>       o5.Новый()<br>                                                'И если сюда поставить эту функцию прога падает<br> o.НазначитьВид(o5.Элемент, "Материалы")<br>       o5.Наименование = spr2<br>                                                'На следующей строке прога падает<br>       o5.Элемент = o2.ТекущийЭлемент<br>       o5.Записать()<br>       End While<br>       end if<br>       end if<br>       End While<br>       End If

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №6
 
31.01.2008 14:37

"В общем, я поглядел... через OLE в v77 в качестве параметров функций можно передавать только значения неагрегатных типов данных, то есть, числа, строки, даты в формате строк и т.п.<br>Поэтому конструкция вида<br>o.НазначитьВид(o5.Элемент, "Материалы")<br>работать не будет, тем более, что НазначитьВид - не является методом объекта V77.Application, как бы, по хорошему тут надо применять:<br>o.EvalExpr("НазначитьВид(??????,""""Материалы"""")")<br>но у нас не получится кинуть указатель на o5.Элемент через EvalExpr, поэтому предлагаю такой вариант:<br>в глобальном модуле конфигурации 1С-а сделать:<br>Функция глСоздатьЭлементРасходов(КодВладельца, ДатаУстановкиЗначений, Наименование, КодЭлемента, Норма, КолПрод, ВидЭлемента) Экспорт<br> СозданныйЭлемент=ПолучитьПустоеЗначение();<br> Номенклатура=СоздатьОбъект("Справочник.Номенклатура");<br> Если Номенклатура.НайтиПоКоду(КодВладельца)=1 Тогда<br> НормыРасходов=СоздатьОбъект("Справочник.НормыРасходов");<br> НормыРасходов.ИспользоватьВладельца(Номенклатура.ТекущийЭлемент());<br> НормыРасходов.Новый();<br> НормыРасходов.Наименование=Наименование;<br> НормыРасходов.ВидЭлемента=ВидЭлемента;<br> НужныйСправочник=СоздатьОбъект("Справочник."+?(ВидЭлемента=1,"Материалы","Номенклатура"));<br> Если НужныйСправочник.НайтиПоКоду(КодЭлемента)=1 Тогда<br> НазначитьВид(НормыРасходов.Элемент, НужныйСправочник.Вид());<br> НормыРасходов.Элемент=НужныйСправочник.ТекущийЭлемент();<br> НормыРасходов.Записать();<br> НормыРасходов.Норма.Установить(Дата(ДатаУстановкиЗначений),Норма);<br> НормыРасходов.КолПрод.Установить(Дата(ДатаУстановкиЗначений),КолПрод);<br> СозданныйЭлемент=НормыРасходов.ТекущийЭлемент();<br> КонецЕсли;<br> КонецЕсли;<br> Возврат(СозданныйЭлемент);<br>КонецФункции<br><br>и ваш модуль в .Net переделать так:<br>Dim o, o2, o4, o5 As Object<br> Dim spr2 As String = "тест"<br> o = CreateObject("V77.Application")<br> o.Initialize("16440", "/DC:\1C_basa_UPP", " ")<br><br> o2 = o.CreateObject("Справочник.Материалы")<br> If o2.ВыбратьЭлементы > 0 Then<br>       While o2.ПолучитьЭлемент > 0<br>            If o2.ЭтоГруппа < 1 Then<br>             Exit While<br>            End If<br>       End While<br> End If<br> 'Сейчас в о2.ТекущийЭлемент материал который нужно завести в справочник НормыРасходов<br> o5 = o.CreateObject("Справочник.НормыРасходов")<br> o4 = o.CreateObject("Справочник.Номенклатура")<br> If o4.ВыбратьЭлементы > 0 Then<br>       While o4.ПолучитьЭлемент > 0<br>            If o4.ЭтоГруппа < 1 Then<br>             o5 = o.EvalExpr("глСоздатьЭлементРасходов(""""" & o4.Код & """"",""""01.01.1980"""",""""" & spr2 & """"",""""" & o2.Код & """"",13,1,1)")<br>            End If<br>       End While<br> End If<br> o5 = 0<br> o4 = 0<br> o2 = 0<br> o = 0<br><br><br>Маленькое замечание.<br>У вас странный алгоритм. Если выкинуть обрамление получится:<br>НормыРасходов = СоздатьОбъект("Справочник.НормыРасходов");<br>НормыРасходов.ВыбратьЭлементы();<br>Пока НормыРасходов.ПолучитьЭлемент()=1 Цикл<br> НормыРасходов.Новый();<br> ...<br>КонецЦикла;<br><br>то есть, у вас внутри выборки создается новый элемент, принадлежащий выборке, при этом выборка поведет себя непонятно как. Это ненормально"

Serg_aa
читатель
офлайн
Дата регистрации: 27.01.2008
Сообщений: 5
Пост №7
 
31.01.2008 22:10

1)"я поглядел... через OLE в v77..." -если не секрет где поглядели?<br>2)Это не алгоритм это проба (здесь я пытаюсь получить от 1С то что мне нужно для написания проги)в релизе будет все нормально и имена переменных и функции.<br><br>Завтра попробую ваш вариант(думаю он единственный в данной ситуации).

Serg_aa
читатель
офлайн
Дата регистрации: 27.01.2008
Сообщений: 5
Пост №8
 
03.02.2008 23:40

Все прекрасно работает.Thorvardr огромное спасибо Вы мне очень помогли без Ваших советов у меня ничего бы не получилось (я уже было на это дело рукой махнул).Теперь я уже точно напишу программу в срок до 8 марта как хочет начальство.

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация