Ошибка при выполнении обработчика обработка проведения

Добрый день!
После обновления программы (Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.23.165) ) перестали проводится документы Начисление зарплаты и взносов.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
Значение индекса выходит за границы диапазона
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(5222)}: Начисления.Удалить(ИсключаемаяСтрока);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(3405)}: РаспределитьВТНачисленияПоБазе(МенеджерВременныхТаблиц, Регистратор, ИсключатьВПериодКомандировок);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(3009)}: ЗарегистрироватьНачисленияДляРасчетаОбщегоСреднегоЗаработка(Движения, Отказ, МенеджерВременныхТаблиц, ИсключатьВПериодКомандировок, ЗаписыватьДвижения);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(237)}: ЗарегистрироватьДанныеОбщегоСреднегоЗаработка(Движения, Отказ, МенеджерВременныхТаблиц, ЗаписыватьДвижения);
{Документ.НачислениеЗарплаты.МодульМенеджера(265)}: УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(Движения, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка);
{Документ.НачислениеЗарплаты.МодульОбъекта(124)}: Документы.НачислениеЗарплаты.ПровестиПоУчетам(Ссылка, РежимПроведения, Отказ, Неопределено, Движения, ЭтотОбъект, ДополнительныеСвойства);

по причине:
Значение индекса выходит за границы диапазона

В чем может быть причина?

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

Столкнулись с такой проблемой при проведении ЗП в бухгалтерии.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.УчетНДФЛ.Модуль(1569)}: Ошибка при вызове метода контекста (Записать)
Движения.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Записать();
по причине:
Запись не верна! Значение поля «Дата получения дохода» не может быть пустым! (Регистр накопления: Расчеты налогоплательщиков с бюджетом по НДФЛ; Номер строки: 1)

Решение: нужно перепровести начисления за предыдущие месяцы. Как мы поняли это просто глюк, 1с не видит проведенные ранее доки.

Загрузка…

Maga20

0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 14

1

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

26.06.2022, 21:03. Показов 1389. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. очень нужна помощь в 1с.
При проведении начисление сотрудникам выходит ошибка:
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.ПроведениеРасчетов.Модуль(23)}: Ошибка при вызове метода контекста (Выполнить)
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
по причине:
{(2, 5)}: Поле не найдено «НачисленияДанныеГрафика.ЗначениеПериодДействия»
«?»НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,

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
95
96
Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт
 
Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;
 
//Рассчитать первичные записи
Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
 
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = &Регистратор И
| ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))
| КАК НачиленияДанныеГрафика";
 
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
 
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
 
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();
 
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
 
Если ВыборкаРезультата.Норма = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "ВидРасчета: Оклад - Нет рабочих дней в заданном периоде";
Сообщение.Сообщить();
ЗаписьРегистра.Результат = 0;
 
Иначе
 
//Рассчитать оклад фактическому периоду и исходным данным
ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнен расчет" + ЗаписьРегистра.Регистратор + "-" + ЗаписьРегистра.ВидРасчета + "-" + ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
 
КонецЕсли;
 
КонецЕсли;
 
КонецЦикла;
 
//Рассчитать вторичные записи
ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда
 
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияБазаНачисления.РезультатБаза КАК База,
| НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного,
| &ИзмеренияБазового,, Регистратор =
| &Регистратор И ВидРасчета = &ВидРасчета И
| Сотрудник В (&СписокСотрудников))
| КАК НачиленияБазаНачисления";
 
Измер = Новый Массив(1);
Измер[0] = "Сотрудник";
 
Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);
Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
 
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
 
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();
 
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
ЗаписьРегистра.Результат = ВыборкаРезультата.База * (10/100);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнен расчет" + ЗаписьРегистра.Регистратор + "-" + ЗаписьРегистра.ВидРасчета + "-" + ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
 
КонецЕсли;
 
КонецЦикла;
 
 
КонецЕсли;
 
КонецПроцедуры



0



1965 / 1350 / 480

Регистрация: 16.01.2015

Сообщений: 5,853

26.06.2022, 22:31

2

Maga20, В регистре расчета ДанныеГрафика нет поля ЗначениеПериодДействия. Покажи состав регистра



0



0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 14

26.06.2022, 23:35

 [ТС]

3

А как его показать?



0



1231 / 763 / 218

Регистрация: 22.04.2013

Сообщений: 5,589

Записей в блоге: 1

27.06.2022, 05:54

4

Maga20, воттак

Миниатюры

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
 



0



0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 14

27.06.2022, 09:39

 [ТС]

5

вот

Миниатюры

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
 



0



0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 14

27.06.2022, 10:13

 [ТС]

6

ВОТ ЭТО ТОЖЕ

Миниатюры

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
 



0



1231 / 763 / 218

Регистрация: 22.04.2013

Сообщений: 5,589

Записей в блоге: 1

27.06.2022, 10:27

7

Лучший ответ Сообщение было отмечено Maga20 как решение

Решение

Цитата
Сообщение от Maga20
Посмотреть сообщение

«ВЫБРАТЬ
| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма

Цитата
Сообщение от Maga20
Посмотреть сообщение

| КАК НачиленияДанныеГрафика»;

найдите здесь ошибку.



0



1965 / 1350 / 480

Регистрация: 16.01.2015

Сообщений: 5,853

27.06.2022, 15:41

8

Maga20, )))))) ИЗМЕРЕНИЯ покажи и РЕСУРСЫ, чтобы видеть какие поля есть в регистре



0



0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 14

27.06.2022, 20:26

 [ТС]

9

Спасибо



0



Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.РасходнаяНакладная.МодульОбъекта(68)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос2.Выполнить();
по причине:
{(17, 28)}: Поле не найдено «НоменклатураДокумента.Номенклатура»
ПО НоменклатураДокумента.<<?>>Номенклатура = СтоимостьТоваровОстатки.Номенклатура

Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиТоваров.Записывать = Истина;
Движения.СтоимостьТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

//Менеджер временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
«ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,
| СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры»;

Запрос.УстановитьПараметр(«Ссылка», Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст =
«ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.ВидНоменклатуры,
| НоменклатураДокумента.КоличествоВДокументе,
| НоменклатураДокумента.СуммаВДокументе,
| ЕСТЬNULL(СтоимостьТоваровОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК СтоимостьТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = СтоимостьТоваровОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ОстаткиТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиТоваровОстатки.Номенклатура»;

Движения.СтоимостьТоваров.Записать();
Движения.ОстаткиТоваров.Записать();

РезультатЗапроса = Запрос2.Выполнить();

//ТЗ = РезультатЗапроса.Выгрузить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьТоваров = 0;
Иначе
СтоимостьТоваров = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Товар Тогда

Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

Движение = Движения.СтоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

// Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

// Проверить отрицательные остатки
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = «ВЫБРАТЬ
| ОстаткиТоваровОстатки.Номенклатура,
| ОстаткиТоваровОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)
| И Склад = &Склад) КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.КоличествоОстаток < &КоличествоОстаток»;

Запрос3.УстановитьПараметр(«Склад», Склад);

РезультатЗапроса = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «Не хватает » + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + » единиц товара «»» + ВыборкаДетальныеЗаписи.Номенклатура + «»»»;
Сообщение.Сообщить();

Отказ = Истина;

КонецЦикла;

КонецЕсли;

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

Добрый день!
После обновления программы (Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.23.165) ) перестали проводится документы Начисление зарплаты и взносов.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
Значение индекса выходит за границы диапазона
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(5222)}: Начисления.Удалить(ИсключаемаяСтрока);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(3405)}: РаспределитьВТНачисленияПоБазе(МенеджерВременныхТаблиц, Регистратор, ИсключатьВПериодКомандировок);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(3009)}: ЗарегистрироватьНачисленияДляРасчетаОбщегоСреднегоЗаработка(Движения, Отказ, МенеджерВременныхТаблиц, ИсключатьВПериодКомандировок, ЗаписыватьДвижения);
{ОбщийМодуль.УчетСреднегоЗаработка.Модуль(237)}: ЗарегистрироватьДанныеОбщегоСреднегоЗаработка(Движения, Отказ, МенеджерВременныхТаблиц, ЗаписыватьДвижения);
{Документ.НачислениеЗарплаты.МодульМенеджера(265)}: УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(Движения, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка);
{Документ.НачислениеЗарплаты.МодульОбъекта(124)}: Документы.НачислениеЗарплаты.ПровестиПоУчетам(Ссылка, РежимПроведения, Отказ, Неопределено, Движения, ЭтотОбъект, ДополнительныеСвойства);

по причине:
Значение индекса выходит за границы диапазона

В чем может быть причина?

  

zane

13.02.23 — 16:52

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

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

Ошибка при вызове метода контекста (Выполнить)

{Документ.ОказаниеУслуги.МодульОбъекта(38)}:РезультатЗапроса = Запрос.Выполнить();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]

по причине:

{(18, 5)}: Ожидается выражение «ВЫБРАТЬ»

<<?>>ОказаниеУслугиПереченьНоменклатуры.НаборСвойств

Код модуля объекта Оказание услуг:

Процедура ОбработкаПроведения(Отказ, Режим)

    

     Движения.ОстаткиМатериалов.Записывать = Истина;

     Движения.СтоимостьМатериалов.Записывать = Истина;

     Движения.Продажи.Записывать = Истина;

    

     // Создать менеджер временных таблиц

     МенеджерВТ = Новый МенеджерВременныхТаблиц;

     #Область НоменклатураДокумента

     Запрос = Новый Запрос;

     // Укажем, какой менеджер временных таблиц использует этот запрос

     Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

     Запрос.Текст =

          «ВЫБРАТЬ

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры

          |                                                    КАК ВидНоменклатуры,

          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,

          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество)

          |                                                    КАК КоличествоВДокументе,

          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

          |ПОМЕСТИТЬ НоменклатураДокумента

          |ИЗ

          |    Документ.ОказаниеУслуги.ПереченьНоменклатуры

          |                                          КАК ОказаниеУслугиПереченьНоменклатуры

          |ГДЕ

          |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

          |СГРУППИРОВАТЬ ПО

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры;

          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»;

     Запрос.УстановитьПараметр(«Ссылка», Ссылка);

     РезультатЗапроса = Запрос.Выполнить();

     #КонецОбласти

     #Область ДвиженияДокумента

     Запрос2 = Новый Запрос;

     Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

     Запрос2.Текст = «ВЫБРАТЬ

              |  НоменклатураДокумента.Номенклатура,

              |  НоменклатураДокумента.ВидНоменклатуры,

              |  НоменклатураДокумента.НаборСвойств,

              |  НоменклатураДокумента.КоличествоВДокументе,

              |  НоменклатураДокумента.СуммаВДокументе,

              |  ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,

              |  ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество

              |ИЗ

              |  НоменклатураДокумента КАК НоменклатураДокумента

              |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

              |               ,

              |               Материал В

              |                   (ВЫБРАТЬ

              |                        НоменклатураДокумента.Номенклатура

              |                   ИЗ

              |                        НоменклатураДокумента))

              |                             КАК СтоимостьМатериаловОстатки

              |      ПО НоменклатураДокумента.Номенклатура =

              |                                СтоимостьМатериаловОстатки.Материал

              |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

              |               ,

              |               Материал В

              |                    (ВЫБРАТЬ

              |                         НоменклатураДокумента.Номенклатура

              |                    ИЗ

              |                         НоменклатураДокумента))

              |                                   КАК ОстаткиМатериаловОстатки

              |      ПО НоменклатураДокумента.Номенклатура =

              |                                ОстаткиМатериаловОстатки.Материал»;

    // Установим необходимость блокировки данных в регистрах СтоимостьМатериалов

    // и ОстаткиМатериалов

    Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;

    Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

    // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе

    Движения.СтоимостьМатериалов.Записать();

    Движения.ОстаткиМатериалов.Записать();

    РезультатЗапроса = Запрос2.Выполнить();

    // ТЗ = РезультатЗапроса.Выгрузить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

         Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда

               СтоимостьМатериала = 0;

         Иначе

               СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость

                                            / ВыборкаДетальныеЗаписи.Количество;

         КонецЕсли;

                                        

         Если ВыборкаДетальныеЗаписи.ВидНоменклатуры =

                            Перечисления.ВидыНоменклатуры.Материал Тогда

                            

         // Регистр ОстаткиМатериалов Расход

         Движение = Движения.ОстаткиМатериалов.Добавить();

         Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

         Движение.Период = Дата;

         Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

         Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;

         Движение.Склад = Склад;

         Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

      

         // Регистр СтоимостьМатериалов Расход

         Движение = Движения.СтоимостьМатериалов.Добавить();

         Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

         Движение.Период = Дата;

         Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

         Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе

                                                      * СтоимостьМатериала;

    КонецЕсли;

                                                  

    // Регистр Продажи

    Движение = Движения.Продажи.Добавить();

    Движение.Период = Дата;

    Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

    Движение.Клиент = Клиент;

    Движение.Мастер = Мастер;

    Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

    Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

    Движение.Стоимость = СтоимостьМатериала *

                                 ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

                            

