Версия для печати темы (https://pro1c.org.ua/index.php?s=ad4fa6f7ad18af54dc6cd9b95a11810b&showtopic=47415)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Внешняя обработка. Программная загрузка цен номенклатуры. Версия платформы: 8.3.10.2667, версия конфигуратора: 2.4.1.206

Автор: @lex 24.08.18, 7:38

Добрый день! Написал внешнюю обработку по загрузке цен номенклатуры. Документ "Установка цен номенклатуры". Движение происходит в регистре сведений "ЦеныНоменклатуры". Загрузка данных происходит из файла Excel в таблицу на форме. Затем циклом по таблице добавляю в документ.

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


При попытке провести документ (программно) выдается ошибка:
{ВнешняяОбработка.УстановкаЦенНаТовары.Форма.Форма.Форма(283)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : ЦеныНоменклатуры: 24.08.2018 0:00:00, Услуги основным цехам, , Минимальная цена (Регистр сведений: Цены номенклатуры; Номер строки: 1520). Что не так делаю, подскажите, пожалуйста?
Примечание: Если документ записать программно, а затем его в пользовательском режиме провести, то он проводится без проблем.

Автор: andr_andrey 24.08.18, 11:12

Цитата(@lex @ 24.08.18, 8:38) *
Запись с такими ключевыми полями существует! : ЦеныНоменклатуры: 24.08.2018 0:00:00, Услуги основным цехам, , Минимальная цена (Регистр сведений: Цены номенклатуры; Номер строки: 1520)

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

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

Автор: @lex 24.08.18, 13:11

andr_andrey @ Сегодня, 14:12 * ,
Спасибо за ответ! Все, разобрался. Да, это ERP. Проблемы были две, 1-я это дубликаты в файле эксель. 2-я - в регистре сведений некоторые позиции уже были заведены на дату, которую выбирал с той же ценой, поэтому и ругался.

Автор: ebuofficial2705@gmail.com 18.10.18, 22:44

@lex @ 24.08.18, 8:38 * ,
Здравствуйте, можете поделиться вашей обработкой ?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua