Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Виктя
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 42
#1

Объяснение кода

28.09.2016, 13:54. Просмотров 526. Ответов 9
Метки нет (Все метки)

Объясните что делает функция
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Функция СуществуютСсылкиНоменклатура(СуществуютСсылки, Ссылка) Экспорт
 
    Если ОбщегоНазначения.ЗначениеНеЗаполнено(Ссылка) Тогда
        Возврат Ложь;
    ИначеЕсли СуществуютСсылки <> Неопределено Тогда
        Возврат СуществуютСсылки; // уже было рассчитано
    КонецЕсли;
    
    Запрос = Новый Запрос();
 
    Запрос.УстановитьПараметр("ТекущийВладелец", Ссылка);
 
    ТипНоменклатура = ТипЗнч(Справочники.Номенклатура.ПустаяСсылка());
 
    Запрос.Текст = "";
 
    Для Каждого РегистрНакопления Из Метаданные.РегистрыНакопления Цикл
        Для Каждого РеквизитРегистра Из РегистрНакопления.Измерения Цикл
            Если РеквизитРегистра.Тип.СодержитТип(ТипНоменклатура) Тогда
                Если Запрос.Текст <> "" Тогда
                    Запрос.Текст = Запрос.Текст + "
                    |ОБЪЕДИНИТЬ ВСЕ
                    |";
                КонецЕсли;
                Запрос.Текст = Запрос.Текст + "
                |ВЫБРАТЬ ПЕРВЫЕ 1
                |   РегистрНакопления."+РегистрНакопления.Имя+"."+РеквизитРегистра.Имя+" КАК Номенклатура
                |ГДЕ
                |   "+РеквизитРегистра.Имя+" = &ТекущийВладелец
                |";
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    СуществуютСсылки = НЕ Запрос.Выполнить().Пустой();
 
    Возврат СуществуютСсылки;
 
КонецФункции //  СуществуютСсылки()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2016, 13:54
Ответы с готовыми решениями:

Напишите, пожалуйста объяснение к каждой строчке кода. Если можно, и объяснение некоторых функций
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; void random(int * a, int size) { ...

Объяснение кода
Не мог бы кто нибудь объяснить этот код - не понимаю как он работает? Sub...

Объяснение кода
Объясните,пожалуйста, как работает программа. #include&lt;stdio.h&gt;...

Объяснение кода
завтра сдавать курсач. есть исходник, но проблема в том что я не понимаю...

Объяснение кода
Что обозначает данная строка: .stack 4096?

9
GreenkA
(◉‿◉)
Эксперт 1С
1965 / 1518 / 474
Регистрация: 25.06.2009
Сообщений: 5,440
28.09.2016, 15:16 #2
Виктя, проверяет наличие движений в регистрах накопления по заданной номенклатуре (передаваемый параметр - Ссылка).
0
Виктя
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 42
28.09.2016, 15:18  [ТС] #3
и я так понимаю, что возвращает булево значение
так?
0
GreenkA
(◉‿◉)
Эксперт 1С
1965 / 1518 / 474
Регистрация: 25.06.2009
Сообщений: 5,440
28.09.2016, 15:20 #4
Виктя, да, Истина/Ложь.
0
Виктя
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 42
28.09.2016, 15:29  [ТС] #5
хорошо
а для чего вообще такая проверка нужна?
Это процедура выполняется очень долго, тем самым увеличивая время ожидания при добавлении элемента в справочник
0
GreenkA
(◉‿◉)
Эксперт 1С
1965 / 1518 / 474
Регистрация: 25.06.2009
Сообщений: 5,440
28.09.2016, 15:32 #6
Виктя, а откуда вызывается эта функция? Какая у вас конфигурация?
Долго - потому что проходится по всем имеющимся регистрам накопления, у которых в измерениях есть тип - СправочникСсылка.Номенклатура.
0
Виктя
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 42
28.09.2016, 15:43  [ТС] #7
есть справочник Номенклатуры
Я внесла туда коррективы (2 функции)

и стало дольше выполняться добавление нового элемента

по стеку вызовов показано что вышеуказанная процедура вызывается отсюда

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Процедура ПередЗаписью(Отказ)
    Если Не ЭтоНовый() И (Родитель <> Ссылка.Родитель) Тогда        
        ПроверкаНаДублирование(Отказ);
    КонецЕсли;
 
    // Бубневич О.В.
    // Доработано для нумерации кодов справочника при загрузке остатков номенклатуры.
    ЭтоЗагрузка = ОбменДанными.Загрузка;
    
    // 12.09.2013 Капустин
    Если КоличествоСимволовДляАртикула > 0 Тогда
        Артикул = СокрЛП(Артикул);
        Пока СтрДлина(Артикул) < КоличествоСимволовДляАртикула Цикл
            Артикул = " " + Артикул;
        КонецЦикла;
    КонецЕсли;
    
    Если НЕ ОбменДанными.Загрузка И НЕ ЭтоГруппа Тогда
        // --- Начало изменения -------------------------------------------------------
        // [Автор: Алексей Петухов]
        // [Дата : 29 ноября 2007 г.]
        Если Не Услуга И ОбщегоНазначения.ЗначениеНеЗаполнено(ВидВоспроизводства) Тогда
            ВидВоспроизводства = Перечисления.ВидыВоспроизводстваНоменклатуры.Закупка;
        КонецЕсли;
        // --- Конец изменения --------------------------------------------------------
        
        Если Не Услуга И ОбщегоНазначения.ЗначениеНеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
            ОбщегоНазначения.СообщитьПользователюНезаполненРеквизит(Ссылка, "базовая единица");
            Отказ = Истина;
        Иначе
            // Надо проверить владельца единицы хранения остатков
            Если Не ОбщегоНазначения.ЗначениеНеЗаполнено(ЕдиницаХраненияОстатков)
               И ЕдиницаХраненияОстатков.Владелец <> Ссылка Тогда
                ТекстСообщения = "У единицы хранения остатков номенклатуры """ + СокрЛП(Ссылка) + """ неверно указан владелец!";
                ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
            КонецЕсли;
        КонецЕсли;
 
        Если ОбщегоНазначения.ЗначениеНеЗаполнено(ЕдиницаДляОтчетов) Тогда
            ЕдиницаДляОтчетов = ЕдиницаХраненияОстатков;
        КонецЕсли;
 
        // Надо проверить владельца единицы для отчетов
        Если Не ОбщегоНазначения.ЗначениеНеЗаполнено(ЕдиницаДляОтчетов)
           И ЕдиницаДляОтчетов.Владелец <> Ссылка Тогда
            ТекстСообщения = "У единицы для отчетов номенклатуры """ + СокрЛП(Ссылка) + """ неверно указан владелец!";
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
        КонецЕсли;
        
        СуществуютСсылки = Неопределено;
        
        Если Не Услуга И Ссылка.ЕдиницаХраненияОстатков <> ЕдиницаХраненияОстатков И ПолныеПрава.СуществуютСсылкиНоменклатура(СуществуютСсылки, Ссылка) Тогда
            сообщить("1");
            ТекстСообщения = "Единица """ + СокрЛП(Ссылка.ЕдиницаХраненияОстатков) + """ является единицей хранения остатков для """ + Наименование + """
            |и уже участвует в товародвижении. 
            |Изменить эту единицу уже нельзя!";
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
        КонецЕсли;
        
        Если Услуга <> Ссылка.Услуга И ПолныеПрава.СуществуютСсылкиНоменклатура(СуществуютСсылки, Ссылка)Тогда
            сообщить("2");
            ТекстСообщения = "Номенклатура """ + СокрЛП(Ссылка) + """ участвует в товародвижении.
            |Признак услуги не может быть изменен!";
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
        КонецЕсли;
        
        Если Не ВестиУчетПоСериям И Ссылка.ВестиУчетПоСериям И ПолныеПрава.СуществуютСсылкиНаСерииНоменклатурыВРегистрахНакопления(Ссылка) Тогда
            ТекстСообщения = "Номенклатура """ + СокрЛП(Ссылка) + """ участвует в товародвижении.
            |Признак учета по сериям не может быть изменен!";
            ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
        КонецЕсли;
        
        Если ОбщегоНазначения.ЗначениеНеЗаполнено(ВидНоменклатуры) Тогда
            ОбщегоНазначения.СообщитьПользователюНезаполненРеквизит(Ссылка, "вид номенклатуры");
            Отказ = Истина;
        КонецЕсли;
        
    КонецЕсли;
    
    // --- Начало изменения -------------------------------------------------------
    // [Автор: Алексей Петухов]
    // [Дата : 5 ноября 2009 г.]
    // [Тэг  : Разграничение доступа]
    Если Не ОбменДанными.Загрузка И ЭтоГруппа Тогда
        ПрошлыйИзмененныйРодительОбъектаДоступа = ?(Не ЭтоНовый() И Не Ссылка.Родитель = Родитель, Ссылка.Родитель, Неопределено);
        НастройкаПравДоступа.ПередЗаписьюНовогоОбъектаСПравамиДоступаПользователей(ЭтотОбъект, Отказ, Родитель);
    КонецЕсли;
    // --- Конец изменения --------------------------------------------------------
    
    // Бубневич О.В.
    // Доработано для нумерации кодов справочника при загрузке остатков номенклатуры.
    ОбменДанными.Загрузка = Ложь;   
 
КонецПроцедуры // ПередЗаписью()
0
Tklwegsd
Эксперт 1С
689 / 499 / 170
Регистрация: 24.07.2013
Сообщений: 1,764
28.09.2016, 20:40 #8
Цитата Сообщение от Виктя Посмотреть сообщение
Я внесла туда коррективы (2 функции)
Что конкретно исправили? И насколько дольше стало работать?

В приципе, сама функция слишком тормозить не должна. Запрос разом выбирает первое попавшееся движение.
Только в Вашем коде она вызывается три раза.
0
Виктя
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 42
29.09.2016, 08:35  [ТС] #9
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Процедура ПроверкаНаДублирование(Отказ) Экспорт 
    переменная = Строка(Артикул) + " " + НаименованиеПолное;
        Запрос = Новый Запрос;
        Запрос.Текст =  "ВЫБРАТЬ
                        |   Номенклатура.Артикул + "" "" + (ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(100))) КАК Поле1
                        |ИЗ
                        |   Справочник.Номенклатура КАК Номенклатура
                        |ГДЕ
                        |   Номенклатура.Родитель = &Группа
                        |   И Номенклатура.ЭтоГруппа = Ложь";
        Запрос.УстановитьПараметр("Группа", Родитель);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
        переменная = УбратьЛишниеСимволы(переменная);
    
        Пока Выборка.Следующий() Цикл
            стр = УбратьЛишниеСимволы(Выборка.Поле1);
            Если переменная = стр Тогда 
                Сообщить("Элемент с таким артикулом уже существует");
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
КонецПроцедуры
 
 
Функция УбратьЛишниеСимволы(Строка1) Экспорт  
    НовСтрока = "";
    ПравильныеСимволы = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю1234567890";
    Для Сч = 1 по СтрДлина(Строка1) Цикл
        ТекСимв = Сред(Строка1, Сч, 1);
        Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда    
            НовСтрока = НовСтрока + ТекСимв;            
        КонецЕсли;      
    КонецЦикла;
    Возврат НовСтрока;
КонецФункции;
это две функции
модуль объекта (справочник Номенклатура)

время увеличилась на 3-4 секунды
но бывает и больше выполняется
раз на раз не приходится
0
Dethmontt
Модератор
Эксперт 1С
2616 / 2416 / 407
Регистрация: 10.03.2011
Сообщений: 8,594
Записей в блоге: 1
Завершенные тесты: 1
30.09.2016, 02:25 #10
Цитата Сообщение от Tklwegsd Посмотреть сообщение
Только в Вашем коде она вызывается три раза.
1 раз

Добавлено через 6 минут
Виктя, для каждой проверяемой номенклатуры цикл минимум в сто одна итерация

Цитата Сообщение от Виктя Посмотреть сообщение
Номенклатура.Артикул + "" "" + (ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(100))) КАК Поле1
СТРОКА(100)

Цитата Сообщение от Виктя Посмотреть сообщение
Для Сч = 1 по СтрДлина(Строка1) Цикл
0
30.09.2016, 02:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 02:25

Объяснение кода
Что в это строке означает #13? if symbol &lt;&gt; #13 then

Объяснение кода
program p161; var A, max1, max2, max3, i, W, C, F: integer; Q: array ...

Объяснение кода js
Недавно начал изучать html. Все понятно, но когда столкнулся с кодом на js,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru