Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Проблема при com-соединении

Проблема при com-соединении
Я
   geka22
 
23.03.21 - 13:32
Осуществляем выгрузку в 1с БГУ ред. 1.0. Нижеприведенный код нормально и без проблем работает в серверной версии 1с, однако, в файловой выдает ошибку "Элемент уже добавлен. Ключ в словаре WRITE, добавляемый ключ WRITE"

Гугл подсказывает использовать МенеджерЗаписи или КлючЗаписи. Однако абсолютно непонятно, как это применить в текущей ситуации (У ДокументОбъект нет таких методов).

Может быть, кто-нибудь подскажет, как устранить ошибку?


//КОД
dynamic новыйДокумент = comConector.Документы.ОперацияБух.СоздатьДокумент();

                новыйДокумент.Дата = new DateTime(2021, 03, 23);
                новыйДокумент.Учреждение = comConector.Справочники.Организации.НайтиПоКоду("000001");
                новыйДокумент.Баланс = comConector.Справочники.Баланс.НайтиПоКоду("000001");

                новыйДокумент.НомерПервичногоДокумента = "111";
                новыйДокумент.ДатаПервичногоДокумента = new DateTime(2021, 03, 22);
                новыйДокумент.ВидПервичногоДокумента = "Требование - накладная";

                новыйДокумент.Комментарий = "#Выгрузка из конфигурации \"Учет\" [History] 111 - ТЕСТ";
                новыйДокумент.Содержание = "Требование - накладная (для переноса в Бюджет)";
                
                dynamic новаяЗапись = новыйДокумент.Движения.ЕПСБУ.Добавить();   //ЗДЕСЬ ВАЛИТСЯ В ФАЙЛОВОЙ

                новаяЗапись.Период = новыйДокумент.Дата;
                новаяЗапись.Учреждение = новыйДокумент.Учреждение;
                новаяЗапись.КВД = comConector.Перечисления.КВД.СубсидииНаГосзадание;
                                
                новаяЗапись.СчетКт = comConector.ПланыСчетов.ЕПСБУ.НайтиПоКоду("105.31");
                новаяЗапись.КБККт = comConector.Справочники.КБК.НайтиПоНаименованию("00000000000000244");
                новаяЗапись.СубконтоКт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("Номенклатура"), comConector.Справочники.Номенклатура.НайтиПоКоду("ОС0000032954"));
                новаяЗапись.СубконтоКт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("КЭК"), comConector.Справочники.КОСГУ.НайтиПоКоду("341"));
                новаяЗапись.СубконтоКт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("Центры материальной ответственности"), comConector.Справочники.ЦМО.НайтиПоКоду("0000000760"));

                новаяЗапись.СчетДт = comConector.ПланыСчетов.ЕПСБУ.НайтиПоКоду("105.31");
                новаяЗапись.КБКДт = comConector.Справочники.КБК.НайтиПоНаименованию("00000000000000244");
                новаяЗапись.СубконтоДт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("Номенклатура"), comConector.Справочники.Номенклатура.НайтиПоКоду("ОС0000032954"));
                новаяЗапись.СубконтоДт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("КЭК"), comConector.Справочники.КОСГУ.НайтиПоКоду("341"));
                новаяЗапись.СубконтоДт.Вставить(comConector.ПланыВидовХарактеристик.ВидыСубконтоБюджет.НайтиПоНаименованию("Центры материальной ответственности"), comConector.Справочники.ЦМО.НайтиПоКоду("0000000308"));
                                
                новаяЗапись.Сумма = 1000M;
                новаяЗапись.КоличествоКт = 10M;
                новаяЗапись.КоличествоДт = 10M;
                новаяЗапись.Содержание = "Перемещение МЗ";
                новаяЗапись.НомерЖурнала = новаяЗапись.СчетКт.НомерЖурнала;
                новаяЗапись.Баланс = новыйДокумент.Баланс;

                новыйДокумент.СуммаОперации = 1000M;
                новыйДокумент.Записать();


//КОД


Фрагмент

dynamic новаяЗапись = новыйДокумент.Движения.ЕПСБУ.Добавить();

меняли на

новыйДокумент.Записать();

dynamic набор = новыйДокумент.Движения.ЕПСБУ;   //ЗДЕСЬ ВАЛИТСЯ В ФАЙЛОВОЙ

набор.Отбор.Регистратор.Установить(новыйДокумент.Ссылка, Истина);

dynamic новаяЗапись = набор.Добавить();

новаяЗапись.Регистратор = новыйДокумент.Ссылка;
   kerm
 
1 - 23.03.21 - 14:26
Запиши сам документ. Потом к нему уже движения добавь.
   kerm
 
2 - 23.03.21 - 14:42
Может через comConector создать движения и установить отбор.
Типа:
набор= comConector.РегистрыБухгалтерии.ЖурналПроводокЕПСБУ.СоздатьНаборЗаписей();
набор.Отбор.Регистратор.Установить(новыйДокумент.Ссылка);
набор.Прочитать();
   geka22
 
3 - 24.03.21 - 02:46
Все то же самое -

  //dynamic новаяЗапись = новыйДокумент.Движения.ЕПСБУ.Добавить();

                //dynamic набор = новыйДокумент.Движения.ЕПСБУ;

                dynamic набор = comConector.РегистрыБухгалтерии.ЕПСБУ.СоздатьНаборЗаписей();
                набор.Отбор.Регистратор.Установить(новыйДокумент.Ссылка, true);
                набор.Прочитать();
                //набор.Filter.Recorder.Set(новыйДокумент.Ref, true);


работает в серверной версии и валится в файловой.
   hhhh
 
4 - 24.03.21 - 03:28
(3) попробуйте всё-таки как советуют

               dynamic набор = comConector.РегистрыБухгалтерии.ЖурналПроводокЕПСБУ.СоздатьНаборЗаписей();
   timurhv
 
5 - 24.03.21 - 03:35
>comConector.ПланыСчетов.ЕПСБУ.НайтиПоКоду("105.31");
Так лучше не делать, счета сейчас периодические, поэтому нужно искать на дату документа
comConector.БухгалтерскийУчет.СчетПоКоду("105.31", новыйДокумент.Дата)

>dynamic набор = новыйДокумент.Движения.ЕПСБУ;
Тут тоже валится с ошибкой?
   hhhh
 
6 - 24.03.21 - 03:49
(5) СчетПоКоду это 7.7 походу, а у него восьмерка.
   geka22
 
7 - 24.03.21 - 04:47
В общем, сделал epf и оно работает, а из c# код один-в-один нет. Пробовали уже и создатьнабор и т.д. и предварительно создавать документ, а затем проводки и все вместе одновременно. В серверной работает, в файловой нет. Саппорт 1с естественно всё отрицает.


Ссылка на exe (билд из C#), cs, epf


https://yadi.sk/d/oQt3nAfk8Y5zhA
   geka22
 
8 - 24.03.21 - 04:48
2 timurhv естественно, это пример, в рантайме у нас другой код, я его не могу здесь демонстрировать.
   acht
 
9 - 24.03.21 - 07:21
(8) > я его не могу здесь демонстрировать.
Детский сад
   acht
 
10 - 24.03.21 - 07:54
(0) Засучивайте рукава и переписывайте через Invoke.
   geka22
 
11 - 24.03.21 - 09:32
Во-первых, детского сада никакого нет, т.к. боевое решение не будет работать у стороннего человека, а я привел рабочий пример, которого достаточно. Если Вам недостаточно такого исходного кода и необходимо наше внутреннее взаимодействие, вызовы апсервера, связывание наших данных с 1с, то непонятно, а зачем Вам это. Это, очевидно, усложнит описание проблемы и ее визуализацию.
Во-вторых, наше решение и так по сути работает через invoke в рантайме. Если Вы предлагаете использовать более низкий уровень - далеко не факт, что это поможет. Т.к. по сути это то же самое.
   Aleksey
 
12 - 24.03.21 - 09:36
(5) " счета сейчас периодические" - это где?
   VladZ
 
13 - 24.03.21 - 09:39
(0) Самый эффективный способ решить проблему - не создавать проблем.
Com - это проблема. Эта технология - как тухлое яйцо: его нужно нести очень аккуратно. Если уронишь - вони будет на всю округу.

Моё предложение: необходимо избавиться от Com.
   acht
 
14 - 24.03.21 - 09:45
(11) А. Ну, ок, ковыряйтесь.
   geka22
 
15 - 24.03.21 - 09:46
Com выбран нами давно, если и имеет смысл переписывать, то под веб-сервисы, м.б. И это не пять минут делов.
И баг-то, видать, не c# (почему версия с invoke не работает, в том числе),  ибо в серверной платформе проблемы нету.
Ошибка приходит из глубин 1с.
   ptiz
 
16 - 24.03.21 - 09:50
(15) Сначала делайте новыйДокумент.Записать(); 
И только потом - добавление движений.
   geka22
 
17 - 24.03.21 - 10:03
Ы?

Фрагмент

dynamic новаяЗапись = новыйДокумент.Движения.ЕПСБУ.Добавить();

меняли на

новыйДокумент.Записать();

dynamic набор = новыйДокумент.Движения.ЕПСБУ;  //ЗДЕСЬ ВАЛИТСЯ В ФАЙЛОВОЙ


набор.Отбор.Регистратор.Установить(новыйДокумент.Ссылка, Истина);

dynamic новаяЗапись = набор.Добавить();

новаяЗапись.Регистратор = новыйДокумент.Ссылка;
   geka22
 
18 - 24.03.21 - 10:07
Также ознакомьтесь с седьмым сообщением
   ptiz
 
19 - 24.03.21 - 10:20
(18) Понятно, что приходится шаманить, вот и ищем нужный бубен.
Другие релизы платформы 1С пробовали?
   geka22
 
20 - 24.03.21 - 10:26
да, 8.3.18.34, 8.3.16.1814, 8.3.13.1926
   ptiz
 
21 - 24.03.21 - 10:34
(20) А движения по другим регистрам? Только на ЕПСБУ валится?
   geka22
 
22 - 24.03.21 - 11:07
Мы делаем МЗ_Покупка, она проходит без проблем. Остальное - ЕПСБУ.
   ptiz
 
23 - 24.03.21 - 11:26
(22) Попробуйте закомментировать весь код в модуле набора записей ЕПСБУ.
   geka22
 
25 - 25.03.21 - 03:00
Там только процедура ПередЗаписью(). Закомментировали, не помогло.


Список тем форума
Рекламное место пустует  Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.