Имя: Пароль:
1C
 
Ошибка записи в РС
0 1Сnewk
 
06.08.24
13:04
Доброго всем!
Типовая КА 2.5.
При выгрузке ABC/XYZ-классификация клиентов (т.е. записи в РС) выдает ошибку Поле "клиент" не может быть пустым (Скрин 1). Такую ошибку выдает, если использовать настройки за 3 последних месяца (скрин2), если за 2 месяца делать, то все норм - выгружается. Я так понимаю, что ошибка в мае месяце. Теперь бы понять из какого документа загружается в этот РС данные.

Саму процедуру нашла и дальше стопор... что искать не понимаю... Подскажите пожалуйста в каком направлении искать косячные документы


Нерелевантный программный код
Процедура: Процедура ВыполнитьABCКлассификациюПартнеров(ДатаКлассификации = Неопределено) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    ИспользоватьКлассификациюПоВаловойПрибыли = ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВаловойПрибыли");
    ИспользоватьКлассификациюПоВыручке = ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВыручке");
    ИспользоватьКлассификациюПоКоличеству = ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоКоличествуПродаж");

    Если НЕ ИспользоватьКлассификациюПоВаловойПрибыли И НЕ ИспользоватьКлассификациюПоВыручке И НЕ ИспользоватьКлассификациюПоКоличеству Тогда

        Возврат;

    КонецЕсли;

    ПериодКлассификации = Константы.ПериодABCКлассификацииПартнеров.Получить();
    КоличествоПериодовКлассификации = Константы.КоличествоПериодовABCКлассификацииПартнеров.Получить();

    Если ПериодКлассификации.Пустая() ИЛИ КоличествоПериодовКлассификации = 0 Тогда

        Возврат;

    КонецЕсли;

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

    Период = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(?(ДатаКлассификации = Неопределено, ТекущаяДатаСеанса(), ДатаКлассификации), ПериодКлассификации, - КоличествоПериодовКлассификации);
    Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
    Запрос.УстановитьПараметр("ОкончаниеПериода", Период.ДатаОкончания);

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

    Если ИспользоватьКлассификациюПоВаловойПрибыли Тогда

        ВыполнитьABCКлассификацию(РезультатКлассификации, "ВаловаяПрибыль");
        ОбновитьДанныеКлассификацииПартнеров(
            РезультатКлассификации, Перечисления.ТипыКлассификации.ABC,
            Перечисления.ТипыПараметровКлассификации.ВаловаяПрибыль,
            Период.ДатаОкончания, Перечисления.ABCКлассификация.НеКлассифицирован);

    КонецЕсли;

    Если ИспользоватьКлассификациюПоВыручке Тогда

        ВыполнитьABCКлассификацию(РезультатКлассификации, "Выручка");
        ОбновитьДанныеКлассификацииПартнеров(
            РезультатКлассификации, Перечисления.ТипыКлассификации.ABC,
            Перечисления.ТипыПараметровКлассификации.Выручка,
            Период.ДатаОкончания, Перечисления.ABCКлассификация.НеКлассифицирован);

    КонецЕсли;

    Если ИспользоватьКлассификациюПоКоличеству Тогда

        ВыполнитьABCКлассификацию(РезультатКлассификации, "Количество");
        ОбновитьДанныеКлассификацииПартнеров(
            РезультатКлассификации, Перечисления.ТипыКлассификации.ABC,
            Перечисления.ТипыПараметровКлассификации.Количество,
            Период.ДатаОкончания, Перечисления.ABCКлассификация.НеКлассифицирован);

    КонецЕсли;

КонецПроцедуры
1 Волшебник
 
06.08.24
13:05
Ищите другую процедуру, ставьте точку останова и смотрите строку 429 набора записей
2 1Сnewk
 
06.08.24
13:07
(1) Какую другую процедуру?
3 Волшебник
 
06.08.24
13:09
(2) Процедуру, которая пишет данные в регистр сведений
4 rphosts
 
06.08.24
13:18
(2) открой для себя конфигуратор с включенным остановом по ошибке
5 Ненавижу 1С
 
06.08.24
13:31
У вас на 31.07 (подозреваю периодичность месяц, значит июль) есть выручка с пустым партнёром. Посмотрите регистр накопления выручка и себестоимость продаж с отбором по пустому партнеру
6 1Сnewk
 
07.08.24
08:24
(4) Открыла, благодарю.
7 1Сnewk
 
07.08.24
08:26
(5) К сожалению что-то не то... Было 2 документа с пустым партнером (но даты стояли 22,23 год), я их поставила на удаление (в тестовой разумеется). Результата не дало. Но все равно спасибо)
8 craxx
 
07.08.24
08:31
(0) Нажать "Подробно" на ошибке с 1го скрина, там стек вызовов покажется, и в нем посмотреть где именно валится в ошибку.
9 master Yoda
 
07.08.24
08:39
(7) если это именно записи в РС
Просто физически станьте на эти записи, измените их, т.е. либо допишите в пустые поля какие-то значения, либо просто удалите эти записи. Для РС это допускается.
11 Мультук
 
07.08.24
10:30
(7)

0) Включаем голову. Да лето, жарко, но нужно это сделать.

1) У вас там есть запрос

Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    РегистрСведенийАналитикаУчетаПоПартнерам.Партнер КАК Партнер,
        |    СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) - СУММА(ВыручкаИСебестоимостьПродажОбороты.СтоимостьОборот) -

В отладчике можно посмотреть с каким параметрами он запускается.

2) Берем текст запроса, параметры и выполняем в консоле запросов и смотрим на результат в колонку "Партер" -- ищем строчку с пустым партнером

3) Если строчек много и глазам больно смотреть, думаем как себе помочь, например дописать "ГДЕ", выкинуть результат в EXCEL,
добавить сортировку по Партнер

4) Возможно условие (для запроса в консоли) может помочь:

ГДЕ РегистрСведенийАналитикаУчетаПоПартнерам.Партнер IS NULL

5) Если тут всё хорошо, то двигаемся дальше по коду
12 1Сnewk
 
07.08.24
11:29
(8) Да где ошибка я нашла. Теперь надо найти в каких документах. Осваиваю (наконец-то) отладчик. В данный момент пытаюсь понять в какой переменной собираются эти записи, чтобы по номеру строки найти косячные документы... Во второй точки останова ошибка. Вывожу выражение "НаборЗаписей", но там нет списка документов. Кто может подсказать? 😳
13 1Сnewk
 
07.08.24
11:33
(11) Не увидела ваше сообщение, спасибо, сейчас попробую реализовать)
14 master Yoda
 
07.08.24
11:35
А я бы просто посмотрел, есть ли в этом регистре полезные данные из прошлого, которые для чего-то нужны, да очистил бы его полностью. Чтоб не спотыкаться на древнем мусоре
15 lEvGl
 
07.08.24
11:49
(12) смотреть надо в сам набор, в его значение, а не в его свойства
F2 в табло на наборе
16 1Сnewk
 
07.08.24
11:56
(11) Спасибо большое, что делитесь опытом! Круто! Все получилось 🥰😊
17 1Сnewk
 
07.08.24
11:57
(14) Нет, там было пусто, он просто туда не формировался.
18 Мультук
 
07.08.24
12:09
(17)

Это радует.


P.S.

Ваше удивление с пустым Отбор.Партнер в (12) на рис 2, меня несколько "взволновало".


Важно! Разберитесь на досуге (на тестовой базе, можно даже на тестовом регистре )

1) как работает СоздатьНаборЗаписей
2) Почему ОЧЕНЬ важно не пролюбить установку отборов


Удачи!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.