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

Код обработки прилагаю.

```1c
    Процедура ПриходРозницаНУ (Док)
    // обработать приходные накладные для реализатора

    РегОстатки = СоздатьОбъект("Регистр.ОстаткиТоваров");
    СчетН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"));
    БухОперация.Записать();

    КонецПроцедуры
```
---
StBender,
тогда
```1c
    БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>)
```
 ???
---
StBender,
а
```1c
    Док.ДатаДок = ???;
```

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

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

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

В сторону этого метода копал, но ничего не получилось. Данная операция БухОперация.УстановитьНовыйНомер(<ПрефиксНомера>) для остальных документов работает, а для Операции почему-то нет. И более того, я даже не могу выйти на её реквизит Номер или НомерДок, в обоих случаях пишет, что поле объекта не обнаружено.
---
StBender,
тогда
```1c
    БухОперация.Документ.УстановитьНовыйНомер(<ПрефиксНомера>)
```
 ???
---
Простите, что не в том разделе запощено. Попрошу переместить, видимо глюкнуло что-то.
---
О Боже! Вроде пошло! Спасибо огромное!
---
А не проще поставить рабочей дату любую дату того периода за который выгружаются данные?
Т.е. если выгружаешь 2013 год то ставишь например 31.12.13
Сработает, т.к. как правило уникальность номеров доков стоит в пределах года.
---
Grek2000, было первым, что попробовал. Не помогло.
---
У Вас вот тут

```1c
    БухОперация.Новая();
    БухОперация.ДатаОперации = Док.ДатаДок;
```

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

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

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

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

(10) Pari, да в коде описано как присваивалось.
---
StBender, речь не о том, как присваивалась в коде дата операции, а об установке рабочей даты. В коде из (1) этого нет.
В принципе неважно, проблема решена и ладно.