Проведение документа по регистру бухгалтерии Задача: Есть два склада Склад1 и Склад2. Нужно переместить определенное количество товара со склада1 на склад2. При списании со склада1 нужно проверять остаток, что хватает товара. Проведение сделать по регистру бухгалтерии.(проверку тоже по регистру бухгалтерии).
Решение: В Шапке документа Склад1 и Склад2. В Табличной части номенклатура и количество.
Код 1C v 8.х Процедура ОбработкаПроведения(Отказ, Режим)
Движения. Хозрасчетный. Очистить( ) ;
Движения. Хозрасчетный. Записать( ) ;
Движения. Хозрасчетный. Записывать = Истина ;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.КоличествоОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
|ГДЕ
| ХозрасчетныйОстатки.Счет = &Счет
| И ХозрасчетныйОстатки.Субконто1 = &Субконто1
| И ХозрасчетныйОстатки.Субконто2 = &Субконто2" ;
Запрос. УстановитьПараметр( "Счет" , ПланыСчетов. Хозрасчетный. ТоварыНаСкладах) ;
Запрос. УстановитьПараметр( "Субконто1" , ТекСтрокаТовары. Номенклатура) ;
Запрос. УстановитьПараметр( "Субконто2" , Склад1 ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Если Выборка. КоличествоОстатокДт < ТекСтрокаТовары. Количество Тогда
Сообщить( "На складе1 остака: " + СокрЛП( Выборка. КоличествоОстатокДт) ) ;
Отказ = Истина ;
Возврат ;
КонецЕсли ;
Иначе
Сообщить( "нет остатка на складе1" ) ;
Отказ = Истина ;
Возврат ;
КонецЕсли ;
Движение = Движения. Хозрасчетный. Добавить( ) ;
Движение. СчетКт = ПланыСчетов. Хозрасчетный. ТоварыНаСкладах;
Движение. СчетДт = ПланыСчетов. Хозрасчетный. ТоварыНаСкладах;
Движение. Период = Дата;
Движение. КоличествоКт = ТекСтрокаТовары. Количество;
Движение. ДатаЗаписи = Дата;
Движение. Содержание = "Перемещение" ;
БухгалтерскийУчет. УстановитьСубконто( Движение. СчетКт, Движение. СубконтоКт,
"Номенклатура" , ТекСтрокаТовары. Номенклатура) ;
БухгалтерскийУчет. УстановитьСубконто( Движение. СчетКт, Движение. СубконтоКт,
"Склады" , Склад1 ) ;
БухгалтерскийУчет. УстановитьСубконто( Движение. СчетДт, Движение. СубконтоДт,
"Номенклатура" , ТекСтрокаТовары. Номенклатура) ;
БухгалтерскийУчет. УстановитьСубконто( Движение. СчетДт, Движение. СубконтоДт,
"Склады" , Склад2 ) ;
КонецЦикла ;
КонецПроцедуры
Категория:
Регистры бухгалтерии Как добавить движение в регистр накопления Код 1C v 8.х НаборЗаписей = РегистрыНакопления. ОплаченоДней. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Регистратор. Установить( ЭтотОбъект. Ссылка) ;
Запись = НаборЗаписей. ДобавитьПриход( ) ;
Запись. Регистратор = ЭтотОбъект. Ссылка;
Запись. Сотрудник = Строка. сотрудник;
Запись. Год = Перечисления. Года. год2010 ;
Запись. Дней = Строка. ОплаченоДнейЧасов;
НаборЗаписей. Записать( ) ;
Код 1C v 8.х Процедура ОбработкаПроведения(Отказ, Режим)
Движения. ТоварыНаСкладах. Записывать = Истина ;
Движения. ТоварыНаСкладах. Очистить( ) ;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения. ТоварыНаСкладах. Добавить( ) ;
Движение. ВидДвижения = ВидДвиженияНакопления. Приход;
Движение. Период = Дата;
Движение. Номенклатура = ТекСтрокаТовары. Номенклатура;
Движение. Количество = ТекСтрокаТовары. Количество;
КонецЦикла ;
КонецПроцедуры
Категория:
Регистры накопления Работа с MS Word через OLE В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Код 1C v 8.х
Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( ПутьКФайлу) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
Doc = Объект. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Text = Word. S_election;
Text. WholeStory( ) ;
Text. Delete( 1 , 1 ) ;
Text. TypeText( Символы. ВК) ;
Text. TypeText( Символы. ВК) ;
Text. TypeParagraph( ) ;
Text. TypeText( "Обычный текст, набранный первую очередь" ) ;
Text. HomeKey( , 1 ) ;
Text. Font. Bold = 9999998 ;
Text. Font. Size = 14 ;
Text. Font. Name = "Verdana" ;
Text. MoveUp( , 2 ) ;
Text. HomeKey( , 1 ) ;
Text. TypeText( "Обычный текст, набранный во вторую очередь" ) ;
Text. MoveDown( , 1 ) ;
Text. EndKey( ) ;
Text. TypeParagraph( ) ;
Text. ClearFormatting( ) ;
Position = Text. Range( ) ;
Table = Doc. Tables. Add( Position, 1 , 6 , 1 , 2 ) ;
Table. Columns( 1 ) . PreferredWidth= 10 ;
Table. Columns( 2 ) . PreferredWidth= 50 ;
Table. Columns( 3 ) . PreferredWidth= 10 ;
Table. Columns( 4 ) . PreferredWidth= 10 ;
Table. Columns( 5 ) . PreferredWidth= 10 ;
Table. Columns( 6 ) . PreferredWidth= 10 ;
Row1= Table. Rows( 1 ) ;
Row1. Cells( 1 ) . Range. Text= "№ п/п" ;
Row1. Cells( 2 ) . Range. Text= "Наименование" ;
Row1. Cells( 4 ) . Range. Text= "Кол-во" ;
Row1. Cells( 3 ) . Range. Text= "Ед. изм." ;
Row1. Cells( 5 ) . Range. Text= "Цена,руб." ;
Row1. Cells( 6 ) . Range. Text= "Сумма,руб." ;
НомерСтроки = 1 ;
Для каждого СтрокаТовары Из Ссылка. Товары Цикл
Row= Table. Rows. Add( ) ;
Row. Cells( 1 ) . Range. Text= НомерСтроки;
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 2 ) . Range. Text= СтрокаТовары. Номенклатура. Наименование
+ ? ( ЗначениеЗаполнено( СтрокаТовары. ХарактеристикаНоменклатуры) ,
" (" + СтрокаТовары. ХарактеристикаНоменклатуры+ ")" , "" ) ;
Row. Cells( 4 ) . Range. Text= Строка( СтрокаТовары. Количество) ;
Row. Cells( 4 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 3 ) . Range. Text= ? ( ЗначениеЗаполнено( СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения)
, СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения. Наименование, "-" ) ;
Row. Cells( 3 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 5 ) . Range. Text= Формат( СтрокаТовары. Цена, "ЧДЦ=2" ) ;
Row. Cells( 5 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 6 ) . Range. Text= Формат( СтрокаТовары. Сумма, "ЧДЦ=2" ) ;
Row. Cells( 6 ) . Range. ParagraphFormat. Alignment = 1 ;
НомерСтроки= НомерСтроки+ 1 ;
КонецЦикла ;
Row1. Range. Font. Bold = 9999998 ;
Row1. Range. Font. Size = 14 ;
Row1. Range. Font. Name = "Verdana" ;
Row1. Range. ParagraphFormat. Alignment = 1 ;
Row = Table. Rows. Add( ) ;
Row. Range. Font. Bold = 9999998 ;
Row. Cells( 1 ) . Range. Text= "Итого:" ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
Попытка
Table. cell( НомерСтроки+ 1 , 1 ) . Merge( Table. cell( НомерСтроки+ 1 , 5 ) ) ;
Исключение
КонецПопытки ;
Попытка
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 3 ;
Row. Cells( 2 ) . Range. Text= Формат( Ссылка. Товары. Итог( "Сумма" ) , "ЧДЦ=2" ) ;
Row. Cells( 2 ) . Range. ParagraphFormat. Alignment = 1 ;
Doc. Save( ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Код 1C v 8.х Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( "C:\Users\NKrylov\Desktop\Тест.docx" ) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
ThisDocument = Word. Documents( 1 ) ;
ThisDocument. Activate( ) ;
ThisDocument. GrammarChecked= 0 ;
ThisDocument. ShowGrammaticalErrors= 0 ;
S_election = Word. S_election;
S_election. WholeStory( ) ;
S_election. Delete( 1 , 1 ) ;
S_election. ParagraphFormat. LineSpacingRule = 0 ;
S_election. ParagraphFormat. SpaceAfter = 0 ;
ThisDocument. Bookmarks. Add( "Закладка1" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "34r3 " ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка3" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка4" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка3" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Bookmark = ThisDocument. Bookmarks( "Закладка3" ) ;
Table = ThisDocument. Tables. Add( Bookmark. Range( ) , 1 , 5 , 1 , 2 ) ;
Table. Rows( 1 ) . Cells( 1 ) . Range. Text = 1 ;
Table. Rows( 1 ) . Cells( 2 ) . Range. Text = 2 ;
Table. Rows( 1 ) . Cells( 3 ) . Range. Text = 3 ;
Table. Rows( 1 ) . Cells( 4 ) . Range. Text = 4 ;
Table. Rows( 1 ) . Cells( 5 ) . Range. Text = 5 ;
S_election. MoveDown( , 1 ) ;
S_election. Delete( 1 , 1 ) ;
ThisDocument. Bookmarks( "Закладка2" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Text = S_election. Range. Text;
S_election. TypeText( Text + " sdcsdcs" ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка4" ) . Range. S_elect( ) ;
S_election = Word. S_election;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. MoveUp( , 4 , 1 ) ;
ListTemplate = Word. ListGalleries( 2 ) . ListTemplates( 1 ) . ListLevels( 1 ) ;
ListTemplate. NumberFormat = "%1." ;
ListTemplate. NumberStyle = 0 ;
S_election. Range. ListFormat. ApplyListTemplateWithLevel( Word. ListGalleries( 2 ) . ListTemplates( 1 ) ) ;
S_election. EndKey( 6 ) ;
Picture = S_election. InlineShapes. AddPicture( "C:\Users\NKrylov\Desktop\Новый.bmp" , Ложь , Истина ) ;
Picture. Height = 100 ;
Picture. Width = 150 ;
Shape = Picture. ConvertToShape( ) ;
Shape. WrapFormat. Type = 0 ;
ThisDocument. Save( ) ;
Объект = Неопределено ;
Исключение
ThisDocument. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Автор:
Крылов Николай Категория:
Работа с Microsoft Office и OpenOffice Чтение(СрезПоследних) и Запись Регистра Сведений подчиненного регистратору(Обработка проведения) Для чтения данных из регистра сведений необходимо создать новый отбор и воспользоваться методами СрезПервых или СрезПоследних или использовать запрос как показано в примере обработки далее. Пример кода иллюстрирует эти методы:
Код 1C v 8.х Отбор = Новый Структура( "ТипЦен, Номенклатура" ) ;
Отбор. ТипЦен = ТипЦены;
Отбор. Номенклатура = Номенклатура;
Цена = РегистрыСведений. ЦеныНоменклатуры. СрезПоследних( РабочаяДата( ) , Отбор) ;
Для записи в подчиненный регистратору регистр сведений Цены номенклатуры 1С использует механизмы проведения, а именно процедуру
Обработка Проведения , которые можно сформировать в конфигураторе, используя помощник - конструктор движений:
Код 1C v 8.х Процедура Обработка Проведения(Отказ, Режим)
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения. ЦеныНоменклатуры. Добавить( ) ;
Движение. Период = Дата;
Движение. ТипЦен = ТекСтрокаТовары. ТипЦен;
Движение. Номенклатура = ТекСтрокаТовары. Номенклатура;
Движение. ХарактеристикаНоменклатуры = ТекСтрокаТовары. ХарактеристикаНоменклатуры;
Движение. Валюта = ТекСтрокаТовары. Валюта;
Движение. Цена = ТекСтрокаТовары. Цена;
Движение. ЕдиницаИзмерения = ТекСтрокаТовары. ЕдиницаИзмерения;
Движение. ПроцентСкидкиНаценки = ТекСтрокаТовары. ПроцентСкидкиНаценки;
Движение. СпособРасчетаЦены = ТекСтрокаТовары. СпособРасчетаЦены;
КонецЦикла ;
КонецПроцедуры
Категория:
Регистры сведений Создание документа Word без использования макетов и пример создания таблицы и её оформление. Кроме прочего в статье присутствует пример создания таблицы с любым количеством колонок и столбцов. Несколько строк с форматированием текста и таблицы. Создание "объединенных" ячеек.
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Исп. переменные: "ПутьКФайлу" - строка. Полное имя файла в формате MSWord.
"Ссылка" - ДокументСсылка (в моем случае - счет).
Вот текст модуля:
Код 1C v 8.х Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( ПутьКФайлу) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
Doc = Объект. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Text = Word. S_election;
Text. WholeStory( ) ;
Text. Delete( 1 , 1 ) ;
Text. TypeText( Символы. ВК) ;
Text. TypeText( Символы. ВК) ;
Text. TypeParagraph( ) ;
Text. TypeText( "Обычный текст, набранный первую очередь" ) ;
Text. HomeKey( , 1 ) ;
Text. Font. Bold = 9999998 ;
Text. Font. Size = 14 ;
Text. Font. Name = "Verdana" ;
Text. MoveUp( , 2 ) ;
Text. HomeKey( , 1 ) ;
Text. TypeText( "Обычный текст, набранный во вторую очередь" ) ;
Text. MoveDown( , 1 ) ;
Text. EndKey( ) ;
Text. TypeParagraph( ) ;
Text. ClearFormatting( ) ;
Position = Text. Range( ) ;
Table = Doc. Tables. Add( Position, 1 , 6 , 1 , 2 ) ;
Table. Columns( 1 ) . PreferredWidth= 10 ;
Table. Columns( 2 ) . PreferredWidth= 50 ;
Table. Columns( 3 ) . PreferredWidth= 10 ;
Table. Columns( 4 ) . PreferredWidth= 10 ;
Table. Columns( 5 ) . PreferredWidth= 10 ;
Table. Columns( 6 ) . PreferredWidth= 10 ;
Row1= Table. Rows( 1 ) ;
Row1. Cells( 1 ) . Range. Text= "№ п/п" ;
Row1. Cells( 2 ) . Range. Text= "Наименование" ;
Row1. Cells( 4 ) . Range. Text= "Кол-во" ;
Row1. Cells( 3 ) . Range. Text= "Ед. изм." ;
Row1. Cells( 5 ) . Range. Text= "Цена,руб." ;
Row1. Cells( 6 ) . Range. Text= "Сумма,руб." ;
НомерСтроки = 1 ;
Для каждого СтрокаТовары Из Ссылка. Товары Цикл
Row= Table. Rows. Add( ) ;
Row. Cells( 1 ) . Range. Text= НомерСтроки;
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 2 ) . Range. Text= СтрокаТовары. Номенклатура. Наименование
+ ? ( ЗначениеЗаполнено( СтрокаТовары. ХарактеристикаНоменклатуры) ,
" (" + СтрокаТовары. ХарактеристикаНоменклатуры+ ")" , "" ) ;
Row. Cells( 4 ) . Range. Text= Строка( СтрокаТовары. Количество) ;
Row. Cells( 4 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 3 ) . Range. Text= ? ( ЗначениеЗаполнено( СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения)
, СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения. Наименование, "-" ) ;
Row. Cells( 3 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 5 ) . Range. Text= Формат( СтрокаТовары. Цена, "ЧДЦ=2" ) ;
Row. Cells( 5 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 6 ) . Range. Text= Формат( СтрокаТовары. Сумма, "ЧДЦ=2" ) ;
Row. Cells( 6 ) . Range. ParagraphFormat. Alignment = 1 ;
НомерСтроки= НомерСтроки+ 1 ;
КонецЦикла ;
Row1. Range. Font. Bold = 9999998 ;
Row1. Range. Font. Size = 14 ;
Row1. Range. Font. Name = "Verdana" ;
Row1. Range. ParagraphFormat. Alignment = 1 ;
Row = Table. Rows. Add( ) ;
Row. Range. Font. Bold = 9999998 ;
Row. Cells( 1 ) . Range. Text= "Итого:" ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
Попытка
Table. cell( НомерСтроки+ 1 , 1 ) . Merge( Table. cell( НомерСтроки+ 1 , 5 ) ) ;
Исключение
КонецПопытки ;
Попытка
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 3 ;
Row. Cells( 2 ) . Range. Text= Формат( Ссылка. Товары. Итог( "Сумма" ) , "ЧДЦ=2" ) ;
Row. Cells( 2 ) . Range. ParagraphFormat. Alignment = 1 ;
Doc. Save( ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Написал Nikola23 - http://infostart.ru/public/67727/ Категория:
Работа с Microsoft Office и OpenOffice