Имя: Пароль:
1C
1С v8
Блуждание 1с или Функции
0 karpos
 
11.02.14
11:37
Всем привет может кому то покажется что я что то покурил а может мне кажется.

Вопрос такой теоретически возможно сделать две процедуры чтоб в одной заполнилась табличная часть. А во второй документ создавался и записывался.?????
1 Ненавижу 1С
 
гуру
11.02.14
11:38
ну абстрактно, сферически в вакууме, по-конски, можно
2 Wobland
 
11.02.14
11:39
так тебе кажется, что ты покурил, или нет?
3 karpos
 
11.02.14
11:40
я не курил, серьезно?
4 Godofsin
 
11.02.14
11:40
(0) ну а чо не то? и курить немного даже надо...
5 Godofsin
 
11.02.14
11:40
не_много
6 qeos
 
11.02.14
11:40
чочо?
7 Wobland
 
11.02.14
11:40
(3) синтетическое что-то?
8 jsmith
 
11.02.14
11:41
честно, по существу, без иронии - нет
но если заменить "табличную часть" на "таблица значений" и передавать её во вторую процедуру - то да
9 rbcvg
 
11.02.14
11:42
"в одной заполнилась табличная часть. А во второй документ создавался и записывался.?????" - именно в такой последовательности?
10 Godofsin
 
11.02.14
11:42
Видимо, все по-разному поняли вопрос... ТС, ну отсыпь у же нам, мы на твою волну перестроимся
11 Ненавижу 1С
 
гуру
11.02.14
11:43
(8) почему нельзя то?
вызываем вторую: она создает объект, передаем объект второй, она заполняет ТЧ, записываем
12 Wobland
 
11.02.14
11:43
(10) а выводить нас кто будет?
13 Godofsin
 
11.02.14
11:43
(12) Оно само проходит, поверь мне ))))
14 AaNnDdRrEeYy
 
11.02.14
11:44
типо такого?

Процедура СоздатьДок()
Док = Документы.Реализация.СоздатьДокумент();
  
ЗаполнитьТЧ(Док);
КонецПроцедуры

Процедура ЗаполнитьТч(Док)
  НоваяСтрока = Док.Товары.Добавить();
КонецПроцедуры
15 Wobland
 
11.02.14
11:44
(13) чо-та я очкую, Славик ©
16 karpos
 
11.02.14
11:46
AaNnDdRrEeYy, да да да врое подойдет
17 karpos
 
11.02.14
11:47
так погоди пять сек не рано ли радоваться
18 Godofsin
 
11.02.14
11:47
(16) Скуууччноооо... Я думал, чонить позаковырестей...
19 ICWiner
 
11.02.14
11:47
Мои глаза... ТС, пунктуацию учи...
20 Godofsin
 
11.02.14
11:48
(15) Не очкуй, я сто раз так делал! (с)
21 ICWiner
 
11.02.14
11:48
(16) Заковыристость - разобрать этот поток сознания. Загвоздка именно в этом. А если он еще и думает так же...
22 AaNnDdRrEeYy
 
11.02.14
11:56
(0) как этот вопрос к 1С относится? это самые основы программирования, передача параметра.
23 karpos
 
11.02.14
12:04
ну AaNnDdRrEeYy, програмирование на 1с же.
24 karpos
 
11.02.14
12:05
я знаю как писать процедуры и функций но когда задача посложнее путаюсь
25 Wobland
 
11.02.14
12:06
(24) та же проблема, но с алкоголем. после второго литра не могу программить
26 karpos
 
11.02.14
12:07
ахх

Процедура СоздатьДокумент()
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ЗаполнитьТабличнуюЧасть(НовыйДокумент);
НовыйДокумент.Записать();

КонецПроцедуры

Процедура  ЗаполнитьТабличнуюЧасть(НовыйДокумент, ТекТовар, ТекКоличество, ТекСуммаОПТ)
  Товар = НовыйДокумент.Товары.Добавить();
  ТекНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ТекТовар));
        Если ПустаяСтрока(ТекНоменклатура) = Ложь Тогда
            Товары.Номенклатура = ТекНоменклатура;
            Товары.ЕдиницаИзмерения = ТекНоменклатура.ЕдиницаХраненияОстатков;
            Товары.Склад = Склад;
            Товары.Количество = ТекКоличество;
            Товары.Цена = ТекСуммаОПТ;
        //Иначе    
        КонецЕсли;
КонецПроцедуры
27 karpos
 
11.02.14
12:11
мда блин чего хочу сам не знаю, не укладывается в голове.
28 karpos
 
11.02.14
12:12
я хотел в процедуре туда предавать параметры табличной части и заполнять ее., я потом в друой процедуре что то типа того

Процедура СоздатьДокумент()
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ЗаполнитьТабличнуюЧасть(НовыйДокумент);
НовыйДокумент.Записать();

КонецПроцедуры
29 karpos
 
11.02.14
12:14
только получает процедура заполнения табличной части будет вызвоана один раз, раз она находится в процедуре создания и записи документа вообщем туда передадутся только крайние значения.
30 1Сергей
 
11.02.14
12:15
(29) отдышись и спокойно объясни чего тебе нужно
31 Wobland
 
11.02.14
12:16
(30) это он у нас хочет узнать
32 rbcvg
 
11.02.14
12:16
(29) хотя б намекни почему нельзя сначала создать док,а потом его заполнить?!
33 karpos
 
11.02.14
12:17
Блин ребета бы такие клевые!!! честно столько раз помогали
34 MSII
 
11.02.14
12:19
(33) >Блин ребета бы такие клевые!!! честно столько раз помогали
Дай угадаю... Ничего ты не курил. Это экстази, да?
35 karpos
 
11.02.14
12:21
У меня есть проблема все что я делаю думаю что награжденно и не правильно поэтому всегда куда то тыкаюсь. Задача такая и в голове есть почти ее решение. Есть xml файл надо взять от туда данные и создать документ либо поступление товаров и услуг, либо поступление товаров и услуг Нтт.
36 karpos
 
11.02.14
12:22
вот что будет делать по нажатию кпоки загрузить файл
Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ПутьКФайлу);
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ИмяУзла = Чтение.Имя;
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            Если  ИмяУзла = "Грузополучатель" Тогда
                Сообщить(Чтение.Значение);
                ТекГрузополучатель = Чтение.Значение;
            КонецЕсли;
            
            Если  ИмяУзла = "Товар" Тогда
                Сообщить(Чтение.Значение);
                ТекТовар = Чтение.Значение;
            КонецЕсли;    

            Если  ИмяУзла = "Количество" Тогда
                Сообщить(Чтение.Значение);
                ТекКоличество = Чтение.Значение;
            КонецЕсли;    

            Если  ИмяУзла = "СуммаОпт" Тогда
                Сообщить(Чтение.Значение);
                ТекСуммаОпт = Чтение.Значение;
            КонецЕсли;
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Если ИмяУзла = "ТоварнаяПозиция"  Тогда
                  //Вызываеем процедуру
                  Если ТекГрузополучатель = "Основной склад" Тогда
                      
                  Иначе
                      
                  КонецЕсли;      
            КонецЕсли;

            Если ИмяУзла = "Документ"  Тогда
                КонецДокумента = Истина;
            КонецЕсли;


        КонецЕсли;
    КонецЦикла;
37 karpos
 
11.02.14
12:28
будут две процедуру как задумывал(пока не решил спросить, можно ли в одной процедуре заполнить тб часть, в другой создать и записать документ)
Одна будет создавать ПоступлениеТоавроИУслуг другая ПоступлениеТоавроИУслугНтт

вот первая

Процедура ПоступлениеТоваровИУслуг(ТекТовар, ТекКоличество, ТекСуммаОПТ, КонецДокумента)
    
    Если КонецДокумента = Ложь Тогда    
        НовыйДокумент =  Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        НовыйДокумент.Дата = ТекущаяДата();
        НовыйДокумент.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
        НовыйДокумент.Организация = Организация;
        НовыйДокумент.Контрагент = Контрагент;
        НовыйДокумент.ДоговорКонтрагента = Договор;
        НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;
        Товары = НовыйДокумент.Товары.Добавить();
    
        ТекНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ТекТовар));
        Если ПустаяСтрока(ТекНоменклатура) = Ложь Тогда
            Товары.Номенклатура = ТекНоменклатура;
            Товары.ЕдиницаИзмерения = ТекНоменклатура.ЕдиницаХраненияОстатков;
            Товары.Склад = Склад;
            Товары.Количество = ТекКоличество;
            Товары.Цена = ТекСуммаОПТ;
        //Иначе    
        КонецЕсли;
        //Если КонецДокумента = Истина Тогда
        //    НовыйДокумент.Записать();
        //    КонецДокумента = Ложь;
        //    //НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
        //КонецЕсли;
        
    КонецПроцедуры
38 karpos
 
11.02.14
12:28
стоп не глядите
39 Junior1s
 
11.02.14
12:28
за тобой уже выехали.
40 karpos
 
11.02.14
12:29
Процедура ПоступлениеТоваровИУслуг(ТекТовар, ТекКоличество, ТекСуммаОПТ, КонецДокумента)
    
        НовыйДокумент =  Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        НовыйДокумент.Дата = ТекущаяДата();
        НовыйДокумент.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
        НовыйДокумент.Организация = Организация;
        НовыйДокумент.Контрагент = Контрагент;
        НовыйДокумент.ДоговорКонтрагента = Договор;
        НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;
        Товары = НовыйДокумент.Товары.Добавить();
    
        ТекНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ТекТовар));
        Если ПустаяСтрока(ТекНоменклатура) = Ложь Тогда
            Товары.Номенклатура = ТекНоменклатура;
            Товары.ЕдиницаИзмерения = ТекНоменклатура.ЕдиницаХраненияОстатков;
            Товары.Склад = Склад;
            Товары.Количество = ТекКоличество;
            Товары.Цена = ТекСуммаОПТ;
        //Иначе    
        КонецЕсли;
        Если КонецДокумента = Истина Тогда
            НовыйДокумент.Записать();
            КонецДокумента = Ложь;
            //НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
        КонецЕсли;
        
    КонецПроцедуры
41 karpos
 
11.02.14
12:31
я просто дружелюбный я на работе, не курю и экстези не принимаю. А вот г* кодить могу легко.
42 ICWiner
 
11.02.14
12:34
Что может быть приятней, чем коллега - дружелюбный oвнокодeр :)
43 1Сергей
 
11.02.14
12:35
(42) :)))))))))))))))))))))
44 Godofsin
 
11.02.14
12:36
ПустаяСтрока(ТекНоменклатура) = Ложь - это 5!
45 Wobland
 
11.02.14
12:37
(41) не, это не алкоголь. пейота?
46 karpos
 
11.02.14
12:39
и туп проблема в принце решаемая Процедура будет вызываться каждый раз когда увидела конец секций товарной позиций, он создает документ и начинает заполнять его а по передаче параметра КонецДокумента Записывает его.

И вот проблема что каждый раз когда новая позиция товара он будет создавать новый документ а не добавлять в старый, надо определить начало документа.
47 karpos
 
11.02.14
12:42
Поэтому я и хотел заполнить табличную часть отдельно, не создавая массивы не перегоняя данные туда сюда. а потом вроде как, создать документ и записать.
48 Godofsin
 
11.02.14
12:42
(46) Формируй таблицу товара отдельно, через ТЗ, с названиями колонок как у ТЧ документа, Затем:
НовыйДокумент.Товары.Загрузить(ТвояТЗСТоваром);
49 karpos
 
11.02.14
12:43
если кто смотри на мой код и думаю вот оторвать бы ему руки, закройте вкладку браузера если кто хочет помочь, укажите где я  не так думаю
50 Godofsin
 
11.02.14
12:44
(49) Ну вот еще! из-за тебя браузер закрывать ))))
51 karpos
 
11.02.14
12:44
чтот такое ТЗ??? не сооображу
52 Godofsin
 
11.02.14
12:44
Таблица значений
53 Wobland
 
11.02.14
12:44
(49) к счастью, твой код сворачивается
54 catena
 
11.02.14
12:45
(51)ТекстЗапроса... ТемноЗеленый... ТихийЗайка...
55 karpos
 
11.02.14
12:46
Godofsin , "ПустаяСтрока(ТекНоменклатура) = Ложь - это 5!"
ты тут серьезно или шутишь просто мне нужно проверять есть данная номенклатура в базе
56 Wobland
 
11.02.14
12:53
тёмно-зелёный тихий заяц
запрос писал, не видя смысла.
сгруппировать+сумма(яиц) -
система наглухо повисла.
57 catena
 
11.02.14
12:56
(56)Не, это не трава и не экстази. Это что-то заразное.
58 Godofsin
 
11.02.14
12:56
(55) Да не, норм. просто я не догадался так проверять )))
59 Godofsin
 
11.02.14
12:57
+(58) но такой метод работать должен, лень проверять
60 Wobland
 
11.02.14
12:57
Результат функции, возвращающей логическое значение, не следует проверять путем сравнения с логической константой.
Правильно:

Копировать в буфер обмена
Если ЭтоНовый() Тогда

Неправильно:

Копировать в буфер обмена
Если ЭтоНовый() = Истина Тогда
©ИТС
61 AaNnDdRrEeYy
 
11.02.14
12:58
(46)>>И вот проблема что каждый раз когда новая позиция товара он будет создавать новый документ а не добавлять в старый, надо определить начало документа.


СоздатьДокумент()
из цикла вытащи
62 Godofsin
 
11.02.14
12:58
(60) Кстати да
63 Wobland
 
11.02.14
12:58
(59) если основное представление по коду с длиной кода 0 (а так можно?) или же дело в 8.3, где можно рисовать своё представление, то не взлетит
64 AaNnDdRrEeYy
 
11.02.14
12:59
(60) бывают самописные кривые функции которые могут возвратить и Неопределено, тогда стоит проверить на = Истина
65 Wobland
 
11.02.14
12:59
(64) наверняка в стандартах разработки где-то об этом сказано
66 AaNnDdRrEeYy
 
11.02.14
13:00
(65) я кода пишу Если ЧтотоТам() = Истина Тогда
обязательно коммент пишу
//Эта функция может возвращать неопределено
что бы потом не ржали когда мой код читать будут и нуба не держали
67 Wobland
 
11.02.14
13:02
(66) ну не наю.. нормальная булевская функция не возвращает хрень
68 Ненавижу 1С
 
гуру
11.02.14
13:05
(66) не надо писать уебанские функции и все будет хорошо
69 AaNnDdRrEeYy
 
11.02.14
13:09
(68) они типовые мля.....
70 Серго62
 
11.02.14
13:18
(69) Пример можно?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн