Имя: Пароль:
1C
1С v8
Запись СФ
,
0 Валидатор
 
24.12.12
17:03
формирую СФ на основании документа, как сделать, чтобы СФ сразу записывалась, без вопроса, что типа записать не? делаю так:
РаботаСДиалогами.ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");
1 Валидатор
 
24.12.12
17:11
и как в реализацию товаров и услуг в номер документа вставить свой номер, причем так, чтобы он формировал типовым механизмом: МР0000001, и плюс мой еще номер, то есть
Номер = 15;
Номердокумента: МР0000000115 м?
2 Eugene_life
 
24.12.12
17:16
(1) А следующий номер должен быть каким? МР000...226?
3 sidalexsandr
 
24.12.12
17:17
Вопрос выдает тебе Процедура "Вопрос". Поиши и когда найдеш
напиши
Если Не СФ Тогда
    Вопрос(записать не?);
КонецЕсли;
4 Валидатор
 
24.12.12
17:25
(2) Номер - в эту переменную передаются значения из Таблицы значений, то есть их так много
5 Serg_1960
 
24.12.12
17:30
(0) Это вопрос на знание типовой конфигурации - посмотри алгоритм, не ленись, полезно будет.
(1) Никак. С "...чтобы он формировал типовым механизмом" - никак. Такой "номер" с номером автонумерации не осилить - заглючит.
6 Eugene_life
 
24.12.12
17:31
(2) Тебе лучше отказаться от автоматической нумерации совсем, генерировать и присваивать свой номер. Соответственно, проверять на уникальность - тоже самому
7 Валидатор
 
25.12.12
10:36
а разве нельзя просто добавить мой номер к автоматически генерируемому?
8 Cube
 
25.12.12
10:37
(7) Нет. Или номер автоматически или вручную. Выбор за тобой.
9 Prikum
 
25.12.12
10:38
(7) Добавить то можно, вот только зачем?
10 Валидатор
 
25.12.12
10:41
ну клиент так хочет, в общем объясняю сначала, есть обработка, которая загружает данные из файла екселя в 1ску, формируя на основании загруженных данных документы и СФ, номер документа понятное дело формируется автоматически, но в екселевском файле тоже есть номер документа, который мне так же нужно загрузить в создаваемые документы в 1С. НО есть 5 документов в экселевском файле с одинаковыми номерами, то есть, если я в номер документа в 1С буду ставить номер документа из екселя, то будет ошибка, мол номера одинаковые, поэтому и нужно сделать, чтобы номер формировался сначала сам, а потом добавлялся номер моего документа из эекселя, как то так)
11 Cube
 
25.12.12
10:43
(10) Что за бред... СФ входящие или исходящие?
12 Валидатор
 
25.12.12
10:43
входящие
13 Prikum
 
25.12.12
10:44
(10) используй префикс, а в принципе в (11) сказал правильно, что за бред!
14 Cube
 
25.12.12
10:44
(12) У входящих СФ есть реквизит "ВходящийНомер" вот туда и пиши номер, указанный на СФ, а номер документа в 1С не трогай - он внутренний.
15 Prikum
 
25.12.12
10:44
(12) для входящих можно указать 2 номера, один из которых будет формироватся автоматически
16 Валидатор
 
25.12.12
10:47
Так номер входящего СФ формируется на основании номера документа, для которого мы сф делаем так ведь? или входящий номер в сф это другой реквизит? не могу в бгу найти его
17 Cube
 
25.12.12
10:48
(16) Это другой реквизит
18 Валидатор
 
25.12.12
10:50
(17) даже если так, номер документа все равно получается останется КПФ00001 к примеру? ну то есть как он автоматически был сгенерирован?
19 Cube
 
25.12.12
10:51
20 Cube
 
25.12.12
10:52
(18) Да, номер документа ты не трогай, пусть формируется автоматически.
21 Валидатор
 
25.12.12
10:54
(20) как клиенту объяснить, что в номер документа не нужно добавлять его номер документа(из екселевского файла)?)
22 Cube
 
25.12.12
10:59
(21) А что тут объяснять? Задай им вопрос - ЗАЧЕМ? Они же в код контрагента не пихают ИНН, а могли бы, с таким подходом-то...
23 Валидатор
 
25.12.12
11:02
угу, тогда еще вопрос: у меня в экселевском файле:
НомерДокумента       Номенклатура          Цена и т.д.
1                     Гвоздь               15 ----
1                     Орех                 20
1                     молоко               10
2                      самолет             55
2                     вертолет             50

и так далее, так вот, когда номер документа один и тот же, то есть 1 к примеру, для него создается 1 документ, и в Тч этого документа пихаются 3 соответствующие номенклатуры, для номера документа 2 свой документ и так далее. Как открыть созданные документы после того как они полностью заполнятся? потому что сейчас они просто мерцают заполняясь, и в итоге открывается несколько документов, в которых по 1-2 записи, вместо 20 к примеру, но когда я открываю те же документы из Операции-Документы-Реализация, то там в ТЧ имеется нужное количество номенклатур
24 Cube
 
25.12.12
11:05
(23) Я не знаю, чего ты там наворотил в коде, что у тебя всё мерцает (новый год что ли?)), но я бы формировал документы, не показывая их пользователю до окончания работы обработки, а по окончании работы открыл (если требуется).
25 Валидатор
 
25.12.12
11:07
(24) вот если все документы создаются в цикле, как мне потом каждый из документов, что были сформированы моей обработкой открыть?
26 Валидатор
 
25.12.12
11:10
то есть открытие всех документов за дату, в которую они формировались или как?
27 Cube
 
25.12.12
11:10
(25) Запомнить ссылки на документы (или вообще сами объекты) в массиве, а потом его перебрать?
28 Валидатор
 
25.12.12
11:11
Для каждого строчка из ТаблицаЗначений Цикл
       
       строчка.НомерДокумента =  СтрЗаменить(строчка.НомерДокумента, Символы.НПП, "");
       
       Если строчка.НомерДокумента = СтарыйНомерДокумента Тогда
           
           Если ПоНаименованиюТов = Истина Тогда
               
               Если Не ЗначениеЗаполнено(НаименованиеТовара) Тогда
                   Сообщить("поиск по наименованию товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки наименований товаров");
                   Возврат;
               КонецЕсли;
               
               НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строчка.НаименованиеНоменклатуры);
               
               Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда
                   
                   Если РазрешитьСоздание = Истина Тогда
                       НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);
                       НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка;    
                   КонецЕсли;
                   
               КонецЕсли;
               
               НоваяСтрока = Документ.Товары.Добавить();
               НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию;
               НоваяСтрока.Количество = строчка.Количество;
               НоваяСтрока.Цена = строчка.Цена;
               НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
               НоваяСтрока.Сумма = строчка.Сумма;
               НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
               
               
           ИначеЕсли ПоНаименованиюТов = Ложь Тогда
               
               Если Не ЗначениеЗаполнено(КодТовара) Тогда
                   Сообщить("поиск по коду товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки кода товар");
                   Возврат;
               КонецЕсли;
               
               строчка.КодНоменклатуры =  СтрЗаменить(строчка.КодНоменклатуры, Символы.НПП, "");
               НоменклатураПоискПоКоду = Справочники.Номенклатура.НайтиПоКоду(строчка.КодНоменклатуры);
               
               Если НоменклатураПоискПоКоду = Справочники.Номенклатура.ПустаяСсылка() Тогда
                   
                   Если РазрешитьСоздание = Истина Тогда
                       НоменклатураПоискПоКоду = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);            
                       НоменклатураПоискПоКоду = НоменклатураПоискПоКоду.Ссылка;
                   КонецЕсли;
                   
               КонецЕсли;
               
               НоваяСтрока = Документ.Товары.Добавить();
               НоваяСтрока.Номенклатура = НоменклатураПоискПоКоду;
               НоваяСтрока.Количество = строчка.Количество;
               НоваяСтрока.Цена = строчка.Цена;
               НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
               НоваяСтрока.Сумма = строчка.Сумма;
               НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
               
           КонецЕсли;
           
           Для каждого стр ИЗ Документ.Товары  Цикл
               ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(стр, Документ);
               СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, Стр.Номенклатура, выбСклад);
               ЭтоКомиссия = (выбДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
               МетаданныеДока = Документ.Метаданные();
               ЗаполнитьСчета(Стр, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
           КонецЦикла;
           
           Попытка
               Документ.Записать();
               Форма = Документ.ПолучитьФорму();
               ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");                
           Исключение
               Сообщить(ОписаниеОшибки());
           КонецПопытки;
           
           
       Иначе
           Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
           СтарыйНомерДокумента = строчка.НомерДокумента;
           Документ.Комментарий = "Загружено из Excel, номер документа" + " " + строчка.НомерДокумента;
           Документ.Дата = ВыбДата;
           Документ.Организация = Организация;
           Документ.Контрагент = выбКонтрагент;
           
           СтруктураРеквизитовДокумента = Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(Документ);
           Документ.ДоговорКонтрагента = ВыбДоговор;
           Документ.ТипЦен = ВыбДоговор.ТипЦен.Наименование;
           Документ.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
           
           Документ.ВалютаДокумента = ВыбДоговор.ВалютаВзаиморасчетов.Наименование;
           Документ.Склад = ВыбСклад;
           Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, Документ.ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ВыбДата);
           
           Если ЭлементыФормы.УчитыватьНДС.Значение = Истина Тогда
               Документ.УчитыватьНДС = Истина;
           КонецЕсли;
           
           Если ЭлементыФормы.СуммаВключаетНДС.Значение = Истина Тогда
               Документ.СуммаВключаетНДС = Истина;    
           КонецЕсли;
                       
           Если ПоНаименованиюТов = Истина Тогда
               
               Если Не ЗначениеЗаполнено(НаименованиеТовара) Тогда
                   Сообщить("поиск по наименованию товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки наименований товаров");
                   Возврат;
               КонецЕсли;
               
               НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строчка.НаименованиеНоменклатуры);
               
               Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда
                   
                   Если РазрешитьСоздание = Истина Тогда
                       НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);
                       НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка;    
                   КонецЕсли;
                   
               КонецЕсли;
               
               НоваяСтрока = Документ.Товары.Добавить();
               НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию;
               НоваяСтрока.Количество = строчка.Количество;
               НоваяСтрока.Цена = строчка.Цена;
               НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
               НоваяСтрока.Сумма = строчка.Сумма;
               НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
               
           ИначеЕсли ПоНаименованиюТов = Ложь Тогда
               
               Если Не ЗначениеЗаполнено(КодТовара) Тогда
                   Сообщить("поиск по коду товара не возможен, укажите на вкладке <Настройка форматов> колонку для загрузки кода товар");
                   Возврат;
               КонецЕсли;
               
               строчка.КодНоменклатуры =  СтрЗаменить(строчка.КодНоменклатуры, Символы.НПП, "");
               НоменклатураПоискПоКоду = Справочники.Номенклатура.НайтиПоКоду(строчка.КодНоменклатуры);
               
               Если НоменклатураПоискПоКоду = Справочники.Номенклатура.ПустаяСсылка() Тогда
                   
                   Если РазрешитьСоздание = Истина Тогда
                       НоменклатураПоискПоКоду = СоздатьНоменклатуру(строчка.КодНоменклатуры, строчка.НаименованиеНоменклатуры, ГруппаТоваровНов);            
                       НоменклатураПоискПоКоду = НоменклатураПоискПоКоду.Ссылка;
                   КонецЕсли;
                   
               КонецЕсли;
               
               НоваяСтрока = Документ.Товары.Добавить();
               НоваяСтрока.Номенклатура = НоменклатураПоискПоКоду;
               НоваяСтрока.Количество = строчка.Количество;
               НоваяСтрока.Цена = строчка.Цена;
               НоваяСтрока.СтавкаНДС = строчка.СтавкаНДС;
               НоваяСтрока.Сумма = строчка.Сумма;
               НоваяСтрока.СуммаНДС = строчка.СуммаНДС;
               
           КонецЕсли;
       КонецЕсли;
       
       
       Для каждого стр ИЗ Документ.Товары  Цикл
           ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(стр, Документ);
           СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, Стр.Номенклатура, выбСклад);
           ЭтоКомиссия = (выбДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
           МетаданныеДока = Документ.Метаданные();
           ЗаполнитьСчета(Стр, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
       КонецЦикла;
       
       Попытка
           Документ.Записать();
           Форма = Документ.ПолучитьФорму();
           ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");
           //ОткрытьЗначение(Документ.Ссылка);
           
       Исключение
           Сообщить(ОписаниеОшибки());
       КонецПопытки;
       
   КонецЦикла;
вот процедура создания документов
29 Валидатор
 
25.12.12
11:12
документы записываются в переменную Документ, а дальше как?
30 Cube
 
25.12.12
11:17
(29) Всё не читал, но, примерно, так:

МассивДокументов = Новый Массив;
Для каждого строчка из ТаблицаЗначений Цикл
   ...
   Попытка
       Документ.Записать();
       Форма = Документ.ПолучитьФорму();
       ВвестиСчетФактуру(Документ, Форма, "СчетФактураВыданный");
       МассивДокументов.Добавить(Документ.Ссылка);
       //ОткрытьЗначение(Документ.Ссылка);
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

КонецЦикла;

Для Каждого ТекДокумент Из МассивДокументов Цикл
   ОткрытьЗначение(ТекДокумент);
КонецЦикла;
31 Валидатор
 
25.12.12
11:26
(30) но у меня может заполняться ТЧ документа 2мя номенклатурами, документ запишется, потом создастся другой документ, заполнится так же, потом найдется номенклатура, которую нужно вставить опять в первый документ, то будут открываться куча документов, в которые потом добавлялись данные
32 Cube
 
25.12.12
11:29
(31) А что, сам думать вообще не хочешь? Ну возьми вместо массива таблицу значений, потом свернешь её или проверяй, добавлял ты в массив такой документ или нет...
33 Валидатор
 
25.12.12
11:29
сделал просто проверку и все, вроде работает, спс
34 Валидатор
 
25.12.12
11:41
(32) только когда срабатывает ОткрытьЗначение, вылетает окошко с надписью Номенклатура, нажимаем ок, и все дальше открывается уже нормально, вот как избавиться от этого окошка?
35 Валидатор
 
25.12.12
12:11
все, разобрался, ошибка была в синтаксисе)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.