Получение таблицы динамического списка

Динамический список удобен для использования в интерфейсе, но когда дело касается получения данных, отображаемых в списке для программной обработки, то приходится пользоваться средствами СКД, как это делать приведено ниже:

&НаСервере
Функция Получить_ТЗ_Из_ДинамическогоСписка()
// получаем схему
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
// получаем настройки
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
// можем добавлять произвольные отборы дополнительно
// НовыйЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
// НовыйЭлементОтбора .ЛевоеЗначение = …
// УстанавливаемыйЭлементОтбора.ВидСравнения = …
//УстанавливаемыйЭлементОтбора.ПравоеЗначение =
// УстанавливаемыйЭлементОтбора.Использование = Истина;

// создаем компоновщик макета и формируем выборку в ТЗ
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

ТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТЗ);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат ТЗ;

КонецФункции

Как узнать когда был создан документ в 1С v8 без журнала регистрации

Иногда необходимо знать дату создания документа, ошибочно полагать, что поле «Дата» содержит именно дату создания, тут можно проанализировать идентификатор объекта:

Функция ДатаСозданияСсылки(Ссылка)
// любая ссылка хранит в себе уникальный идентификатор
ГУИД = Ссылка.УникальныйИдентификатор();
// идентфикатор хранит в себе дату и время создания
Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
Разрядность = СтрДлина(Строка16);
ЧислоСек = 0;
// время создания хранится в секундах 
// от 15 октября 1582 года 
// в шестнадцатиричной системе
Для Позиция = 1 По Разрядность Цикл
     ЧислоСек = ЧислоСек +
          Найти(«123456789abcdef»,Сред(Строка16Позиция1))*
          Pow(16Разрядность — Позиция);

КонецЦикла;
ЧислоСек = ЧислоСек / 10000000;
// вычисляем смещение от начальной точки
датаТ = Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
// составляем только дату 
датаТ = Дата( Год(датаТ), Месяц(датаТ), День(датаТ), 00, 00, 00);
Возврат датаТ;

КонецФункции

Чтение DBF файлов и Memo полей при помощи 1С

Для чтения файлов DBF из 1С можно использовать объект XBase, однако до того момента как понадобится чтение полей Memo. В этом случае XBase использовать бесполезно, требуется другой подход. Для примера возьмем файл «C:\Base\MyFile.dbf» Решение проблемы на клиенте приведено ниже:

ИмяФайла = «MyFile»;
ИмяПапки = «C:\Base»;
// создаем объект доступа к БД
oConn = Новый COMОбъект(«ADODB.Connection»);
// задаем строку-соедние с указанием расположения БД
oConn.ConnectionString = «provider=vfpoledb.1;Data Source =»
+ИмяПапки + «;Mode=ReadWrite»;
// SQL запрос делается прямо по имени файла
Query = «Select * From «+ИмяФайла+«.dbf»;
// создаем объект доступа к набору записей
record = New COMОбъект(«ADODB.Recordset»);
Попытка
     record.Open(Query, oConn); // выполняем запрос к таблице
Исключение
     Сообщить(«Ошибка при обращении к таблице: «+ОписаниеОшибки());
     Возврат Неопределено;
КонецПопытки;
// выводим типы колонок таблицы
// тип это число, например:

// 
11 —Булево, 129 — Строка, 131 — Число, 201 — Мемо
Для каждого Field из record.Fields Цикл
     Сообщить(«Поле «Field.Name + » имеет тип « + Строка(Field.Type));
КонецЦикла;
// выводим строки выборки
Пока Не record.EOF() Цикл
     Сообщить(«Контрагент « + Строка(record.Fields(
«Customer»).Value) + » имеет ИНН «Строка(record.Fields(«Inn«).Value) );
     record.MoveNext();
КонецЦикла;

Для работы этого кода необходимо установить соответствующий драйвер Fox Pro и можно скачать программу для просмотра файлов DBF. Без установки драйвера никакими возможностями 1C мемо поля не прочитать.

Скачать драйвер: Fox pro
Скачать программу просмотра DBF файлов: Редактор DBF

Хочу изучить бухгалтерский учет

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

Что же такое организация и зачем она нужна?

cowОрганизацию можно сравнить с деревенской коровой, дающей молоко (деньги или товар). За коровой следят, ее лечат и оберегают от нападок диких животных. У каждой коровы есть один или несколько хозяев, есть пастбище, пастухи и охранные собаки. Коров никто не кормит, они сами ищут корм на пастбище. От коров, не дающих молоко, хозяева быстро избавляются. Что бы стадо не посягнуло на территорию, где ему быть не следует, существует пастух и собаки. Они же оберегают стадо от желающих легкой наживы. Если пастуху не перепадает что-то от хозяев какой либо коровы, то с этой коровой, как правило, случается что-то непредвиденное. Никто не будет работать за просто так. Незаменимых персон в этой системе нет, могут быть заменены коровы, пастухи и собаки. Коровы могут вступать в конфликт друг с другом и с охраняющими их пастухами и собаками. Дело даже может закончиться плачевно для одной или другой стороны, но для основного стада все останется как было. Все участники знают свои роли и придерживаются правил поведения. Каждая корова обладает своим характером и хозяева стараются учитывать это для повышения удоя, но любая наглость со стороны коровы как и со стороны хозяев пресекается. Стоит заметить, что корова и ее хозяин это не одно и то же! Хозяин может пустить в расход корову, при этом оставшись невредим.
Выводы
1. Организация должна уметь приносить прибыль;
2. У любой организации есть хозяева;
3. Чтобы организация могла заниматься делом ей необходимо обеспечить необходимые условия;
4. Организация подчиняется определенным правилам игры.

Зачем нам бух учет если есть корова и все идет хорошо?

Итак, мы счастливые обладатели коровы, приносящей молоко. Наш бизнес устроен не хитро: раз в день корова доится, часть молока оставляем себе, часть продаем или меняем на другие ценности у участников рынка. Что дальше? Неужели этого мало? Корову нельзя просто так вывести на пастбище,  это территория государства, за пользование пастбищем и услугами пастуха надо платить, без пастуха за корову никто не отвечает. Более того, плата зависит от удоя: чем больше удой тем больше плати и оплата не может быть ниже определенного уровня. Бедолагам тут не место.

Продолжение следует …

Напишите нам что вызывает у вас трудности в понимании бухучета и мы опубликуем ответ на этой странице
info@disk1c.ru

Диалог сохранения файла в интерфейсе Такси

Фирма 1С решила отказаться от модальных форм в интерфейсах web и Такси, это значит, что попытка просто сохранить файл через диалог потребует больше усилий чем раньше. В примере ниже надо НА КЛИЕНТЕ просто создать текстовый файл и сохранить его куда укажет пользователь:

&НаКлиенте
Процедура НажатиеКнопкиСохранитьФайл() 

// создаем на клиенте текстовый файл
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«txt»);
// создаем документ который надо записать
ТД = новый ТекстовыйДокумент;
ТД.ДобавитьСтроку(«Некоторый текст»);
ТД.Записать(ИмяВременногоФайла);
// помещаем файл в хранилище
Адрес
= ПоместитьВоВременноеХранилище(новый ДвоичныеДанные(ИмяВременногоФайла ));
// описание события после выбора файла пользователем
ОписаниеОповещения = Новый ОписаниеОповещения(«ОбработкаСохраненияФайлов», ЭтаФорма);
// место хранения файла в 1С
Файл = Новый ОписаниеПередаваемогоФайла(,Адрес);
// создаем перечень файлов
ПолучаемыеФайлы = Новый Массив;
ПолучаемыеФайлы.Добавить(Файл);
// создаем диалог сохранения файла
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
// выводим диалог на экран, после выбора файла 
// вызовется процедура ОбработкаСохраненияФайлов
НачатьПолучениеФайлов(ОписаниеОповещения,ПолучаемыеФайлы, ДиалогОткрытияФайла, Истина);

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаСохраненияФайлов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт
// какие-то действия
// …

КонецПроцедуры

Работа с Access из 1Cv8.3

В некоторых случаях удобно выгрузить из 1С какие либо данные в Access для дальнейшей работы. Работа осуществляется через ADODB.Connection, причем возможно использование языка запросов Transact SQL. Пример ниже:

adOpenForwardOnly = 0; // код состояния
adLockPessimistic = 2; // режим блокировок
adOpenStatic = 3; // режим открытия соединения
adStateOpen = 1; // код открытия соединения
ИмяФайла = «C:\MyFile.accdb»; // имя файла 

// строка подключения к файлу БД Access
conn_str = «Provider=Microsoft.ACE.OLEDB.12.0; Data Source=» + ИмяФайла + «;»»»;
cn = Новый COMОбъект(«ADODB.Connection»); // объект для соединения
cn.Open(conn_str); // соединяемся с БД Access
Если (cn.State <> adStateOpen ) тогда // проверка открытия соединения
     Сообщить(«Не удалось открыть ADODB.Connection»);
     Возврат;
КонецЕсли;
rs = Новый COMОбъект(«ADODB.Recordset»); // объект для обхода строк
rs_select = Новый COMОбъект(«ADODB.Recordset»);
strSQL = «customers»; // таблица Access, с которой имеем дело
rs.Open(strSQL, cn, adOpenStatic, adLockPessimistic); // открываем таблицу 
strSQL = «select name from customers where id=100»; // sql запрос к таблице
rs_select.Open(strSQL, cn, adOpenStatic, adLockPessimistic); // делаем выборку
Если rs_select.EOF = Ложь тогда // проверка наличия записей в выборке
     Сообщить(«Нет строки с таким идентификатором: «);
     rs_select.Close(); // закрываем выборку
     rs_select = Неопределено; // уничтожаем лишние данные

КонецЕсли;
Попытка
rs.AddNew(); // добавить новую строку в табл  customers
rs.Fields(0) .Value = 250; // имя нового контрагента
rs.Fields(1) .Value = «Новый контрагент»; // имя нового контрагента
rs.Update(); // записать новую строку в таблицу
// вывод на печать строки по колонкам
Для Каждого col Из rs.Fields Цикл
     Сообщить(«Колонка « + col.Name + » = « + Строка(col.Value));
КонецЦикла;
Исключение
// исключение может быть вызвано наличием сроки с таким же 
// идентификатором
Если  rs.ActiveConnection.Errors(0).Number = -2147217887  тогда
     Сообщить(«Такая запись уже есть в таблице»);
Иначе
     Сообщить(ОписаниеОшибки());// другая ошибка
КонецЕсли;
КонецПопытки;
// закрываем выборку, если она открыта
Если (rs.state = adStateOpen) тогда
      rs.Close();
КонецЕсли;
// закрываем соединение с БД, если оно открыто
Если cn.state = adStateOpen тогда
      cn.Close();
КонецЕсли;
// уничтожаем лишние данные
rs = Неопределено;
cn = Неопределено;

Типичные вопросы на собеседовании

Часто на собеседованиях задают вопросы для проверки «на дурака». Ниже приведены подобные вопросы и ответы на них.

  1. Есть емкость 3 и 5 литра, надо переливая из одной в другую воду, получить 4 литра, итак: наливаем полностью 5 литров, из нее заполняем 3-х литровый сосуд, выливаем все из трехлитрового и заливаем туда оставшиеся 2 литра из 5-ти литровой. Заполняем полностью 5 литровую и отливаем из нее 1 литр что бы заполнить полностью 3-х литровую емкость, осталось 4 литра в 5-ти литровой емкости.
  2. Есть три банки, в первой конфеты со вкусом яблока, во второй — конфеты со вкусом груши, в третьей — и те и те (микс). Каждая из банок подписана неправильно, т.е. например, на банке с яблочными конфетами «микс», на миксе — «груша», на груше — «яблоко». Вопрос: сколько раз надо выбрать конфету что бы определить в какой банке какие конфеты? Ответ: 1 раз. Выбираем конфету из банки с надписью «микс», мы знаем, что это точно не микс, поэтому определяем вид конфеты, например в «миксе» нашли яблоко, это яблочные конфеты, следовательно, в банке с надписью «груша» будет не груша, но и не яблоко, т.к. яблоко мы уже нашли, значит в банке с надписью «груша» будет микс, остается одна банка с надписью «яблоко» и это будет груша, т.к. больше ничего не остается.
  3. На вопрос «Почему вы выбрали 1С» можете смело отвечать: «При помощи этой среды разработки можно за минимальное время получить готовую для внедрения систему для учета и обработки данных как на локальном компьютере, так и в глобальной сети.»
  4. Перед тем как идти на собеседование посмотрите сайт организации, почитайте основную страницу, обратите внимание на продукцию или услуги, запомните основные. Вас обязательно спросят «Что вы знаете о нашей компании?».
  5. Вас могут спросить о том как вы относитесь к фрилансу (заработку на стороне), это вопрос с подвохом, если вы будете говорить с радостью, что конечно соглашаетесь на дополнительную подработку, то скорее всего собеседование вам не пройти. Говорить что вы отказываетесь полностью от фриланса, в общем, может положительно отразиться на выбор в пользу вас. Как правило, люди отвечают «иногда бывает».
  6. Если вы не знаете ответ на какой либо вопрос, говорите «На данный момент точно ответить на вопрос не могу, надо освежить его в памяти, не хочу врать».
  7. Когда вас просят задавать вопросы по организации, спросите сперва как долго организация существует на рынке, количество сотрудников, как долго в среднем работает сотрудник, насколько устойчива организация на рынке, затем, самый главный вопрос: «Каким образом осуществляется получение, выполнение заявок на программирование/консультацию, как ведется учет заявок, расстановка приоритетов и распределение ответственности за результат выполнения заявок?». Ответ на этот вопрос покажет вам отношение организации к вопросам автоматизации, чем более бюрократизировано выполнение заявок тем серьезнее можно считать компанию, хотя бывают случаи избыточной бюрократизации.
  8. Заканчиваться собеседование может двумя вариантами: «мы согласны вас взять» и «мы с вами свяжемся и сообщим о результате собеседования». Во втором случае смело ищите новые варианты трудоустройства, один/два предложения при упорном поиске должны поступить, обычно об отказе не сообщают.

Вопросы на знание 1С

  1. Какие бывают регистры накопления?
    Ответ: Обороты и Остатки
  2. В каких случаях для регистра сведений не создается временных таблиц?
    Ответ: для непериодического регистра
  3. Для чего в запросе нужно выражение «Разрешенные»?
    Ответ: для активизации ограничения доступа в соответствии с правами пользователя
  4. Для чего в виртуальных таблицах нужны параметры?
    Ответ: для ускорения выполнения выборки данных в сравнении с отбором после создания виртуальной таблицы
  5. Как будет запрос работать быстрее: при использовании вложенных запросов или временных таблиц?
    Ответ: использовании временных таблиц, 1С не рекомендует использовать вложенные запросы.
  6. Что такое РЛС (RLS)?
    Ответ: Система ограничения доступа к данным на уровне записей
  7. Приведите пример бухгалтерских проводок по продаже товара?
    Ответ: Дт 62 (Расчеты с клиентами) Кт 90 (субсчет Выручка)
    Дт 90 (субсчет НДС) Кт 68 (НДС)
    Дт 90 (субсчет Себестоимость) Кт 41 (Товары)
  8. На каком счете учитываются расчеты с поставщиками?
    Ответ: 60
  9. На каком счете учитывается зарплата сотрудников?
    Ответ: 70
  10. На каком счете учитываются основные средства?
    Ответ: 01
  11. На каком счете учитывается финансовый результат?
    Ответ: 99
  12. Что такое затратные счета?
    Ответ: счета, на которых собираются затраты, эти счета обнуляются в конце каждого месяца

Напишите нам какие вопросы вам задавали на собеседовании и
мы опубликуем ответ на этой странице
info@disk1c.ru

Вывод содержимого файлов на HTML форму в 1Сv8

Нынешние тенденции разработок решений на базе платформы 1С стремительно переходят в область  интернет-технологий, часто требуется обеспечить вывод на управляемую форму содержимое того или иного файла. В В большинстве браузеров по умолчанию есть возможность просмотра PDF файлов и на большинстве компьютеров стоит MS Office. Как правило, используются файлы следующих форматов: gif, tif, jpeg, jpg, png, bmp, xls, xlsx, xml, pdf, doc, docx, rtf. Их можно разделить на картинки и документы Office. Напомню, что цель всех функций — преобразовать файл в формат PDF и отобразить его на форме HTML. Итак, пусть на форме есть элемент управления с именем fHtml и есть файл с именем C:\MyFile.pdf, код HTML для вывода файла на страницу будет таким:

<html>
<body>
<object data=»file:///C:/MyFile.pdf» type=»application/pdf» width=»90%» height=»90%»>
</object>
</body>
</html>

Далее нам надо из файла любого формата получить файл pdf.

Текстовый файл, формат txt

_word = New COMОбъект («Word.Application»);// запускаем word
_word.DisplayAlerts = 0// запрещаем сообщения, они блокируют word
doc = _word.Documents.Add(); // добавляем документ
doc.Activate(); // активируем текущий документ
ЧТ = новый ЧтениеТекста(ИмяФайла_txt); // чтение нашего txt файла
_word.Selection.TypeText(ЧТ.Прочитать()); // вставляем текст в ткеущий документ
wdExportFormatPDF = 17; // код экспорт а в PDF
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем текстовый формат в PDF при сохранении документа
doc.ExportAsFixedFormat (ИмяФайлаPDF, wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);
doc.Close( False ); // закрываем документ
_word.Quit(); // закрывам word

Документ MS Word, форматы doc, docx, rtf

doc = _word.Documents.Open(ИмяФайла); // просто открываем файл
wdExportFormatPDF
= 17; // код экспорт а в PDF

ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем в формат PDF при сохранении документа
doc.ExportAsFixedFormat (ИмяФайлаPDF, wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);

Картинки, форматы gif, tif, jpeg, jpg, png, bmp

doc = _word.Documents.Add();// добавляем документ
s = doc.InlineShapes.AddPicture(ИмяФайла, False, True); // добавляем картинку в документ
wdExportFormatPDF = 17; // код экспорта в PDF
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
// преобразуем в формат PDF при сохранении документа

doc.ExportAsFixedFormat (ИмяФайлаPDF , wdExportFormatPDF, 0, false, 0, 1, 1, 0, True, True, 0, True, True, False);

Документ Excel, форматы xls, xlsx, xml

_Excel = New COMОбъект («Excel.Application»); // запускаем Excel
doc = _Excel.Workbooks.Open(ИмяФайла); // открываем файл
ИмяФайлаPDF = ПолучитьИмяВременногоФайла(«pdf»);
doc.ExportAsFixedFormat (0, ИмяФайлаPDF , 0);// сохраняем файл в формате PDF
doc.Close( False );  // закрываем документ
_Excel.Quit(); // закрываем Excel

Управление Excel из 1С без знания команд Excel

Иногда требуется автоматически из 1С обработать некоторый файл Excel используя возможности самого Excel. Кажется, что надо кидаться в Гугл или Яндекс искать описание тех или иных функций Excel, но оказывается, что можно заставить Excel самому писать необходимые программы. Представим, что надо создать книгу Excel, заполнить первый лист номерами от 1 до 20 и сохранить файл. Что делаем:

Записываем макрос Excel

  1. Запускаем Excel, записываем макрос

e_1

2. В появившемся окне нажимаем «Ок» и запись макроса (программы) начата

e_2

3. Заполняем лист нужными нам данными — позиционируем на первую ячейку, в следующую водим формулу (предыдущая ячейка + 1)

e_3

4. Результат вычисления

e_4

5. Хватая за правый нижний угол, автоматически заполняем нижестоящие 18 ячеек

e_5

6. Все, что надо выполнено, останавливаем запись макроса

e_6

7. Для просмотра сгенерированного Excel кода заходим в макросы

 e_7

8. И открываем на редактирование созданный нами макрос

e_11

9.  Программный код макроса

e_8

Его можно напрямую скопировать в 1С, только понадобится немного изменить для совместимости, ниже приведен аналог кода в 1С, а в комментариях приведен код из Excel:

// Range(«A1»).Select
Лист.Range(«A1»).Select();
// ActiveCell.FormulaR1C1 = «1»
Эксель.ActiveCell.FormulaR1C1 = «1»;
//Range(«A2»).Select
Лист.Range(«A2»).Select();
//ActiveCell.FormulaR1C1 = «=1+R[-1]C»
Эксель.ActiveCell.FormulaR1C1 = «=1+R[-1]C»;
//Range(«A2»).Select
Лист.Range(«A2»).Select();
//Selection.AutoFill Destination:=Range(«A2:A20»), Type:=xlFillDefault
Эксель.Selection.AutoFill(Лист.Range(«A2:A20»), 0);
//Range(«A2:A20»).Select
Лист.Range(«A2:A20»).Select();

В качестве примечания следует добавить, что перед обращением к Excel следует создать соответствующий СОМ объект, книгу и лист:

Попытка
     Эксель = новый COMОбъект(«Excel.Application»);
Исключение
     Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
// добавить книгу
Книга = Эксель.WorkBooks.Add();
// добавить лист на книгу
Лист = Книга.WorkSheets.Add();

Получение и открытие формы элемента справочника или документа 1с 8.3

В некоторых случаях надо на клиенте не просто открыть форму элемента справочника или документа, но и получить саму форму для дальнейших действий с ней, для этого можно воспользоваться таким кодом:

ПараметрыФормы = Новый Структура(«Ключ», СсылкаНаНоменклатуру);
Форма = ПолучитьФорму(«Справочник.Номенклатура.ФормаОбъекта», ПараметрыФормы);
Форма.Открыть();