Имя: Пароль:
1C
1С v8
Если есть такой документ, тогда не создавать
0 Snail
 
03.11.20
14:40
Написал обработку загрузки документов из эекселя, как сделать проверку на одинаковые документы? Выбрал файл эксель, создалось куча документов, выбрал опять этот файл и получил по 2 копии. Подскажите как сделать)
1 Волшебник
 
03.11.20
14:43
НайтиПоНомеру()
2 Snail
 
03.11.20
14:43
Спасибо!
3 Snail
 
03.11.20
14:45
А номер разве будет в новом документе перед записью?
4 Aleksey
 
03.11.20
14:47
(3) А что значит есть такой документ? По какому признаку ты его идентифицируешь? Разве в екселе не может быть 2 одинаковых строки? И как понять что это новый или просто такая же строка, но с другой суммой?
5 Fish
 
03.11.20
14:52
(0) Сделай проверку на уникальность перед созданием.
6 ГдеСобака Зарыта
 
03.11.20
14:56
Нужно Excel засунуть во временную таблицу запроса, соединить с существующими документами по ключевым полям и ГДЕ СуществующиеДоки.Ссылка ЕСТЬ NULL.
7 Snail
 
03.11.20
14:58
Алексей,
Авто после записи = истина
Контрагент
Водитель
Сума
Дата
Вот такую проверку
8 ДенисЧ
 
03.11.20
14:59
(7) Критерий есть. Что мешает вставить проверку и поиск по этому критерию?
9 Волшебник
 
03.11.20
15:00
(8) Вероятно, ошибка. Поле "Сума" не обнаружено
10 ГдеСобака Зарыта
 
03.11.20
15:01
(8) Полагаю у ТС отсутствует скилл написания запросов)
11 Snail
 
03.11.20
15:02
ГдеСобакаЗарыта, да не прокачал еще )
12 Snail
 
03.11.20
15:02
Сума = Сумма опечатался
13 Волшебник
 
03.11.20
15:02
Пахнет запросом в цикле...
14 ДенисЧ
 
03.11.20
15:03
(9) от сумы не зарекаются.
15 Snail
 
03.11.20
15:04
Делать выборку документов и перед записью проверять?
Будет цикл в цикле
16 Snail
 
03.11.20
15:04
Там и так 2 цикла один на шапку документа, второй на табличную часть
17 Волшебник
 
03.11.20
15:06
(16) Надо ещё проверять дубли строк. Нужен запрос во вложенном цикле
18 АгентБезопасной Нацио
 
03.11.20
15:08
(9) от сумы не зарекаются
19 piter3
 
03.11.20
15:10
А сколько записей всего?
20 Snail
 
03.11.20
15:16
документов создает от 3 до 70 с одного файла
21 ГдеСобака Зарыта
 
03.11.20
15:16
Еще хороший вариант - чтоб не случалось "Выбрал файл эксель, создалось куча документов, выбрал опять этот файл и получил по 2 копии", нужно после первой загрузки файл удалять. SHIFT+DEL. И тогда второй не будет. Ваш Кэп
22 Snail
 
03.11.20
15:20
ГдеСобакаЗарыта, это было бы идеально, но..
При создании документа есть реквизит Авто = Истина
После того как что-то поменять в документе Авто = Ложь
И такой документ уже нельзя удалять :(
И нужно чтобы после повторной загрузки создавать копию такого документа
23 Snail
 
03.11.20
15:21
Проверки на  Авто и Контрагент было бы достаточно
24 Aleksey
 
03.11.20
15:28
(23) Без даты не взлетит
25 УдавВПопугаях
 
03.11.20
15:28
что за белеберда..
26 АгентБезопасной Нацио
 
03.11.20
15:28
(22) Нужно - "Сделай!"©
27 УдавВПопугаях
 
03.11.20
15:29
сколько раз пользователь жмет кнопку столько документов и создается, жжесть
28 АгентБезопасной Нацио
 
03.11.20
15:30
(27) ну чего уж ты сразу так... можно создавать не "сколько жмет на кнопку", а вдвое больше. Тебе что, уидов жалко?
29 Snail
 
03.11.20
15:34
ВыборкаДокументов = Документы.РасходнаяНакладная.Выбрать(НачалоДня(ТекущаяДата()),КонецДня(ТекущаяДата()),  КакТутУказатьКонтрагента);
30 УдавВПопугаях
 
03.11.20
15:37
ну ладно, он пытается идентифицировать типа копии, спрашивает тут, но ёпырст, откуда мы знаем как он, что и когда грузит, где будет копия, а где нет. Один раз для одного контрагента, для одной номенклатуры, раз в месяц, раз в жизни или как?
ну после (7) все сразу стало понятно

"как сделать проверку на одинаковые документы?"
ТС, что означает слово одинаковые? по какому признаку?
31 ГдеСобака Зарыта
 
03.11.20
15:38
(27) Не самое страшное. Я видел обработку загрузки из файла, которая сначала удаляла документы за период, указанный в файле, а потом загружала новые. Один раз ей подсунули случайно левый файл, обработка период в нем не нашла и тупо грохнула все доки поступлений в базе. Типа период не указан, значит выбираем все. Заказчик очень расстроился.
32 УдавВПопугаях
 
03.11.20
15:39
(23) недостаточно
33 Snail
 
03.11.20
15:41
(30) один день,  однин контрагент
34 УдавВПопугаях
 
03.11.20
15:42
(31) гггггг
у нас однажды грохнули ЗначенияСвойствОбъектов, после нескольких лет активного использования механизма где только можно, расстроились все, ну копия конечно разрулила
35 АгентБезопасной Нацио
 
03.11.20
15:42
(31)  период не указан, значит выбираем все. Вид документа не указан - удаляем все.
В пределе: пустой файл удаляет базу :-)
36 УдавВПопугаях
 
03.11.20
15:44
(33) а точно? если вкратце, что за "бизнес процесс"? типа инкасация что ли какая то?
37 Snail
 
03.11.20
15:46
Заказы булок на магазины
38 УдавВПопугаях
 
03.11.20
15:46
один контрагент, а водителей 2 не может быть?
глупый вопрос, конечно может, если даже не в реальности, то по ошибке заполнения экселя, проверочка нужна
(37) а хде номенклатура тогда
39 Snail
 
03.11.20
15:47
В файле эксель есть код водителя
40 Snail
 
03.11.20
15:51
сделать выборку документов за день по контрагенту?
Если есть в выборке такой контрагент и Авто = Истина - не создавать документ
41 УдавВПопугаях
 
03.11.20
16:03
(40) я бы запросом и по регистру (если он есть) делал
если регистра нет, то в запросе к документам надо учесть признаки проведенности и пометок на удаление + да, условия на контрагента и дату поставки
признак Авто в таком варианте, как ситуация сейчас выглядит, какой то сомнительный
42 УдавВПопугаях
 
03.11.20
16:05
при этом неясно, что с номенклатурой, она у вас только одна? это дополнительный разрез получается, если есть, надо учитывать тоже
43 УдавВПопугаях
 
03.11.20
16:11
Запрос.Текст = "Выбрать Документ.Ссылка Из Документ.Заказ Как Документ Где Документ.Проведен = Истина И Документ.Контрагент = &Контр И Документ.ДатаПоставки = &Дата";
Для Каждого ИтераторЧтения Из Экселя Цикл
Запрос.УстановитьПараметр("Контрагент", КонтрагентПолученныйИзЭкселя);
...Параметры...
Если Запрос.Выполнить().ПУстой() ТОгда
Документ = Документы.Заказ.СоздатьДокумент();
ДОкумент.Контрагент = Контрагент;
...Реквизиты...
Документ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;

конструкция неточна! смысл такой
44 Snail
 
03.11.20
16:11
Номенклатуры много, но ее ненадо учитывать
45 Snail
 
03.11.20
16:13
УдавВПопугаях, оргомное спасибо!
46 Волшебник
 
03.11.20
16:13
(43) Ужасный запрос. Лучше так:

ВЫБРАТЬ Ссылка ИЗ Документ.Заказ ГДЕ Проведен И Контрагент = &Контр И ДатаПоставки = &Дата
47 УдавВПопугаях
 
03.11.20
16:19
(44) интересный заказ булок, но без булок, ну и ладно, инкасация похоже все таки
(45) ну это не инструкция к действию один в один, надо подправить под свою ситуацию
(46) ))
48 Snail
 
03.11.20
16:29
УдавВПопугаях, это булки. И в документ из экселя я все запихиваю в ТЧ документа
49 Snail
 
03.11.20
16:30
В колонках контрагенты с кодами в строках номенклатура с кодами
50 УдавВПопугаях
 
03.11.20
16:35
(49) вот и смотри - загрузили один раз эксель для контрагента1 с номенклатурой1 на дату1, создали документ, записали, провели
потом в эксель добавляют для этого же контрагента на эту же дату еще одну строку, но с другой номенклатурой, а запрос только по контр и дате уже вернет результат выборки и в условие, где создается/модифицируется документ уже не попадет и новая позиция не добавится
тебе то виднее конечно, что и как должно быть, но из того что видно отсюда
51 УдавВПопугаях
 
03.11.20
16:42
еще могут и просто сумму/количество поменять... вариантов много, лучше какую то подсистему магазинам сделать для подачи заявок/заказов в 1с, тогда сами будут рулить что и на когда заказывать и если что не так, то виноваты сами
52 Snail
 
03.11.20
16:44
НовыйДокумент = Документы.РГП.СоздатьДокумент();    
            НовыйДокумент.Дата = ТекущаяДата() + 86400;
            Объект.Водитель = Справочники.Водители.НайтиПоРеквизиту("Код", ТЗ2[2][0]);    
            НовыйДокумент.Водитель  = Объект.Водитель;                    
            НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("Код",ТЗ2[1][КК]);
            Для Каждого СтрокаТЗ  Из ТЗ2 Цикл
                А = СтрокаТЗ.Проба;
                Если А = 0 Или А = 1 Или А = 2 Или А = 3 Тогда
                    Продолжить;
                Иначе
                    Стр = НовыйДокумент.ТЧР.Добавить();
                    Стр.ТМЦ = Справочники.Булки.НайтиПоРеквизиту("Код", СтрокаТЗ.Колонка1);
                    Стр.Количество = СтрокаТЗ[КК];
                КонецЕсли;
            КонецЦикла;
НовийДокумент.Записать();
53 Мимохожий Однако
 
03.11.20
17:25
Записывай в документ контрольную сумму файла-источника. А перед загрузкой проверяй наличие документов, порожденных этим файлом.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший