Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 8
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> В данной транзакции уже происходили ошибки...          
Constantus Подменю пользователя
сообщение 12.07.18, 12:39
Сообщение #1

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

В документе РКО в модулях по проведению и распроведения имеется код:

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


Именно этот код мне сейчас и создает проблемы при проведении и отмены проведения, выдает сообщение "В данной транзакции уже происходили ошибки"

Если его убрать, то всё нормально. Однако данный код вынужденное зло, т.к. начальника потребовал, чтобы после формирования РКО в соответствующей Заявке (у нас ведется обязательный учет по Заявкам).

Именно применение "Попытка" и создает проблемы, но если это убрать, то тоже создаются проблемы при проведении и антипроведении, т.к. на филиалах применение Заявок не обязательно.

Что можно придумать, чтобы ошибки не было, но и код выполнялся для записи ссылки на документ?

podcast Подменю пользователя
сообщение 12.07.18, 13:02
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 287
Спасибо сказали: 68 раз
Рейтинг: 65.3

Constantus @ Сегодня, 13:39 * ,
Попробуйте поставить Остановку по ошибке в конфигруаторе, увиите где при записи возникает ошибка.
Не и можно в Попытке НачатьТранзацкию, может поможет.

Constantus Подменю пользователя
сообщение 12.07.18, 13:30
Сообщение #3

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Ну и код при отмене проведения

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


Т.е. ссылка на РКО в Заявке удаляется...

Мож есть какой другой метод записи ссылки в другом документе?

podcast @ Сегодня, 16:02 * ,

Прерыватель отладчика ничего не дал...

Вот не совсем понял про НачатьТранзакцию();

Мне вначале модуля проведения поставить? И что дает эта штука?

sava1 Подменю пользователя
сообщение 12.07.18, 13:46
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1914
Из: Проскуров
Спасибо сказали: 446 раз
Рейтинг: 435.8

Цитата(podcast @ 12.07.18, 14:02) *
Попытке НачатьТранзацкию, может поможет.


не поможет
проведение уже проходит в транзакции


попробуйте перед записью менять документы, а не при проведении

Constantus Подменю пользователя
сообщение 12.07.18, 13:53
Сообщение #5

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Цитата(sava1 @ 12.07.18, 16:46) *
попробуйте перед записью менять документы, а не при проведении


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

Подскажите как правильно сделать перед записью, т.е. осуществить проверку на действие (проведение, отмена проведения, удаление)?

Zaval Подменю пользователя
сообщение 12.07.18, 14:10
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1993
Из: Киева и окрестностей
Спасибо сказали: 403 раз
Рейтинг: 256.9

Цитата(Constantus @ 12.07.18, 13:39) *
Что можно придумать, чтобы ошибки не было, но и код выполнялся для записи ссылки на документ?

Нпр, вынести код в ПодпискуНаСобытие, проверять филиальность перед выполнением.

Constantus Подменю пользователя
сообщение 12.07.18, 15:06
Сообщение #7

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Попробовал убрать "Попытку"

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


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

С "Попыткой" Записывает, без не записывает... Что не так я сделал?

Цитата(sava1 @ 12.07.18, 16:46) *
попробуйте перед записью менять документы, а не при проведении


Попробовал в модуле объекта "При записи"

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


Та жа ошибка при записи

Zaval Подменю пользователя
сообщение 12.07.18, 15:58
Сообщение #8

Крутой
Иконка группы
Группа: Местный
Сообщений: 1993
Из: Киева и окрестностей
Спасибо сказали: 403 раз
Рейтинг: 256.9

Зачем это вообще делать? Шоб базу положить?

Constantus Подменю пользователя
сообщение 13.07.18, 5:48
Сообщение #9

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Цитата(Zaval @ 12.07.18, 18:58) *
Зачем это вообще делать? Шоб базу положить?


Хотелка начальника... Он хочет видеть на форме списка Заявок сделан ли РКО по данной Заявке или нет...

Может есть другой способ отразить закрытую Заявку?

Vidocq05 Подменю пользователя
сообщение 13.07.18, 9:54
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 168
Из: Сумы
Спасибо сказали: 25 раз
Рейтинг: 25

Цитата(Constantus @ 13.07.18, 6:48) *
Хотелка начальника... Он хочет видеть на форме списка Заявок сделан ли РКО по данной Заявке или нет...

Может есть другой способ отразить закрытую Заявку?

Если это нужно только для того, что-бы видеть на форме списка Заявок сделан ли РКО, то как вариант, сделайте реквизит в форме списка (не реквизит объекта) Заявок "РКО" и получайте ссылки на РКО "ПриВыводеСтроки" в табличном поле Заявок.

Zaval Подменю пользователя
сообщение 13.07.18, 10:42
Сообщение #11

Крутой
Иконка группы
Группа: Местный
Сообщений: 1993
Из: Киева и окрестностей
Спасибо сказали: 403 раз
Рейтинг: 256.9

Цитата(Constantus @ 13.07.18, 6:48) *
Хотелка начальника... Он хочет видеть на форме списка Заявок сделан ли РКО по данной Заявке или нет...

Проведите РКО с указанными Заявками и посмотрите Движения. Там все уже есть. Выбирайте по Заявке и показывайте где нужно.


Цитата(Vidocq05 @ 13.07.18, 10:54) *
"ПриВыводеСтроки"

Выполнять Запрос при выводе каждой строки? "На вас серверов не напасешься" smile.gif

Constantus Подменю пользователя
сообщение 13.07.18, 11:19
Сообщение #12

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Цитата(Vidocq05 @ 13.07.18, 12:54) *
сделайте реквизит в форме списка (не реквизит объекта) Заявок "РКО" и получайте ссылки на РКО "ПриВыводеСтроки" в табличном поле Заявок.

Цитата(Zaval @ 13.07.18, 13:34) *
посмотрите Движения. Там все уже есть.


Идеи хорошие, не могу их как-то реализовать.
Создал реквизит формы списка "РКО" (на вкладке "Реквизиты") с ссылкой на документы РКО

Пытаюсь вставить новую колонку в ТЧ формы списка Заявок, но там нет возможность выбрать данные, т.е. выбрать этот новый реквизит "РКО".

Теперь о регистрах. Да в РН "Движения денежных средств" есть ссылка на Заявку.

Как можно одной строкой вытащить Регистратор (РКО), зная "ДокументПланированияПлатежа" (Заявка) из этого регистра накопления и "получайте ссылки на РКО "ПриВыводеСтроки" в табличном поле Заявок" как это предложил Vidocq05.

Цитата(Zaval @ 13.07.18, 13:42) *
Выполнять Запрос при выводе каждой строки? "На вас серверов не напасешься"


Значит не я один затаил сомнения... icon_beer17.gif

Petre Подменю пользователя
сообщение 13.07.18, 11:46
Сообщение #13

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2443
Из: Київ, Україна
Спасибо сказали: 608 раз
Рейтинг: 567

QUOTE (Zaval @ 13.07.18, 10:42) *
Выполнять Запрос при выводе каждой строки? "На вас серверов не напасешься" smile.gif

При дефиците серверов обычно вместо "ПриВыводеСтроки" пользуют "ПриПолученииДанных"...


Signature
Допрацьовую:
- "Бухгалтерія для України 1.2";
- "Бухгалтерія для України 2.0";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Constantus Подменю пользователя
сообщение 13.07.18, 12:14
Сообщение #14

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

иЙолки-палочки... Всё перепробовал, даже открытие формы Заявок

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


Но как сохранить изменения в открытой форме и закрыть её не получается.

Вообщем я начал паниковать icon_cuss.gif

Подскажите детально как бы Вы сделали эту хотелку без "Попытка"?
Интересная идея с дополнительным реквизитом формы списка и как при этом использовать "ПриВыводеСтроки", если это действительно не кушает ресурсы при открытии, т.к. нужно будет выделять строки, где есть РКО...

Zaval Подменю пользователя
сообщение 13.07.18, 12:48
Сообщение #15

Крутой
Иконка группы
Группа: Местный
Сообщений: 1993
Из: Киева и окрестностей
Спасибо сказали: 403 раз
Рейтинг: 256.9

