Имя: Пароль:
1C
1С v8
Не заполняется значение ПКО.Касса =
0 vaflivafli3
 
17.07.23
10:13
Работаю в конфигурации 1С:Комплексная автоматизация 2 (2.5.12.60)
Пишу в расширении конфигурации, проблема в том что последнее нужное значение не заполняется, проверял запросы в консоли, все выводит нормально.
Может как-то неправильно передаю значение, не могу понять в чем ошибка.

&После ("ВыполнитьАвтоматическуюИнкассациюДС")
Процедура Автоматическое_СозданиеПКО_ПриЗакрытииСмены(КассаККМ, ОшибкаПриСнятииZОтчетам) Экспорт

    // Запрос для поиска последней выемки денежных средств
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   ВыемкаДенежныхСредствИзКассыККМ.Ссылка КАК Ссылка
        |ИЗ
        |   Документ.ВыемкаДенежныхСредствИзКассыККМ КАК ВыемкаДенежныхСредствИзКассыККМ
        |ГДЕ
        |   ВыемкаДенежныхСредствИзКассыККМ.Проведен
        |УПОРЯДОЧИТЬ ПО
        |   Дата УБЫВ";

    // Выполняем запрос и получаем ссылку на последнюю проведенную выемку
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    КонецЕсли;
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    ПоследняяВыемка = Выборка.Ссылка;

    Если ЗначениеЗаполнено(ПоследняяВыемка) Тогда

        // Создаем объект ПКО и заполняем ПКО на основании последней выемки
        ПКО = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
        ПКО.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзКассыККМ;
        ПКО.ДокументОснование = ПоследняяВыемка.Ссылка;
        ПКО.КассаККМ = ПоследняяВыемка.КассаККМ;
        ПКО.Организация = ПоследняяВыемка.Организация;
        ПКО.Дата = ТекущаяДата();
        ПКО.СуммаДокумента = ПоследняяВыемка.СуммаДокумента;
        ПКО.Валюта = ПоследняяВыемка.Валюта;
        ПКО.Кассир = ПоследняяВыемка.Кассир;

        // Запрос для получения ссылки на кассу
        ЗапросФискальноеУстройство = Новый Запрос;
        ЗапросФискальноеУстройство.Текст =
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |    КассоваяСмена.ФискальноеУстройство КАК ФискальноеУстройство
            |ИЗ
            |    Документ.КассоваяСмена КАК КассоваяСмена
            |ГДЕ
            |    КассоваяСмена.Проведен
            |
            |УПОРЯДОЧИТЬ ПО
            |    КассоваяСмена.Дата УБЫВ";
        ЗапросФискальноеУстройство.УстановитьПараметр("Ссылка", ПоследняяВыемка);
        РезультатФискальноеУстройство = ЗапросФискальноеУстройство.Выполнить();

        Если НЕ РезультатФискальноеУстройство.Пустой() Тогда
            ВыборкаФискальноеУстройство = РезультатФискальноеУстройство.Выбрать();
            Если ВыборкаФискальноеУстройство.Следующий() Тогда
                ФискальноеУстройство = ВыборкаФискальноеУстройство.ФискальноеУстройство;
            КонецЕсли;
        КонецЕсли;

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

            Если НЕ РезультатКасса.Пустой() Тогда
                ВыборкаКасса = РезультатКасса.Выбрать();
                Если ВыборкаКасса.Следующий() Тогда
                    ПКО.Касса = ВыборкаКасса.Выбрать("Касса");
                КонецЕсли;
            Иначе
                Сообщить("РезультатКасса не содержит записей.");
            КонецЕсли;
        // Запись и проведение ПКО
        ПКО.Записать(РежимЗаписиДокумента.Проведение);
        Сообщить("ПКО успешно создан на основе последней выемки денежных средств.");
        КонецЕсли;
   КонецЕсли;
КонецПроцедуры
1 Гипервизор
 
17.07.23
10:16
Зачем 2 раза выбирать? ПКО.Касса = ВыборкаКасса.Касса;
2 vaflivafli3
 
17.07.23
10:19
исправил, но ошибка та же..

Ошибка при вызове метода контекста (Записать)
{АвтоматическоеСоздПКО ОбщийМодуль.РозничныеПродажи.Модуль(82)}:ПКО.Записать(РежимЗаписиДокумента.Проведение);
{ОбщийМодуль.РозничныеПродажи.Модуль(3738)}:ИнкассацияВыполнена = ВыполнитьАвтоматическуюИнкассациюДС(КассаККМ, ОшибкаПриСнятииZОтчета);
{ОбщийМодуль.РозничныеПродажиВызовСервера.Модуль(31)}:Возврат РозничныеПродажи.ВыполнитьОперациюЗакрытияКассовойСмены(Объект, ОшибкаПриСнятииZОтчета, ОписаниеОшибки);

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Ошибка при вызове метода контекста (Записать)
по причине:
Запись не верна! Значение поля "Касса" не может быть пустым! (Регистр накопления: Денежные средства (наличные); Номер строки: 1)
3 shuhard
 
17.07.23
10:19
(0) не туда пишешь, нужно в ТЧ Расшифровка платежа
4 vaflivafli3
 
17.07.23
10:32
табличную часть ПКО? (3)
5 Гипервизор
 
17.07.23
10:37
(2) ВыборкаКасса = РезультатКасса.Выбрать();
    ВыборкаКасса.Следующий();
    ПКО.Касса = ВыборкаКасса.Касса;
    Посмотрите отладчиком, что у вас в выборке. Ну в крайнем случае добавьте на время Сообщить(ВыборкаКасса.Касса).
6 vaflivafli3
 
17.07.23
11:39
(5) Выборка показывает ошибку чтения значения переменной Кассы
7 Гипервизор
 
17.07.23
12:05
(6) РезультатКасса у вас не пустой? Тогда смотрите выше, может РезультатФискальноеУстройство пустой. Вообще пройдите ваш код отладкой по шагам и смотрите что в переменных.
8 vaflivafli3
 
17.07.23
12:19
(7) Прошелся, везде значения заполнены, кроме ВыборкаКасса, буду исправлять, спасибо за помощь.
9 vaflivafli3
 
18.07.23
11:26
(7) В итоге так и не получилось получить значение для ПКО.Касса, хотя результат не пустой, а вот на выборку ругается, не понимаю в чем проблема...
Пробовал через РезультатКасса = ЗапросКасса.Выполнить().Выгрузить(), но тоже не вышло.
10 Гипервизор
 
18.07.23
11:37
(9) Сильно ругается? Как именно?
11 vaflivafli3
 
18.07.23
11:44
(10) В отладке пишет об ошибке чтения значения, до этого менял код пару раз, стоял тип - Неопределено или же касса закрывалась без ошибки, но ПКО не создавался.
Текущий код:
                ЗапросКасса = Новый Запрос;
                ЗапросКасса.Текст =
                    "ВЫБРАТЬ
                    |    НастройкиРМК.Кассы.Касса КАК Касса
                    |ИЗ
                    |    Справочник.НастройкиРМК КАК НастройкиРМК
                    |ГДЕ
                    |    НастройкиРМК.Кассы.ПодключаемоеОборудование = &ФискальноеУстройство";
                ЗапросКасса.УстановитьПараметр("ФискальноеУстройство", ФискальноеУстройство);
                РезультатКасса = ЗапросКасса.Выполнить();

                Если Не РезультатКасса.Пустой() Тогда
                    ВыборкаКасса = РезультатКасса.Выбрать();
                    Если ВыборкаКасса.Следующий() Тогда
                        ПКО.Касса = ВыборкаКасса.Касса;
                    Иначе
                        Сообщить("Касса не найдена.");
                        Возврат;
                    КонецЕсли;
12 Гипервизор
 
18.07.23
11:50
(11) Пишет об ошибке чтения какого именно значения? В (5) код несколько отличается. Хорошо в партизана играть, что из вас всё вытягивать надо?
Какого типа в отладке ВыборкаКасса после ВыборкаКасса.Следующий()? Без всяких Если. Что после этого в отладке показывает ВыборкаКасса.Касса?
13 vaflivafli3
 
18.07.23
12:10
(12) ничего не показывает)
14 vaflivafli3
 
18.07.23
12:12
(12) на почту вам скрин отправил
15 Гипервизор
 
18.07.23
12:53
(14) Чот фигня у вас какая-то: ВыборкаКасса имеет тип ВыборкаИзРезультатаЗапроса, а ВыборкаКасса.Касса - РезультатЗапроса.
Попробуйте этот запрос отдельно в консоли запросов выполнить.