Имя: Пароль:
1C
1С v8
Проблема при com-соединении
0 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 новаяЗапись = набор.Добавить();

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

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

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


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

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


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

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

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

Фрагмент

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

меняли на

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

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

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

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

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