Показаны сообщения с ярлыком Программирование. Показать все сообщения
Показаны сообщения с ярлыком Программирование. Показать все сообщения

12 января 2016 г.

Выгрузка данных из 1С:Предприятие в Microsoft Excel

На первый взгляд может показаться, что нет никакой нужды выгружать данные из 1С:Предприятия в MS Excel. Гораздо комфортнее сделать привычный отчёт в формате табличного документа (*.mxl), а затем просто сохранить его в формате MS Excel (*.xls) с помощью встроенного конвертера платформы 1С:Предприятие.

Но не всё так однозначно. Бывают ситуации, когда либо результат преобразования может не соответствовать вашим ожиданиям, либо возможностей встроенного конвертера  недостаточно. Например, представьте, что нужно выгрузить данные в книгу Excel, содержащую возможности, недоступные в табличных документах 1С:Предприятия: многостраничные книги, формулы, макросы и т. д. Не лучше в таком случае сделать выгрузку данных непосредственно в файл *.xls, полностью контролируя процесс, чем довериться встроенному конвертеру, а потом результат "обрабатывать напильником"?

Давайте, я покажу, как можно довольно просто выгрузить данные в книгу MS Excel. Я считаю, нет нужды полностью создавать документ "с нуля" программно. Давайте поступим следующим образом. Сделаем в MS Excel шаблон будущего отчёта, затем поместим файл в макет 1С типа "Двоичные данные".


17 июля 2015 г.

Контролируем заполнение данных налогового учёта в документах "Операция" и "Корректировка записей регистров"

Есть в 1С:УПП два распрекрасных документа – "Операция (бухгалтерский и налоговый учет)" и "Корректировка записей регистров". Они много чего позволяют делать, в том числе ошибаться. У меня пока нет рецепта, как контролировать всё, что делают пользователи, и избегать ошибок. Решение одной из задач сейчас продемонстрирую.


Итак, условие задачи таково. Документ "Операция", как известно, позволяет вводить бухгалтерские проводки непосредственно в регистры бухгалтерии вручную. В документе имеются закладки "Бухгалтерский учет" и "Налоговый учет". На закладке "Бухгалтерский учет" вводятся проводки в регистр бухгалтерии "Хозрасчетный", а на закладке "Налоговый учет" – соответственно в регистр бухгалтерии "Налоговый". Чтобы избавить пользователя от рутины, на закладке "Бухгалтерский учет" имеется кнопка "Заполнить". При её нажатии на закладке "Налоговый учет" автоматически появляются соответствующие проводки налогового учёта. При этом все имеющиеся данные на закладке налогового учёта удаляются, то есть происходит перезаполнение. Всё хорошо, но, как известно, errare humanum est, то есть человеку свойственно ошибаться. Забывают нажимать кнопочку, забывают.

29 ноября 2013 г.

Когда закончится обработка

Знакома ли вам эта неловкая ситуация, когда устанавливаешь обновление конфигурации, и вдруг начинается реструктуризация таблиц. Таблицы оказываются большими, обновление затягивается, и пользователи начинают приставать с вопросами: "Ну, когда же можно будет работать?" Вы отвечаете: "Не знаю...". А они опять: "Ну хотя бы примерно?" Но разработчики платформы "1С:Предприятие", видимо, посчитали, что информировать пользователей о ходе выполнения процесса не обязательно и, соответственно, этого не сделали. И даже более того - разработчики не предусмотрели возможности прервать процесс. Ну, да ладно, оставим это на их совести. Здесь мы всё равно ничем помочь не сможем. Давайте будем делать то, что в наших силах.

В статье "Как прервать выполнение обработки в 1С 8" я рассказывал, как предоставить пользователю возможность прерывать затянувшиеся по времени процессы. Но это лишь полдела. Ведь неизбежно возникает вопрос: как пользователь должен догадаться, что процесс затянется надолго? По факту того, что он уже долго выполняется? А если остаётся совсем немного, а пользователь прервёт процесс? Решение: пользователя нужно информировать о ходе выполнения программы.

6 июня 2012 г.

Списание суммы дооценки основных средств

Всем привет! Я давно не давал о себе знать. Поэтому спешу сообщить, что я жив-здоров, чего и вам желаю. Но я здесь не для того, чтобы только поздороваться. Есть реальная тема.

Речь пойдёт об основных средствах. А если точнее - о переоценке основных средств. Однажды я уже затрагивал тему переоценки в статье «Как программно создать и заполнить документ «Корректировка записей регистров», где в качестве примера я рассматривал переоценку основных средств. Вспомним, что увеличение стоимости основных средств и накопленной амортизации отражается следующими проводками:
  • Дт. 01.01 - Кт. 83.01 - Увеличение первоначальной стоимости ОС.
  • Дт. 83.01 - Кт. 02.01 - Увеличение суммы накопленной амортизации ОС.

23 января 2011 г.

Использование рекурсии в 1С

Для справки, рекурсия - это способность процедуры или функции вызывать во время исполнения саму себя. Использование рекурсии - дело вполне обычное для высокоуровневых языков программирования. Вполне логично и естественно, что в 1С рекурсивный вызов процедур и функций тоже исправно работает.

Недавно в процессе написания одного отчета у меня возникла необходимость получить для элемента справочника родителя самого верхнего (нулевого) уровня. На скриншоте, представленном ниже, для выделенного элемента справочника «Миксер Sоlас мод. 545» родителем нулевого уровня будет группа «Бытовая техника».

28 марта 2010 г.

Как организовать подключение внешних печатных форм в документе 1C

О подключении внешних печатных форм мы уже вели речь в статье «Как сделать подключаемую внешнюю печатную форму». Сегодня речь пойдет немного о другом. Представьте, что Вы сделали некий документ в рамках типовой конфигурации и хотите в нем организовать возможность подключения внешних печатных форм. Мы, конечно, понимаем, что печатные формы подключаются не сами по себе, а с помощью специального кода.

Ничего нового мы, разумеется, придумывать не будем, а просто подсмотрим, как функционал подключения внешних печатных форм реализован в типовых документах. Все, что описано ниже, подсмотрено в типовой конфигурации «Бухгалтерия предприятия». В других типовых конфигурациях от 1С, полагаю, все будет выглядеть также.

31 января 2010 г.

Как ограничить список выбора значений агрегатного типа в 1С 7.7

В предыдущем сообщении я рассказал о том, как ограничить список выбора значений агрегатного типа в 1С 8. Сегодня рассмотрим, как эта задача решается в 1С 7.7.

Помню, когда 1С 8.0 только появилась, мне часто задавали вопрос, трудно ли после 7.7 перестроиться на новую платформу. Не знаю, кому как, а мне лично было легко. И даже не потому, что встроенный язык программирования восьмой платформы близкий родственник языку программирования 1С 7.7. Скорее потому, что программировать в 1С 8 гораздо удобнее, а язык 1С 8 более логичный, предсказуемый и дает программисту гораздо больше возможностей для управления системой. А сейчас, по прошествии некоторого времени, платформа 1С 7.7 в сравнении с 1С 8 кажется неким полуфабрикатом. И теперь уже гораздо тяжелее возвращаться к программированию в старой версии, несмотря на многолетний опыт программирования в 1С 7.7.

Вернемся к нашей задаче. В процессе повествования я буду заглядывать в предыдущую статью и проводить параллели между версиями.

23 января 2010 г.

Как ограничить список выбора значений агрегатного типа в 1С 8

Стандартный функционал для выбора значений агрегатного типа (справочников, документов, перечислений, счетов и т. п.) подразумевает выбор из всего существующего списка значений. А как быть, если список выбора необходимо ограничить? Об этом сегодня пойдет речь.

Способ 1. Использование отбора.

Функционал, который используется для интерактивного отбора в списках, можно использовать и для отбора программным способом.

Для этого нужно для события НачалоВыбора соответствующего поля ввода определить процедуру обработки и внутри процедуры программно устанавить отбор для списка.

Далее следует пример процедуры обработки события НачалоВыбора для поля ввода СтатьяПДР. Реквизит (и поле ввода, соответственно) СтатьяПДР имеет тип СправочникСсылка.ПрочиеДоходыИРасходы. Для списка справочника «Прочие доходы и расходы» устанавливается отбор по реквизиту «Вид прочих доходов и расходов» со значением «Прочие внереализационные доходы (расходы)».

28 декабря 2009 г.

О периодичности нумерации документов и проблемах с уникальностью номеров

Несколько лет назад, когда я только начинал писать на платформе 1С 8 и многое тогда мне было в новинку, я столкнулся с одной проблемой. Я писал конфигурацию с нуля для нужд нашего предприятия. До этого она уже существовала у меня на платформе 1С 7.7. Но очередную версию я решил воссоздать в 1С 8.0, чтобы получить опыт программирования в новой платформе. Задача была мне известна, но в 1С 8 оказалось не все так просто, как могло показаться сначала.

Через некоторое время мне стали поступать звонки от пользователей по одной и той же проблеме: система выдавала ругательное сообщение «Не уникальный номер документа». Анализ ситуации выявил причину некорректной работы документа. Причина крылась в периодичности автонумерации документа.

23 декабря 2009 г.

Как программно создать и заполнить документ «Корректировка записей регистров»

Документ «Корректировка записей регистров» в типовых конфигурациях 1С предназначен для ручной корректировки записей регистров накопления, зависимых регистров сведений и регистров бухгалтерии. Типичные ситуации, в которых может понадобиться документ «Корректировка записей регистров», - ввод начальных остатков, исправление ошибок в учете, отражение в учете операций, для которых в конфигурации нет специальных документов. В документе есть сервис автоматического заполнения движений с предопределенным действием «Сторно движений документа». С его помощь можно автоматически создать движения по регистрам бухгалтерии и регистрам накопления, аналогичные движениям указанного документа, но с отрицательными значениями.

Иногда количество вводимых записей по регистрам может быть велико и тогда целесообразно выполнить корректировку регистров программно. Документ «Корректировка записей регистров», как Вы уже, наверно, догадались, не совсем обычный. А иначе бы о нем не стоило и писать. В этом плане у него много общего с документом «Операция», который мы разбирали недавно.

14 декабря 2009 г.

Как прервать выполнение обработки в 1С 8

Вообще-то сегодня у меня на очереди была друга тема, а именно - программное создание документа «Корректировка записей регистров» (в продолжение «Как программно создать и заполнить документ «Операция»). Но мне очень хотелось, чтобы пример для нее был реальный, из жизни. Пример-то я придумал, но с ним вышла небольшая заминка. И чтобы пауза долго не затягивалась, я пока решил переключиться на что-нибудь другое.

Сегодня у меня совсем простая «объяснялка» на тему Как прервать выполнение обработки в 1С 8. Судя по статистике того же Яндекса, этим вопросом регулярно интересуются, поэтом я счел нужным упомянуть о нем в дневнике.

Кто работал с 1С версии 7.7, тот знает, что любую обработку можно было прервать нажатием клавиши Esc. Эта возможность была встроена непосредственно в платформу 1С версии 7.7. И пользователи, и программисты к ней привыкли, поэтому отсутствие функции прерывания в восьмой версии платформы 1С:Предприятие вызывала недоумение.

5 декабря 2009 г.

Как программно создать и заполнить документ «Операция»

В бухгалтерских подсистемах типовых конфигураций есть всем известный документ «Операция». Бухгалтерам не приходится долго объяснять, как им пользоваться. Все по-бухгалтерски просто и лаконично: счет дебета, счет кредита, субконто, количество, сумма и прочие атрибуты бухгалтерских проводок. Проводки вводятся вручную, поэтому результат абсолютно прозрачен и понятен.

Время от времени возникает необходимость массово ввести большое количество проводок. Ситуации могут быть самыми разными: загрузка остатков или наоборот - списание с учета, исправление ошибок в учете и т. д. И тут уже дело за программистом.

На первый взгляд задача может показаться простой: создать документ, заполнить таблицу проводок данными и провести. Но не тут-то было! Как только дело доходит до «Конфигуратора», начинаются сюрпризы. Оказывается, у документа «Операция» вообще нет таблицы проводок, которую мы видим в пользовательском режиме.

27 ноября 2009 г.

Как сделать подключаемую обработку для заполнения табличной части документа

Сегодня продолжим тему плагинов для типовых конфигураций 1С. Если Вы усвоили предыдущую «объяснялку» о подключаемых внешних печатных формах, то сегодняшний урок не вызовет у Вас затруднений.

Обработки для заполнения табличных частей объектов конфигурации аналогично внешним печатным формам сохраняются в справочнике «Внешние обработки». В меню нужно выбрать соответствующую команду «Дополнительные внешние обработки табличных частей». В форме справочника необходимо указать внешнюю обработку, список объектов и их табличных частей, для которых предназначена данная обработка. При необходимости, можно указать список дополнительных параметров примитивного типа в виде структуры, которые будут передаваться внешней обработке.

Элемент справочника «Внешние обработки» для обработок табличных частей

22 ноября 2009 г.

Как сделать подключаемую внешнюю печатную форму

В статье «Как правильно вносить изменения в типовые конфигурации 1С» я упомянул про подключаемые внешние печатные формы. Сделать внешнюю печатную форму совсем не сложно. Тем не менее этот вопрос часто обсуждается в Интернет-сообществах. В связи с этим сегодня объяснялка на заданную тему.

Подключение внешних печатных формы - это возможность типовых конфигураций, разработанных фирмой 1С, а не платформы «1С:Предприятие». Поэтому не удивляйтесь, если в конфигурациях других разработчиков Вы не обнаружите такой возможности.

28 октября 2009 г.

Как правильно вносить изменения в типовые конфигурации 1С

В одном из прошлых постов я начал тему изменения типовых конфигураций 1С:Предприятия. То была присказка, а сегодня о том, какие бывают изменения, как правильно вносить изменения в типовые конфигурации, чтобы избавить себя от головной боли впоследствии, и как обновлять релиз измененной конфигурации.

Окно сравнения конфигураций в 1С:Предприятие 8.1

Модификации типовых конфигураций я бы условно разделил на 3 группы:

  1. Добавление новых объектов метаданных, дополняющих функционал конфигурации.
  2. Добавление новых объектов метаданных, встраивающихся в функционал конфигурации.
  3. Внесение изменений в существующие типовые объекты метаданных.

Модификации первой группы, как правило, не влекут за собой никаких неприятных последствий. Такие объекты автономны и самодостаточны, и никак не мешают обновлению конфигурации.

10 октября 2009 г.

Изменения в типовых конфигурациях 1C: зло или благо?

В качестве эпиграфа для сегодняшней статьи я выбрал вот такую забавную картинку. А речь сегодня пойдет о модификациях типовых конфигураций 1С.

Работая с типовыми конфигурациями 1С:Предприятия, вы рано или поздно сталкиваетесь с необходимостью внесения в них изменений. Необходимость в изменении конфигурации может быть объективна. Но очень часто бывает и так, что в доработках нет особой нужды, а делаются они просто в угоду пользователям.

12 сентября 2009 г.

Для чего нужны транзакции

Недавно мне выпала честь тестировать документ, написанный чужой рукой. Сначала протестировал его в пользовательском режиме, потом потянуло меня посмотреть исходный код. Сразу обратил внимание на один участок. Выполняется запись нескольких объектов информационной базы - элемент справочника, элементы подчиненных справочников, записи регистров сведений. В общем, все эти записи логически связаны между собой. Но вот что смутило - ни обработки исключительных ситуаций, ни транзакции. При тестировании такая программа, конечно, скорее всего, выполнится без ошибок. Но в реальной работе в многопользовательском режиме есть риск возникновения исключительных ситуаций, связанных с конкурентным доступом к данным. Для разрешения проблем в подобных ситуациях используют транзакции.

Давайте разберемся, что такое транзакции, для чего они нужны, и как их правильно использовать. Транзакция - это группа последовательных операций, объединенных логикой выполнения приложения. Транзакция представляет собой логическую единицу работы с данными. Она может быть выполнена либо целиком и успешно, либо не выполнена вообще, и тогда она не должна произвести никакого эффекта. Другими словами, транзакция гарантирует логическую целостность данных.