Движения.Записать();

#КонецОбласти

#Область КонтрольОстатков

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

      // Проверить отрицательные остатки

      Запрос3 = Новый Запрос;

      Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

      Запрос3.Текст = «ВЫБРАТЬ

               |      ОстаткиМатериаловОстатки.Материал,

               |      ОстаткиМатериаловОстатки.НаборСвойств,

               |      ОстаткиМатериаловОстатки.КоличествоОстаток

               |ИЗ

               |      РегистрНакопления.ОстаткиМатериалов.Остатки( , (Материал, НаборСвойств) В

               |            (ВЫБРАТЬ

               |                 НоменклатураДокумента.Номенклатура,

               |                 НоменклатураДокумента.НаборСвойств

               |            ИЗ

               |                 НоменклатураДокумента) И Склад = &Склад)

               |      КАК ОстаткиМатериаловОстатки

               |ГДЕ

               |      ОстаткиМатериаловОстатки.КоличествоОстаток < 0″;

    
      Запрос3.УстановитьПараметр(«Склад», Склад);

    

      РезультатЗапроса = Запрос3.Выполнить();

      ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    

      Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

           Сообщение = Новый СообщениеПользователю();

           Сообщение.Текст = «Не хватает » + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +

                            » единиц материала «»» + ВыборкаДетальныеЗаписи.Материал + «»»» +

                            » из набора свойств «»» + ВыборкаДетальныеЗаписи.НаборСвойств + «»»»;

           Сообщение.Сообщить();

          

           Отказ = Истина;

      КонецЦикла;

КонецЕсли;

#КонецОбласти

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

  

Fedor-1971

1 — 13.02.23 — 16:58

(0) Тебе написали, что реквизита НаборСвойств там где ты его ищешь нет

Проверь конструктором запроса (сам сделай запрос, а не копируй из учебника)

  

Kassern

2 — 13.02.23 — 17:00

(0) В ТЧ ПереченьНоменклатуры есть у вас реквизит НаборСвойств? Какой тип реквизита?

  

zane

3 — 13.02.23 — 17:05

Есть, тип реквизита СправочникСсылка.ВариантыНоменклатуры

  

Kassern

4 — 13.02.23 — 17:12

(3) В конструктор запроса заходит?

  

zane

5 — 13.02.23 — 17:18

Нет

  

DrLekter

6 — 13.02.23 — 17:21

В 18 строке точка с запятой вместо запятой

  

vicof

7 — 13.02.23 — 17:22

(6) +1

  

zane

8 — 13.02.23 — 17:27

(6) Не помогло

  

Kassern

9 — 13.02.23 — 17:39

(8) Покажите как исправили

  

zane

10 — 13.02.23 — 17:40

(9)  Запрос.Текст =

          «ВЫБРАТЬ

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура;

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры

          |                                                    КАК ВидНоменклатуры,

          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,

          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество)

          |                                                    КАК КоличествоВДокументе,

          |    СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

          |ПОМЕСТИТЬ НоменклатураДокумента

          |ИЗ

          |    Документ.ОказаниеУслуги.ПереченьНоменклатуры

          |                                          КАК ОказаниеУслугиПереченьНоменклатуры

          |ГДЕ

          |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

          |СГРУППИРОВАТЬ ПО

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

          |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры;

          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»;

  

Kassern

11 — 13.02.23 — 17:40

(10) Ну и где вы ; убрали??

|    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры;

          |    ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»;

  

Kassern

12 — 13.02.23 — 17:41

Вам же все разжевали в (6) , и 1ска вам даже ругнулась на 18 строчку в модуле, где ошибка. Жмякаете Ctrl+G и вбиваете номер строчки. Будет видно где косяк.

  

OldCondom

13 — 13.02.23 — 17:45

(12) а ты посмотри внимательнее. Неправильно разжевали!)) ТС все сделал согласно инструкции: в 18 строке МОДУЛЯ поменял запятую на точку с запятой.

  

zane

14 — 13.02.23 — 17:48

Помогло, спасибо. (12) я не знал, что 18 строка это имеется ввиду строка запроса

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’: Поле объекта не обнаружено (Выручка)

Автор Alexandroid, 21 мар 2023, 21:25

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

Доброго времени суток. Изучаю сейчас курс по программированию 1C. При выполнении домашнего задания наткнулся на ошибку (хотя проверку на синтаксис ошибок написанный код проходит). Проблема именно во время отладки (запуска) конфигурации при попытке провести торговые документы Реализации товаров появляется данная ошибка. Когда писали этот курс всё проходило без проблем, но сейчас, когда платформа обновлялась с годами, видимо правило (метод) написания изменился, сам не пойму в чём дело. Уже пытался искать ответ по интернету и поиску форума, не нашёл.
1С:Предприятие 8.3, учебная версия (8.3.22.1709).

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ОстаткиТоваров Расход
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Выручка = ТекСтрокаТовары.Сумма;
КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
| ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура КАК Номенклатура
| ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ = Истина;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Сообщить("В документе "+Ссылка+" образовались отрицательные остатки");

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("По номенклатуре "+ВыборкаДетальныеЗаписи.Номенклатура+" остаток "+ВыборкаДетальныеЗаписи.Количество);
КонецЦикла;

КонецЕсли;

КонецЕсли;

Если Отказ Тогда
Возврат;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
| ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество,
| ОстаткиТоваровОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура КАК Номенклатура
| ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки";

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Для каждого Движение Из Движения.ОстаткиТоваров Цикл

Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда

Движение.Сумма = Движение.Количество * ВыборкаДетальныеЗаписи.Сумма/ВыборкаДетальныеЗаписи.Количество;

ДвижениеПродажи = Движения.Продажи.Добавить();
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ДвижениеПродажи.Контрагент = Контрагент;
ДвижениеПродажи.Сумма = Движение.Выручка;
ДвижениеПродажи.Себестоимость = Движение.Сумма;
ДвижениеПродажи.Количество = Движение.Количество;

КонецЕсли;

КонецЦикла;

КонецЦикла;


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


Реквизит Выручка был создан в регистре накопления Продажи. Я прикреплю файл с Информационной базой, надеюсь это не нарушает правил форума.

С уважением, Александр.



Alexandroid, Проверь движения реализации по регистру «ОстаткиТоваров», скорее всего там нет реквизита «Выручка».

  • 1 пользователь сказал спасибо!

Rettro, Благодарю за решение, дублирование реквизита помогло решить ошибку (только понять не могу, для чего так было необходимо сделать).
У меня возник вопрос, в регистрах накопления «Продажи» и «ОстаткиТоваров» я создал «ФормыСписка», чтобы в режиме отладки 1С:Предприятие в «функциях для технического специалиста» регистры накопления Продаж и Остатки товаров не отображался реквизит «Выручка» (был скрыт). Можно так делать? И будет ли он учитываться при расчётах выручки в дальнейшем без видимости?


Alexandroid,
1.судя по второму запросу:

Цитата: Alexandroid от 21 мар 2023, 21:25Запрос.Текст = «ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество, | ОстаткиТоваровОстатки.СуммаОстаток КАК Сумма

у регистра ОстаткиТоваров уже есть реквизит для суммы (Сумма)
А значит не надо было добавлять реквизит выручка в этот регистр,а в строке:

Цитата: Alexandroid от 21 мар 2023, 21:25Движение.Выручка = ТекСтрокаТовары.Сумма;

заменить Выручка на Сумма
т.е. Движение.Сумма= ТекСтрокаТовары.Сумма;

2. На созданной форме списка просто удалить не нужные колонки — и они не будут отображаться.
Причем видимость колонки никак не влияет на ее использование при расчетах.


Kvark5d, Изменил как предложили, ошибка тоже пропала. А разве если не писать движение Выручка в таком случае, я не объявляю эту переменную реквизита, что она вообще есть? Посмотрел схему компановки данных отчёта «ЗакупкиТоваров» – Сумма действительно считается реквизитом создаваемой при отчёте.

Я только первый месяц в направлении 1C. Механизмы встроенного языка, языка запросов, языка выражений СКД (определённых условий) — путаюсь ещё в них. Только когда сейчас я начал углубляться в теорию этой платформы (для работы в этом направлении) осознал, что система 1С:Предприятие ничем не уступает другим языкам программирования, по своему хороша и познавательна.


Alexandroid, Вот эти два предложения вообще не понятны:

Цитата: Alexandroid от 23 мар 2023, 22:57А разве если не писать движение Выручка в таком случае, я не объявляю эту переменную реквизита, что она вообще есть?

«Движение.Выручка» это в контексте попытка обратиться к измерению (ресурсу) Выручка регистра Остатки. Но у регистра его нет. Измерения, ресурсы регистров строго описаны в конфигурации и не могут быть изменены, добавлены, удалены программно. По сути это попытка получить колонку таблицы, которой там нет.

Цитата: Alexandroid от 23 мар 2023, 22:57Посмотрел схему компановки данных отчёта «ЗакупкиТоваров» – Сумма действительно считается реквизитом создаваемой при отчёте.

Отчет ничего не создает, он просто выводит данные.


Теги:

  • Форум База

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Ошибка при выполнении обработчика — ‘ОбработкаПроведения’: Поле объекта не обнаружено (Выручка)

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Не проводится документ. Как решить проблему?

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос2.Выполнить();
по причине:
: Поле не найдено «НоменклатураДокумента.Номенклатура»
ПО НоменклатураДокумента.<<?>>Номенклатура = СтоимостьТоваровОстатки.Номенклатура

Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиТоваров.Записывать = Истина;
Движения.СтоимостьТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

//Менеджер временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
«ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,
| СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры»;

Запрос.УстановитьПараметр(«Ссылка», Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст =
«ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.ВидНоменклатуры,
| НоменклатураДокумента.КоличествоВДокументе,
| НоменклатураДокумента.СуммаВДокументе,
| ЕСТЬNULL(СтоимостьТоваровОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК СтоимостьТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = СтоимостьТоваровОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ОстаткиТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиТоваровОстатки.Номенклатура»;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьТоваров = 0;
Иначе
СтоимостьТоваров = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Товар Тогда

Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

Движение = Движения.СтоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.Количество;

// Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

// Проверить отрицательные остатки
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст ;

РезультатЗапроса = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «Не хватает » + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + » единиц товара «»» + ВыборкаДетальныеЗаписи.Номенклатура + «»»»;
Сообщение.Сообщить();

[ Вопрос дня ] Почему не удается провести документ “Реализация товаров и услуг” с заполненным направлением деятельности в 1С:Комплексная автоматизация 2.4?

Изменения типового функционала линейки конфигураций УТ, КА, ERP иногда вызывает всплеск активности в Мастер-группах. Так, изменения функционала использования направлений деятельности в документах в версиях 1С:УТ 11.4.5, 1С:КА 2.4.5, 1С:ERP 2.4.4, привело к появлению однотипных вопросов в рамках Мастер-группы курса Управленческий учет в типовых конфигурациях 1С (КА 2, УТ 11 и 1C:ERP) – Базовый курс.

Вопрос

Работаю в 1С:Комплексная автоматизация 2 (2.4.11.46). У меня не получается провести документ “Реализация товаров и услуг” с заполненным направлением деятельности без создания заказа покупателя. Система выдает ошибку, что в организации не хватает шкафов, стеллажей и т.п., хотя товар есть и он не в резерве. Если в документе не указывать направление деятельности или делать на основании заказа, то он проводится без проблем. Что я делаю не так, где ошибки в настройках?

Без указания направления деятельности мне по заданию не распределить расходы по амортизации пропорционально выручке.

Ответ

В новых релизах программы изменен функционал использования направлений деятельности в документах. Теперь для того, чтобы выполнить продажу с направлением деятельности (НД) у вас должны быть остатки под это направление деятельности. То есть в документе закупки товара в табличной части (ТЧ) “Товары” в колонке “Назначение” нужно указать направление деятельности (или заказ клиента) под которое выполняется закупка.

Для того, чтобы в документе закупки в ТЧ можно было указать “Назначение”, у вас должна быть включена функциональная опция “Обособленное обеспечение заказов” в разделе “НСИ и администрирование” – “Склад и доставка”.

В поступлении “Назначение” наследуется в аналитику учета по номенклатуре, а “Направление деятельности” (на закладке “Дополнительно”) – в аналитику учета по расчетам с партнерами.

Анна Викулина

Протестируйте качество нашей работы — получите первую консультацию в подарок.

Большинство вопросов на форумах по проблеме «долго проводятся документы», начинаются с перечисления технических характеристик серверов, сетевых параметров и т.д. А поскольку таких вопросов много, а технические характеристики, как правило, более чем солидные, можно сделать вывод, что «железо» здесь не причем. Рассмотрим другие причины долгого проведения документов в 1С.

Работая с одной из первых версий конфигурации УПП, вместе с бухгалтерами, мы ставили эксперимент – засекали время проведения документа «Реализация товаров и услуг». С момента нажатия кнопки до «отвисания» программы проходило больше 40 секунд. Версия программы была серверной, пользователи работали на сервере посредством RDP. Т.е. с технической точки зрения все было нормально. В базе была одна организация, отсутствовали ограничения в правах, и для «чистоты» эксперимента – только один пользователь. Такое время ожидания мы объясняли для себя так: документ проводился сразу в разрезе трех учетов, создавая огромное количество записей не только в регистрах накопления, но и «отмечаясь» в регистрах сведений. Но то была первая версия УПП. Прошло достаточно много времени, и разработчики должны были оптимизировать режим записи и хранения данных в своих учетных системах. С тех пор, однако, проблема в той или иной степени все-таки сохранилась.

Рис.1 Количество возможных движений в УПП 1.1 Рис.1 Количество возможных движений в УПП 1.1
Рис.2 Количество возможных движений в конфигурации ERP Рис.2 Количество возможных движений в конфигурации ERP
Рис.3 Количество возможных движений в БП 3.0 Рис.3 Количество возможных движений в БП 3.0

Такое количество регистров в первую очередь обусловлено слишком сложным регламентированным учетом. Упрости законодатель требования к учету, отпадет необходимость хранить данные в таком количестве разрезов. Но это лишь часть проблемы.

Избыточность кода

Если вы когда-нибудь использовали конструктор движений для документа в конфигураторе, то видели, как мало кода при этом создается, и как быстро проводится при этом документ. Но в реальности не все так просто. Необходимость ограничения попытки проведения, например, в прошлом периоде, сразу же рождает необходимость дополнить этот код. Как только у 1С появилась возможность вести учет по нескольким организациям, складам и подразделениям, сразу возникла необходимость в ограничении прав доступа различных пользователей к той или иной информации. И как следствие – ограничение прав доступа на уровне записи.

А как реализуется такая возможность? На каждом этапе проверки добавляется новый код. Возможности проведения, полнота заполнения данных, необходимость записывать документ в разных разрезах – вот причина того, что наш код растет как на дрожжах.

Поскольку все системные администраторы при этом руководствуются принципом «Все, что не запрещено – разрешено», разработчикам приходится выстраивать все новые и новые стены. И с нажатием кнопки «Провести и закрыть», проверки и проводки начинают свое долгое движение по лабиринту.

Рис.4 Код, созданный конструктором движений Рис.4 Код, созданный конструктором движений
Рис.5 Начало обработки проведения в Бухгалтерии предприятия 3.0. Рис.5 Начало обработки проведения в Бухгалтерии предприятия 3.0.

Как видим, этот только «подготовка данных» для записи.

Рис.6 Непосредственное формирование движений в БП 3.0 Рис.6 Непосредственное формирование движений в БП 3.0

В каждой строке, по сути, присутствует отсылка к глобальным модулям. Эти скачки между модулями также никак не добавляют скорости работы. Можно подумать: «Это же какие-то миллисекунды», – но именно из них в результате складываются десятки секунд ожидания. Скорость – это величина, характеризующаяся быстротой выполнения. В нашем случае, это скорость выполнения кода, а если кода слишком много, то и скорость выполнения невелика.

Какими бы мощными не были бы компьютеры, и как бы быстро они не реагировали на желания пользователя, они не могут научиться мгновенно преодолевать массы программного кода, выстроенного разработчиками. Защита от ошибок и получение максимально точных данных, вынуждают пользователя ожидать действий программы. Поскольку разработчики конфигураций 1С постоянно трудятся над оптимизацией своих решений, которые на сегодня становятся все более популярными в силу разных обстоятельств, можно надеяться на серьезные подвижки в этой области и на то, что проблема «долго проводятся документы» уйдет в прошлое. И да прибудет с нами код.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

Столкнулись с такой проблемой при проведении ЗП в бухгалтерии.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.УчетНДФЛ.Модуль(1569)}: Ошибка при вызове метода контекста (Записать)
Движения.РасчетыНалогоплательщиковСБюджетомПоНДФЛ.Записать();
по причине:
Запись не верна! Значение поля «Дата получения дохода» не может быть пустым! (Регистр накопления: Расчеты налогоплательщиков с бюджетом по НДФЛ; Номер строки: 1)

Решение: нужно перепровести начисления за предыдущие месяцы. Как мы поняли это просто глюк, 1с не видит проведенные ранее доки.

Загрузка…

Понравилась статья? Поделить с друзьями:
  • Ошибка при генерации карты rimworld multiplayer
  • Ошибка при выполнении метода объекта компоненты v7plus dll
  • Ошибка при вычислении функции события или макроса
  • Ошибка при выполнении макрофункции meta document sign
  • Ошибка при вызове конструктора описаниетипов