1С
про нашего любимого желто-красно-синего друга
Как передать картинку (ХранилищеЗначений) по Com-соединению из одной базы 1С в другую
Автор Kuzevichdb = Новый COMобъект("V83.COMConnector"); Попытка соединение= db.Connect(СтрокаПодключения); Исключение сообщить("база не открыта"); Предупреждение(ОписаниеОшибки()); Возврат ложь; КонецПопытки; НоваяНоменклатура=Справочники.Номенклатура.НайтиПоКоду("ВашКод"); GUID = НоваяНоменклатура.УникальныйИдентификатор(); GUIDCom = соединение.NewObject("УникальныйИдентификатор", Строка(GUID)); НоменклатураСсылкаCom = ТекПодключение.Справочники.Номенклатура.ПолучитьСсылку(GUIDCom); НовКартинкаОбъект = Соединение.Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент(); НовКартинкаОбъект.Объект = НоменклатураСсылкаCom; НовКартинкаОбъект.Наименование = НоваяНоменклатура.ОсновноеИзображение.Наименование; НовКартинкаОбъект.ВидДанных = Соединение.Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение; НовКартинкаОбъект.ИмяФайла = НоваяНоменклатура.ОсновноеИзображение.ИмяФайла; Картинка=НоваяНоменклатура.ОсновноеИзображение.Хранилище.Получить(); Двоичные = Картинка.ПолучитьДвоичныеДанные(); ДвоичныеСтрокой = Base64Строка(Двоичные); ДвоичныеCOM = Соединение.Base64Значение(ДвоичныеСтрокой); МояКартинкаCOM = Соединение.NewObject("Картинка",ДвоичныеCOM); НовКартинкаОбъект.Хранилище = Соединение.NewObject("ХранилищеЗначения",МояКартинкаCOM); НовКартинкаОбъект.Записать();
При загрузке файла обмена РИБ, сообщение "не недостаточно памяти"
Автор KuzevichСтаренький слабенький компьютер после перепроведения центральной базы не смог принять файл обмена с сообщением "не недостаточно памяти". После него программа вылетала.
Помогло ограничение на количество объектов в транзакции (я поставил 100)
1С Обмен между программами (Синхронизация данных) и проблема файловых баз, а так же отключение передачи некоторых документов
Автор KuzevichПотребовалось настроить выгрузку из 1С:УНФ в 1С:Бухгалтерия 3.0
Базовая настройка простая и не вызывает сложностей, подробно про нее можно почитать, например, здесь.
Но далее возникли проблемы:
1) Запуск регламентного задания обмена на файловой базе.
Регламентные задачи на SQL-базах работают на стороне SQL-сервера и не вызывают проблем, на файловых базах они, конечно, тоже, теоретически, должны работать, если запущен хотя бы один сеанс, но по факту то работали то нет.
В связи с этим, было решено вызывать обмен вручную с помощью внешней обработки и планировщика задач.
Вручную из обработки обмен можно вызвать командой:
ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоРегламентномуЗаданию("00001"); //где 00001 год регламентного задания в справочнике "Сценарии синхронизации данных"
2) Исключить документы из обмена.
Поскольку в УНФ приходы от клиентов на расчетный счет и оплаты поставщикам ведутся вручную, а в бухгалтерии используется обработка "обмен с клиент-банком", то нужно было исключить выгрузку эти операций введенных вручную в бухгалтерскую программу.
Список документов в обмене определен правилами обмена и настройками не меняется, нужно было бы исправлять сами правила обмена и исключать документы. Но есть более простой способ. Тем более, поскольку мы вызываем обмен обработкой, в той же обработке перед вызовом обмена, отменяем регистрацию изменений по нужным нам типам документов, в частности ПоступлениеНаСчет и РасходСоСчета.
//отменяем отправку поступлений на счет Док = Метаданные.Документы.ПоступлениеНаСчет; Узел = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("МойОбмен"); ПланыОбмена.УдалитьРегистрациюИзменений(Узел,Док); //отменяем отправку расходов со счета Док = Метаданные.Документы.РасходСоСчета; Узел = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("МойОбмен"); ПланыОбмена.УдалитьРегистрациюИзменений(Узел,Док);
Ниже приложена рабочая обработка, можете скачать и использовать.
Обработка "Расчет авансовых платежей по налогу на имущество" БП 2.0
Автор KuzevichНе так давно в конфигурации Бухгалтерия Предприятия 2.0 появилась обработка "Расчет авансовых платежей по налогу на имущество"
Первый и второй квартал 2021 года авансовые платежи рассчитывались корректно, но при расчете 3 квартала сумма налога оказалась неверной (хорошо, что бухгалтер не слепо доверяет программе, а все перепроверяет)
В процессе разбора в коде, я выяснил, что в ее логике зашит следующий расчет Среднегодовой стоимости имущества:
(01.01+01.02+01.03+01.08+01.09+01.10)
При том, что по правилам должны считаться суммы остаточной стоимости за каждый месяц с 01 по 10.
(01.01+01.02+01.03+01.04+01.05+01.06+01.07+01.08+01.09+01.10)
Т.е. по сути в формуле обработки не учтен 2 квартал.
Поэтому в форме обработки пришлось дописать для 3 квартала:
Если Строка.НомерПериода > 7 И Строка.НомерПериода < 11 Тогда //+++++++Добавленный код++++++++++++ ДелимоеСредняяСтоимость = ДелимоеСредняяСтоимость + Строка.ОстаточнаяСтоимостьНа0105 + Строка.ОстаточнаяСтоимостьНа0106 + Строка.ОстаточнаяСтоимостьНа0107; //-------Конец Добавленного кода------------ ДелимоеСредняяСтоимость = ДелимоеСредняяСтоимость + Строка.ОстаточнаяСтоимостьНа0108 + Строка.ОстаточнаяСтоимостьНа0109 + Строка.ОстаточнаяСтоимостьНа0110; Делитель = 10; КонецЕсли;
А так же оказалось, что в остаточную стоимость на 01.10 обработка считает остаточную стоимость на 01.09 (т.е. суммы в обеих колонках равны)
Так же пришлось исправить код:
Период = ?(Счетчик = 10, КонецМесяца(Период), ДобавитьМесяц(Период, 1));
на:
//Период = ?(Счетчик = 10, КонецМесяца(Период), ДобавитьМесяц(Период, 1)); Период = ДобавитьМесяц(Период, 1);
К данной статье приложил исправленную доработку, поскольку в последней версии конфигурации на 28.10.2021 она все еще в таком же виде, можете использовать ее как внешнюю или заменить в конфигурации.