Имя: Пароль:
1C
1С v8
Разное поведение кода при запуске по расписанию и через интерфейс обработки
0 TSSV
 
25.07.23
10:47
Добрый день, коллеги! Столкнулся с проблемой. Есть внешняя обработка, которая создает заказы покупателей в УТ 11.4. Код создания заказов расположен в процедуре модуля обработки. Организована возможность запуска процедуры создания заказа через форму обработки и по расписанию (возможности БСП для внешних обработок). При запуске процедуры из формы обработки в заказе проставляются цены, а при запуске по расписанию цены очищаются. Но код создания заказа один и тот же. С чем это может быть связано, может быть кто-нибудь сталкивался с подобным?
1 unenu
 
25.07.23
10:49
без кода что тут можно ответить?
2 shuhard
 
25.07.23
10:52
(0) ни о чём
3 TSSV
 
25.07.23
10:54
(1) код сейчас привести не могу. Но там ничего особенного - создается новый заказ, устанавливаются значения реквизитов, заполняется ТЧ Товары, в которой проставляется цена. Если запустить эту обработку руками, то все нормально, если настроить запуск по расписанию, заказы создаются с ценой 0. Может быть в правах дело, кто-нибудь ловил подобное?
4 TSSV
 
25.07.23
11:00
(1) Код.
Функция СоздатьЗаказКлиенту(СтрокиПоЗаказу, НомерЗаказа)
    
    Заказ = Документы.ЗаказКлиента.СоздатьДокумент();
    
    Заказ.Дата = ТекущаяДата();
    
    Заказ.Партнер = ЗаказКлиент;
    Заказ.Контрагент = ЗаказКонтрагент;
    Заказ.Организация = ЗаказСоглашение.Организация;

    Заказ.Соглашение = ЗаказСоглашение;
    
    Заказ.Валюта = ЗаказСоглашение.Валюта;

    Заказ.ГрафикОплаты = ЗаказСоглашение.ГрафикОплаты;
    Заказ.Склад = ЗаказСклад;
    Заказ.ЦенаВключаетНДС = Истина;

    Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению;
    Заказ.ДатаСогласования = НачалоДня(ТекущаяДата());
    
    Заказ.Согласован = Истина;
    
    Заказ.БанковскийСчет =
        Справочники.БанковскиеСчетаОрганизаций.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(Заказ.Организация);
    
    Заказ.ДатаОтгрузки = НачалоДня(ТекущаяДата()) + 3 * 24 * 60 * 60;
    
    Заказ.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
    
    Заказ.СкидкиРассчитаны = Истина;
    
    Заказ.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
    
    Заказ.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным;
    
    Заказ.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
        
    Заказ.Приоритет = Справочники.Приоритеты.НайтиПоНаименованию("Средний");
    
    Заказ.ПорядокОплаты = Перечисления.ПорядокОплатыПоСоглашениям.РасчетыВРубляхОплатаВРублях;
    Заказ.Комментарий = "Номер резерва " + НомерЗаказа;
    
    // Заполняем табличную часть Товары
    Для Каждого СтрокаПоЗаказу Из СтрокиПоЗаказу Цикл
        
        НоваяСтрока = Заказ.Товары.Добавить();
        НоваяСтрока.Номенклатура = СтрокаПоЗаказу.Номенклатура;
        НоваяСтрока.Характеристика = СтрокаПоЗаказу.Характеристика;
        НоваяСтрока.Количество = СтрокаПоЗаказу.КоличествоРезерв;
        НоваяСтрока.КоличествоУпаковок = СтрокаПоЗаказу.КоличествоРезерв;
        //НоваяСтрока.ВидЦены = ВидЦеныMrp;
        НоваяСтрока.Цена = СтрокаПоЗаказу.Цена;
        НоваяСтрока.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;
        НоваяСтрока.ДатаОтгрузки = ТекущаяДата() + 3 * 24 * 60 * 60;
        НоваяСтрока.Склад = ЗаказСклад;
        
    КонецЦикла;
    
    
    СтруктураПересчетаСуммы = Новый Структура;
    СтруктураПересчетаСуммы.Вставить("ЦенаВключаетНДС", Истина);
    
    СтруктураПараметровДействия = Новый Структура();
    СтруктураПараметровДействия.Вставить("НалогообложениеНДС", Заказ.НалогообложениеНДС);
    СтруктураПараметровДействия.Вставить("Дата", Заказ.Дата);
    
    СтруктураДействий = Новый Структура;
    СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", СтруктураПараметровДействия);
    СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Заказ.ВернутьМногооборотнуюТару);
    СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСумму");
    
    КешированныеЗначения = Неопределено;
    ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Заказ.Товары, СтруктураДействий, КешированныеЗначения);
    
    Заказ.Записать();
    
    // Доп. сведение Сайт
    ДопСведение =
        ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Сайт");
    
    МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Объект = Заказ.Ссылка;
    МенеджерЗаписи.Свойство = ДопСведение;
    МенеджерЗаписи.Значение = "iis01.santehnika-online.ru";
    МенеджерЗаписи.Записать(Истина);    
    
    // Заполнение этапов оплаты
    ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи(
        Заказ,
        Ложь,
        Истина,
        Заказ.СуммаДокумента,
        0);
        
    Попытка
        Заказ.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        // В случае, если зарезервировать не удалось, возвращается Неопределено
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Заказ.Ссылка;
    
КонецФункции
5 shuhard
 
25.07.23
11:07
(4) СтрокиПоЗаказу - что там ?
6 TSSV
 
25.07.23
11:16
(5) Массив строк служебной табличной части обработки с данными для заполнения ТЧ Товары.
7 Мультук
 
25.07.23
11:32
(6)

1) Можно писать всякое в ЖР, затем думать головой
2) Можно посмотреть код, который заполняет СтрокаПоЗаказу
3) Можно СтрокаПоЗаказу сериализовать и засунуть опять таки в ЖР

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

Если СтрокаПоЗаказу.Цена = 0 Тогда
    ЗаписьЖурналаРегистрации(,,, "Да как так то ???");
КонецЕсли;

        НоваяСтрока.Цена = СтрокаПоЗаказу.Цена;
        НоваяСтрока.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.СоСклада;
        НоваяСтрока.ДатаОтгрузки = ТекущаяДата() + 3 * 24 * 60 * 60;
        НоваяСтрока.Склад = ЗаказСклад;
        
    КонецЦикла;
8 TSSV
 
25.07.23
11:40
(7) Спасибо за идеи.
9 banco
 
25.07.23
12:30
(0) Из за прав может быть. Регламентное задание - имя пользователя
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан