![]() |
|
Проблема при 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
|
Там только процедура ПередЗаписью(). Закомментировали, не помогло.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |