Экспорт в бухгалтерию: Ошибка номер не уникален!

1. StBender 15.01.14 14:45 Сейчас в теме
Добрый день, господа!
Очень нужна помощь. Имеется конфигурация Аналит:Фармация 3.0 на 7.7 и Бухгалтерия ред 4.5, тоже на 7.7. Имеется обработка экспорта данных из аналита в бухгалтерию. Возможно, обработка типовая, в любом случае писал её не я, и работала до этого исправно. Однако сейчас, при попытке записать Операцию (так называется документ), ругается на то, что номер не уникален.
Естественно документа с таким номером в базе нет. При попытке создать документ с таким номером в ручную - всё получается.
Да, документы создаются задним числом. Есть подозрение, что это связано как-то с тем, что начался новый год, но я уже пробовал ставить нужный период в бухгалтерии, пробовал указать насильно номер для операции, что у меня не получилось и теперь полностью растерялся и не знаю в какую сторону копать.

Код обработки прилагаю.
Процедура ПриходРозницаНУ (Док) 
    // обработать приходные накладные для реализатора 
                        
    РегОстатки = СоздатьОбъект("Регистр.ОстаткиТоваров"); 
    СчетН02_02=Бух.EvalExpr("СчетПоКоду(""Н02.02.1"")"); 
    БухОперация = Бух.CreateObject("Операция"); 
     
    Номенклатура=Бух.CreateObject("Справочник.Номенклатура"); 
    Номенклатура.ИспользоватьДату(СДаты); 
     
     
    Содержание = "НУ "+ Док.Вид()+ " " + Док.НомерДок + " " + Док.ДатаДок; 
    БухОперация.ВыбратьОперации(Док.ДатаДок, Док.ДатаДок); 
    Пока БухОперация.ПолучитьОперацию() = 1 цикл 
        Если СокрЛП(БухОперация.Содержание) = Содержание тогда 
            БухОперация.Удалить(1); 
            Прервать; 
        КонецЕсли; 
    КонецЦикла; 
 
    БухОперация.Новая(); 
    БухОперация.ДатаОперации = Док.ДатаДок; 
    БухОперация.Содержание = Содержание; 
    БухОперация.СуммаОперации = 0; 
     
    ИтогоСебестоимость = 0; 
    ИтогоНаценка = 0; 
 
    Док.ВыбратьСтроки(); 
    Пока Док.ПолучитьСтроку() = 1 цикл 
        Если Док.Товар.Выбран() = 0  тогда 
            Продолжить; 
        КонецЕсли; 
        Если Док.Товар.ВидТовара = Перечисление.ВидыТоваров.Услуга тогда 
            Продолжить; 
        КонецЕсли; 
 
        состояние ("Документ "+Док+" товар "+Док.Товар); 
         
        БазоваяСтоимость = 0; 
        ОстатокТовара = 0; 
        РегОстатки.ВыбратьДвиженияДокумента(Док.ТекущийДокумент()); 
        Пока РегОстатки.ПолучитьДвижение() = 1 цикл 
            Если 
            (РегОстатки.Склад = Док.Склад) и 
            (РегОстатки.Товар = Док.Товар) и 
            (РегОстатки.Серия = Док.Серия) тогда 
                Если РегОстатки.Приход = 1 тогда 
                    БазоваяСтоимость = БазоваяСтоимость - РегОстатки.БазоваяСтоимость; 
                    ОстатокТовара = ОстатокТовара - РегОстатки.ОстатокТовара; 
                иначе 
                    БазоваяСтоимость = БазоваяСтоимость + РегОстатки.БазоваяСтоимость; 
                    ОстатокТовара = ОстатокТовара + РегОстатки.ОстатокТовара; 
                КонецЕсли; 
            КонецЕсли; 
        КонецЦикла;  
        Если ОстатокТовара=0 тогда 
            ОстатокТовара=1; 
        конецесли; 
        БазоваяСтоимость = Окр (БазоваяСтоимость / ОстатокТовара * Док.Количество * Док.Коэффициент, 2); 
        БазоваяНДС = Окр (БазоваяСтоимость * (1 - 1 / (1 + ПроцентНДС(Док.Товар.СтавкаНДС) / 100)), 2); 
 
        состояние ("Формирование проводок "+Док+" товар "+Док.Товар); 
        // списание со склада  
        БухОперация.НоваяПроводка(); 
        БухОперация.Кредит.Счет = СчетН02_02; 
        БухОперация.Кредит.Номенклатура = ПолучитьЭлемент(Док.Товар, Номенклатура); 
        // Установить ставки НДС, НП и тип номенклатуры 
        ОбновитьНоменклатуру (Док.Товар, Номенклатура); 
        БухОперация.Количество = Док.Количество*Док.Коэффициент; 
        БухОперация.Сумма = БазоваяСтоимость - БазоваяНДС;  
         
         
        // Себестоимость = БазоваяСтоимость - БазоваяНДС; 
        // СебестоимостьСНаценкой = Док.Сумма - Док.НДС - Док.СуммаНП; 
        Себестоимость = БазоваяСтоимость; 
        СебестоимостьСНаценкой = Док.Сумма; 
             
        Если (Себестоимость < СебестоимостьСНаценкой * 0.5) или  
             (Себестоимость >= СебестоимостьСНаценкой) тогда 
            Сообщить("ВНИМАНИЕ! Себестоимость в строке " + Док.НомерСтроки + " " + Док.Товар + " " + Формат(Себестоимость, "Ч12.2") + " с наценкой " + Формат(СебестоимостьСНаценкой, "Ч12.2")); 
        КонецЕсли; 
             
        ИтогоСебестоимость = ИтогоСебестоимость + Себестоимость; 
        ИтогоНаценка = ИтогоНаценка + Док.Сумма - Себестоимость; 
 
        БухОперация.СуммаОперации = БухОперация.СуммаОперации + Док.Сумма; 
 
    КонецЦикла; 
 
    сообщить (Док.Вид()+ " " + Док.НомерДок + " " + Док.ДатаДок + " " + Формат(Док.Итог("Сумма"), "Ч12.2")); 
    Сообщить("  себестоимость = " + Формат(ИтогоСебестоимость, "Ч12.2") + " наценка = " + Формат(ИтогоНаценка, "Ч12.2")); 
    БухОперация.Записать(); 
 
КонецПроцедуры
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. Rothschild 15.01.14 15:01 Сейчас в теме
(4) StBender,
тогда
БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>)
???
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Rothschild 15.01.14 14:55 Сейчас в теме
(1) StBender,
а
Док.ДатаДок = ???;

***
думаю что все равно, какой там номер будет,
поэтому попробуй при создании новой бухоперации
явно программно формировать для нее новый номер:

БухОперация.УстановитьНовыйНомер(<ПрефиксНомера>)


ЗЫ
могу запамятовать как этот метод в 7.7 называется - по мануалу из 8.х написал.
;)
4. StBender 15.01.14 14:59 Сейчас в теме
(3) Rothschild, Док.ДатаДок берётся из документа я просто приложил часть кода, который выдает ошибку, там ещё есть несколько процедур. Но конкретно в этом случае значение принимается от 01.12.2013 до 31.12.2013.

В сторону этого метода копал, но ничего не получилось. Данная операция
БухОперация.УстановитьНовыйНомер(<ПрефиксНомера>)
для остальных документов работает, а для Операции почему-то нет. И более того, я даже не могу выйти на её реквизит Номер или НомерДок, в обоих случаях пишет, что поле объекта не обнаружено.
5. Rothschild 15.01.14 15:01 Сейчас в теме
(4) StBender,
тогда
БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>)
???
2. StBender 15.01.14 14:50 Сейчас в теме
Простите, что не в том разделе запощено. Попрошу переместить, видимо глюкнуло что-то.
6. StBender 15.01.14 15:05 Сейчас в теме
О Боже! Вроде пошло! Спасибо огромное!
7. Grek2000 17.02.14 22:05 Сейчас в теме
А не проще поставить рабочей дату любую дату того периода за который выгружаются данные?
Т.е. если выгружаешь 2013 год то ставишь например 31.12.13
Сработает, т.к. как правило уникальность номеров доков стоит в пределах года.
8. StBender 18.02.14 11:56 Сейчас в теме
(7) Grek2000, было первым, что попробовал. Не помогло.
9. Timesoft 271 18.02.14 17:32 Сейчас в теме
У Вас вот тут
 
    БухОперация.Новая(); 
    БухОперация.ДатаОперации = Док.ДатаДок; 

создается операция, которой присваивается автоматом номер очередной ТЕКУЩЕГО года (2014), затем у неё изменяется дата - на 2013, судя по (4), а там этот номер может вполне существовать.

Совсем красиво будет, если УстановитьНовыйНомер поставить внутрь условия
    БухОперация.Новая(); 
 ПервоначальнаяДатаОперации = БухОперация.ДатаОперации;
    БухОперация.ДатаОперации = Док.ДатаДок; 
Если ДатаГод(ПервоначальнаяДатаОперации)<>ДатаГод(БухОперация.ДатаОперации) Тогда
БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>);
КонецЕсли;



Непонятно, почему не срабатывает (7), должно было...
10. Pari 18.02.14 17:42 Сейчас в теме
Непонятно, почему не срабатывает

(9) Timesoft, если сделать правильно, то всё сработает. Как именно ТС пробовал устанавливать рабочую дату с учетом, что операция создается в ОЛЕ-базе, - вопрос.
11. Timesoft 271 18.02.14 17:48 Сейчас в теме
(10) Ага... логично про ОЛЕ. Вопрос - где он её устанавливал?
Ну да в любом случае - до будущего переноса на стыке годов он про рабочую дату забудет, а подправленный код будет работать
12. StBender 19.02.14 10:24 Сейчас в теме
Да всё нормально работает, спасибо, что поправляете. Просто с 7-кой я совсем на "Вы"

(10) Pari, да в коде описано как присваивалось.
13. Pari 20.02.14 00:36 Сейчас в теме
(12) StBender, речь не о том, как присваивалась в коде дата операции, а об установке рабочей даты. В коде из (1) этого нет.
В принципе неважно, проблема решена и ладно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот