![]() |
|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
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, epfhttps://yadi.sk/d/oQt3nAfk8Y5zhA | ||
geka22 8 - 24.03.21 - 04:48 | 2 timurhv естественно, это пример, в рантайме у нас другой код, я его не могу здесь демонстрировать. | ||
acht 9 - 24.03.21 - 07:21 | |||
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 | Там только процедура ПередЗаписью(). Закомментировали, не помогло. |
|
Список тем форума |