Цитата(Constantus @ 13.07.18, 13:14) *
Подскажите детально как бы Вы сделали эту хотелку без "Попытка"?

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


Напишите в списке Заявок запрос к регистру, где РКО пишет Заявки.
Пусть выполняется для начальника - по Роли.


Constantus Подменю пользователя
сообщение 13.07.18, 13:12
Сообщение #16

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Вот сделал такую вещч:

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
        // Соответствие создается для заполнения остатков в строках табличного поля
    Для каждого Стр из ОформленияСтрок Цикл

        Стр.Ячейки.РРКО.Значение = ПолучитьРКО(Стр.ДанныеСтроки.Ссылка);

    КонецЦикла;
    
КонецПроцедуры

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


     Возврат Результат;
    
КонецФункции


Вроде срабатывает, но явно тормозит... Может есчо есть пооптимальней?


Как можно получить данные из РН одной строкой, типа

Результат = РегистрыНакопления.РегистрТакойто.(?????)

Zaval Подменю пользователя
сообщение 13.07.18, 14:12
Сообщение #17

Крутой
Иконка группы
Группа: Местный
Сообщений: 1993
Из: Киева и окрестностей
Спасибо сказали: 403 раз
Рейтинг: 256.9

Цитата(Petre @ 13.07.18, 12:46) *
При дефиците серверов обычно вместо "ПриВыводеСтроки" пользуют "ПриПолученииДанных"...

"Во избежание дефицита..."

Цитата(Constantus @ 13.07.18, 14:12) *
Вроде срабатывает, но явно тормозит... Может есчо есть пооптимальней?

???
Почему в Списке РКО, если данные нужны в списке Заявок?
Запрос должен выполняться не по каждой строке, а 1 раз по списку выведенных в форму Заявок

Constantus Подменю пользователя
сообщение 13.07.18, 14:17
Сообщение #18

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

Цитата(Zaval @ 13.07.18, 17:12) *
Почему в Списке РКО, если данные нужны в списке Заявок?
Запрос должен выполняться не по каждой строке, а 1 раз по списку выведенных в форму Заявок


Как раз в Списке Заявок, есть левая колонка, вот туда и прописываются.

Я выложил код. Вы предложили другую идею "Запрос должен выполняться не по каждой строке, а 1 раз по списку выведенных в форму Заявок"

Как это осуществить?

Constantus Подменю пользователя
сообщение 13.07.18, 16:14
Сообщение #19

Почти ветеран
******
Группа: Пользователи
Сообщений: 691
Спасибо сказали: 4 раз
Рейтинг: 4

На ИТС нашел вот такой код: [необходимо зарегистрироваться для просмотра ссылки]

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)

    
        Соответствие = Новый Соответствие;

    // Заполнение параметра - массива значений ссылками на отображаемые строки табличного поля
    СсылкиМассив = Новый Массив;
    Для каждого Стр из ОформленияСтрок Цикл

        СсылкиМассив.Добавить(Стр.ДанныеСтроки.Ссылка);
        Соответствие.Вставить(Стр.ДанныеСтроки.Ссылка, Стр);

    КонецЦикла;

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

    ЗапросОстатка.УстановитьПараметр("ДокументПланированияПлатежа", СсылкиМассив);
    Выборка = ЗапросОстатка.Выполнить().Выбрать();

    //Вывести остаток в строку, найденную в соответствии по номенклатуре из запроса
    Пока Выборка.Следующий() Цикл

        Соответствие.Получить(Выборка.Регистратор).Ячейки.РРКО.Значение = Выборка.Регистратор;

    КонецЦикла;
    

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


Код переделал под свои нужды, но выдает такую ошибку:

{Документ.ЗаявкаНаРасходованиеСредств.Форма.ФормаСписка.Форма(146)}: Значение не является значением объектного типа (Ячейки)
        Соответствие.Получить(Выборка.Регистратор).Ячейки.РРКО.Значение = Выборка.Регистратор;




Вот нашел другой код, вроде работает:

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



Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 13.11.18, 20:50
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне